內連線: 只連線匹配的行
左外連線: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
右外連線: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
全外連線: 包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
交叉連線 生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個資料來源中的每個行與另一個資料來源的每個
行都一一匹配
舉個例子吧。
表A
id name
1 張
2 李
3 王
表B
id address A_id
1 北京 1
2 上海 3
3 南京 10
包容性:A表包容B表,左連線左表是全的.(left join 或 left outer join )
SQL語句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查詢結果為:
name address
張 北京
李 NULL
王 上海
包容性:B表包容A表,右連線右表是全的.(right join 或 right outer join )
SQL語句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查詢結果為:
name address
張 北京
王 上海
NULL 南京
排他性:A,B表中至少有1個匹配時,才返回行。兩表的交集
SQL語句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id
查詢結果為:
name address
張 北京
王 上海
inner join 內連線等價於下面的sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id
註釋:全外連線返回參與連線的兩個資料集合中的全部資料,無論它們是否具有與之相匹配的行。在功能上,它等價於
對這兩個資料集合分別進行左外連線和右外連線,然後再使用消去重複行的並操作將上述兩個結果集合併為一個結果集
。(full join 或 full outer join )
SQL語句如下:
select * from A
full join B
查詢結果為:
id name id address A_id
1 張 1 北京 1
2 李 1 北京 1
3 王 1 北京 1
1 張 2 上海 3
2 李 2 上海 3
3 王 2 上海 3
1 張 3 南京 10
2 李 3 南京 10
3 王 3 南京 10
註釋:返回3*3=9條記錄,即笛卡爾積
SQL語句如下:
SELECT * FROM A
CROSS JOIN B
查詢結果為:
id name id address A_id
1 張 1 北京 1
2 李 1 北京 1
3 王 1 北京 1
1 張 2 上海 3
2 李 2 上海 3
3 王 2 上海 3
1 張 3 南京 10
2 李 3 南京 10
3 王 3 南京 10
CROSS JOIN等價於:
select * from A,B
注意:
1. on A.id = B.id 等同於 using(id)//這裡欄位名要相同
2. 當 MySQL 在從一個表中檢索資訊時,你可以提示它選擇了哪一個索引。
如果 EXPLAIN 顯示 MySQL 使用了可能的索引列表中錯誤的索引,這個特性將是很有用的。
通過指定 USE INDEX (key_list),你可以告訴 MySQL 使用可能的索引中最合適的一個索引在表中查詢記錄行。
可選的二選一句法 IGNORE INDEX (key_list) 可被用於告訴 MySQL 不使用特定的索引。
效率問題:
1.inner join比left join快
注:inner join 內連線等價於下面的sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
所以一般要用一般的連線就可以了.
2.連線欄位建索引
多表外連線
select A.*,B.f1,B.f2,B.fn,C.f1,C.f2,C.fn from A
left join B on A.id=B.id
left join C on C.id=A.id
where .......
mysql 外連線總結
相關文章
- 內連線、外連線總結
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- Oracle 左外連線、右外連線、全外連線小總結Oracle
- Oracle 內外連線 join 總結Oracle
- 外連線的一些總結
- mysql左外連線MySql
- MySQL反連線的優化總結MySql優化
- sql內連結,外連線SQL
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- Mysql——內外連線,事物,索引MySql索引
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- mysql外連線有哪些型別MySql型別
- MySQL連線控制外掛介紹MySql
- mysql 左連線,右連線,內連結,exists等MySql
- Oracle 左右連線總結Oracle
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- node+express框架中連線使用mysql經驗總結Express框架MySql
- MySQL和Oracle中的半連線測試總結(一)MySqlOracle
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- 內連線、外連線
- 總讓人記不住的外連線
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- TCP連線的坑總結TCP
- Oracle左右全連線總結Oracle
- MYSQL學習筆記23: 多表查詢(自連線內連線+左右外連線)MySql筆記
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- sql 內連線和外連線SQL
- 外連線與連線順序
- SQL SERVER 自連線、外連線SQLServer
- oracle外連線Oracle
- 例項解析外連線 內連線 自連線 全連線
- 對於MySQL遠端連線中出現的一個問題總結MySql
- Smack 開發總結(一)管理連線Mac
- MySQL not in巢狀查詢改寫成外連線方式MySql巢狀
- sybase的外連線
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- GO 連線 MySQLGoMySql