在說明基本語法之前
先要了解一下語法的執行順序
MSDN裡面有說明到這一段:擷取如下
SELECT 陳述式的邏輯處理順序
left join
以左邊TABLE為主,若右邊有則顯示;以下SQL例子來說,若左邊order有10筆,則結果會是
A TABLE顯示10筆orderid,B Table若欄位customername有資料則顯示,沒資料則null
ex select A.orderid,B.customername from order as A left join customer as B
on A.customerid=B.customerid
right join
用法同上,只是改由右邊Table為主
4.Where 條件式
Where後面接的是條件,針對所要查詢的TABLE進行條件是塞選,例如
Where customerid='GOOGLE'
就是查詢客戶代號是google的所有資料
若有多個條件,則中間可用AND或OR等連接詞,例如
Where customerid='GOOGLE' AND City='TAIPEI'
MSDN裡面有說明到這一段:擷取如下
SELECT 陳述式的邏輯處理順序
下列步驟顯示 SELECT 陳述式的邏輯處理順序或繫結順序。 此順序會決定在某個步驟中定義的物件提供給後續步驟之子句使用的時間。 例如,如果查詢處理器可繫結至 (存取) FROM 子句中定義的資料表或檢視表,這些物件及其資料行就會提供給所有後續步驟使用。 反之,因為 SELECT 子句是步驟 8,所以前面的子句無法參考該子句中定義的任何資料行別名或衍生資料行。 不過,ORDER BY 子句等後續子句都可以參考它們。 請注意,陳述式的實際執行方式由查詢處理器決定,其順序可能與此清單不同。
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE 或 WITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
單就以上11點說明語法
1.FROM
字面上意義,"從哪來"的意思
後面接著資料表的名稱
EX FROM ORDER_DETAIL
表示資料從ORDER_DETAIL這個資料表取得來源資料
2.3 ON 和JOIN
這兩個通常都是一起的
ON的概念有點類似WHERE,後面要接條件式
ex select A.orderid,B.customername from order as A left join customer as B
on A.customerid=B.customerid
至於JOIN有分成幾種
ex select A.orderid,B.customername from order as A left join customer as B
on A.customerid=B.customerid
至於JOIN有分成幾種
1. 交叉聯結或稱笛卡兒乘積 (CROSS JOIN,即A × B,稱AB的積集)
2. 自然聯結 (INNER JOIN,即A ∩ B,稱AB的交集)
3. 左外聯結 (LEFT OUTER JOIN,即A)
4. 右外聯結 (RIGHT OUTER JOIN,即B)
5. 完全外聯結 (FULL OUTER JOIN,即A ∪ B,稱AB的聯集)
中間的outer,可寫可不寫。
常用的主要是inner join、left join、right join
inner join
意思就是左邊的TABLE和右邊的TABLE交集,兩邊資料有MAP到的才顯示,沒有就不顯示
ex select A.orderid,B.customername from order as A inner join customer as B
on A.customerid=B.customerid
2. 自然聯結 (INNER JOIN,即A ∩ B,稱AB的交集)
3. 左外聯結 (LEFT OUTER JOIN,即A)
4. 右外聯結 (RIGHT OUTER JOIN,即B)
5. 完全外聯結 (FULL OUTER JOIN,即A ∪ B,稱AB的聯集)
中間的outer,可寫可不寫。
常用的主要是inner join、left join、right join
inner join
意思就是左邊的TABLE和右邊的TABLE交集,兩邊資料有MAP到的才顯示,沒有就不顯示
ex select A.orderid,B.customername from order as A inner join customer as B
on A.customerid=B.customerid
left join
以左邊TABLE為主,若右邊有則顯示;以下SQL例子來說,若左邊order有10筆,則結果會是
A TABLE顯示10筆orderid,B Table若欄位customername有資料則顯示,沒資料則null
ex select A.orderid,B.customername from order as A left join customer as B
on A.customerid=B.customerid
right join
用法同上,只是改由右邊Table為主
4.Where 條件式
Where後面接的是條件,針對所要查詢的TABLE進行條件是塞選,例如
Where customerid='GOOGLE'
就是查詢客戶代號是google的所有資料
若有多個條件,則中間可用AND或OR等連接詞,例如
Where customerid='GOOGLE' AND City='TAIPEI'
代表查詢客戶代號是GOOGLE且城市要是TAIPEI的才會顯示出來。(若是用OR連接,代表條 件只要有一個符合都可顯示)
5.Group By分群功能
當查詢出來的資料有需要因某個欄位去分群、加總或其他運算,則可使用此分群功能。
如下SQL,查詢出產品的賣價加總
EX: select ProductID,SUM(UnitPrice) as price from dbo.[Order Details]
group by ProductID
6.WITH CUBE 或 WITH ROLLUP 分群小計功能
需搭配group by使用,接在GROUP BY 欄位後面 ,說明如下:
CUBE:顯示分群中每個組合的小計,以及分群總計和所有總計。
ROLLUP: 顯示分群的小計以及所有總計。
EX select OrderID,ProductID,SUM(UnitPrice) as price from dbo.[Order Details]
where OrderID in('10248','10297')
group by OrderID,ProductID with CUBE
EX: select OrderID,ProductID,SUM(UnitPrice) as price from dbo.[Order Details]
where OrderID in('10248','10297')
group by OrderID,ProductID with ROLLUP
(未完待續...........)
留言
張貼留言