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

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