《Mysql實例解析:內聯,左外聯,右外聯,全連接,交叉連接的區別》要點:
本文介紹了Mysql實例解析:內聯,左外聯,右外聯,全連接,交叉連接的區別,希望對您有用。如果有疑問,可以聯系我們。
連接分為:內連接、外連接、交叉連接
一、內連接――最常用
定義:僅將兩個表中滿足連接條件的行組合起來作為結果集.
在內連接中,只有在兩個表中匹配的行才能在結果集中出現
關鍵詞:INNER JOIN
格式:SELECT 列名表 FROM 表名1 [INNER] JOIN 表名2 ON或WHERE 條件表達式
說明:
(1)列名表中的列名可以出自后面的兩個表,但如果兩個表中有同名列,應在列名前標明出處,格式為:表名.列名
(2)若連接的兩個表名字太長,可以為它們起個別名. 格式為:表名 AS 別名
(3)INNER是默認方式,可以省略
eg:
select *
from?? t_institution i
inner join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = "5801"
其中inner可以省略.
等價于早期的連接語法
select *
from t_institution i, t_teller t
where i.inst_no = t.inst_no
and i.inst_no = "5801"MYSQL數據庫
二、外連接
1、左(外)連接
定義:在內連接的基礎上,還包含左表中所有不符合條件的數據行,并在其中的右表列填寫NULL
關鍵字:LEFT JOIN
eg:
select *
from?? t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
其中outer可以省略.
注意:
當在內連接查詢中加入條件是,無論是將它加入到join子句,還是加入到where子句,其效果是完全一樣的,但對于外連接情況就不同了.當把條件加入到 join子句時,SQL Server、Informix會返回外連接表的全部行,然后使用指定的條件返回第二個表的行.如果將條件放到where子句 中,SQL Server將會首先進行連接操作,然后使用where子句對連接后的行進行篩選.下面的兩個查詢展示了條件放置位子對執行結果的影響:
條件在join子句
select *
from?? t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”
結果是:
inst_no???? inst_name???????????? inst_no???? teller_no?? teller_name
5801??????? 天河區??????????????? 5801??????? 0001??????? tom
5801??????? 天河區??????????????? 5801??????? 0002??????? david
5802??????? 越秀區
5803??????? 白云區
條件在where子句
select *
from?? t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”
結果是:
inst_no???? inst_name???????????? inst_no???? teller_no?? teller_name
5801?????????? 天河區??????????????????? 5801????????? 0001?????????????? tom
5801?????????? 天河區??????????????????? 5801????????? 0002????????????? david
2、右(外)連接
定義:在內連接的基礎上,還包含右表中所有不符合條件的數據行,并在其中的左表列填寫NULL
關鍵字:RIGHT JOIN
3、完全連接
定義:在內連接的基礎上,還包含兩個表中所有不符合條件的數據行,并在其中的左表、和右表列填寫NULL
關鍵字:FULL JOIN MYSQL數據庫
三、交叉連接
定義:將兩個表的所有行進行組合,連接后的行數為兩個表的乘積數.(笛卡爾積)
關鍵詞:CROSS JOIN
格式:FROM 表名1 CROSS JOIN 表名2MYSQL數據庫
四, 自身連接
自身連接是指同一個表自己與自己進行連接.這種一元連接通常用于從自反關系(也稱作遞歸關系)中抽取數據.例如人力資源數據庫中雇員與老板的關系.
下面例子是在機構表中查找本機構和上級機構的信息.
select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
from t_institution i
join t_institution s
on i.superior_inst = s.inst_no
結果是:
superior_inst sup_inst_name???????? inst_no???? inst_name
800???????????????????????????? 廣州市??????????????? 5801??????? 天河區
800???????????????????????????? 廣州市??????????????? 5802??????? 越秀區
800???????????????????????????? 廣州市??????????????? 5803??????? 白云區
MYSQL數據庫
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4932.html