MySQL中七种JOIN的SQL是怎样的
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章将为大家详细讲解有关MySQL中七种JOIN的SQL是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。准备数据以一个简易问答系统为例,包括
千家信息网最后更新 2025年11月10日MySQL中七种JOIN的SQL是怎样的
这篇文章将为大家详细讲解有关MySQL中七种JOIN的SQL是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
准备数据
以一个简易问答系统为例,包括问题表和问题所属标签,问题表如下:
CREATE TABLE `t_qa` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL DEFAULT '' COMMENT '标题', `answer_count` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '回答个数', `label_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '标签id', `create_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建人', `create_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间', `update_by` bigint(20) unsigned DEFAULT NULL COMMENT '更新人', `update_date` datetime DEFAULT NULL COMMENT '更新时间', `del_flag` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0:不删除,1:删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `t_qa` (`id`, `title`, `answer_count`, `label_id`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`) VALUES (1, 'Java是什么?', 5, 1, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (2, 'PHP是什么?', 4, 2, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (3, '前端是什么?', 3, 3, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (4, 'nodejs是什么?', 2, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (5, 'css是什么?', 1, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (6, 'JavaScript是什么?', 0, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0);
标签表如下:
CREATE TABLE `t_label` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称', `create_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建人', `create_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间', `update_by` bigint(20) unsigned DEFAULT NULL COMMENT '更新人', `update_date` datetime DEFAULT NULL COMMENT '更新时间', `del_flag` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0:不删除,1:删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `t_label` (`id`, `name`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`) VALUES (1, 'java', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (2, 'php', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (3, '大前端', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (4, 'mybatis', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (5, 'python', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), (6, '多线程', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0);
一、左连接(LEFT JOIN)

| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| Java是什么? | 5 | 1 | java |
| PHP是什么? | 4 | 2 | php |
| 前端是什么? | 3 | 3 | 大前端 |
| nodejs是什么? | 2 | NULL | NULL |
| css是什么? | 1 | NULL | NULL |
| JavaScript是什么? | 1 | NULL | NULL |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq LEFT JOIN t_label tl ON tq.label_id = tl.id
二、右连接(RIGHT JOIN)

| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| Java是什么? | 5 | 1 | java |
| PHP是什么? | 4 | 2 | php |
| 前端是什么? | 3 | 3 | 大前端 |
| NULL | NULL | 4 | mybatis |
| NULL | NULL | 5 | python |
| NULL | NULL | 6 | 多线程 |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq RIGHT JOIN t_label tl ON tq.label_id = tl.id
三、内连接(INNER JOIN)
| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| Java是什么? | 5 | 1 | java |
| PHP是什么? | 4 | 2 | php |
| 前端是什么? | 3 | 3 | 大前端 |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq INNER JOIN t_label tl ON tq.label_id = tl.id
四、左独有连接(LEFT JOIN)
| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| nodejs是什么? | 2 | NULL | NULL |
| css是什么? | 1 | NULL | NULL |
| JavaScript是什么? | 0 | NULL | NULL |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq LEFT JOIN t_label tl ON tq.label_id = tl.id WHERE tl.id IS NULL
五、右独有连接(RIGHT JOIN)
| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| NULL | NULL | 4 | mybatis |
| NULL | NULL | 5 | python |
| NULL | NULL | 6 | 多线程 |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq RIGHT JOIN t_label tl ON tq.label_id = tl.id WHERE tq.label_id IS NULL
六、全连接(FULL JOIN)
由于MySQL不支持FULL OUTER JOIN,所以如果有全连接需求时,可用表达式:full outer join = left outer join UNION right outer join来实现。
| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| Java是什么? | 5 | 1 | java |
| PHP是什么? | 4 | 2 | php |
| 前端是什么? | 3 | 3 | 大前端 |
| nodejs是什么? | 2 | NULL | NULL |
| css是什么? | 1 | NULL | NULL |
| JavaScript是什么? | 0 | NULL | NULL |
| NULL | NULL | 4 | mybatis |
| NULL | NULL | 5 | python |
| NULL | NULL | 6 | 多线程 |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq LEFT JOIN t_label tl ON tq.label_id = tl.id UNION SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq RIGHT JOIN t_label tl ON tq.label_id = tl.id
七、全连接去交集(FULL JOIN)
| 问题 | 回答个数 | 标签id | 标签名称 |
|---|---|---|---|
| nodejs是什么? | 2 | NULL | NULL |
| css是什么? | 1 | NULL | NULL |
| JavaScript是什么? | 0 | NULL | NULL |
| NULL | NULL | 4 | mybatis |
| NULL | NULL | 5 | python |
| NULL | NULL | 6 | 多线程 |
SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq LEFT JOIN t_label tl ON tq.label_id = tl.id WHERE tl.id IS NULL UNION SELECT tq.title, tq.answer_count, tl.id, tl.name FROM t_qa tq RIGHT JOIN t_label tl ON tq.label_id = tl.id WHERE tq.label_id IS NULL
关于MySQL中七种JOIN的SQL是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
标签
前端
问题
个数
名称
线程
时间
更新
全连
内容
创建人
文章
更多
知识
篇文章
不错
交集
所属
数据
标题
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界怎么设置永恒服务器
网络安全与执法与方差分析
网络技术与校园英文
visio 数据库表
亚信科技属于互联网公司吗
软件开发师能考什么证
网络安全法网络安全工作小组
低版本的表格导入不了数据库
网络安全演练活动主题
江苏数据库日志审计功能要求
h3c杯网络技术大赛题
寸景网络技术
江苏企业软件开发需要多少钱
教育软件开发推广
网络安全校园诈骗
公安厅 网络安全培训
游戏服务器 ddos
浙江电视墙服务器
麦块怎么进入服务器
网络安全法 应急响应
程序软件开发和系统哪个好
数据库 统计列数
吉林通信软件开发服务五星服务
数据库常见的DML
云数据库 Cassandra
p2p网络安全吗
深圳市艾美网络技术有限公司
数据库三个等级
浙江电视墙服务器
三级网络技术资料书pdf