MySQL系列之自連線用法簡介

2021-09-29 09:12:40 字數 4169 閱讀 1203

mysql系列之自連線簡介,mysql自連線操作,沒有特定的關鍵字,所謂自連線指的是同乙個表不同例項之間的join操作

引用的圖示:

特徵:

自連線操作一般應用與有層級關係的表,最經典的就是員工/經理例子

ok,下面舉例說明

建立部門dept表

/*table structure for table `dept` */

drop

table

ifexists

`dept`

;create

table

`dept`

(`deptno`

int(2)

notnull

,`dname`

varchar(14

)default

null

,`loc`

varchar(13

)default

null

,primary

key(

`deptno`))

engine

=innodb

default

charset

=utf8;

/*data for the table `dept` */

# 往dept表寫資料

insert

into

`dept`

(`deptno`

,`dname`

,`loc`

)values(10

,'accounting'

,'new york'),

(20,'research'

,'dallas'),

(30,'sales'

,'chicago'),

(40,'operations'

,'boston'

);

建立員工emp表

drop

table

ifexists

`emp`

;create

table

`emp`

(`empno`

int(4)

notnull

,`ename`

varchar(10

)default

null

,`job`

varchar(9

)default

null

,`mgr`

int(4)

default

null

,`hiredate`

date

default

null

,`sal`

int(7)

default

null

,`comm`

int(7)

default

null

,`deptno`

int(2)

default

null

,primary

key(

`empno`),

key`fk_deptno`

(`deptno`),

constraint

`fk_deptno`

foreign

key(

`deptno`

)references

`dept`

(`deptno`))

engine

=innodb

default

charset

=utf8;

/*data for the table `emp` */

# 往員工emp表寫資料

insert

into

`emp`

(`empno`

,`ename`

,`job`

,`mgr`

,`hiredate`

,`sal`

,`comm`

,`deptno`

)values

(7369

,'smith'

,'clerk'

,7902

,'1980-12-17'

,800

,null,20

),(7499

,'allen'

,'salesman'

,7698

,'1981-02-20'

,1600

,300,30

),(7521

,'ward'

,'salesman'

,7698

,'1981-02-22'

,1250

,500,30

),(7566

,'jones'

,'manager'

,7839

,'1981-04-02'

,2975

,null,20

),(7654

,'martin'

,'salesman'

,7698

,'1981-09-28'

,1250

,1400,30

),(7698

,'blake'

,'manager'

,7839

,'1981-05-01'

,2850

,null,30

),(7782

,'clark'

,'manager'

,7839

,'1981-06-09'

,2450

,null,10

),(7788

,'scott'

,'analyst'

,7566

,'1987-04-19'

,3000

,null,20

),(7839

,'king'

,'president'

,null

,'1981-11-17'

,5000

,null,10

),(7844

,'turner'

,'salesman'

,7698

,'1981-09-08'

,1500,0

,30),

(7876

,'adams'

,'clerk'

,7788

,'1987-05-23'

,1100

,null,20

),(7900

,'james'

,'clerk'

,7698

,'1981-12-03'

,950

,null,30

),(7902

,'ford'

,'analyst'

,7566

,'1981-12-03'

,3000

,null,20

),(7934

,'miller'

,'clerk'

,7782

,'1982-01-23'

,1300

,null,10

);

這裡使用左連線比較合適,因為頂級員工,也就是公司的總裁,是沒有最上級的,用inner join的話,是不能獲取資料的

ok,根據sql,可以畫出員工關係的圖例,king是公司總裁

mysql學習 自連線的用法

應用場景 假設一張存放了商品名稱及 的表,表裡有 蘋果 橘子 香蕉 三條記錄。在生成用於查詢銷售額的報表時,需要獲取這些商品的組合。組合 分為有順序的有序對 1,2 和 無順序的無序對 分別對應 排列 和 組合 1 可重排列 通過交叉連線生成笛卡爾積,可以得到有序對 用於獲取可重排列的sql語句 s...

mysql內連線查詢之自連線

連線查詢 當查詢資料時,通過連線操作查詢出存放在多個表中的不同資料,當兩個或者多個表中存在相同意義的字段時,便可以通過這些欄位對不同的表進行連線查詢。自連線 如果在乙個連線查詢中,涉及的兩個表都是同乙個表,這種查詢稱為自連線查詢。自連線是一種特殊的內連線,它是指相互連線的表在物理上為同一張表,但可以...

mysql自連線例項 Mysql自連線查詢例項詳解

自連線查詢 假想以下場景 某一電商 想要對站內產品做層級分類,乙個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,台式電腦,智慧型手機等 筆記本,台式電腦,智慧型手機又可以按照品牌分類 品牌又可以按照 分類,等等。也許這些分類會達到乙個很深的層次,呈現一種樹狀的結構。那...