MySQL七大JOIN的具体使用
建表
部门表
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的独有+AB的公有
SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id;2.右连接(right join)
B的独有+AB的公有
SELECT * from emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id;3.内连接(inner join)
AB的公有
SELECT * from emp e INNER JOIN dept d ON e.dept_id=d.dept_id;4.左外连接(left join且右表=null)
A的独有
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的独有
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的独有+B的独有+AB的公有
注意:MySQL不支持FULL OUTER JOIN(在ORACLE支持)。
因此使用UNION的方式来实现,可以**合并+去重**
应用场景:
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时
特点:
1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句的查询的每一列的类型和顺序最好一致
3、union关键字**默认去重,如果使用union all 可以包含重复项**
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的独有+B的独有
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;我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL七大JOIN的具体使用
相关文章
- MySQL中使用Transaction创建安全的数据库(mysql创建事务)
- MySQL查看字段编码的实用方法(mysql查看字段编码)
- MySQL 使用 JOIN 合并表的方法。(mysql合并表)
- 据分析MySQL表记录:挖掘数据的分析力量(mysql表记录数)
- 使用Qt快速连接MySQL数据库(qt连接mysql)
- 如何掌握MySQL使用技巧(mysql怎样使用)
- 简化MySQL数据库操作:使用MySQL链接工具(链接mysql工具)
- MySQL中文全文搜索:提升搜索体验(mysql中文全文搜索)
- MySQL关联更新:轻松实现数据同步(mysql关联更新)
- PHP与MySQL的网站搭建指南(php和mysql搭建)
- 深入了解 MySQL的编码格式,维护数据库数据完整性与安全性(mysql的编码格式)
- MySQL分组取最大值:如何在MySQL中使用分组和MAX函数来获取最大值?(mysql分组取最大)
- 阿里云MySQL实现主从同步及热备:保障数据安全与高效运营(阿里云mysql主从热备)
- 使用MySQL存储图片,方法及注意事项(mysql存图片)
- 如何使用MySQL获取上个月数据(mysql获取上个月)
- 深入研究MySQL的多数据库查询技术(mysql 多数据库查询)
- 使用MySQL函数实现复杂数据处理(mysql 中的函数)
- MySQL中如何使用乘法函数(mysql中乘法怎么写)
- MySQL中如何保留重复行不去重(mysql中不消除重复行)
- MySQL中使用rand方法随机排序数据(mysql中rand方法)
- MySQL中如何使用ini配置文件(mysql 中 ini)
- MySQL使用C语言构建索引的实现(c mysql建索引)
- MySQL中位运算的应用(bit在mysql)
- 如何解决MySQL突然消失的问题(mysql一闪就消失)
- MySQL如何避免冗余字段(mysql 。冗余字段)
- 使用MySQL内存优化,提升hws系统性能(mysql_hws内存)
- 如何在MySQL中使用zip解压文件(mysql zip解压后)
- MySQL数据库如何查询上年同期数据(mysql 上年同期)
- MySQL索引不宜贪多,建议慎重使用(mysql 不建议建索引)
- 使用MySQL实现一对多关系拼接方法(mysql 一对多 拼接)
- MySQL 数据库中使用一二三四五排序方法达到排序的目的(mysql一二三四五排序)