当前位置: 首页 > 科技观察

【MySQL笔记】七种JOIN的SQL

时间:2023-03-12 16:27:13 科技观察

准备数据以一个简单的问答系统为例,包括问题表和问题所属的标签。题表如下:CREATETABLE`t_qa`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`title`varchar(200)NOTNULLDEFAULT''COMMENT'title',`answer_count`int(5)unsignedNOTNULLDEFAULT'0'COMMENT'答案数',`label_id`bigint(20)unsignedNOTNULLDEFAULT'0'COMMENT'labelid',`create_by`bigint(20)unsignedNOTNULLDEFAULT'0'COMMENT'createperson',`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'name',`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:notdeleted,1:deleted',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,'ppython',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);一、左连接(LEFTJOIN)问答标签id标签名什么是Java?51什么是javaPHP?42什么是php前端?33什么是大前端nodejs?2什么是NULLNULLcss?1什么是NULLNULLJavaScript?1NULLNULLSELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.id2.右连接(RIGHTJOIN)问题答案数LabelidLabelname什么是Java?51什么是JavaPHP?42什么是php前端?33大前端NULLNULL4mybatisNULLNULL5pythonNULLNULL6多线程SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.id3.INNERJOIN问题解答What标签ID标签名称是Java吗?51什么是javaPHP?42什么是php前端?33大前端SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqINNERJOINt_labeltlONtq.label_id=tl.id4.左唯一连接(LEFTJOIN)问题答案数TagidTagname什么是nodejs?2什么是NULLNULLcss?1什么是NULLNULLJavaScript?0NULLNULLSELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.idWHEREtl.idISNULL5.右唯一连接(RIGHTJOIN)问题答案数Labelid标签名称NULLNULL4mybatisNULLNULL5pythonNULLNULL6MultithreadedSELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.idWHEREtq.label_idISNULL六、全连接(FULLJOIN)由于MySQL不支持FULLOUTERJOIN,如果有afull当连接要求时,可以使用表表达式:fullouterjoin=leftouterjoinUNIONrightouterjoin实现。问题答案数标签id标签名称什么是Java?51什么是javaPHP?42什么是php前端?33什么是大前端nodejs?2什么是NULLNULLcss?1什么是NULLNULLJavaScript?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.idVII.Fulljointointersection(FULLJOIN)问题答案数LabelidLabelname什么是nodejs?2什么是NULLNULLcss?1什么是NULLNULLJavaScript?0NULLNULLNULLNULL4mybatisNULLNULL5pythonNULLNULL6多线程SELECTtq.title,tq.answer_count,tl.id,tl.nameFROMt_qatqLEFTJOINt_labeltlONtq.label_id=tl.idWHEREtl.idISNULLUNIONSELECTtq.title_id,tq.tl.nameFROMt_qatqRIGHTJOINt_labeltlONtq.label_id=tl.idWHEREtq.label_idISNULL