資料庫中存放着許多的表,視圖中存放的是sql查詢語句,使用視圖時,會運作視圖裡的sql查詢語句建立出一張臨時表。
建立視圖: create view 視圖名稱(<視圖列名1>,<視圖列名2>,....) as <select 查詢語句>;
使用視圖:select 性别,人數 from 按性别彙總;
在視圖中把不需要的視圖可以進行删除
二、子查詢子查詢嵌套在sql查詢語句中,如圖中select 性别,count(*) as 人數 from student group by 性别
嵌套子查詢的sql運作順序,先運作子查詢
例如:查找每個課程裡的成績最低的學号。1.先找出每門課程的最低成績 2.把最低成績的sql語句嵌套在sql查詢語句中
哪些學生的成績比課程0002的全部成績裡的任意一個高呢?1.先查出課程0002的全部成績 2.在嵌套在sql語句中做比較
all同理
注意:1.不能對all語句做算式運算,因為all語句查詢出來的是個集合
2.避免子查詢層層嵌套
3.子查詢最好有重命名,友善别人去看
三、标量子查詢标量子查詢:必須傳回1行1列的單一的值
大于平均成績學生的學号和成績:1.先進行标量子查詢 2.做整體查詢
注意:子查詢不可以是多組資料,隻能是一行一列
四、關聯子查詢查找出每個課程中大于對應課程平均成績的學生:1. 查找出每門課程的平均成績
select avg(成績) from course group by 課程号;
2.把子查詢嵌套到整體sql查詢語句中
select `學号`,`成績` FROM course as c1 WHERE `成績` >
(select avg(`成績`) from course as c2
where c1.`課程号` = c2.`課程号`
GROUP BY `課程号`);
注意:子查詢中的重新指派的表名無法在外部語句中識别
五、如何用SQL解決業務問題例如:哪些學生的成績比課程0002的全部成績裡的任意一個高
1.課程0002的全部成績,select 成績 from course where 課程号 = 0002;
2.某個學生的成績大于任意一個第一步裡的成績,就符合條件,select 學号,成績 from course where 成績 > any(select 成績 from course where 課程号 = 0002);
六、各種函數彙總函數
算術函數
字元函數
日期函數
練習SELECT within SELECT Tutorial/zhsqlzoo.net