多表查詢
笛卡爾積查詢
笛卡爾積查詢:就是兩張表相乘,若左邊表有m條資訊,右邊表有n條資訊,那麼查詢顯示的資訊總共為m*n條,這其中往往包含大量錯誤資料,需要用where+條件來過濾無用資訊
# 笛卡爾積查詢語句
select * from dept,emp;
| id | name | id | name | *** | dept_id |
| 1 | 市場 | 1 | 大黃 | m | 1 |
| 2 | 財務 | 1 | 大黃 | m | 1 |
| 3 | 行政 | 1 | 大黃 | m | 1 |
| 1 | 市場 | 2 | 老王 | m | 2 |
| 2 | 財務 | 2 | 老王 | m | 2 |
| 3 | 行政 | 2 | 老王 | m | 2 |
| 1 | 市場 | 3 | 老李 | w | 30 |
| 2 | 財務 | 3 | 老李 | w | 30 |
| 3 | 行政 | 3 | 老李 | w | 30 |
# 這裡面有很多錯誤的資訊,我們可以在後面+where 條件來過濾資訊
select * from dept,emp where dept_id = dept.id;
| id | name | id | name | *** | dept_id |
| 1 | 市場 | 1 | 大黃 | m | 1 |
| 2 | 財務 | 2 | 老王 | m | 2 |
內連線查詢
本質上就是笛卡爾積查詢
# 查詢語句
# select * from dept inner join emp on dept_id = dept.id;
# inner 可以不寫
select * from dept join emp on dept_id = dept.id;
# join替代了逗號,如果多個表,就加多join,
# on 替代了where,on也是過濾資訊
| id | name | id | name | *** | dept_id |
| 1 | 市場 | 1 | 大黃 | m | 1 |
| 2 | 財務 | 2 | 老王 | m | 2 |
左外連線查詢
左邊的表無論是否能匹配都要完整顯示
右邊的僅展示匹配上的記錄
select * from dept left join emp on dept_id = dept.id;
| id | name | id | name | *** | dept_id |
| 1 | 市場 | 1 | 大黃 | m | 1 |
| 2 | 財務 | 2 | 老王 | m | 2 |
| 3 | 行政 | null | null | null | null |
右外連線查詢
右邊的表無論是否能夠匹配都要完整顯示
左邊的僅展示匹配上的記錄
select * from dept right join emp on dept_id = dept.id;
| id | name | id | name | *** | dept_id |
| 1 | 市場 | 1 | 大黃 | m | 1 |
| 2 | 財務 | 2 | 老王 | m | 2 |
| null | null | 3 | 老李 | w | 30 |
全外連線查詢
無論是否匹配成功,兩邊表的資料都要全部顯示
mysql 不支援全外連線,所以我們得用到union來拼接左連線和右連線,來組合成乙個全外連線查詢表
# 需求:查詢所有員工與所有部門的對應關係
select * from emp full join dept on dept_id = dept.id;
# 注意:mysql不支援全外連線
select * from emp left join dept on dept_id = dept.id
union
select * from emp right join dept on dept_id = dept.id;
# union 將自動去除重複的記錄
# union 必須保證兩個查詢結果的列數相同,一般用在多個結果完全一致時
# union all 不去重複
| id | name | *** | dept_id | id | name |
| 1 | 大黃 | m | 1 | 1 | 市場 |
| 2 | 老王 | m | 2 | 2 | 財務 |
| 3 | 老李 | w | 30 | null | null |
| null | null | null | null | 3 | 行政 |
總結:外連線查詢,查到的是沒有對應關係的記錄,但是這樣的資料原本就是有問題的,所以最常用的是內連線查詢.
內連線表示: 只顯示匹配成的記錄
外連線: 沒有匹配成功的也要實現
mysql 多表聯查 MySQL的多表聯查
今天是周二,我們一起來研究下mysql的多表聯查啊。或許你也知道,表之間的關係有 1對1 1對多 多對多。然後.1.巢狀查詢 乙個查詢的結果是另外sql查詢的條件 如 查詢stu表中年齡最大的是誰?mysql select from stu where age select max age from...
mysql 多表聯查
1.多表連線型別 2.1.笛卡爾積 交叉連線 在 mysql 中可以為 cross join 或者省略 cross 即 join,或 者使用 如 1.select from table1 cross join table2 2.select from table1 join table2 3.sel...
mysql多表聯查
1.交叉查詢 笛卡爾積 基本不用 2.內連線查詢 3.外鏈結 1 左外連線 2 右外連線 4.子查詢 巢狀查詢 eg 查詢分類名稱是手機數碼的商品 select from product p where p.cno in select cid from category where cname 手機...