1. 程式人生 > >SQL SERVER幾種Join的區別

SQL SERVER幾種Join的區別

主要來介紹下Inner Join , Full Out Join , Cross Join , Left Join , Right Join的區別。

Inner Join:篩選兩邊都有的記錄
Full Out Join:兩邊都篩選出來,匹配能匹配的,不能匹配的用NULL列出
Cross Join:列出兩邊所有組合,也稱為笛卡爾集 A×B
Left Join:以左邊的表為主表,列出主表所有記錄,匹配能匹配的,不能匹配的用 NULL列出
Right Join:以右邊的表為主表,列出主表所有記錄,匹配能匹配的,不匹配的用NULL列出

下面來看程式碼:

建立測試表:

CREATE TABLE
CONSUMERS ( CONSUMER_ID INT NOT NULL, CONSUMER_NAME VARCHAR(10) NOT NULL ) CREATE TABLE ORDERS ( CONSUMER_ID INT NOT NULL, ORDER_ID VARCHAR(10) NOT NULL )

編測試資料

INSERT CONSUMERS VALUES ( 1, 'AA')
INSERT CONSUMERS values ( 2, 'BB')
INSERT CONSUMERS values ( 3, 'CC')

INSERT ORDERS VALUES ( 2, 'O100001'
) INSERT ORDERS VALUES ( 3, 'O100002') INSERT ORDERS VALUES ( 3, 'O100003') INSERT ORDERS VALUES ( 4, 'O100004')

測試

--Inner Join
--篩選兩邊都有的記錄
SELECT *
FROM ORDERS o INNER JOIN CONSUMERS c
ON o.CONSUMER_ID = c.CONSUMER_ID
--Full Out Join
--兩邊都篩選出來,匹配能匹配的,不能匹配的用NULL列出
SELECT *
FROM ORDERS o FULL OUTER JOIN CONSUMERS c
ON
o.CONSUMER_ID = c.CONSUMER_ID
--Cross Join
--列出兩邊所有組合,即笛卡爾集A×B
SELECT *
FROM ORDERS o CROSS JOIN CONSUMERS c
--Left Join
--以左邊的表為主表,列出主表所有記錄,匹配能匹配的,不能匹配的用NULL列出
SELECT * 
FROM CONSUMERS c left join ORDERS o
on c .CONSUMER_ID = o .CONSUMER_ID
--Right Join
--以右邊的表為主表,列出主表所有記錄,匹配能匹配的,不能匹配的用NULL列出
SELECT * 
FROM CONSUMERS c RIGHT JOIN ORDERS o
on c .CONSUMER_ID = o .CONSUMER_ID

<完>