MySQL中七种JOIN的SQL是怎样的
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关MySQL中七种JOIN的SQL是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。准备数据以一个简易问答系统为例,包括
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
咖啡网
互联网科技产业
港股互联网科技股
互联网金融 科技
互联网 科技创新
上海致骋互联网科技
互联网科技的未来发展
互联网高科技股票
海南购全球互联网科技
华中科技有哪些互联网大佬
阿里巴巴算科技企业还是互联网
现代互联网科技股
互联网与医疗科技
国大互联网教育科技有限公司工作
伊宁互联网科技做什么的
滨湖区互联网智能科技产品有哪些
互联网企业科技类企业如何做账
江苏苏星互联网科技有限公司
银行科技岗属于互联网吗
互联网相关科技技术
互联网科技视频素材
汽车互联网创新科技园
来此购互联网科技有限公司
南平创想时代互联网科技有限公司
昭通互联网科技选哪家
赶超互联网科技 微信多开
互联网科技创新的路径
宇信科技在杭州互联网排第几
互联网金融金融科技
现代科技的标志之一的互联网