SQL語句學習雜談

     幾天前姐託我寫個小程序實現2個EXCEL表,表1中有字段A,B,C,D,表2中有A,B,C,D,E,表2中的A與表1中的A是相對應的,需要實現的是將表2中E對應表1實現update。

      我覺得可以用SQL語句實現。於是導入mysql。寫下如下SQL語句“select  a.A , a.B, a.C , a.D , b.E  from 表1 as  a  left  join 表2 as b on a.A=b.A " 這樣就實現了。如果是三個表的情況呢,可以如下寫“select  a.A , a.B, a.C , a.D , b.E ,c.F from 表1 as  a  left  join 表2 as b on a.A=b.A  left join 表3 as c on a.A= c.A  ”.到現在還沒完,因爲我需要的是一個Excel文件。所以我有根據查詢創建了一個表,如下“ create  table tablename  select  a.A , a.B, a.C , a.D , b.E ,c.F from 表1 as  a  left  join 表2 as b on a.A=b.A  left join 表3 as c on a.A= c.A  ”  OK ,搞定。

      可惜當我把這個表導出的時候又出現了問題,導出爲EXCEL的時候。導出的內容跟表裏的數據不一致。sign。我估計是Excel版本問題,至今還未解決。

      好了,藉着機會順便深入學習下SQL語言。

    一,  首先學習下SQL join,加如join是爲了SQL語句多表查詢時層次更加清晰。有如下幾種情況:

   

  • JOIN: 如果表中有至少一個匹配,則返回行
  • LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
  • RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
  • FULL JOIN: 只要其中一個表中存在匹配,就返回行
     順便說一下union的用法,union用於連接多個SQL查詢,同時要求這幾個查詢的字段數以及順序必須是一致的。

二, 視圖的創建和使用
    
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

三,SQL常用函數

1,AVG 函數返回數值列的平均值。NULL 值不包括在計算中  

我們希望找到 OrderPrice 值高於 OrderPrice 平均值的客戶。

我們使用如下 SQL 語句:

SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

2,COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入)

3,FIRST() 函數返回指定的字段中第一個記錄的值。

4,GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組

下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找每個客戶的總金額(總訂單)。

我們想要使用 GROUP BY 語句對客戶進行組合。

我們使用下列 SQL 語句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

結果集類似這樣:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

5,在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用,且having字句需置於group by 的後面(因爲sql語句中必須先過濾where中的內容再執行其他函數等,如果把合計函數放到where中就無法執行了,以上是我的理解)。

下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找訂單總金額少於 2000 的客戶。

我們使用如下 SQL 語句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

結果集類似:

Customer SUM(OrderPrice)
Carter 1700


6,UCASE 函數把字段的值轉換爲大寫。

7,LCASE 函數把字段的值轉換爲小寫。

8,MID 函數用於從文本字段中提取字符。

下面這個 "Persons" 表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

現在,我們希望從 "City" 列中提取前 3 個字符。

我們使用如下 SQL 語句:

SELECT MID(City,1,3) as SmallCity FROM Persons

結果集類似這樣:

SmallCity
Lon
New
Bei

9,LEN 函數返回文本字段中值的長度。

10,ROUND 函數用於把數值字段舍入爲指定的小數位數。

11,NOW 函數返回當前的日期和時間。

12,FORMAT 函數用於對字段的顯示進行格式化。
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章