數據庫系統
SQL語言複雜查詢
IN/NOT IN
判斷元素是否在某一個集合中
select * from Student where Sname in('zhangsan','wangsi');
//非相關子查詢,內層select不依賴外側
select S#,Sname from Student where S# in (select S# from
SC where C#='001');
//相關子查詢,外層字段能傳入內層作爲限定,
//等於對外層做一個循環判斷
select Sname from Student std where S# in( select S#
from SC where S#=std.S# and C#='001' );
SOME/ALL
條件對某一個集合部分/全部滿足
//全部課程都不及格的同學
select Sname from Student where 60>all (select Score from
SC where S#=Student.S#);
EXISTS/NOT EXISTS
集合結果不/爲 空
用2個not exists來做:不存在..沒有=>全部 的轉換
聚集函數和結果計算
在select中用運算符或者
count,sum,max,min,avg來選出結果
GROUP BY和HAVING
集合運算
空值is null/not null
null表示不存在
null不能進行任何運算
null不滿足任何條件
除了count之外,聚集函數忽略null
表連接和ON
//笛卡爾積
select * from table1,table2 where table1.S#=table2.
S#;
//內連接等於笛卡爾積用on來限定條件
select * from table1 inner join table2 on table1.S#=table2.
S#;
//外連接,left/right標誌某張表元組全部出現
left outer join
right outer join
full outer join
視圖
基本表:定義的表,物理存儲
視圖:有基本表導出的結果,只存儲導出方式
使用:對用戶而言,視圖像表一樣使用即可
優勢:定義視圖實現單表查詢
更新:有些視圖是不可以更新的,如帶avg的,沒有主鍵的
create view view_name as (select * from Student
where ..);
drop view view_name;