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