MySQL中七种JOIN的SQL是怎样的
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章将为大家详细讲解有关MySQL中七种JOIN的SQL是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。准备数据以一个简易问答系统为例,包括
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
查看服务器的raid级别
怎样测试服务器是否稳定
军事网络安全作文
部队警惕网络安全隐患标语
用友u8服务器硬件参数
代理服务器为啥安全
网络安全法的六大亮点是什么
会软件开发的老鹰
初中毕业能学软件开发
最新网络安全方面的政策
龙猫校园显示服务器错误
天津戴尔服务器维修云服务器
梁溪区信息化软件开发优势
博兴mrp软件开发价格
switch好玩的免费游戏和服务器区
软件开发项目进度解决表
平谷区网络安全事件
呼和浩特数据库招聘
中山塑胶模具erp软件开发
服务器怎么查看支持的协议版本
服务器文件怎么转移到手机上
数据库插值
互联网科技中的领域
苏州诚嘉网络技术有限公司
搭建别人系统用自己的服务器
杭州软件开发工程师培训
软件开发服务费税率
sql 游标更新数据库
网络安全的作用是什么意思
责任性网络安全事件