SQL多表查詢——學習筆記
表1:Student
表2:CourseYuwen 語文分數
一、外連線
外連線分:左連線、右連線、完全外連線。
1.左連線 left join 或 left outer join
SQL語句:select * from Student left join CourseYuwen on Student.num = CourseYuwen.num
結果:
左外連線包含left join左表所有行,如果左表中某行在右表沒有匹配,則結果中對應行右表的部分全部為空(NULL).
注:此時我們不能說結果的行數等於左表資料的行數。當然此處查詢結果的行數等於左表資料的行數,因為左右兩表此時為一對一關係。
2、右連線 right join 或 right outer join
SQL語句:select * from Student right join CourseYuwen on Student.num = CourseYuwen.num
結果:
右外連線包含right join右表所有行,如果左表中某行在右表沒有匹配,則結果中對應左表的部分全部為空(NULL)。
注:同樣此時我們不能說結果的行數等於右表的行數。當然此處查詢結果的行數等於左表資料的行數,因為左右兩表此時為一對一關係。
3、完全外連線 full join 或 full outer join
SQL語句:select * from Student full join CourseYuwen on Student.num = CourseYuwen.num
二、內連線 join 或 inner join
SQL語句:select * from Student inner join CourseYuwen on Student.num=CourseYuwen.num
結果:
inner join 是比較運算子,只返回符合條件的行。
此時相當於:select * from Student,CourseYuwen where Student.num=CourseYuwen.num
三、交叉連線 cross join
概念:沒有 WHERE 子句的交叉聯接將產生連線所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。
SQL語句:select * from student cross join courseyuwen
如果我們在此時給這條SQL加上WHERE子句的時候,比如SQL:
select * from student cross join courseyuwen where student.num=courseyuwen.num
四、兩表關係為一對多,多對一或多對多時的連線語句
表3:Course 學分
選出語文有分數的學生,並顯示語文佔有的分數和學分
SQL語句:select s.num,s.name,cy.score,c.credit from Student as s left join CourseYuwen as cy on s.num=cy.num left join Course as c on c.cid=1002
結果: