MySQL七大JOIN的具體使用
簡介
- A的獨(dú)有+AB的公有
- B的獨(dú)有+AB的公有
- AB的公有
- A的獨(dú)有
- B的獨(dú)有
- A的獨(dú)有+B的獨(dú)有+AB的公有
- A的獨(dú)有+B的獨(dú)有
練習(xí)
建表
部門表
DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `dept_id` int(11) NOT NULL AUTO_INCREMENT, `dept_name` varchar(30) DEFAULT NULL, `dept_number` int(11) DEFAULT NULL, PRIMARY KEY (`dept_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; INSERT INTO `dept` VALUES ('1', 'AA', '100'); INSERT INTO `dept` VALUES ('2', 'BB', '200'); INSERT INTO `dept` VALUES ('3', 'CC', '300'); INSERT INTO `dept` VALUES ('4', 'DD', '400'); INSERT INTO `dept` VALUES ('5', 'HH', '500');
員工表
DROP TABLE IF EXISTS `emp`; CREATE TABLE `emp` ( `emp_id` int(11) NOT NULL AUTO_INCREMENT, `emp_name` varchar(30) DEFAULT NULL, `emp_age` int(11) DEFAULT NULL, `dept_id` int(11) NOT NULL, PRIMARY KEY (`emp_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; INSERT INTO `emp` VALUES('1', 'zhangsan', '20', '1'); INSERT INTO `emp` VALUES('2', 'lisi', '25', '6'); INSERT INTO `emp` VALUES('3', 'wangwu', '19', '4'); INSERT INTO `emp` VALUES('4', 'zhaoliu', '29', '5'); INSERT INTO `emp` VALUES('5', 'xiaohong', '30', '2'); INSERT INTO `emp` VALUES('6', 'xiaohu', '26', '3'); INSERT INTO `emp` VALUES('7', 'zhangle', '23', '3'); INSERT INTO `emp` VALUES('8', 'qingtian', '38', '3'); INSERT INTO `emp` VALUES('9', 'xiayutian', '36', '2'); INSERT INTO `emp` VALUES('10', 'fangjia', '40', '1');
情景分析
1.左連接(left join)
A的獨(dú)有+AB的公有
SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id;
2.右連接(right join)
B的獨(dú)有+AB的公有
SELECT * from emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id;
3.內(nèi)連接(inner join)
AB的公有
SELECT * from emp e INNER JOIN dept d ON e.dept_id=d.dept_id;
4.左外連接(left join且右表=null)
A的獨(dú)有
SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id WHERE d.dept_id is null;
5. 右外連接(right join且左表=null)
B的獨(dú)有
SELECT * from emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id WHERE e.dept_id is null;
6. 全連接(full outer join)
A的獨(dú)有+B的獨(dú)有+AB的公有
注意:MySQL不支持FULL OUTER JOIN(在ORACLE支持)。
因此使用UNION的方式來實(shí)現(xiàn),可以**合并+去重**
應(yīng)用場景:
要查詢的結(jié)果來自于多個表,且多個表沒有直接的連接關(guān)系,但查詢的信息一致時
特點(diǎn):
1、要求多條查詢語句的查詢列數(shù)是一致的
2、要求多條查詢語句的查詢的每一列的類型和順序最好一致
3、union關(guān)鍵字**默認(rèn)去重,如果使用union all 可以包含重復(fù)項(xiàng)**
SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id UNION SELECT * FROM emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id;
7. 全外連接(full outer join且左右表=null)
A的獨(dú)有+B的獨(dú)有
SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id WHERE d.dept_id is null UNION SELECT * FROM emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id WHERE e.dept_id is null;
到此這篇關(guān)于MySQL七大JOIN的具體使用的文章就介紹到這了,更多相關(guān)MySQL JOIN使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL學(xué)習(xí)第二天 安裝和配置mysql winx64
MySQL學(xué)習(xí)第二天,主要為大家詳細(xì)介紹了在Windows 64位操作系統(tǒng)下安裝和配置MySQL的具體步驟,整理一份mysql winx64安裝配置方法教程,感興趣的小伙伴們可以參考一下2016-05-05MySQL中int(10)和int(11)的區(qū)別詳解
本文主要介紹了MySQL中int(10)和int(11)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03mysql索引使用率監(jiān)控技巧(值得收藏?。?/a>
這篇文章主要給大家介紹了關(guān)于mysql索引使用率監(jiān)控技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09MySQL數(shù)據(jù)庫中varchar類型的數(shù)字比較大小的方法
varchar類型的數(shù)據(jù)是不能直接比較大小的,那么MySQL數(shù)據(jù)庫中varchar類型如何進(jìn)行數(shù)字比較大小的,本文就詳細(xì)的介紹一下2021-11-11Windows下mysql-5.7.28下載、安裝、配置教程圖文詳解
這篇文章主要介紹了Windows下mysql-5.7.28下載、安裝、配置教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12