幾天前姐託我寫個小程序實現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: 只要其中一個表中存在匹配,就返回行
CREATE VIEW
[Current Product List]AS
SELECT
ProductID,ProductNameFROM
ProductsWHERE
Discontinued=No
我們希望找到 OrderPrice 值高於 OrderPrice 平均值的客戶。
我們使用如下 SQL 語句:
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
下面這個 "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 |
下面這個 "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 |
下面這個 "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 |
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products