溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中七種JOIN的SQL是怎樣的

發(fā)布時間:2021-11-29 11:00:30 來源:億速云 閱讀:138 作者:柒染 欄目:數據庫

這篇文章將為大家詳細講解有關MySQL中七種JOIN的SQL是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

準備數據

以一個簡易問答系統(tǒng)為例,包括問題表和問題所屬標簽,問題表如下:

CREATE TABLE `t_qa` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,   `title` varchar(200) NOT 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 '創(chuàng)建人',   `create_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時間',   `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是什么?', 5, 1, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0),     (2, 'PHP是什么?', 4, 2, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0),     (3, '前端是什么?', 3, 3, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0),     (4, 'nodejs是什么?', 2, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0),     (5, 'css是什么?', 1, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0),     (6, 'JavaScript是什么?', 0, 0, 0, '2017-08-24 17:43:53', 0, '2017-08-24 17:43:53', 0);

標簽表如下:

CREATE TABLE `t_label` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,   `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名稱',   `create_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '創(chuàng)建人',   `create_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時間',   `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是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI