先給出兩張表:
一、內連接:
????內連接(INNER JOIN):有兩種,顯式的和隱式的,返回連接表中符合連接條件和查詢條件的數據行。(所謂的鏈接表就是數據庫在做查詢形成的中間表)。
1、等值連接
? ? ?概念:在連接條件中使用等于號(=)運算符,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
例子:
select? *?
from T_student s,T_class c?
where s.classId = c.classId
等價于
select? *?
?from T_student s inner join T_class c on s.classId = c.classId
2、不等連接
? ?概念:在連接條件中使用除等于號之外運算符(>、<、<>、>=、<=、!>和!<)
select * from T_student s inner join T_class c on s.classId <> c.classId
二、外連接
? ? 外連接分為左連接(LEFT JOIN)或左外連接(LEFT OUTER JOIN)、右連接(RIGHT JOIN)或右外連接(RIGHT OUTER JOIN)、全連接(FULL JOIN)或全外連接(FULL OUTER JOIN)。我們就簡單的叫:左連接、右連接和全連接。
1、左連接:
? ? 概念:返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。
例如:
select? *
from T_student s left join T_class c on s.classId = c.classId
檢索結果:
? 總結:左連接顯示左表全部行,和右表與左表相同行。
2、右連接:
? ?概念:恰與左連接相反,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。
例如:
????? select?*?from??T_student?s?right?join?T_class?c?on?s.classId?=?c.classId檢索結果:
3、全連接:
概念:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值。
?????select?*?from??T_student?s?full?join?T_class?c?on?s.classId?=?c.classId
? 總結:返回左表和右表中的所有行。
三、交叉連接(CROSS JOIN):也稱迪卡爾積
概念:不帶WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的 行數等于兩個表行數的乘積 (例如:T_student和T_class,返回4*4=16條記錄),如果帶where,返回或顯示的是匹配的行數。1、不帶where:
- ???select?*from?T_student?cross?join?T_class? ? //cross join 可以省略不寫
- ??等于
- ???select?*from?T_student,?T_class
2、有where子句,往往會先生成兩個表行數乘積的數據表,然后才根據where條件從中選擇。
- select?*?from?T_student?s?cross?join?T_class c?where?s.classId?=?c.classId???
- ??(注:cross?join后加條件只能用where,不能用on)??