mysql多表聯查 mysql 多表聯查 例項

2021-10-25 14:24:53 字數 2452 閱讀 3463

多表查詢

笛卡爾積查詢

笛卡爾積查詢:就是兩張表相乘,若左邊表有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 手機...