1.內連接
select 字段名 from 表1 inner join 表2 on 連接條件 --其中inner可以省略,可拓展到3張表以上
示例:
要求:查詢員工表和部門表中員工的姓名
select sname from employee join department on employee.id = department.id
可以為表提供別名,如
select sname from employee e join department d on e.id = d.id
2.自連接
自連接是一種特殊的內連接,它是指相互連接的表在物理上是同一張表,但在邏輯上將其看成兩張表。要讓物理上的一張表在邏輯上成為兩張表,必須通過為表取別名的方式實現。
示例:
要求:查詢與張三在同一個系學習的學生的姓名和所在系,結果中不包括張三。
select s2.name,s2.dept from student s1 join student s2
on s1.dept = s2.dept --是同一系的學生
where s1.name = '張三' --s1表作為查詢條件表
and s2.name != '張三' --s2表作為結果表,並從中去掉 '張三'
要求:查詢與“操作系統”學分相同的課程名和學分
select c1.name,c1.credit from course c1 join course s2
on c1.credit = c2.credit --學分相同
where c2.name = '操作系統' --c2作為查詢條件表
3.外連接
在內連接中,只有滿足連接條件的元組才能作為結果輸出,但有時我們希望輸出那些不滿足連接條件的元組信息,比如查看全部課程的被選修情況,包括有學生選的課程和沒有學生選的課程。如果用內連接實現,則只能找到有學生選的課程,因為內連接的結果首先是要滿足連接條件。
外連接是只限制一張表中的數據必須滿足連接條件,而另一張表中的數據可以不滿足連接條件。
語句:
from 表1 left | right join 表2 on 連接條件
left即為左連接,其含義是限制表2中的數據必須滿足連接條件,而不管表1中的數據是否滿足連接條件;
right即為右連接,其含義是限制表1中的數據必須滿足連接條件,而不管表2中的數據是否滿足連接條件;
簡記:指向哪一個,哪一個就沒有限制。left 左 表1沒有限制,right 右 表2沒有限制。