二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)
MySQL連接查詢(多表連接查詢:內連接,外連接,交叉連接詳解)
6:多表連接查詢
笛卡爾乘積:如果連接條件省略或無效則會出現 解決辦法:添加上連接條件連接查詢的分類:
1.按年代分類:1)sql 92標準:僅僅支持內連接2)sql 99標準 **(推薦使用)** :支持內連接、外連接(左外 和 右外)、交叉連接 2.按功能分類:1)內連接:等值連接非等值連接自連接2)外連接:左外連接右外連接全外連接3)交叉連接一、傳統模式下的連接 :等值連接——非等值連接
1.等值連接的結果 = 多個表的交集 2.n表連接,至少需要n-1個連接條件 3.多個表不分主次,沒有順序要求 4.一般為表起別名,提高閱讀性和性能二、sql99語法:通過join關鍵字實現連接
含義:1999年推出的sql語法 支持: 等值連接、非等值連接 (內連接) 外連接 交叉連接語法:select 字段,…
from 表1
【inner|left outer|right outer|cross】join 表2 on 連接條件
【inner|left outer|right outer|cross】join 表3 on 連接條件
【where 篩選條件】
【group by 分組字段】
【having 分組后的篩選條件】
【order by 排序的字段或表達式】
三、自連接
案例:查詢員工名和直接上級的名稱
sql99
SELECT e.last_name,m.last_name FROM employees e JOIN employees m ON e.`manager_id`=m.`employee_id`;sql92
SELECT e.last_name,m.last_name FROM employees e,employees m WHERE e.`manager_id`=m.`employee_id`;一、等值連接
1)多表等值連接的結果實際上為多個表的交集部分
2)n張表進行連接,則至少需要 n-1 個連接條件
3)多表的順序沒有要求
4) 一般需要為表起別名,因為可能同一個字段名,會在多張查詢的表中存在。即可以為表取別名,區分多個重名的字段。為表使用別名后,只能使用別名去"select"!
5) 等值連接可以搭配排序(order by)、分組(group by)、篩選(where/and/like)來使用
二、非等值連接
表與表之間沒有相同項(或有相同但是不能用),但是表之間某個或某些項直接存在著一定的關系。
比如說員工信息表,里面包含員工工資,另外一張工資等級表將工資進行等級劃分,而員工的工資就可以根據工資等級表來劃分為某個等級。
where 列名 BETWEEN … AND …
三、自連接 :自己連接自己
自連接相當于等值連接,不同的是等值連接的項在不同的表單當中,而自連接的連接項在同一個表單中。單一表單中某項和另外一項存在著關聯關系。
比如說員工信息表中,普通員工A的領導是B,而B本身也是員工,因此也包含著員工信息表中。所以A的manager_id就是B的employee_id
# sql 92 # 自連接 # 查詢員工名 和 上級的名稱 SELECT e.employee_id , e.last_name , m.employee_id , m.last_name FROM employees e ,employees m WHERE e.manager_id = m.employee_id; # sql 99 # 自連接# 查詢員工的名字、上級的名字 SELECT e.last_name , m.last_name FROM employees e INNER JOIN employees m ON e.employee_id = m.manager_id;# 查詢包含字符k的員工名字、上級的名字 SELECT e.last_name , m.last_name FROM employees e INNER JOIN employees m ON e.employee_id = m.manager_id WHERE e.last_name LIKE '%k%';二、外連接
應用場景:用于查詢一個表中有,但是另一個表中沒有的記錄。
特點:
1)外連接的查詢結果為主表中的所有記錄。如果從表中有和它匹配的(也就是連接條件成立),則顯示匹配的值。如果從表中沒有和它匹配的,則顯示null。
外連接查詢的結果 = 內連接查詢的結果 + 主表中有而從表中沒有的記錄
2)左外連接,left join 左邊的是主表
右外連接,right join 右邊的是主表
3)左外和右外交換兩個表的順序時,可以實現同樣的效果
4) 全外連接 = 內連接的結果 + 表1中有但表2中沒有的結果 + 表2中有但表1中沒有的結果
5)交叉連接(笛卡爾積)
# 交叉連接(笛卡爾積) USE girls SELECT b.* ,bo.* FROM beauty b CROSS JOIN boys bo;常見連接類型總結:
總結
以上是生活随笔為你收集整理的二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react 消息订阅-发布机制(解决兄弟
- 下一篇: mysql连接池_数据库技术:数据库连接