Mysql中的關聯查詢 內連線,外連線,自連線

2022-07-14 14:27:20 字數 3128 閱讀 5868

**:

在使用資料庫查詢語句時,單錶的查詢有時候不能滿足專案的業務需求,在專案開發過程中,有很多需求都是要涉及到多表的連線查詢,總結一下mysql中的多表關聯查詢

是指所有查詢出的結果都是能夠在連線的表中有對應記錄的。

以t_employee(員工表)和t_dept(部門表)為例:

t_employee表中的記錄如下:dept代表該員工所在的部門

t_dept表中記錄如下:

可以發現,其中人力資源部裡沒有員工(這裡只是舉例,可能與實際不符,但主要在於邏輯關係),而趙七沒有對應的部門,現在想要查詢出員工姓名以及其對應的部門名稱:

此時,就要使用內連線查詢,關鍵字(inner join)

在這裡說一下關聯查詢sql編寫的思路,1,先確定所連線的表,2,再確定所要查詢的字段,3,確定連線條件以及連線方式

1

select

2e.empname,d.deptname

3from

t_employee e

4inner

join

t_dept d

5on e.dept = d.id;

查詢的結果如下:

其中,沒有部門的人員和部門沒有員工的部門都沒有被查詢出來,這就是內連線的特點,只查詢在連線的表中能夠有對應的記錄,其中e.dept = d.id是連線條件

是指以左邊的表的資料為基準,去匹配右邊的表的資料,如果匹配到就顯示,匹配不到就顯示為null。例如:

查詢所有員工姓名以及他所在的部門名稱:在內連線中趙七沒有被查出來,因為他沒有對應的部門,現在想要把趙七也查出來,就要使用左外連線:

1

select

e.empname,d.deptname

2from

t_employee e

3left

outer

join

t_dept d

4on d.id = e.dept;

在這裡,t_employee就是左表,也就是基準表,用基準表的資料去匹配右表的資料,所以左表的記錄是全部會查詢出來的,如果右表沒有記錄對應的話就顯示null

查詢結果:

關鍵字是left outer join,等效於left join,在關聯查詢中,做外連線查詢就是左連線查詢,兩者是乙個概念

比如:查詢所有的部門和對應的員工:

1

select

e.empname,d.deptname

2from

t_employee e

3right

outer

join

t_dept d

4on d.id = e.dept;

這裡只是把left修改成了right,但是基準表變化了,是以右表的資料去匹配左表,所以左外連線能做到的查詢,右外連線也能做到

查詢結果:

顧名思義,把兩張表的字段都查出來,沒有對應的值就顯示null,但是注意:mysql是沒有全外連線的(mysql中沒有full outer join關鍵字),想要達到全外連線的效果,可以使用union關鍵字連線左外連線和右外連線。例如:

1

select

e.empname,d.deptname

2from

t_employee e

3left

join

t_dept d

4on e.dept =

d.id

5union

6select

e.empname,d.deptname

7from

t_employee e

8right

join

t_dept d

9on e.dept = d.id;

查詢結果:

如果在oracle中,直接就使用full outer join關鍵字連線兩表就行了

自連線查詢就是當前表與自身的連線查詢,關鍵點在於虛擬化出一張表給乙個別名

例如:查詢員工以及他的上司的名稱,由於上司也是員工,所以這裡虛擬化出一張上司表

1

select

e.empname,b.empname

2from

t_employee e

3left

join

t_employee b

4on e.bossid = b.id;

查詢結果:

在這裡,b表是虛擬化出的表,我們可以通過查詢了解b表的記錄:

1

select e.empname,b.empname,b.*

2from

t_employee e

3left

join

t_employee b

4on e.bossid = b.id;

查詢結果:

後面的四個字段就是虛擬化出的b表的所有記錄,但看這四個字段其實就是記錄所有是上司的員工的資訊

所以,自連線查詢一般用作表中的某個欄位的值是引用另乙個欄位的值,比如許可權表中,父許可權也屬於許可權。

MYSQL關聯查詢(內連線 外連線)

前言 文中以兩個表簡單為例,講述內外連線的含義,兩個表的建表語句,及資料為 create table a table a id int 11 default null,a name varchar 10 default null,a part varchar 10 default null engi...

SQL中的多表關聯查詢 笛卡爾積 內連線 外連線

笛卡爾乘積是指在數學中,兩個集合x和y的笛卡爾積 cartesian product 又稱直積,表示為x y,第乙個物件是x的成員而第二個物件是y的所有可能有序對的其中乙個成員。笛卡爾積由笛卡爾提出。又稱笛卡爾乘積。簡單概括 舉例說明 集合x 集合y 兩個集合的笛卡爾積為.他們的結果為x集合的成員個...

mysql關聯查詢去重 MySQL 關聯查詢

mysql 關聯查詢 sql資料分析 1週前 mysql 關聯查詢 前面,我們介紹的都是單錶查詢 就是只從一張表中獲取資料 而實際應用的時候,我們都會同時查詢多張表,這裡,我們就介紹下,多表關聯查詢的使用。sql join 用於根據兩個或多個表中的列之間的關係,從這些表中查詢資料 前置知識 主鍵 p...