sql中的連線分類:
交叉連線 cross join
1.交叉連線 cross join
如果不帶where條件子句,它將會返回被連線的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積
舉例,下列a、b、c 執行結果相同,但是效率不一樣:
a:select * from table1 cross join table2
b:select * from table1,table2
c:select * from table1 a inner join table2 b (inner 可省略)
---------------------------------
a:select a.*,b.* from table1 a,table2 b where a.id=b.id
b:select * from table1 a cross join table2 b where a.id=b.id
(注:cross join後加條件只能用where,不能用on)
c:select * from table1 a inner join table2 b on a.id=b.id (inner 可省略)
一般不建議使用方法a和b,因為如果有where子句的話,往往會先生成兩個錶行數乘積的行的資料表然後才根據where條件從中選擇。 因此,如果兩個需要求交際的錶太大,將會非常非常慢,不建議使用。
2. 內連線inner join
兩邊表同時符合條件的組合
如果僅僅使用
select * from table1 inner join table2
---------- 等同於
select * from table1 join table2
---------- 等同於
select * from table1,table2
內連線如果沒有指定連線條件的話,和笛卡爾積的交叉連線結果一樣,但是不同於笛卡爾積的地方是,沒有笛卡爾積那麼複雜要先生成行數乘積的資料表,內連線的效率要高於笛卡爾積的交叉連線。
但是通常情況下,使用inner join需要指定連線條件。
select * from table1 inner join table2
on table1.id = table2.xxid
3. 外連線outer join外連線和內連線的主要區別:
指定條件的內連線,僅僅返回符合連線條件的條目。
外連線則不同,返回的結果不僅包含符合連線條件的行,而且包括左表(左外連線時), 右表(右連線時)或者兩邊連線(全外連線時)的所有資料行。
1)左外連線left [outer] join
顯示符合條件的資料行,同時顯示左邊資料表不符合條件的資料行,右邊沒有對應的條目顯示null
例如
select * from table1 as a
left [outer] join table2 as b
on a.column=b.column
2)右外連線right [outer] join顯示符合條件的資料行,同時顯示右邊資料表不符合條件的資料行,左邊沒有對應的條目顯示null
例如
select * from table1 as a
right [outer] join table2 as b
on a.column=b.column
3)全外連線full [outer] join顯示符合條件的資料行,同時顯示左右不符合條件的資料行,相應的左右兩邊顯示null,即顯示左連線、右連線和內連線的並集
特點:
1、外連線的查詢結果為主表中的所有記錄
如果從表中有和它匹配的,則顯示匹配的值
如果從表中沒有和它匹配的,則顯示null
外連線查詢結果=內連線結果+主表中有而從表沒有的記錄
2、左外連線,left join左邊的是主表
右外連線,right join右邊的是主表
3、左外和右外交換兩個表的順序,可以實現同樣的效果
4、全外連線=內連線的結果+表1中有但表2沒有的+表2中有但表1沒有的
sql連線分類圖示理解:
左連線:
右連線:
SQL各種連線
1.內連線 inner join 內連線使用比較運算子根據每個表共有的列的值匹配兩個表中的行。2.外連線 外連線可以是 左向外連線 右向外連線或完整外部連線。在from子句中指定外連線時,可以由下列幾組關鍵字中的一組指定 left join 或 left outer join。左向外連線的結果集包括...
SQL各種連線
定義inner join 內連線是最常見的一種連線,它也被稱為普通連線,只連線匹配的行 僅對滿足連線條件的cross中的列 它又分為等值連線 連線條件運算子為 和不等值連線 連線條件運算子不為 例如between.and outer join full outer join 包含左 右兩個表的全部行...
sql的各種連線查詢
以下均以oracle scott賬號自帶的資料庫為例 方括號裡的東西表示有和沒有效果是一樣的 表內查詢 自連線 查詢所有經理所對應的雇員 sql 86 select manager.ename as manager,worker.ename as worker from emp manager,em...