SQL 子句

2025年1月31日 | 阅读 5 分钟

以下是各种 SQL 子句


DBMS SQL Clauses

1. GROUP BY

  • SQL GROUP BY 语句用于将相同的数据分组。GROUP BY 语句与 SQL SELECT 语句一起使用。
  • 在 SELECT 语句中,GROUP BY 语句跟在 WHERE 子句之后,在 ORDER BY 子句之前。
  • GROUP BY 语句与聚合函数一起使用。

语法

示例表

PRODUCT_MAST

PRODUCTCOMPANYQTYRATE成本
Item1Com121020
Item2Com232575
Item3Com123060
Item4Com351050
Item5Com222040
Item6Cpm132575
Item7Com1530150
Item8Com131030
Item9Com222550
Item10Com3430120

示例

说明

执行上述查询后,结果将如下所示。在此,按公司对行进行分组,并计算每家公司下的项目数量并显示。

输出

Com1   5
Com2   3
Com3   2

2. HAVING

如果您想使用 WHERE 子句对分组数量添加限制,它会生成错误消息“ORA00934:因为此处不允许使用分组函数”。为此,我们使用了 Having 子句的概念。

  • HAVING 子句用于为组或聚合指定搜索条件。
  • Having 用于 GROUP BY 子句。如果您不使用 GROUP BY 子句,则可以将 HAVING 函数用作 WHERE 子句。
  • HAVING 条件只能引用涉及聚合函数的表达式或 SELECT 列表中的表达式,否则您将收到错误。

语法

说明

执行后,它将进一步限制行,如下所示。通过这种方式,我们可以使用 HAVING 子句过滤从您的组中返回的行组。HAVING 子句始终包含聚合 SQL 函数,并且只能由 group by 子句使用。

示例

输出

Com1   5
Com2   3

3. ORDER BY

  • ORDER BY 子句以升序或降序对结果集进行排序。
  • 默认情况下,它按升序对记录进行排序。DESC 关键字用于按降序对记录进行排序。
  • 您可以使用相同的 order by 子句指定多个升序和降序列。

语法

其中

ASC:用于按表达式对结果集进行升序排序。

DESC:按表达式对结果集进行降序排序。

示例:结果升序排序

CUSTOMER

CUSTOMER_ID姓名地址
12KathrinUS
23大卫Bangkok
34AlinaDubai
45John英国
56HarryUS

输入以下 SQL 语句

说明

执行后的输出显示如下。在此,NAME 列默认按升序排序。

输出

CUSTOMER_ID姓名地址
34AlinaDubai
23大卫Bangkok
56HarryUS
45John英国
12KathrinUS

示例:结果降序排序

使用上述 CUSTOMER 表

说明

执行后输出显示如下。在此,NAME 列按降序排序。

输出

CUSTOMER_ID姓名地址
12KathrinUS
45John英国
56HarryUS
23大卫Bangkok
34AlinaDubai

示例:结果同时按升序和降序排序

使用上述 CUSTOMER 表

说明

执行后输出显示如下。在此,NAME 列按降序排序。

输出

CUSTOMER_ID姓名地址
12KathrinUS
45John英国
56HarryUS
23大卫Bangkok
34AlinaDubai

示例:结果同时按升序和降序排序

使用上述 CUSTOMER 表

SELECT *

FROM CUSTOMER

ORDER BY NAME ASC, ADDRESS DESC;

说明

执行后输出如下。在此,NAME 列首先按升序排序,然后 ADDRESS 列按降序排序。

输出

CUSTOMER_ID姓名地址
34AlinaUS
23大卫英国
56HarryUS
45JohnBangkok
12KathrinDubai

示例:通过指定列位置而不是列名来同时按升序和降序对结果进行排序

您还可以选择在 order by 子句中指定列的位置而不是列名。

使用上述 CUSTOMER 表

SELECT *

FROM CUSTOMER

ORDER BY 2 ASC, 3 DESC;

说明

执行后输出显示如下。在此,第 2 列(即 NAME)首先按升序排序,然后第 3 列(即 ADDRESS)按降序排序。

输出

CUSTOMER_ID姓名地址
34AlinaUS
23大卫英国
56HarryUS
45JohnBangkok
12KathrinDubai

使用 ORDER BY 子句时应记住以下几点

  • 即使 ORDER BY 子句中的列未从表中选择,也可以指定这些列。
  • 如果记录是根据包含 NULL 值的列排序的,则在升序排序时 NULL 值将位于查询输出的末尾,在降序排序时 NULL 值将位于查询输出的顶部。
  • ORDER BY 子句不能包含超过 255 个列或表达式。
  • 您也可以在 ORDER BY 子句中使用列的别名。

SQL 子句选择题

1. 以下关于 ORDER BY 子句的陈述哪个是正确的?

  1. 它用于过滤行。
  2. 它用于对行进行分组。
  3. 它用于连接两个或多个表。
  4. 它用于将数据按升序或降序排序。

答案:d

解释:ORDER BY 子句用于按升序和降序对数据进行排序。


2. 找出错误

"SELECT PRODUCT, COUNT(*) FROM PRODUCT_MAST GROUP BY COMPANY";

  1. SELECT PRODUCT
  2. COUNT(*)
  3. GROUP BY COMPANY
  4. FROM PRODUCT_MAST

答案:c

解释:在 SQL 语句中,GROUP BY 子句必须与 SELECT 列表中的一个列一起使用,在上面的示例中,它必须是 GROUP BY PRODUCT。


3. 以下关于按降序排列数据的陈述哪个是正确的?

  1. SELECT * FROM CUSTOMER ORDER BY NAME;
  2. SELECT * FROM CUSTOMER ORDER BY NAME DESC;
  3. SELECT * FROM CUSTOMER ORDER BY NAME DESC
  4. SELECT * FROM CUSTOMER ORDER BY DESC;

答案:b

解释:以下语句对于按降序排列数据是正确的。

SELECT * FROM CUSTOMER ORDER BY NAME DESC;


4. 找出错误

SELECT COMPANY, COUNT(*) FROM PRODUCT_MAST GROUP BY COMPANY where COUNT (*) > 2;

  1. SELECT COMPANY
  2. FROM PRODUCT_MAST
  3. GROUP BY COMPANY
  4. where COUNT(*) > 2;

答案:d

解释:COUNT(*) 这样的聚合函数不应该在 WHERE 子句中使用,而应该使用 HAVING 子句。


5. 找出错误

SELECT COMPANY, COUNT (*) as total_employees FROM PRODUCT_MAST GROUP BY COMPANY Having total_employees > 2;

  1. COUNT(*) as total_employees
  2. FROM PRODUCT_MAST
  3. Having total_employees
  4. GROUP BY COMPANY

答案:c

解释:HAVING 子句应直接与聚合函数一起使用,而不是与别名一起使用。