MySQL多表關(guān)聯(lián)查詢(xún)方式及實(shí)際應(yīng)用
一、關(guān)聯(lián)查詢(xún)方式
1、 inner join--內(nèi)連接
代表選擇的是兩個(gè)表的交差部分。
內(nèi)連接就是表間的主鍵與外鍵相連,只取得鍵值一致的,可以獲取雙方表中的數(shù)據(jù)連接方式。
基本語(yǔ)法
SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外鍵=表2.主鍵 WhERE 條件語(yǔ)句;
2、left join--左連接
代表選擇的是前面一個(gè)表的全部。
左連接是以左表為標(biāo)準(zhǔn),只查詢(xún)?cè)谧筮叡碇写嬖诘臄?shù)據(jù),當(dāng)然需要兩個(gè)表中的鍵值一致。
基本語(yǔ)法
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外鍵=表2.主鍵 WhERE 條件語(yǔ)句;
3、 right join--右連接
代表選擇的是后面一個(gè)表的全部
同理,右連接將會(huì)以右邊作為基準(zhǔn),進(jìn)行檢索。
基本語(yǔ)法
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外鍵=表2.主鍵 WhERE 條件語(yǔ)句;
4、自連接
自連接顧名思義就是自己跟自己連接,參與連接的表都是同一張表。(通過(guò)給表取別名虛擬出)。
基本語(yǔ)法
SELECT 字段名列表 FROM 表1 別名1,表名1 別名2 WHERE 別名1.字段名=別名1.字段名;
5、交叉連接
不適用任何匹配條件。生成笛卡爾積
基本語(yǔ)法
SELECT 列表名 FROM 表名1,表名2;
6、子查詢(xún)
1):子查詢(xún)是將一個(gè)查詢(xún)語(yǔ)句嵌套在另一個(gè)查詢(xún)語(yǔ)句中。內(nèi)部嵌套其他select語(yǔ)句的查詢(xún),稱(chēng)為外查詢(xún)或主查詢(xún)
2):內(nèi)層查詢(xún)語(yǔ)句的查詢(xún)結(jié)果,可以為外層查詢(xún)語(yǔ)句提供查詢(xún)條件。
3):子查詢(xún)中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關(guān)鍵字
4):還可以包含比較運(yùn)算符:= 、 !=、> 、<等
基本語(yǔ)法
SELECT 字段列表 FROM 表名 WHERE 字段名=(SELECT 字段名 FROM 表名);
二、關(guān)聯(lián)查詢(xún)應(yīng)用
基于這三個(gè)表
mysql> select * from dept3; +--------+-----------+ | deptno | name | +--------+-----------+ | 1001 | 研發(fā)部 | | 1002 | 銷(xiāo)售部 | | 1003 | 財(cái)務(wù)部 | | 1004 | 人事部 | +--------+-----------+ 4 rows in set (0.00 sec) mysql> select * from emp3; +-----+--------------+------+---------+ | eid | ename | age | dept_id | +-----+--------------+------+---------+ | 1 | 喬峰 | 20 | 1001 | | 10 | 丁春秋 | 71 | 1005 | | 2 | 段譽(yù) | 21 | 1001 | | 3 | 虛竹 | 23 | 1001 | | 4 | 阿紫 | 18 | 1001 | | 5 | 掃地僧 | 85 | 1002 | | 6 | 李秋水 | 33 | 1002 | | 7 | 鳩摩智 | 50 | 1002 | | 8 | 天山童姥 | 60 | 1003 | | 9 | 慕容博 | 58 | 1003 | +-----+--------------+------+---------+ 10 rows in set (0.00 sec) ? mysql> select * from emp; +-------+-----------+-----------+------+------------+-------+-------+--------+ | empno | ename | job | mgr | hiredate | sai | comm | deptno | +-------+-----------+-----------+------+------------+-------+-------+--------+ | 1001 | 甘寧 | 文員 | 1013 | 2000-12-17 | 8000 | NULL | 20 | | 1002 | 黛綺絲 | 銷(xiāo)售員 | 1006 | 2001-02-20 | 16000 | 3000 | 30 | | 1003 | 殷天正 | 銷(xiāo)售員 | 1006 | 2001-02-22 | 12500 | 5000 | 30 | | 1004 | 劉備 | 經(jīng)理 | 1009 | 2001-04-02 | 29750 | NULL | 20 | | 1005 | 謝遜 | 銷(xiāo)售員 | 1006 | 2001-09-28 | 12500 | 14000 | 30 | | 1006 | 關(guān)羽 | 經(jīng)理 | 1009 | 2001-05-01 | 28500 | NULL | 30 | | 1007 | 張飛 | 經(jīng)理 | 1009 | 2001-09-01 | 24500 | NULL | 10 | | 1008 | 諸葛亮 | 分析師 | 1004 | 2007-04-19 | 30000 | NULL | 20 | | 1009 | 曾阿牛 | 董事長(zhǎng) | NULL | 2001-11-17 | 50000 | NULL | 10 | | 1010 | 韋一笑 | 銷(xiāo)售員 | 1006 | 2001-09-08 | 15000 | 0 | 30 | | 1011 | 周泰 | 文員 | 1006 | 2007-05-23 | 11000 | NULL | 20 | | 1012 | 程普 | 文員 | 1006 | 2001-12-03 | 9500 | NULL | 30 | | 1013 | 龐統(tǒng) | 分析師 | 1004 | 2001-12-03 | 30000 | NULL | 20 | | 1014 | 黃蓋 | 文員 | 1007 | 2002-01-23 | 13000 | NULL | 10 | | 1015 | 張三 | 保潔員 | 1001 | 2013-05-01 | 80000 | 50000 | 50 | +-------+-----------+-----------+------+------------+-------+-------+--------+ 15 rows in set (0.00 sec) ?
1、inner join--內(nèi)連接
查詢(xún)銷(xiāo)售部的員工信息。
mysql> select name,emp3.* from dept3 inner join emp3 -> on dept3.deptno=emp3.dept_id -> where name='銷(xiāo)售部'; +-----------+-----+-----------+------+---------+ | name | eid | ename | age | dept_id | +-----------+-----+-----------+------+---------+ | 銷(xiāo)售部 | 5 | 掃地僧 | 85 | 1002 | | 銷(xiāo)售部 | 6 | 李秋水 | 33 | 1002 | | 銷(xiāo)售部 | 7 | 鳩摩智 | 50 | 1002 | +-----------+-----+-----------+------+---------+ 3 rows in set (0.00 sec)
2、left join--左連接
查看每員工所對(duì)應(yīng)的部門(mén)。
mysql> select emp3.*,name from emp3 left join dept3 -> on emp3.dept_id=dept3.deptno; +-----+--------------+------+---------+-----------+ | eid | ename | age | dept_id | name | +-----+--------------+------+---------+-----------+ | 1 | 喬峰 | 20 | 1001 | 研發(fā)部 | | 2 | 段譽(yù) | 21 | 1001 | 研發(fā)部 | | 3 | 虛竹 | 23 | 1001 | 研發(fā)部 | | 4 | 阿紫 | 18 | 1001 | 研發(fā)部 | | 5 | 掃地僧 | 85 | 1002 | 銷(xiāo)售部 | | 6 | 李秋水 | 33 | 1002 | 銷(xiāo)售部 | | 7 | 鳩摩智 | 50 | 1002 | 銷(xiāo)售部 | | 8 | 天山童姥 | 60 | 1003 | 財(cái)務(wù)部 | | 9 | 慕容博 | 58 | 1003 | 財(cái)務(wù)部 | | 10 | 丁春秋 | 71 | 1005 | NULL | +-----+--------------+------+---------+-----------+ 10 rows in set (0.00 sec)
3、right join--右連接
查看每個(gè)部門(mén)對(duì)應(yīng)的員工信息。
mysql> select name,emp3.* from dept3 right join emp3 -> on dept3.deptno=emp3.dept_id; +-----------+-----+--------------+------+---------+ | name | eid | ename | age | dept_id | +-----------+-----+--------------+------+---------+ | 研發(fā)部 | 1 | 喬峰 | 20 | 1001 | | 研發(fā)部 | 2 | 段譽(yù) | 21 | 1001 | | 研發(fā)部 | 3 | 虛竹 | 23 | 1001 | | 研發(fā)部 | 4 | 阿紫 | 18 | 1001 | | 銷(xiāo)售部 | 5 | 掃地僧 | 85 | 1002 | | 銷(xiāo)售部 | 6 | 李秋水 | 33 | 1002 | | 銷(xiāo)售部 | 7 | 鳩摩智 | 50 | 1002 | | 財(cái)務(wù)部 | 8 | 天山童姥 | 60 | 1003 | | 財(cái)務(wù)部 | 9 | 慕容博 | 58 | 1003 | | NULL | 10 | 丁春秋 | 71 | 1005 | +-----------+-----+--------------+------+---------+
4、自連接
在emp表中查詢(xún)姓名的上級(jí)領(lǐng)導(dǎo)(mgr)的名字。
mysql> select a.ename,b.ename 領(lǐng)導(dǎo)名字 from emp a,emp b -> where a.mgr=b.empno; +-----------+--------------+ | ename | 領(lǐng)導(dǎo)名字 | +-----------+--------------+ | 甘寧 | 龐統(tǒng) | | 黛綺絲 | 關(guān)羽 | | 殷天正 | 關(guān)羽 | | 劉備 | 曾阿牛 | | 謝遜 | 關(guān)羽 | | 關(guān)羽 | 曾阿牛 | | 張飛 | 曾阿牛 | | 諸葛亮 | 劉備 | | 韋一笑 | 關(guān)羽 | | 周泰 | 關(guān)羽 | | 程普 | 關(guān)羽 | | 龐統(tǒng) | 劉備 | | 黃蓋 | 張飛 | | 張三 | 甘寧 | +-----------+--------------+ 14 rows in set (0.00 sec)
5、交叉連接
mysql> select * from emp3,dept3; +-----+--------------+------+---------+--------+-----------+ | eid | ename | age | dept_id | deptno | name | +-----+--------------+------+---------+--------+-----------+ | 1 | 喬峰 | 20 | 1001 | 1001 | 研發(fā)部 | | 1 | 喬峰 | 20 | 1001 | 1002 | 銷(xiāo)售部 | | 1 | 喬峰 | 20 | 1001 | 1003 | 財(cái)務(wù)部 | | 1 | 喬峰 | 20 | 1001 | 1004 | 人事部 | | 10 | 丁春秋 | 71 | 1005 | 1001 | 研發(fā)部 | | 10 | 丁春秋 | 71 | 1005 | 1002 | 銷(xiāo)售部 | | 10 | 丁春秋 | 71 | 1005 | 1003 | 財(cái)務(wù)部 | | 10 | 丁春秋 | 71 | 1005 | 1004 | 人事部 | | 2 | 段譽(yù) | 21 | 1001 | 1001 | 研發(fā)部 | | 2 | 段譽(yù) | 21 | 1001 | 1002 | 銷(xiāo)售部 | | 2 | 段譽(yù) | 21 | 1001 | 1003 | 財(cái)務(wù)部 | | 2 | 段譽(yù) | 21 | 1001 | 1004 | 人事部 | | 3 | 虛竹 | 23 | 1001 | 1001 | 研發(fā)部 | | 3 | 虛竹 | 23 | 1001 | 1002 | 銷(xiāo)售部 | | 3 | 虛竹 | 23 | 1001 | 1003 | 財(cái)務(wù)部 | | 3 | 虛竹 | 23 | 1001 | 1004 | 人事部 | | 4 | 阿紫 | 18 | 1001 | 1001 | 研發(fā)部 | | 4 | 阿紫 | 18 | 1001 | 1002 | 銷(xiāo)售部 | | 4 | 阿紫 | 18 | 1001 | 1003 | 財(cái)務(wù)部 | | 4 | 阿紫 | 18 | 1001 | 1004 | 人事部 | | 5 | 掃地僧 | 85 | 1002 | 1001 | 研發(fā)部 | | 5 | 掃地僧 | 85 | 1002 | 1002 | 銷(xiāo)售部 | | 5 | 掃地僧 | 85 | 1002 | 1003 | 財(cái)務(wù)部 | | 5 | 掃地僧 | 85 | 1002 | 1004 | 人事部 | | 6 | 李秋水 | 33 | 1002 | 1001 | 研發(fā)部 | | 6 | 李秋水 | 33 | 1002 | 1002 | 銷(xiāo)售部 | | 6 | 李秋水 | 33 | 1002 | 1003 | 財(cái)務(wù)部 | | 6 | 李秋水 | 33 | 1002 | 1004 | 人事部 | | 7 | 鳩摩智 | 50 | 1002 | 1001 | 研發(fā)部 | | 7 | 鳩摩智 | 50 | 1002 | 1002 | 銷(xiāo)售部 | | 7 | 鳩摩智 | 50 | 1002 | 1003 | 財(cái)務(wù)部 | | 7 | 鳩摩智 | 50 | 1002 | 1004 | 人事部 | | 8 | 天山童姥 | 60 | 1003 | 1001 | 研發(fā)部 | | 8 | 天山童姥 | 60 | 1003 | 1002 | 銷(xiāo)售部 | | 8 | 天山童姥 | 60 | 1003 | 1003 | 財(cái)務(wù)部 | | 8 | 天山童姥 | 60 | 1003 | 1004 | 人事部 | | 9 | 慕容博 | 58 | 1003 | 1001 | 研發(fā)部 | | 9 | 慕容博 | 58 | 1003 | 1002 | 銷(xiāo)售部 | | 9 | 慕容博 | 58 | 1003 | 1003 | 財(cái)務(wù)部 | | 9 | 慕容博 | 58 | 1003 | 1004 | 人事部 | +-----+--------------+------+---------+--------+-----------+ 40 rows in set (0.00 sec)
6、子查詢(xún)
在emp3表中年齡大于平均年齡的姓名。
mysql> select ename,age from emp3 -> where age>(select avg(age) from emp3); +--------------+------+ | ename | age | +--------------+------+ | 丁春秋 | 71 | | 掃地僧 | 85 | | 鳩摩智 | 50 | | 天山童姥 | 60 | | 慕容博 | 58 | +--------------+------+ 5 rows in set (0.00 sec) #驗(yàn)證是否查詢(xún)正確,看看平均年齡是多少 mysql> select avg(age) 平均年齡 from emp3; +--------------+ | 平均年齡 | +--------------+ | 43.9000 | +--------------+ 1 row in set (0.00 sec)
7、group_concat(字段名)函數(shù)的使用
查詢(xún)每個(gè)部門(mén)的員工姓名。
emp表
mysql> select job,group_concat(ename) from emp group by job; +-----------+--------------------------------------+ | job | group_concat(ename) | +-----------+--------------------------------------+ | 保潔員 | 張三 | | 分析師 | 諸葛亮,龐統(tǒng) | | 文員 | 甘寧,周泰,程普,黃蓋 | | 經(jīng)理 | 劉備,關(guān)羽,張飛 | | 董事長(zhǎng) | 曾阿牛 | | 銷(xiāo)售員 | 黛綺絲,殷天正,謝遜,韋一笑 | +-----------+--------------------------------------+ 6 rows in set (0.00 sec)
emp3和dept3表
mysql> select name,group_concat(ename) from dept3 left join emp3 -> on dept3.deptno=emp3.dept_id -> group by dept3.name; +-----------+-------------------------------+ | name | group_concat(ename) | +-----------+-------------------------------+ | 人事部 | NULL | | 研發(fā)部 | 段譽(yù),阿紫,喬峰,虛竹 | | 財(cái)務(wù)部 | 天山童姥,慕容博 | | 銷(xiāo)售部 | 李秋水,掃地僧,鳩摩智 | +-----------+-------------------------------+ 4 rows in set (0.00 sec)
注:在使用的過(guò)程中根據(jù)需求聯(lián)合使用。
總結(jié)
到此這篇關(guān)于MySQL多表關(guān)聯(lián)查詢(xún)方式及實(shí)際應(yīng)用的文章就介紹到這了,更多相關(guān)MySQL多表關(guān)聯(lián)查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL定時(shí)執(zhí)行腳本(計(jì)劃任務(wù))命令實(shí)例
在mysql中我們可以直接進(jìn)行一些參數(shù)設(shè)置讓它成定時(shí)為我們執(zhí)行一些任務(wù)了,這個(gè)雖然可以使用windows或者linux中的計(jì)劃任務(wù)實(shí)現(xiàn),但是mysql本身也能完成2013-10-10MySQL中索引優(yōu)化distinct語(yǔ)句及distinct的多字段操作
這篇文章主要介紹了MySQL中索引優(yōu)化distinct語(yǔ)句及distinct的多字段操作方法,distinct語(yǔ)句去重功能的使用是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01Mysql數(shù)據(jù)庫(kù)5.7升級(jí)到8.4的實(shí)現(xiàn)
很多情況需要升級(jí)MySQL的數(shù)據(jù)庫(kù)版本,本文主要介紹了Mysql數(shù)據(jù)庫(kù)5.7升級(jí)到8.4的實(shí)現(xiàn),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06Linux下mysql5.6.24(二進(jìn)制)自動(dòng)安裝腳本
這篇文章主要為大家詳細(xì)介紹了Linux環(huán)境下mysql5.6.24二進(jìn)制自動(dòng)安裝腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Mysql提升索引效率優(yōu)化的八種方法總結(jié)
索引實(shí)際上也是一張表,保存了主鍵和索引的字段,并且指向?qū)嶓w表的記錄,所以索引也是需要占用空間的,這篇文章主要給大家介紹了關(guān)于Mysql提升索引效率優(yōu)化的八種方法,需要的朋友可以參考下2024-04-04mysql實(shí)現(xiàn)merge into問(wèn)題
文章介紹了在數(shù)據(jù)庫(kù)操作中,如何使用`REPLACE INTO`和`INSERT INTO ON DUPLICATE KEY UPDATE`語(yǔ)句進(jìn)行數(shù)據(jù)更新和插入操作,如果不想創(chuàng)建唯一性索引,可以通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn),文章通過(guò)實(shí)驗(yàn)和驗(yàn)證,展示了這兩種方法的實(shí)際效果2024-12-12MySQL 跨庫(kù)查詢(xún)示例場(chǎng)景分析
在 MySQL 數(shù)據(jù)庫(kù)應(yīng)用場(chǎng)景中,有時(shí)需要從多個(gè)數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)并進(jìn)行關(guān)聯(lián)分析或綜合處理,這就涉及到跨庫(kù)查詢(xún)操作,本指南將詳細(xì)介紹 MySQL 跨庫(kù)查詢(xún)的方法、注意事項(xiàng)以及相關(guān)示例,感興趣的朋友一起看看吧2025-04-04