程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 解析:內聯,左外聯,右外聯,全連接,交叉連接的區別

解析:內聯,左外聯,右外聯,全連接,交叉連接的區別

編輯:關於MYSQL數據庫
    本篇文章是對內聯,左外聯,右外聯,全連接,交叉連接的區別進行了詳細的分析介紹,需要的朋友參考下  

    連接分為:內連接、外連接、交叉連接
    一、內連接——最常用
    定義:
    僅將兩個表中滿足連接條件的行組合起來作為結果集。
    在內連接中,只有在兩個表中匹配的行才能在結果集中出現
    關鍵詞:INNER JOIN
    格式:SELECT 列名表 FROM 表名1 [INNER] JOIN 表名2 ON或WHERE 條件表達式
    說明:
    (1)列名表中的列名可以出自後面的兩個表,但如果兩個表中有同名列,應在列名前標明出處,格式為:表名.列名
    (2)若連接的兩個表名字太長,可以為它們起個別名。 格式為:表名 AS 別名
    (3)INNER是默認方式,可以省略
    eg:
    select *
    from   t_institution i
    inner join t_teller t
    on i.inst_no = t.inst_no
    where i.inst_no = "5801"
    其中inner可以省略。
    等價於早期的連接語法
    select *
    from t_institution i, t_teller t
    where i.inst_no = t.inst_no
    and i.inst_no = "5801"

    二、外連接
    1、左(外)連接
    定義:在內連接的基礎上,還包含左表中所有不符合條件的數據行,並在其中的右表列填寫NULL
    關鍵字:LEFT JOIN
    eg:
    select *
    from   t_institution i
    left outer join t_teller t
    on i.inst_no = t.inst_no
    其中outer可以省略。
    注意:
    當 在內連接查詢中加入條件是,無論是將它加入到join子句,還是加入到where子句,其效果是完全一樣的,但對於外連接情況就不同了。當把條件加入到 join子句時,SQL Server、Informix會返回外連接表的全部行,然後使用指定的條件返回第二個表的行。如果將條件放到where子句 中,SQL Server將會首先進行連接操作,然後使用where子句對連接後的行進行篩選。下面的兩個查詢展示了條件放置位子對執行結果的影響:
    條件在join子句
    select *
    from   t_institution i
    left outer join t_teller t
    on i.inst_no = t.inst_no
    and i.inst_no = “5801”

    結果是:
    inst_no     inst_name             inst_no     teller_no   teller_name
    5801        天河區                5801        0001        tom
    5801        天河區                5801        0002        david
    5802        越秀區
    5803        白雲區

    條件在where子句
    select *
    from   t_institution i
    left outer join t_teller t
    on i.inst_no = t.inst_no
    where i.inst_no = “5801”

    結果是:
    inst_no     inst_name             inst_no     teller_no   teller_name
    5801           天河區                    5801          0001               tom
    5801           天河區                    5801          0002              david

    2、右(外)連接
    定義:
    在內連接的基礎上,還包含右表中所有不符合條件的數據行,並在其中的左表列填寫NULL
    關鍵字:RIGHT JOIN
    3、完全連接
    定義:
    在內連接的基礎上,還包含兩個表中所有不符合條件的數據行,並在其中的左表、和右表列填寫NULL
    關鍵字:FULL JOIN

    三、交叉連接
    定義:
    將兩個表的所有行進行組合,連接後的行數為兩個表的乘積數。(笛卡爾積)
    關鍵詞:CROSS JOIN
    格式:FROM 表名1 CROSS JOIN 表名2

    四, 自身連接
    自身連接是指同一個表自己與自己進行連接。這種一元連接通常用於從自反關系(也稱作遞歸關系)中抽取數據。例如人力資源數據庫中雇員與老板的關系。
    下面例子是在機構表中查找本機構和上級機構的信息。
    select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
    from t_institution i
    join t_institution s
    on i.superior_inst = s.inst_no

    結果是:
    superior_inst sup_inst_name         inst_no     inst_name
    800                             廣州市                5801        天河區
    800                             廣州市                5802        越秀區
    800                             廣州市                5803        白雲區

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved