概念:根據兩個表或多個表的列之間的關係,從這些表中查詢資料。
目的:實現多個表查詢操作。
一般是用作關聯兩張或兩張以上的資料表時用的。看起來有點抽象,我們舉個例子,做兩張表:學生表(t_student)和班級表(t_class)。
sql-92標準所定義的from子句的連線語法格式為:
from join_table join_type join_table[on (join_condition)]
其中join_table指出參與連線操作的表名,連線可以對同乙個表操作,也可以對多表操作,對同乙個表操作的連線又稱做自連線。join_type 指出連線型別。join_condition指連線條件。
連線分為三種:內連線、外連線、交叉連線。
使用比較運算子(包括=、>、、>=、<=、!>和!
概念:在連線條件中使用等於號(=)運算子,其查詢結果中列出被連線表中的所有列,包括其中的重複列。
[sql]
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
結果是:
概念:在連線條件中使用除等於號之外運算子(>、、>=、<=、!>和!
[sql]
select * from t_student s inner join t_class c on s.classid <> c.classid
結果是:
概念:連線條件和等值連線相同,但是會刪除連線表中的重複列。
查詢語句同等值連線基本相同:
[sql]
select s.*,c.classname from t_student s inner join t_class c on s.classid = c.classid
與等值連線對比:結果是少乙個一列classid:
總結:內連線是只顯示滿足條件的!
外連線分為左連線(left join)或左外連線(left outer join)、右連線(right join)或右外連線(right
outer join)、全連線(full join)或全外連線(full outer join)。我們就簡單的叫:左連線、右連線和全連線。
概念:返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。
[sql]
select * from t_student s left join t_class c on s.classid = c.classid
結果是:
總結:左連線顯示左表全部行,和右表與左表相同行。
概念:恰與左連線相反,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。
[sql]
select * from t_student s right join t_class c on s.classid = c.classid
結果是:
總結:右連線恰與左連線相反,顯示右表全部行,和左表與右表相同行。
概念:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值
[sql]
select * from t_student s full join t_class c on s.classid = c.classid
結果是:
總結:返回左表和右表中的所有行。
概念:不帶where條件子句,它將會返回被連線的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積(例如:t_student和t_class,返回4*4=16條記錄),如果帶where,返回或顯示的是匹配的行數。
[sql]
select *from t_student cross join t_class
『等於
select *from t_student, t_class
結果是:
總結:相當與笛卡爾積,左表和右表組合。
[sql]
select * from t_student s cross join t_class c where s.classid = c.classid
(注:cross
join後加條件只能用
where,不能用
on)
查詢結果跟等值連線的查詢結果是一樣。
連線查詢非常簡單,只需要在專案中多多實踐,不斷總結。
左右內外連線
下面是我學習的對左右內外連線的理解 在我們的日常生活中每當要查詢的時候就會考慮到要用什麼的方法去連線 連線方法有四種,分別是內連線 innerjoin 左連線 left join 右連線 right join 內連線 innerjoin 外連線 outer join 首先我們來看看內連線 inner...
sql內外鏈結,交叉連線
實際的專案,存在多張表的關聯關係。不可能在一張表裡面就能檢索出所有資料。如果沒有表連線的話,那麼我們就需要非常多的操作。比如需要從a表找出限制性的條件來從b表中檢索資料。不但需要分多表來操作,而且效率也不高。比如書中的例子 複製 如下 select fid from t customer where...
SQL內外連線詳解
有兩個表a和表b。表a結構如下 aid int 標識種子,主鍵,自增id aname varchar 資料情況,即用select from a出來的記錄情況如下圖1所示 圖1 a表資料 表b結構如下 bid int 標識種子,主鍵,自增id bnameid int 資料情況,即用select fro...