目录

实践

第一种

第二种

第三种

第四种

第五种

第六种

第七种


大家好呀!我是爷爷的茶七里香,周末啦~开森~,今天突然想起曾经面试遇到的MySQL题目,记录下来方便查阅!!!

 MySQL的7种表连接结果集

实践

我相信各位小伙伴通过上面的图已经明白了,接下来为了加深印象,让我们实践一下吧!

用户表:

-- 建表
CREATE TABLE `sys_user` (`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',`user_name` varchar(30) NOT NULL COMMENT '用户账号',`nick_name` varchar(30) NOT NULL COMMENT '用户昵称',`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户信息表';-- 插入数据
INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (1, '管理员', 'admin', 10);
INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (2, '张三', 'zs', 10);
INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (3, '李四', 'ls', 11);
INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (4, '王五', 'ww', 10);
INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (5, '老六', 'll', 11);
INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (6, '小七', 'xq', NULL);

部门表:

-- 建表
CREATE TABLE `sys_dept` (`dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id',`parent_id` bigint(20) DEFAULT '0' COMMENT '父部门id',`dept_name` varchar(30) DEFAULT '' COMMENT '部门名称',PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='部门表';-- 插入数据
INSERT INTO `yy`.`sys_dept`(`dept_id`, `parent_id`, `dept_name`) VALUES (10, 0, '法外狂徒部');
INSERT INTO `yy`.`sys_dept`(`dept_id`, `parent_id`, `dept_name`) VALUES (11, 0, '伏地魔部');
INSERT INTO `yy`.`sys_dept`(`dept_id`, `parent_id`, `dept_name`) VALUES (12, 0, '测试部');

第一种

SQL语句:

SELECT*
FROMsys_user uLEFT JOIN sys_dept d ON u.dept_id = d.dept_id;

结果:

LEFT JOIN是以左表为主,不管有没有匹配到右表的数据都要显示左边的数据,可能有小伙伴不知道哪个是左表哪个是右表,SQL语句中写在LEFT JOIN左边的表是左表写在右边的那自然就是右表啦!!!

第二种

SQL语句:

SELECT*
FROMsys_user uLEFT JOIN sys_dept d ON u.dept_id = d.dept_id
WHEREd.dept_id IS NULL;

结果:

在原先的基础上多加了WHERE d.dept_id IS NULL的条件,这个条件筛选出sys_user表中dept_id字段为空的数据,结果集中不包含和sys_dept表对应的数据

第三种

SQL语句:

SELECT*
FROMsys_user uRIGHT JOIN sys_dept d ON u.dept_id = d.dept_id;

结果:

这个结果集和LEFT JOIN的恰恰相反,只是主体换了而已

第四种

SQL语句:

SELECT*
FROMsys_user uRIGHT JOIN sys_dept d ON u.dept_id = d.dept_id
WHEREu.dept_id IS NULL;

结果:

结果集和上述第二种中的结果集是相反的,可以往上翻进行对比哦!!!

第五种

SQL语句:

SELECT*
FROMsys_user uLEFT JOIN sys_dept d ON u.dept_id = d.dept_id UNION
SELECT*
FROMsys_user uRIGHT JOIN sys_dept d ON u.dept_id = d.dept_id;

结果:

该结果集只是使用UNION关键字将上述第一种和第三种的结果集进行了拼接,那么有的小伙伴就要问了,既然是拼接那么为什么没有重复的数据,这是因为UNION给我们去除了重复的数据了,如果你想看重复的数据就要使用UNION ALL关键字,如下:

第六种

SQL语句:

SELECT*
FROMsys_user uLEFT JOIN sys_dept d ON u.dept_id = d.dept_id
WHEREd.dept_id IS NULL UNION
SELECT*
FROMsys_user uRIGHT JOIN sys_dept d ON u.dept_id = d.dept_id
WHEREu.dept_id IS NULL;

结果:

这个结果集也是使用了UNION关键字将上述第二种和第四种结果进行了拼接去重

第七种

SQL语句:

SELECT*
FROMsys_user uINNER JOIN sys_dept d ON u.dept_id = d.dept_id;

结果:

 除了上面这种写法,还有一种写法是用逗号代替,如:

SELECT*
FROMsys_user u,sys_dept d WHERE u.dept_id = d.dept_id;

结果:

发现结果集是一样的,别看两条语句写法差很大,但是它们是等价的

今天就到这里啦~对你有帮助的话不妨留个赞呗!

MySQL的7种JOIN表连接结果集,你了解几个?搞懂仅需1张图相关推荐

  1. MySQL的7种join,交集,并集,差集。

    MySQL的7种join,交集,并集,差集. 1.总括 mysql种共有7种join(但实际上只有4种主要的:左外连接,右外连接,内连接,全外连接)以下7种不过在此基础上有一些变动: 2.具体实现 ( ...

  2. SQL 经典回顾:JOIN 表连接操作不完全指南

    也许最强大的SQL功能是JOIN操作.这让所有非关系数据库羡慕不已,因为当你想"合并"两个数据集时,这个概念是如此简单,并且又普遍适用. 简单地说,连接两个表,就是将一个表中的每一 ...

  3. MySQL和PostgreSQL在多表连接算法上的差异

    以下文章来源于数据库架构之美 ,作者数据库架构之美 我们知道mysql没有hash join,也没有merge join,所以在连接的时候只有一种算法nest loop join,nl join使用驱 ...

  4. MySQL笔记 07:多表连接查询

    1. 分类 1.1 按年代分类 sql92标准:仅支持内连接 sql99标准[推荐]:支持内连接 + 交叉连接 + 左/右外连接 1.2 按功能分类 内连接:等值连接,非等值连接,自连接 外连接:左外 ...

  5. C++连接mysql的两种方式(ADO连接和mysql api连接)

    一.ADO连接mysql 1.安装mysql-5.5.20-win32.msi和mysql-connector-odbc-5.3.4-win32.msi(一般两个安装程序要匹配,否则可能连接不上)   ...

  6. python连接mysql的几种方式_Python连接MySQL数据库的多种方式

    本次代码实现连接远程服务器 由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器. 目前,MySQL驱动有几种: mysql-c ...

  7. 开发经常犯的错误之→【join表连接关联查询 】

    最近在审核SQL的时候,发现一些开发经常犯这个错误,下面我举个简单的例子,说明一下: 查找出A表和B表id相同的记录(并且把B表没有的id记录也查询出来),且name名字等于'b'的记录. 表数据: ...

  8. mysql 逗号 join_mysql – sql join表,其中1列有逗号

    您应该真正查看Database normalization并首先通过添加联结表来规范化您的结构,并保存表格中的关系,存储在tablec中的每个关系都将存储在新的联结表中,但不能作为逗号分隔列表,每行将 ...

  9. MySQL的几种join方法

    左链接 mysql> select * from t1 left join t2 on t1.id = t2.id; 右链接 mysql> select * from t1 right j ...

最新文章

  1. c++ char数组初始化_c专题指针数组与指针的关联
  2. 《Android传感器开发与智能设备案例实战》——导读
  3. 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)
  4. creo扫描选择多条链作为轨迹_ProE/Creo圆轨迹可变扫描法创建弧顶面,用上便爱上(一)...
  5. 使用http连接到microsoft exchange_如何使用 PowerShell 连接 Office 365 服务
  6. Mobile first 设计思路在 SAP 电商云 Spartacus UI 中的设计体现一例
  7. P4770:你的名字(SAM、线段树合并)
  8. 全局角度出发讨论敏捷
  9. 电脑系统win11改win10怎么改?Win11改win10教程
  10. Ethernet和802.3的区别
  11. 浅析网站被挂马的代码
  12. 电影TS/TC/SCR/R5/BD/HD/HC版本意思收集(转)
  13. #MoreThanCode:社会正义技术
  14. 【学习体会】Lighttools8.4.0:简单光学系统实例
  15. 泛型---上界通配符和下界通配符
  16. 华为服务器查看虚拟ip,裸金属服务器管理虚拟IP地址
  17. 卸载SQL server后,本地文件无法删除
  18. C++ 实验二 NO.4 字符串合并:输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
  19. Android混淆总结篇(一)
  20. Linux·启动脚本·启动流程

热门文章

  1. 新版 Kite为啥这么火,问就俩字『好用』
  2. 入行半导体之ATE测试
  3. 我的世界python指令攻略_PYTHON玩转我的世界——找钻石小游戏
  4. 基于MySQL的留言回复功能(SSM框架实现)
  5. 鬼泣巅峰之战服务器维护,鬼泣巅峰之战版本更新停服维护公告 更新公告一览...
  6. python自动化交易通达信_GitHub - wenjinglee/ShiPanE-Python-SDK: 实盘易(ShiPanE)Python SDK,通达信自动化交易 API。...
  7. mysql怎样存储中文_mysql 存储中文问题
  8. 服务器与虚拟主机介绍
  9. java compareto long_Java Long类compareTo()方法与示例
  10. 国产编程语言「木兰」实为 Python 套壳,官方致歉!