Mysql常用sql語句(16)- inner join 內連接
- 2020 年 5 月 13 日
- 筆記
- Mysql常用sql語句, 測試必知必會系列 - Mysql常用sql語句
測試必備的Mysql常用sql語句系列
//www.cnblogs.com/poloyy/category/1683347.html
前言
- 利用條件表達式來消除交叉連接(cross join)的多餘數據行
- inner join通過 on 來設置條件表達式,如果沒有加on的話,inner join和cross join是相同的
inner join 的語法格式
SELECT <欄位名> FROM <表1> INNER JOIN <表2> [ON子句]
- inner join 是可以查詢 ≥ 兩個的表
- inner join 也可以使用 where 來指定連接條件,但是 inner join … on 是官方標準寫法,而且 where 可能會影響查詢性能
- inner join 也可以只寫 join 不加 inner
先看看dept、emp表有什麼數據
dept表
emp表
inner join 的栗子
標準內連接:查詢每個員工的部門詳細資訊
兩張表相連
select * from emp as a inner join dept as b on a.dept_id = b.id; select * from emp as a join dept as b on a.dept_id = b.id;
注意點
可以看到emp表id=7、9的數據是沒有返回的,dept表id=4的數據也是沒有返回的,這就是inner join的特性:只有兩張表相互匹配到的數據才會返回(滿足查詢條件的數據),簡單理解就是:取交集
特殊內連接,自連接:查詢有leader的員工以及leader資訊
自連接:同一張表相連
select * from emp as a inner join emp as b on a.leader = b.id;
特殊內連接,不等值連接
不等值連接:查詢條件的邏輯運算符是大於或小於
select * from emp as a inner join dept as b on a.dept_id > b.id;
知識點
- 在多表查詢的時候,欄位名都需要通過表名指定 表名.欄位名
- 如果表名太長可以用給表起別名,這樣就變成 別名.欄位名 ,如上面的 a 、 b 就是別名, a.dept_id 、 b.id