Oracle-day01

-- DDL操作(表结构操作)
/*年级表(id,name,descript) 不支持主键自增
班级表(id,name,nid,number,开班时间,descript)*/

create table tb_grade(
  gradeId number(6)primary key,
  gradeName varchar2(20)not null,
  remark varchar2(50)
);
create table tb_class(
  classId number(6) primary key,
  className varchar2(20)not null,
  gradeId number(6)not null,
  classNum number(3),
  beginTime varchar2(200),
  constraint ck_className check (classNum>=10 and classNum<=50),
  constraint fk_gradeId_tb_gradeId foreign key(gradeId) references tb_grade(gradeId)
  
);

-- 添加字段
alter table tb_class add endTime date;      
-- 跟新字段(字段更新前,最好保证该字段为空)
alter table tb_class modify classNum number(9);
-- 删除字段
alter table tb_class drop column endTime;

---------------------------------------------------------------

-- DML语句(表内容操作)
--添加
insert into tb_grade values (1, '一年级', 'java开发');
insert into tb_grade values (2, '二年级', 'php开发');
insert into tb_grade values (3, '三年级', 'python开发');

insert into tb_class values (1, '1class', 1, 10, sysdate);
-- 一次插入多条数据(默认合并重复项)
-- union all 不合并
insert into tb_class
select 2,'2class', 2,10,sysdate from dual union
select 3,'3class', 3,10,sysdate from dual union
select 4,'4class', 3,10,sysdate from dual;

-- 修改
update tb_class set className='4年级' where className='4class'
--删除
delete from tb_class where className='4年级'

-- 查询
select * from tb_class where gradeId in(1,3)
-- 上表语句优化
select * from tb_class where gradeId=1 union
select * from tb_class where gradeId=3

-- group by
select a.gradeName,count(b.classid)as cnt from  tb_grade a
left join tb_class b on a.gradeid=b.gradeId
group by a.gradeName 
order by cnt asc;

-- 序列(主键自增)
create sequence seq_tbgrade_id -- 序列名称
start with 1 -- 序列开始值
increment by 1 --设置增量
minvalue 1 -- 最小值
maxvalue 999 -- 最大值

-- 序列使用 
-- nextval 下一个值
select seq_tbgrade_id.nextval from dual;
-- currval 当前值(去当前值前,先去一次下一个值)
select seq_tbgrade_id.currval from dual;


select * from tb_grade;
--  添加语句(自增)
insert into tb_grade values(seq_tbgrade_id.nextval,'四年级','mysql学习');

-- 分页
-- 虚表 dual
-- 伪列 物理结构不存在,可以查询出来,用于特定用途字段
select rowid,rownum,t.* from tb_class t;-- rowid用于唯一标识,rownum 自动生成数字列
-- 开始值:(pageNo-1)*pageSize,结束值:pageNo*pageSize+1 032547
--方法一
select * from( select rownum rn,t.* from tb_class t)a
where a.rn>2 and a.rn<5;
--方法二(效率高)
select * from(
 select rownum rn,t.* from tb_class t where rownum<3
)a where a.rn>0;

猜你喜欢

转载自blog.csdn.net/qq_32295383/article/details/83511393