在查詢裏結合(聯合)表

深刻理解SQL的四種鏈接-左外鏈接、右外鏈接、內鏈接、全鏈接_Mysql_腳本之家 html

SQL 使用鏈接_w3cschool sql

  • SQL鏈接類型

a、內鏈接(INNER JOIN):當兩個表中存在匹配時,才返回行( 返回具備where,on條件相的信息)內聯接使用比較運算符根據每一個表共有的列的值匹配兩個表中的行spa

b、外鏈接.net

    一、左鏈接(LEFT JOIN):返回左表中全部行,即便右表中沒有匹配的行code

    二、右鏈接(RIGHT JOIN):返回右表中的全部行,即便左表中沒有匹配的行htm

    三、全鏈接(FULL JOIN):只要某一個表存在匹配,就返回行get

c、笛卡爾鏈接(CARTESIAN JOIN):返回兩個或者更多的表中記錄集的笛卡爾積io

  • 內鏈接
  • 等值結合

a、結合table

    是把兩個或多個表組合在一塊兒來獲取數據file

b、結合條件的未知

    要結合的表列在 FROM 子句裏,而結合是在 WHERE 子句裏完成的。

  • 等值結合(內部結合)

利用通用字段結合兩個表,一般用主鍵

語法

SELECT TABLE1.CONLUMN1,
       TABLE2.CONLUMN2...
FROM TABLE1,
     TABLE2 [, TABLE3]
--表名. 做爲限定字段
WHERE TABLE1.CONLUMN_NAME = TABLE2.CONLUMN_NAME
[AND TABLE1.CONLUMN_NAME = TABLE3.CONLUMN_NAME]

案例1

SELECT EMPLOYEE_TBL.EMP_ID,
       EMPLOYEE_PAY_TBL.DATE_HIRE
FROM EMPLOYEE_TBL,
     EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_TBL.EMP_ID

 

 

案例2

select a.*,b.*
from a inner jion b
on a.id = b.parent_id

 

    結果

其實就是結合兩個a.id = parent_id同樣的數據

  • 能夠利用 INNER JOIN語法來提升可讀性

語法

SELECT TABLE1.COLUMN1,TABLE2.CLOUMN2
FROM TABLE1
/*
WHERE子句被結合操做符去掉
INNER JION後面是結合的表
ON 後面結合操做符
*/

INNER JION TABLE2
ON TABLE1.COLUMN_NAME = TABLE.COLUMN_NAME

 

案例
SELECT EMPLOYEE_TBL.EMP_ID,
       EMPLOYEE_PAY_TBL.DATE_HIRE
FORM EMPLOYEE_TBL
INNER JION EMPLOYEE_PAY_TBL
ON EMPLOYYE_TBL.EMP_ID = EMPLOYEE_TBL,EMP_ID

 

  • 不等值結合

意思WHERE 條件不想等所有拿出來,根據同一個字段在兩個表裏值不想等來實現結合

語法

SELECT TABLE1.COLUNM,TABLE2.COLUMN
FROM TABLE1,TABLE2
WHERE TABLE1_COLUMNNAME <> TABLE2_COLUMNNAME

 

  • 外鏈接
  • 左鏈接(LEFT JOIN 或 LEFT OUTER JOIN)

左向外鏈接的結果集包括 LEFT OUTER 子句中指定的左表的全部行,而不單單是鏈接所匹配的行,若是左表中的某行在右表中沒有匹配行,則鏈接後的結果集中右表所選擇列表均爲空值

語法

SELECT table1.column1,table2.column2...
FROM table1
LEFT JOIN table2
ON  table1.common_field = table2.common_field;

 

 

 將兩個表用左鏈接

SELECT ID,NAME,AMOUNT,DATE
FORM CUSTOMERS
LEFT JION ORDERS
ON CUSTOMERS.ID = ORDERS.ID

 

輸出

案例2

 

表A記錄以下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B記錄以下: bID bName 1     2006032401  
2     2006032402  
3     2006032403  
4     2006032404  
8     2006032408
elect * from A  
left join B   
on A.aID = B.bID

結果

  • 右鏈接( RIGHT JOIN或 RIGHT OUTER JOIN)

 右向外鏈接是左向外鏈接的反向鏈接,將返回右表的全部行,若是右表的某行在座標中沒有匹配行,則將左表返回空值

語法

SELECT table1.column,table2.column...
FROM table1
RIGHT JION table2
ON table1.common_field = table2.common_field

 

  • 全鏈接(FULL JOIN 或 FULL OUTER JOIN)

完整外部鏈接返回左表和右表中的全部行,當某行在另外一個表中沒有匹配時,則另外一個表的選擇列表列包含空值,若是表之間有匹配行,則整個結果行包含基表的數據值

語法

SELECT table1.column1,table2.column2...
FROM tabel1
FULL JOIN table2
ON table1.common_field = table2.common_field

注:

MySQL中不支持該種方法,那麼使用UNION ALL子句將左鏈接和右連接結果組合在一塊兒

語法

SELECT table1.column1,table2.column
FROM table1
LEFT JOIN table2
ON table1.common_filed = table2.common_filed

UNION ALL

SELECT table1.column1,table2.column
FROM table1
RIGHT JOIN table2
ON table1.common_filed = table2.common_filed

 

  • 笛卡爾鏈接(交叉鏈接 CROSS JOIN)

返回左表中的全部行,左表中的每一行與右表中的全部行組合,交叉聯接也稱做笛卡爾積

語法

SELECT table1.column1,table2.column2...
FROM table1,table2 [,table3]  --隱式的鏈接方式,忽略了 cross jion 實際上是 table1 cross jion table2

案例

 將會輸出二者條數乘積的總條數

  • 自結合
  • 使用基表

若是須要從兩個表裏獲取數據,但它們又沒有公用字段,咱們就必須結合另外一個表,這個表與前面兩個表都有公用字段,這個表被稱爲基表,基表用於結合到具備公用字段的一個或多個表,或是結合沒用公用字段的多個表

案例

/*
ORDERS_TBL擁有CUST_ID,PROD_ID,經過這個來創建聯繫
*/

SELECT C.CUST_NAMW,P.PROD_DESC
FROM CUSTOMER_TBL C,
     PRODUCTS_TBL P,
     ORDERS_TBL O
WHERE C.CUST_ID = O.CUST_ID
  AND P.PROD_ID = O.PROD_ID
相關文章
相關標籤/搜索