SQL学习笔记:高级查询语句

发表于:2017-2-20 10:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Code Belief    来源:51Testing软件测试网采编

  注:这篇文章中将使用下表进行举例说明。
  表名:sales
  列名:id, name, amount
  1. 限制查询记录的条数
  SQL 中默认会将所有查询到的结果都一一列出。当我们不需要输出全部的查询结果时,例如只想输出其中的前n条记录,这时就可以使用 TOP 子句来实现。
  语法:
  SELECT TOP n <列名> FROM <表名> [...];
  示例:
  SELECT TOP 5 name FROM sales_table;
  除了指定具体的记录条数之外,还可以指定输出记录占总记录数的百分比。
  语法:
  SELECT TOP n PERCENT <列名> FROM <表名> [...];
  示例:
  SELECT TOP 20 PERCENT name, amount FROM sales_table;
  在SQLite中,不支持 TOP 子句。不过它的 LIMIT 子句同样提供了这一功能,与 OFFSET 搭配则更加强大。
  语法:
  SELECT <列名> FROM <表名> [...] LIMIT n;
  从 sales_table 中选择前10条记录
  SELECT * FROM sales_table LIMIT 10;
  从第5条记录(偏移量为4)开始,选择10条记录
  SELECT * FROM sales_table LIMIT 10 OFFSET 4;
  2. 使用聚集函数
  SQL提供了若干聚集函数(Aggregate Functions),进一步增强了检索功能。
  COUNT: 统计表中元组个数
  SUM : 计算某列值的总和
  AVG : 计算某列值的平均
  MAX : 求出某列的最大值
  MIN : 求出某列的最小值
  上述聚集函数都可作用于某一列,语法也基本一致。
  语法:
  函数名([DISTINCT|ALL] <列名>)
  此外,COUNT函数还可作用于所有列的查询结果
  语法:
  COUNT([DISTINCT|ALL] *)
  说明: 括号内的DISTINCT表示消除重复的记录后再进行计算,ALL则保留所有值。 如未指定该关键字,则默认为ALL。
  查询共有多少笔交易记录
  SELECT COUNT(ID) FROM sales_table;
  查询所有商品出售的总量
  SELECT SUM(amount) FROM sales_table;
  查询单价最高的商品记录
  SELECT MAX(price) FROM sales_table;
  查询所有交易记录涉及的商品种类数目(需消除重复记录)
  SELECT COUNT(DISTINCT name) FROM sales_table;
  3. 对查询结果分组
  在对数据进行统计时,有时并不是针对全表进行计算,而是针对某些具有相同值的记录进行计算。 在这种情况下,我们可以使用 GROUP BY 子句将查询结果按单列或多列的值进行分组,值相等的记录为一组。
  语法:
  GROUP BY <列名> [, <列名> ...]
  查询每件商品的销售总量
  SELECT SUM(amount) FROM sales_table GROUP BY name;
  该语句会将记录按商品名 name 进行分组,然后对具有相同商品名的记录计算amount字段的总和,最后得到每件商品的销售总量。
  按价格对查询结果进行分组
  SELECT * FROM sales_table GROUP BY price;
  4. 对分组进行过滤
  在前面的介绍中,我们使用 WHERE 子句对查询结果进行过滤。如果我们想对分组进行过滤,则可以使用 HAVING 子句。
  HAVING 子句的作用对象是组而不是单个记录。在 HAVING 子句中可以使用聚集函数,但再 WHERE 子句中则不能。 HAVING 通常和 GROUP BY 子句一起使用。
  统计交易记录大于2条的每件商品的销售总量
  SELECT SUM(amount) FROM sales_table GROUP BY name HAVING COUNT(*) > 2;
  该语句先将记录按商品名进行分组,再过滤出交易记录大于2条的商品,然后分别对这些商品统计销售总量。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号