1. 程式人生 > >Oracle-day01

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;