MySQL中七种JOIN的SQL是怎样的
这篇文章将为大家详细讲解有关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)
java
PHP是什么?42php
前端是什么?33大前端
nodejs是什么?2NULLNULLcss是什么?1NULLNULLJavaScript是什么?1NULLNULLSELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.id
二、右连接(RIGHT JOIN)
java
PHP是什么?42php
前端是什么?33大前端
NULLNULL4mybatis
NULLNULL5python
NULLNULL6多线程
SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.id
三、内连接(INNER JOIN)
java
PHP是什么?42php
前端是什么?33大前端
SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqINNERJOINt_labeltlONtq.label_id=tl.id
四、左独有连接(LEFT JOIN)
SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.idWHEREtl.idISNULL
五、右独有连接(RIGHT JOIN)
mybatis
NULLNULL5python
NULLNULL6多线程
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来实现。
java
PHP是什么?42php
前端是什么?33大前端
nodejs是什么?2NULLNULLcss是什么?1NULLNULLJavaScript是什么?0NULLNULLNULLNULL4mybatis
NULLNULL5python
NULLNULL6多线程
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)
mybatis
NULLNULL5python
NULLNULL6多线程
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是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。