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

准备数据

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

CREATETABLE`t_qa`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`title`varchar(200)NOTNULLDEFAULT''COMMENT'标题',`answer_count`int(5)unsignedNOTNULLDEFAULT'0'COMMENT'回答个数',`label_id`bigint(20)unsignedNOTNULLDEFAULT'0'COMMENT'标签id',`create_by`bigint(20)unsignedNOTNULLDEFAULT'0'COMMENT'创建人',`create_date`datetimeNOTNULLDEFAULT'0000-00-0000:00:00'COMMENT'创建时间',`update_by`bigint(20)unsignedDEFAULTNULLCOMMENT'更新人',`update_date`datetimeDEFAULTNULLCOMMENT'更新时间',`del_flag`tinyint(1)unsignedNOTNULLDEFAULT'0'COMMENT'0:不删除,1:删除',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;INSERTINTO`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-2417:43:53',0,'2017-08-2417:43:53',0),(2,'PHP是什么?',4,2,0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(3,'前端是什么?',3,3,0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(4,'nodejs是什么?',2,0,0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(5,'css是什么?',1,0,0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(6,'JavaScript是什么?',0,0,0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0);

标签表如下:

CREATETABLE`t_label`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`name`varchar(50)NOTNULLDEFAULT''COMMENT'名称',`create_by`bigint(20)unsignedNOTNULLDEFAULT'0'COMMENT'创建人',`create_date`datetimeNOTNULLDEFAULT'0000-00-0000:00:00'COMMENT'创建时间',`update_by`bigint(20)unsignedDEFAULTNULLCOMMENT'更新人',`update_date`datetimeDEFAULTNULLCOMMENT'更新时间',`del_flag`tinyint(1)unsignedNOTNULLDEFAULT'0'COMMENT'0:不删除,1:删除',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;INSERTINTO`t_label`(`id`,`name`,`create_by`,`create_date`,`update_by`,`update_date`,`del_flag`)VALUES(1,'java',0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(2,'php',0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(3,'大前端',0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(4,'mybatis',0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(5,'python',0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0),(6,'多线程',0,'2017-08-2417:43:53',0,'2017-08-2417:43:53',0);

一、左连接(LEFT JOIN)

问题回答个数标签id标签名称Java是什么?51javaPHP是什么?42php前端是什么?33大前端nodejs是什么?2NULLNULLcss是什么?1NULLNULLJavaScript是什么?1NULLNULL

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.id

二、右连接(RIGHT JOIN)

问题回答个数标签id标签名称Java是什么?51javaPHP是什么?42php前端是什么?33大前端NULLNULL4mybatisNULLNULL5pythonNULLNULL6多线程

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.id

三、内连接(INNER JOIN)

问题回答个数标签id标签名称Java是什么?51javaPHP是什么?42php前端是什么?33大前端

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqINNERJOINt_labeltlONtq.label_id=tl.id

四、左独有连接(LEFT JOIN)

问题回答个数标签id标签名称nodejs是什么?2NULLNULLcss是什么?1NULLNULLJavaScript是什么?0NULLNULL

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.idWHEREtl.idISNULL

五、右独有连接(RIGHT JOIN)

问题回答个数标签id标签名称NULLNULL4mybatisNULLNULL5pythonNULLNULL6多线程

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.idWHEREtq.label_idISNULL

六、全连接(FULL JOIN)

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

问题回答个数标签id标签名称Java是什么?51javaPHP是什么?42php前端是什么?33大前端nodejs是什么?2NULLNULLcss是什么?1NULLNULLJavaScript是什么?0NULLNULLNULLNULL4mybatisNULLNULL5pythonNULLNULL6多线程

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.idUNIONSELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.id

七、全连接去交集(FULL JOIN)

问题回答个数标签id标签名称nodejs是什么?2NULLNULLcss是什么?1NULLNULLJavaScript是什么?0NULLNULLNULLNULL4mybatisNULLNULL5pythonNULLNULL6多线程

SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.idWHEREtl.idISNULLUNIONSELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.idWHEREtq.label_idISNULL

关于MySQL中七种JOIN的SQL是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。