单信息
ORDER BY 出库日期 DESC
ORDER BY子句后的列名通常是SELECT列表中的列名,而另一种比较简单的方法是用数字来代替列名,该数字的值是指定排序的列在SELECT列表中的位置,改值有“1”开始 ,从左到右一次加1。例如,在上述的查询语句中,将ORDER BY子句后的列名“出库日期”改为数字“4”,因为“出库日期”在SELECT列表中的位置是“4”。
执行该语句后,其查询结果与上述语句结果查询完全相同。
又如,从数据库“销售管理系统”中,以列“收入明细编号”、“收入日期”、“收入金额”和“盈利金额”的形式返回“收入明细信息”,并将查询结果先按“收入金额”的降序排序,再按“盈利金额”的升序排序。
SELECT 收入明细编号,收入日期,收入金额,盈利金额
FROM 收入明细
ORDER BY 收入金额 DESC,盈利金额 ASC
1.5使用GROUP BY子句
在使用SELECT语句进行数据查询时,如果需要按某一列数据的值进行分类,然后在分类的基础上再进行查询,可以使用GROUP BY子。GROUP BY子句用于归纳信息类型,以汇总相关数据。不管是否使用WHERE子句,GROUP BY子句都可以包括在SELECT语句中。GROUP BY子句的语法格式如下:
SELECT
FROM
GROUP BY
其中,可以分解为一下格式:
[{,...}
| {ROLLUP | CUBE} ( [ { , }...])
上述语句中的CUBE表示了除了返回由GROUP BY子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一条件列排序显示,再按第二个条件列排序显示,一次类推。统计行包括了GROUP BY子句指定的列的各种组合的数据统计。ROLLUP与CUBE不同的是,它只返回第一个分组条件指定的列的统计行。改变列的顺序会使返回的结果行数发生变化。
例如,从数据库“经销商”的“销售信息”表中,按照“销售人员编号”分组,查询每个销售人员的销售金额,并按销售金额的降序进行排序。
SELECT 销售人员编号,SUM(金额) AS 销售金额
FROM 销售信息
GROUP BY 销售人员编号
ORDER BY 2 DESC
在包括GROUP BY子句的SELECT语句中仍然可以使用WHERE子句。例如,假如在上个例子中,若只有列“金额”大于100时才可以加入“销售金额”中,则可以使用下列语句来实现:
SELECT 销售人员编号,SUM(金额) AS 销售金额
FROM 销售信息
WHERE 金额 > 100
GROUP BY 销售人员编号
ORDER BY 2 DESC
前面的两个例子中,GROUP BY子句都指定了一列,但是也可以根据需要指定其他的列,这样句可以创建在主键范围内分组数据的子组。例如,从数据库“珠宝销售系统”的“销售明细信息”表中,按照“明细编号”和“单价”分组,查询销售的“单价”及“总利润”,并按照“明细编号”的升序排序。
SELECT 明细编号,单价,SUM(利润) AS 总利润
FROM 销售明细信息
GROUP BY 明细编号,单价
ORDER BY 明细编号
在GROUP BY子句的语法中曾经简单介绍过运算符ROLLUP和CUBE。这两个运算符在功能上相似,当把他们添加到GROUP BY子句时,它们都将在查询结果中返回附加摘要值。
例如,下列SELECT语句中,GROUP BY子句将ROLLUP运算符应用于列“明细编号”和“单价”:
SELECT 明细编号,单价,SUM(利润) AS 总利润
FROM 销售明细信息
GROUP BY 明细编号,单价 WITH ROLLUP
当执行上述语句后,在查询结果中对于“明细编号”列中的每个值都增加了一行。三个附加行提供对应于“明细编号”列中的每个值的总数量。而最后增加的一行表示“明细编号”列中所有值得总数量。
CUBE运算符返回的数据和ROLLUP运算符相同,但要比ROLLUP运算符返回的信息多。而在下面的SELECT语句中,仅仅是用运算符CUBE替换ROLLUP:
SELECT 明细编号,单价,SUM(利润) AS 总利润
FROM 销售明细信息
GROUP BY 明细编号,单价 WITH CUBE
可以看出,三个附加行添加到查询结果中, 每一行对应于“明细编号”列中的每个不同的值。和ROLLUP运算符不同,CUBE汇总了每个自组的值。
1.6使用HAVING子句
HAVING子句是指定组或聚合的搜索条件。HAVING子句通常与GROUP BY子句一起使用;在完成数据结果的查询和统计后,可以使用HAVING子句对分组的结果进行进一步的筛选;如果不使用GROUP BY子句,HAVING子句的功能与WHERE子句一样。HAVING子句的格式为: HAVING HAVING子句可以引用选择列表中,按照“明细编号”和“单价”分组,查询销售的“单价”及“总利润”,并要求在查询结果中只显示“总利润”大于150的信息。
SELECT 明细编号,单价,SUM(利润) AS 总利润
FROM 销售明细信息
GROUP BY 明细编号,单价
HAVING SUM(利润) > 150 如果HAVING子句中包含有多个条件,那么可以通过关键字AND、OR或NOT组合为HAVING子句的搜索条件。例如,在上个例子中,要求返回的结果为“单价”大于300或者“总利润”大于150的信息。
SELECT 明细编号,单价,SUM(利润) AS 总利润
FROM 销售明细信息
GROUP BY 明细编号,单价
HAVING 单价> 300 OR SUM(利润) > 150
关于数据库的查操作,未完待续......