基本語法介紹(一)

在說明基本語法之前

先要了解一下語法的執行順序

MSDN裡面有說明到這一段:擷取如下

SELECT 陳述式的邏輯處理順序
下列步驟顯示 SELECT 陳述式的邏輯處理順序或繫結順序。 此順序會決定在某個步驟中定義的物件提供給後續步驟之子句使用的時間。 例如,如果查詢處理器可繫結至 (存取) FROM 子句中定義的資料表或檢視表,這些物件及其資料行就會提供給所有後續步驟使用。 反之,因為 SELECT 子句是步驟 8,所以前面的子句無法參考該子句中定義的任何資料行別名或衍生資料行。 不過,ORDER BY 子句等後續子句都可以參考它們。 請注意,陳述式的實際執行方式由查詢處理器決定,其順序可能與此清單不同。

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE 或 WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. 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有分成幾種

   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  

   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
(未完待續...........)


  





留言