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;