當前位置:首頁 » 編程語言 » sqljoin順序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqljoin順序

發布時間: 2023-08-24 01:06:35

sql left join 的執行順序

SQL語句執行的時候是有一定順序的。理解這個順序對SQL的使用和學習有很大的幫助。

1.from   先選擇一個表,或者說源頭,構成一個結果集。

2.where 然後用where對結果集進行篩選。篩選出需要的信息形成新的結果集.

3.group by 對新的結果集分組.

4.having 篩選出想要的分組.

5.select 選擇列

6.order by 當所有的條件都弄完了。最後排序

我的理解是這樣,SQL語句中無論是否連接的其他表。 無論如何都要先形成一個結果集。後面的順序不變!

只不過使用連接時,形成結果集合的方式略有不同。這個和 Left Join的實現原理有關。

select a.name,b.name

from T_left a            //1

Left Join T_Right b   //3

ON  a.id = b.id         //2

使用Left Join 形成結果集的方式是這樣的。

.  首先對From子句中的前兩個表,執行笛卡爾積運算。運算結果 形成一個結果集合。

.  ON按條件,對上邊的結果集,進行篩選,形成新的結果集。

.  以左連接為例,如果T_left中存在未匹配到的行。那麼把T_left中的這幾行以外部行的形式加到上邊的結果集中形成新的結果集。

 如果存在多張表,重復1~3過程!

select * from A left join B on A.aid = B.bid right join C on A.aid =C.cid;

// 最終返回的是 C 表中的數據,

1.A left join B 返回A表數據,附帶B表中符合條件的數據 

2.A left join B 假設等於結果 AB 

3.AB right join C 返回C,附帶AB中符合條件的數據

㈡ SQL JOIN 的四種連接方式


SQL Join 共有四種連接方式:JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN。
原始的表 (用在例子中的):
Persons 表:
Id_P
LastName
FirstName
Address
City
1AdamsJohn
Oxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan Street
Beijing
Orders 表:
Id_O
OrderNo
Id_P

內連接(INNER JOIN)實例
現在,我們希望列出所有人的定購。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName
FirstName
OrderNo

INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 Persons 中的行在 Orders 中沒有匹配,就不會列出這些行。
注釋:INNER JOIN 與消神 JOIN 是相同的。
左連接(LEFT JOIN)實例
現在,我們希望列出所有的人,以及他們的定購 - 如果有的話。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName
FirstName
OrderNo
BushGeorge
LEFT JOIN 關鍵字會從左表 (Persons) 那裡返回所有的行,即使在右表 (Orders) 中沒有匹配的行。
注釋:在某些資料庫中, LEFT JOIN 稱為 LEFT OUTER JOIN。
右連接(RIGHT JOIN)實例
現在,我們希望列出所有的定單,以及定購它們的人 - 如果有的話。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName
FirstName
OrderNo

34764
RIGHT JOIN 關鍵字會從右表 (Orders) 那裡返回所有的行,即使在左表 (Persons) 中沒有匹配的行肆橋喚。
注釋:在某些資料庫中, RIGHT JOIN 稱為 RIGHT OUTER JOIN。
全連接(FULL JOIN)實例
現在,我們希望列出所有的人,以及他們的定單,以及所有的定單,以及定購它們的人。
您可以使用下面的 SELECT 語裂凱句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName
FirstName
OrderNo
BushGeorge
34764
FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裡返回所有的行。如果 Persons 中的行在表 Orders 中沒有匹配,或者如果 Orders 中的行在表 Persons 中沒有匹配,這些行同樣會列出。
注釋:在某些資料庫中, FULL JOIN 稱為 FULL OUTER JOIN。

㈢ sql join (以left join為例)的表的先後順序主要如何考慮

您好,SQL語句有join是因為把優化後的數據重新聯結完整,體現直觀數據表達的作用.(這樣講可能還是太抽象).
我們做數據優化的時候.一般要理清楚數據實體的關聯關系.
例如:E-R
所以先後順序的問題.
left
join的話.
第一張表就是主體表
後面的都是與這張表有關聯關系的表(一般是明細表,輔表)
把主體表與left
join
tablename的關聯欄位作為on條件
希望我的回答能幫助您理解.

㈣ SQL語句中表的先後順序由什麼決定

如果寫join 系統默認 的是 inner join 內連接,就是完全匹配的意思,這個就沒有先後順序,哪個寫前面都一樣, 如果是 left join 左連接 ,就是已前面一個表即 左邊的表為 基礎,左邊的數據會全部保留,如果右邊沒有匹配的則 對應欄位 補null right join 則相反

㈤ SQL常用的幾種連接(JOIN)小結

連接運算是8種關系運算中的一種。

五種JOIN方式:

1.INNER JOIN or JOIN2.OUTER JOIN
2.1LEFT OUTER JOIN or LEFT JOIN
2.2RIGHT OUTER JOIN or RIGHT JOIN
2.3FULL OUTER JOIN or FULL JOIN3.NATURAL JOIN4.CROSS JOIN5.SELF JOINPS:JOIN中的簡寫為語法糖,實際中寫出來方便讀一點而已12345678910

兩種連接條件:

1.Equi JOIN 1.1NATURAL 1.2USING(a,b) 1.3= ...2.Theta JOIN 2.1>= 2.2<= 2.3> ...PS:USING(...)指定需要哪些列相等。ON則可以指定任意的連接條件(=,>=,<=,!=,>,<...)123456789101112

JOIN or INNER JOIN

返回兩個表中同時滿足條件的元組對,不滿足的將被丟棄。

OUTER JOIN

LEFT OUTER JOIN

返回左表所有行以及右表滿足條件的行,左表有值右表無值填充為null

RIGHT OUTER JOIN

返回右表所有行以及左表滿足條件的行,右表有值左表無值填充為null

FULL OUTER JOIN

返回所有表的所有行,在滿足條件的行之外,左表滿足右表不滿足或者相反,均填充null

NATURAL JOIN

1、來自兩個關系的元組對在共同屬性上的值相同。(不限於一個共同屬性,也可以是多個共同屬性)
2、去掉重復的屬性(列)。
3、列出屬性的順序:先是共同屬性,然後是第一個關系的屬性,最後是第二個關系的屬性。

為了防止兩個表有多個共同屬性時natural join 會忽略部分需要的元組對,應使用join…using(…),以指定需要哪些列相等
join…using(…)連接只能局限在指定的屬性上

CROSS JOIN

返回笛卡兒積

SELF JOIN

相當於A JOIN A

最後放一張圖: