oracle查詢
一,簡單查詢
order by 1,2
select t.sno, t.sname, t.ssex from STUDENT t order by 1,2,3
group by 增強版
SELECT p.toma, p.ptype, SUM(p.lastcou) FROM product p GROUP BY rollup(p.toma, p.ptype)
二,高級查詢(多表連接查詢)
笛卡爾積的概念:
所謂笛卡爾積,通俗點說就是指包含兩個集合中任意取出兩個元素構成的組合的集合。假設R中有元組M個,S中有元組N個,則R和S的笛卡
爾積中包含的元組數量就是M*N。這個規則可以向多個關系擴展。
分類:
內連接:select s.sname, r.cno,r.degree from student s, score r where s.sno=r.sno
等值連接------用=的連接
不等值連接
外連接(啥也不寫就是內連接, 直接寫兩個表名)---左外連接, 右外連接
select * from student s left outer join course c on s.sno=c.cno
(+)修飾符的使用
select s.sname, r.cno,r.degree from student s, score r where s.sno=r.sno(+)----等同於外連接的結果
數據字典的使用
自連接(自己騙一下自己): select * from z_course c1, z_course c2 where c1.cour_code=c2.p_cour_code
層次查詢
CONNECT BY PRIOR 連接條件 START WITH 開始條件
select * from Z_COURSE t connect by prior t.cour_code=t.p_cour_code start with t.cour_name like '%國際%'
偽列:
level: 加上一列顯示級別
select t.*, level from Z_COURSE t connect by prior t.cour_code=t.p_cour_code start with t.cour_name like '%國際%'
rownum:加上一列行號
select s.*, rownum from student s
使用rownum分頁
select * from (select s.*, rownum rn from student s where rownum<=10) t where t.rn>5
子查詢(sql語句的執行順序)
單行子查詢: 可以用=號
多行子查詢:不可以用=號,可以用 in
exists關鍵字的使用: 是否存在
select * from student t where exists(select 1 from student t1 where t1.sno=105)