自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【MySQL筆記】七種JOIN的SQL

數(shù)據(jù)庫 MySQL
本文主要是作者總結(jié)的關(guān)于七種JOIN的SQL的MySQL筆記,包括左連接(LEFT JOIN)、右連接(RIGHT JOIN)、內(nèi)連接(INNER JOIN)、左獨(dú)有連接(LEFT JOIN)等。

準(zhǔn)備數(shù)據(jù)

以一個(gè)簡(jiǎn)易問答系統(tǒng)為例,包括問題表和問題所屬標(biāo)簽,問題表如下:

  1. CREATE TABLE `t_qa` ( 
  2.   `id` bigint(20) NOT NULL AUTO_INCREMENT, 
  3.   `title` varchar(200) NOT NULL DEFAULT '' COMMENT '標(biāo)題'
  4.   `answer_count` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '回答個(gè)數(shù)'
  5.   `label_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '標(biāo)簽id'
  6.   `create_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '創(chuàng)建人'
  7.   `create_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時(shí)間'
  8.   `update_by` bigint(20) unsigned DEFAULT NULL COMMENT '更新人'
  9.   `update_date` datetime DEFAULT NULL COMMENT '更新時(shí)間'
  10.   `del_flag` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0:不刪除,1:刪除'
  11.   PRIMARY KEY (`id`) 
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
  13.  
  14. INSERT INTO `t_qa` (`id`, `title`, `answer_count`, `label_id`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`) 
  15. VALUES 
  16.     (1, 'Java是什么?', 5, 1, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  17.     (2, 'PHP是什么?', 4, 2, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  18.     (3, '前端是什么?', 3, 3, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  19.     (4, 'nodejs是什么?', 2, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  20.     (5, 'css是什么?', 1, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  21.     (6, 'JavaScript是什么?', 0, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0);  

標(biāo)簽表如下:

  1. CREATE TABLE `t_label` ( 
  2.   `id` bigint(20) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(50) NOT NULL DEFAULT '' COMMENT '名稱'
  4.   `create_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '創(chuàng)建人'
  5.   `create_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時(shí)間'
  6.   `update_by` bigint(20) unsigned DEFAULT NULL COMMENT '更新人'
  7.   `update_date` datetime DEFAULT NULL COMMENT '更新時(shí)間'
  8.   `del_flag` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0:不刪除,1:刪除'
  9.   PRIMARY KEY (`id`) 
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
  11.  
  12. INSERT INTO `t_label` (`id`, `name`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`) 
  13. VALUES 
  14.     (1, 'java', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  15.     (2, 'php', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  16.     (3, '大前端', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  17.     (4, 'mybatis', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  18.     (5, 'python', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0), 
  19.     (6, '多線程', 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0);  

一、左連接(LEFT JOIN)

 

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
Java是什么? 5 1 java
PHP是什么? 4 2 php
前端是什么? 3 3 大前端
nodejs是什么? 2 NULL NULL
css是什么? 1 NULL NULL
JavaScript是什么? 1 NULL NULL

    

  1. SELECT  
  2.     tq.title, tq.answer_count, tl.id, tl.name 
  3. FROM  
  4.     t_qa tq LEFT JOIN t_label tl ON tq.label_id = tl.id  

二、右連接(RIGHT JOIN)

 

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
Java是什么? 5 1 java
PHP是什么? 4 2 php
前端是什么? 3 3 大前端
NULL NULL 4 mybatis
NULL NULL 5 python
NULL NULL 6 多線程

 

  1. SELECT  
  2.    tq.title, tq.answer_count, tl.id, tl.name 
  3. FROM  
  4.     t_qa tq RIGHT JOIN t_label tl ON tq.label_id = tl.id  

三、內(nèi)連接(INNER JOIN)

 

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
Java是什么? 5 1 java
PHP是什么? 4 2 php
前端是什么? 3 3 大前端

   

  1. SELECT  
  2.     tq.title, tq.answer_count, tl.id, tl.name 
  3. FROM  
  4.     t_qa tq INNER JOIN t_label tl ON tq.label_id = tl.id  

四、左獨(dú)有連接(LEFT JOIN)

 

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
nodejs是什么? 2 NULL NULL
css是什么? 1 NULL NULL
JavaScript是什么? 0 NULL NULL

    

  1. SELECT  
  2.     tq.title, tq.answer_count, tl.id, tl.name 
  3. FROM  
  4.     t_qa tq LEFT JOIN t_label tl ON tq.label_id = tl.id 
  5. WHERE 
  6.     tl.id IS NULL  

五、右獨(dú)有連接(RIGHT JOIN)

 

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
NULL NULL 4 mybatis
NULL NULL 5 python
NULL NULL 6 多線程

    

  1. SELECT  
  2.     tq.title, tq.answer_count, tl.id, tl.name 
  3. FROM  
  4.     t_qa tq RIGHT JOIN t_label tl ON tq.label_id = tl.id 
  5. WHERE 
  6.     tq.label_id IS NULL  

六、全連接(FULL JOIN)

 

由于MySQL不支持FULL OUTER JOIN,所以如果有全連接需求時(shí),可用表達(dá)式:full outer join = left outer join UNION right outer join來實(shí)現(xiàn)。

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
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 多線程

    

  1. 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 
  2. UNION 
  3. 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)

 

問題 回答個(gè)數(shù) 標(biāo)簽id 標(biāo)簽名稱
nodejs是什么? 2 NULL NULL
css是什么? 1 NULL NULL
JavaScript是什么? 0 NULL NULL
NULL NULL 4 mybatis
NULL NULL 5 python
NULL NULL 6 多線程

    

  1. 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 
  2. UNION 
  3. 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  
責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2010-10-15 10:02:01

Mysql表類型

2025-01-21 08:00:00

限流微服務(wù)算法

2022-05-10 08:08:01

find命令Linux

2020-01-14 08:00:00

.NET緩存編程語言

2017-06-14 16:44:15

JavaScript原型模式對(duì)象

2017-06-02 09:52:50

2010-08-31 10:57:36

2021-07-16 09:55:46

數(shù)據(jù)工具軟件

2013-01-07 10:14:06

JavaJava枚舉

2019-09-06 09:00:00

開發(fā)技能代碼

2020-01-14 11:09:36

CIO IT技術(shù)

2025-01-15 10:46:23

開發(fā)JavaScript集合

2010-06-08 09:49:45

UML元件

2011-03-14 10:46:03

2023-12-22 14:27:30

2019-10-29 06:30:31

告警疲勞網(wǎng)絡(luò)安全安全風(fēng)險(xiǎn)

2016-09-28 20:05:22

2011-02-22 16:09:53

Eclipse調(diào)試

2010-09-16 17:47:49

2022-07-01 08:00:44

異步編程FutureTask
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)