程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL 多表銜接查詢完成語句

SQL 多表銜接查詢完成語句

編輯:MSSQL

SQL 多表銜接查詢完成語句。本站提示廣大學習愛好者:(SQL 多表銜接查詢完成語句)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL 多表銜接查詢完成語句正文


1.實際

只需兩個表的公共字段有婚配值,就將這兩個表中的記載組合起來。

小我懂得:以一個配合的字段求兩個表中相符請求的交集,並將每一個表相符請求的記載以配合的字段為牽引歸並起來。

語法

select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2

INNER JOIN 操作包括以下部門:

部門 解釋
table1, table2 要組合個中的記載的表的稱號。 field1,field2 要聯接的字段的稱號。假如它們不是數字,則這些字段的數據類型必需雷同,而且包括同類數據,然則,它們不用具有雷同的稱號。 compopr
任何干系比擬運算符:“=”、“<”、“>”、“<=”、“>=”或許“<>”。     

解釋

可以在任何 FROM 子句中應用 INNER JOIN 操作。這是最經常使用的聯接類型。只需兩個表的公共字段上存在相婚配的值,Inner 聯接就會組合這些表中的記載。

可以將 INNER JOIN 用於 Departments 及 Employees 表,以選擇出每一個部分的一切雇員。而要選擇一切部門(即便某些部分中並沒有被分派雇員)或許一切雇員(即便某些雇員沒有分派就任何部分),則可以經由過程 LEFT JOIN 或許 RIGHT JOIN 操作來創立內部聯接。

假如試圖聯接包括備注或 OLE 對象數據的字段,將產生毛病。

可以聯接任何兩個類似類型的數字字段。例如,可以聯接主動編號和長整型字段,由於它們均是類似類型。但是,不克不及聯接單精度型和雙精度型類型字段。

下例展現了若何經由過程 CategoryID 字段聯接 Categories 和 Products 表:

SELECT CategoryName, ProductName

FROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID;

在後面的示例中,CategoryID 是被聯接字段,然則它不包括在查詢輸入中,由於它不包括在 SELECT 語句中。若要包括被聯接字段,請在 SELECT 語句中包括該字段名,在本例中是指 Categories.CategoryID。

也能夠在 JOIN 語句中鏈接多個 ON 子句,請應用以下語法:

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2 OR
ON table1.field3 compopr table2.field3;

也能夠經由過程以下語法嵌套 JOIN 語句:

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 當中,然則 INNER JOIN 不克不及嵌套於 LEFT JOIN 或 RIGHT JOIN 當中。


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


試驗以下:
1.left join

sql語句以下:
select * from A
left join B
on A.aID = B.bID

成果以下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
5                   a20050115                NULL              NULL
(所影響的行數為 5 行)

成果解釋:
               left join是以A表的記載為基本的,A可以算作左表,B可以算作右表,left join是以左表為准的.
換句話說,左表(A)的記載將會全體表現出來,而右表(B)只會顯示相符搜刮前提的記載(例子中為: A.aID = B.bID).
B表記載缺乏的處所均為NULL.

2.right join
sql語句以下:
select * from A
right join B
on A.aID = B.bID
成果以下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
NULL           NULL                          8                     2006032408
(所影響的行數為 5 行)
成果解釋:
        細心不雅察一下,就會發明,和left join的成果恰好相反,此次是以右表(B)為基本的,A表缺乏的處所用NULL填充.


3.inner join
sql語句以下:
select * from A
innerjoin B
on A.aID = B.bID

成果以下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404

成果解釋:
        很顯著,這裡只顯示出了 A.aID = B.bID的記載.這解釋inner join其實不以誰為基本,它只顯示相符前提的記載.   還有就是inner join 可以聯合where語句來應用 如:    select * from A innerjoin B on A.aID = B.bID where b.bname='2006032401' 如許的話 就只會放回一條數據了

小我總結:將多張表裝置以上三種規矩銜接成一張表

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