mysql學習筆記 四 多表查詢(關聯查詢)

2021-09-24 22:49:53 字數 3058 閱讀 8378

mysql> select * from department;

+----+----------+

| id | deptname |

+----+----------+

| 1 | 軟體部 |

| 2 | 財務部 |

| 3 | 人事部 |

| 4 | 行政部 |

+----+----------+

4 rows in set

mysql> select * from employee;

+----+---------+--------+

| id | empname | deptid |

+----+---------+--------+

| 1 | rose | 1 |

| 2 | lily | 2 |

| 3 | lucy | 3 |

+----+---------+--------+

3 rows in set

查詢員工及其所在部門(顯示員工姓名和部門名稱):

從結果可以看出,不是我們想要的結果,產生了 笛卡爾積 現象,3*4,有些資料是重複的;

mysql> select empname,deptname from employee,department;

+---------+----------+

| empname | deptname |

+---------+----------+

| rose | 軟體部 |

| lily | 軟體部 |

| lucy | 軟體部 |

| rose | 財務部 |

| lily | 財務部 |

| lucy | 財務部 |

| rose | 人事部 |

| lily | 人事部 |

| lucy | 人事部 |

| rose | 行政部 |

| lily | 行政部 |

| lucy | 行政部 |

+---------+----------+

12 rows in set

查詢員工及其所在部門(顯示員工姓名和部門名稱): 

使用 where 條件語句(最常使用)

mysql> select empname,deptname from employee,department where employee.deptid=department.id;

+---------+----------+

| empname | deptname |

+---------+----------+

| rose | 軟體部 |

| lily | 財務部 |

| lucy | 人事部 |

+---------+----------+

3 rows in set

內連線查詢的另一種方式:使用關鍵字 inner join

mysql> select empname,deptname

-> from employee e

-> inner join department d

-> on e.deptid=d.id;

+---------+----------+

| empname | deptname |

+---------+----------+

| rose | 軟體部 |

| lily | 財務部 |

| lucy | 人事部 |

+---------+----------+

3 rows in set

查詢每個部門的員工

用內連線查詢無法達到要求,因為 行政部 沒有對應的員工,需要顯示 null;

使用左外連線查詢:使用左邊表的資料 去匹配右邊表的資料,如果符合連線條件的結果則顯示,

如果不符合連線條件則顯示 null;

注意:左外連線查詢,左表的資料一定會完全顯示;

mysql> select deptname,empname

-> from department d

-> left outer join employee e

-> on d.id=e.deptid;

+----------+---------+

| deptname | empname |

+----------+---------+

| 軟體部 | rose |

| 財務部 | lily |

| 人事部 | lucy |

| 行政部 | null |

+----------+---------+

4 rows in set

查詢每個部門的員工

使用右邊表的資料 去匹配左邊表的資料,如果符合連線條件的結果則顯示,如果不符合連線條件則顯示 null;

右外連線查詢,右表的資料一定會完全顯示;

mysql> select deptname,empname

-> from employee e

-> right outer join department d

-> on e.deptid=d.id;

+----------+---------+

| deptname | empname |

+----------+---------+

| 軟體部 | rose |

| 財務部 | lily |

| 人事部 | lucy |

| 行政部 | null |

+----------+---------+

4 rows in set

Mysql筆記(四)多表連線查詢

資料庫的建立參考我的另一篇部落格 多表連線查詢 交叉連線 交叉連線又叫笛卡爾積,它是指不使用任何條件,直接將乙個表的所有記錄和另乙個表中的所有記錄一一匹配。取兩個表並集。內連線則是只有條件的交叉連線,根據某個條件篩選出符合條件的記錄,不符合條件的記錄不會出現在結果集中,即內連線只連線匹配的行。取兩個...

MYSQL多表查詢筆記

1 等值連線查詢 查詢的結果為兩個表匹配到的資料 語法 select from 表1,表2 where 條件 and 條件 例子 select from 表1,表2,表3,where 表1.欄位1 表2.欄位1 and 表2.欄位2 表3.欄位2 ps where 後面支援多種運算子,進行條件處理 ...

MySQL筆記 MySQL多表查詢

主鍵 一張從表中某個字段引用主表中的主鍵,維護多表之間的關係 從表 使用別人資料的表,被主表約束 級聯兩個表,乙個表的關鍵字段進行修改,另乙個表也會隨之修改 constraint 外來鍵約束名 foreign key 外來鍵字段 references 主表名 字段 刪除外來鍵 alter table...