温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL中七种JOIN的SQL是怎样的

发布时间:2021-11-29 11:00:30 阅读:170 作者:柒染 栏目:数据库
亿速云mysql数据库,读写分离,安全稳定,弹性扩容,低至0.3元/天!! 点击查看>>

这篇文章将为大家详细讲解有关MySQL中七种JOIN的SQL是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

准备数据

以一个简易问答系统为例,包括问题表和问题所属标签,问题表如下:

CREATE TABLE `t_qa` (   `id` bigint(20NOT NULL AUTO_INCREMENT,   `title` varchar(200NOT 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是什么?'510'2017-08-24 17:43:53'0'2017-08-24 17:43:53'0),     (2'PHP是什么?'420'2017-08-24 17:43:53'0'2017-08-24 17:43:53'0),     (3'前端是什么?'330'2017-08-24 17:43:53'0'2017-08-24 17:43:53'0),     (4'nodejs是什么?'200'2017-08-24 17:43:53'0'2017-08-24 17:43:53'0),     (5'css是什么?'100'2017-08-24 17:43:53'0'2017-08-24 17:43:53'0),     (6'JavaScript是什么?'000'2017-08-24 17:43:53'0'2017-08-24 17:43:53'0);

标签表如下:

CREATE TABLE `t_label` (   `id` bigint(20NOT NULL AUTO_INCREMENT,   `name` varchar(50NOT 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)

MySQL中七种JOIN的SQL是怎样的

问题回答个数标签id标签名称
Java是什么?51java
PHP是什么?42php
前端是什么?33大前端
nodejs是什么?2NULLNULL
css是什么?1NULLNULL
JavaScript是什么?1NULLNULL
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)

MySQL中七种JOIN的SQL是怎样的

问题回答个数标签id标签名称
Java是什么?51java
PHP是什么?42php
前端是什么?33大前端
NULLNULL4mybatis
NULLNULL5python
NULLNULL6多线程
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)

MySQL中七种JOIN的SQL是怎样的

问题回答个数标签id标签名称
Java是什么?51java
PHP是什么?42php
前端是什么?33大前端
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)

MySQL中七种JOIN的SQL是怎样的

问题回答个数标签id标签名称
nodejs是什么?2NULLNULL
css是什么?1NULLNULL
JavaScript是什么?0NULLNULL
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)

MySQL中七种JOIN的SQL是怎样的

问题回答个数标签id标签名称
NULLNULL4mybatis
NULLNULL5python
NULLNULL6多线程
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中七种JOIN的SQL是怎样的

由于MySQL不支持FULL OUTER JOIN,所以如果有全连接需求时,可用表达式:full outer join = left outer join  UNION right outer join来实现。

问题回答个数标签id标签名称
Java是什么?51java
PHP是什么?42php
前端是什么?33大前端
nodejs是什么?2NULLNULL
css是什么?1NULLNULL
JavaScript是什么?0NULLNULL
NULLNULL4mybatis
NULLNULL5python
NULLNULL6多线程
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)

MySQL中七种JOIN的SQL是怎样的

问题回答个数标签id标签名称
nodejs是什么?2NULLNULL
css是什么?1NULLNULL
JavaScript是什么?0NULLNULL
NULLNULL4mybatis
NULLNULL5python
NULLNULL6多线程
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是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://segmentfault.com/a/1190000010871612

AI

开发者交流群×