几天前姐托我写个小程序实现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