1. 程式人生 > >MySQL的JOIN用法

MySQL的JOIN用法

資料庫中的JOIN稱為連線,連線的主要作用是根據兩個或多個表中的列之間的關係,獲取存在於不同表中的資料。連線分為三類:內連線、外連線、全連線。另外還有CROSS JOIN(笛卡爾積),個人認為如果要理解MySQL中JOIN的各種連線,只需要理解笛卡爾積就足夠了。

1 笛卡爾積

笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示為X × Y,第一個物件是X的成員而第二個物件是Y的所有可能有序對的其中一個成員。

下面一張圖很好解釋了笛卡爾積:


1531909-5c50e0071e65ee0b.png 笛卡爾積

2 資料準備

  • 建立兩張表:t1t2
CREATE TABLE t1 (
    id INT PRIMARY KEY,
    person VARCHAR(50) NOT NULL
);
 
CREATE TABLE t2 (
    id VARCHAR(50) PRIMARY KEY,
    person VARCHAR(50) NOT NULL
);
  • 插入資料
INSERT INTO t1(id, person)
VALUES(1,'小明'),
      (2,'小紅'),
      (3,'小強');
 
INSERT INTO t2(id, person)
VALUES('A','小明'),
      ('B','小紅'),
      ('C','小剛');

t1t2中的資料如下:

1531909-dfd904f158589721.png 資料

3 CROSS JOIN

笛卡爾積就是將表1的每條記錄與表2中的每一條記錄拼成資料對,CROSS JOIN的SQL執行語句如下:

SELECT 
    t1.id, t2.id
FROM
    t1
CROSS JOIN t2;

執行結果如下:

1531909-4730577c069cc24c.png 執行結果
下圖解釋了表t1t2之間的笛卡爾積操作:
1531909-8358cde8b8928724.png 笛卡爾積

4 INNER JOIN

內連線就是求兩個表的交集,從笛卡爾積的角度講就是從笛卡爾積中選出滿足某條件的記錄,下面是一個內連線的例子:

SELECT 
    t1.id, t2.id
FROM
    t1
        INNER JOIN
    t2 ON t1.person = t2.person;

執行結果如下:

1531909-9d01a184ea3ea1a0.png
下圖解釋了表t1t2之間的內連線操作:
1531909-0ef98c923c3f1916.png 內連線

5 LEFT JOIN

左連線(LEFT JOIN)的含義就是求兩個表的交集外加左表剩下的資料。從笛卡爾積的角度講,就是先從笛卡爾積中挑出ON子句條件成立的記錄,然後加上左表中剩餘的記錄:

SELECT 
    t1.id, t2.id
FROM
    t1
        LEFT JOIN
    t2 ON t1.person = t2.person
1531909-be937232782ddd11.png 執行結果
下圖解釋了表t1t2之間的左連線操作:
1531909-9252ce5c638298e7.png 左連線

6 RIGHT JOIN

右連線RIGHT JOIN就是求兩個表的交集外加右表剩下的資料。再次從笛卡爾積的角度描述,右連線就是從笛卡爾積中挑出ON子句條件成立的記錄,然後加上右表中剩餘的記錄:

SELECT 
    t1.id, t2.id
FROM
    t1
        RIGHT JOIN
    t2 on t1.person = t2.person
1531909-608d6a5008207e7e.png 執行結果
下圖解釋了表t1t2之間的右連線操作:
1531909-f9a45c60cb688ae0.png 右連線

相關教程

相關推薦

Mysql的limit用法

blog images 顯示 log cor 用法 .cn alt nbsp limit可以用來顯示從m條記錄開始的n條記錄,具體語句如下: select * from table_test limit 0,10; #顯示從0開始的10條記錄(表中的第一條記錄下標為0

matlab中size函數用法

matlab 元素 size(A)函數是用來求矩陣的大小的。比如說一個A是一個3×4的二維矩陣:1、size(A) %直接顯示出A大小輸出:ans=3 42、s=size(A)%返回一個行向量s,s的第一個元素是矩陣的行數,第二個元素是矩陣的列數輸出:s=3 43、[r,c]=size(A)%將矩陣A

ng-repeat循環遍歷的用法

-i -a 打印 用法 ini in use bin 循環 bsp ng-repeat循環遍歷的用法 <script src="../angular-1.5.5/angular.min.js"></script></head>&l

select ipnut雙向數據綁定用法

ini 綁定 pan type tex mod name select ng-bind <script src="../angular-1.5.5/angular.min.js"></script></head><body n

sed用法——在指定行後面添加內容

ccie style cisc inux security txt 用法 color 添加內容 文檔內容如下: # cat 123.txt linuxciscohuaweinetworksystem 1. 使用sed命令在cisco行下面添加CCIE; # sed -i "

分針網——IT教育:jquery選擇器的用法

jQuery選擇器是jQuery庫的一大特色,用這些選擇器不但可以省去繁瑣的JavaScript 書寫方式,還可以節省時間和效率,正是有這些jQuery選擇器,才讓我們更容易的操作JavaScript的dom。 1. 基本選擇器 ·#id 根據

數字精確運算BigDecimal經常用法

round lin -s span hal pri mil size return import java.math.BigDecimal; public class Arith { /** * 因為Java的簡單類型不可以精確的對浮點數進行運算,這個工具類提

python argpare 模塊的簡單用法

python1、實例:#!/usr/bin/python #coding:utf-8 import argparse parser = argparse.ArgumentParser() parser.add_argument(‘-s‘,‘--string‘,dest=‘string‘,nargs=1

shape的基本用法

enc schema 顏色 顏色漸變 mas utf pad 半徑 start <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/

Sql語句——刪除表數據drop、truncate和delete的用法

行數據 const 數值 rain dml ble 可能 如果 sql語句 一、SQL中的語法 1、drop table 表名稱 eg: drop table dbo.Sys_Test 2、truncate tab

分針網——每日分享: jquery選擇器的用法

提交 -c sce fse edi scrip 偶數 http n) jQuery選擇器是jQuery庫的一大特色,用這些選擇器不但可以省去繁瑣的JavaScript 書寫方式,還可以節省時間和效率,正是有這些jQuery選擇器,才讓我們更容易的操作JavaScript的

JavaScript中this的用法

屬於 指向 cti 用法 func 生成 純粹 ava 構造函數 this的使用環境有以下幾種 1、純粹的函數調用 純粹的函數調用屬於函數的最常用的用法,屬於全局性調用。在全局函數中,this等於window。 2、作為對象方法的調用 當函數不是全局調用,而是作為某個對象

(轉)關於ES6的 模塊功能 Module 中export import的用法和註意之處

關於 tle from tool spa 尋找 import 其它 模塊 關於ES6的 模塊功能 Module 中export import的用法和註意之處 export default 的用法 export default命令用於指定模塊的默認輸出。顯然,一個模塊

AngularJS Filter(過濾器)用法

icon 使用 currency 器) afa 只需要 變量轉換 string ase 一、在視圖模板(View Template)中使用 在表達式中應用Filters (過濾器) 需要遵循格式如下: {{ expression | filter }}

Linux中wget用法

wordpress 用戶名 targe 是否 之前 get robot c斷點續傳 常用語法 Wget簡介:Linux系統中wget是一個下載文件的工具,它用在命令行下。對於Linux用戶是必不可少的工具,我們經常要下載一些軟件或從遠程服務器恢復備份到本地服務器。wget支

JavaScript中return的用法詳解

style 返回 www log tle blog 意思 charset fun 1、定義:return 從字面上的看就是返回,官方定義return語句將終止當前函數並返回當前函數的值,可以看下下面的示例代碼: <!DOCTYPE html><html l

從獲取函數形參談toString用法

fin spl 類型 javascrip ocs 如何獲取 clas type 正則 問題 如何獲取一個函數形參?我們都知道通過arguments可以獲取運行時的實參值,但是形參值怎麽獲取,如果我們對toString的用法了解,這個問題就好解答了 toString Func

SVN trunk(主線) branch(分支) tag(標記) 用法詳解和詳細操作步驟

trac load mar span 必須 最可 objc copy 右鍵 原文地址:http://blog.csdn.net/vbirdbest/article/details/51122637 使用場景: 假如你的項目(這裏指的是手機客戶端項目)的某個版本(例如1.0

Robot Framework自動化測試Selenium2Library庫詳細用法

www range fire 查看 int log world 定時 until 一、瀏覽器驅動 通過不同的瀏覽器執行腳本。 Open Browser Htpp://www.xxx.com chrome 瀏覽器對應的關鍵字: fi

JavaScript中字符串分割函數split用法實例

介紹 left order 正則表達式 如果 java today script 設計 這篇文章主要介紹了JavaScript中字符串分割函數split用法,實例分析了javascript中split函數操作字符串的技巧,非常具有實用價值,需要的朋友可以參考下 本文實例講