多數SQL查詢隻包含從一個或多個表中傳回資料的單條SELECT語句。但是,SQL也允許執行多個查詢(多條SELECT語句),并将結果作為一個查詢結果集傳回。這些組合查詢通常稱為并(union)或複合查詢(compound query)
主要有兩種情況需要使用聯結
• 在一個查詢中從不同的表傳回結構資料;
• 對一個表執行多個查詢,按一個查詢傳回資料。
提示:組合查詢和多個WHERE條件多數情況下,組合相同表的兩個查詢所完成的工作與具有多個WHERE子句條件的一個查詢所完成的工作相同。換句話說,任何具有多個WHERE子句的SELECT語句都可以作為一個組合查詢. SQL最強大的功能之一就是能在資料查詢的執行中聯結(join)表。聯結是利用SQL的SELECT能執行的最重要的操作,很好地了解聯結及其文法是學習SQL的極為重要的部分。”
SELECT
表的聯結(join): 各表之間建立起聯系,并最終聯系在一起
交叉聯結(cross join) 内聯結(inner join) 左聯結(left join) 右聯結(right join) 全聯結(full join)
表和表之間通過列産生關系.涉及到多個表查詢用聯結。
- 交叉聯結(cross join):行數是兩張表行數的笛卡爾積 類似于矩陣的運算規律
2. 内聯結(inner join):查找出同時存在于兩張表的資料;學生表和成績表重合的地方是學号讓兩張表産生比對,之後交叉聯結;on表示兩個表通過on後面的學号産生關系
3. 外聯結(outter join)許多聯結将一個表中的行與另一個表中的行相關聯,但有時候需要包含沒有關聯行的那些行。與内聯結關聯兩個表中的行不同的是,外聯結還包括沒有關聯行的行。在使用OUTER JOIN文法時,必須使用RIGHT或LEFT關鍵字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右邊的表,而LEFT指出的是OUTER JOIN左邊的表)。使用LEFT OUTER JOIN從FROM子句左邊的表中選擇所有行。為了從右邊的表中選擇所有行,需要使用RIGHT OUTER JOIN
練習
查詢所有學生的學号、姓名、選課數、總成績
SELECT
查詢平均成績>70的所有學生的學号,姓名,平均成績
SELECT
查詢學生的選課情況:學号,姓名,課程号,課程名稱
SELECT
查詢每門課程的及格人數和不及格人數
SELECT
運作結果
使用分段來統計各科成績,分别統計各分段人數,課程ID,課程名稱
SELECT
SQLZOO