SQL CLAUSES

2025年3月17日 | 阅读 10 分钟
  • SQL 子句有助于我们从表中检索一组记录。
  • SQL 子句有助于我们对表的列或记录指定条件。

结构化查询语言中提供的不同子句如下:

  1. WHERE 子句
  2. GROUP BY 子句
  3. HAVING 子句
  4. ORDER BY 子句

让我们逐一查看每个子句并举例说明。我们将使用 MySQL 数据库来编写示例中的查询。

1. WHERE 子句

SQL 中的 WHERE 子句与 SELECT 查询一起使用,SELECT 查询是数据操作语言命令之一。WHERE 子句可用于限制结果集中显示的行数,它通常有助于过滤记录。它仅返回满足 WHERE 子句特定条件的查询。WHERE 子句用于 SELECT、UPDATE、DELETE 语句等。

WHERE 子句与 SELECT 查询

星号 (*) 用于 SELECT 查询中的 WHERE 子句,以检索表中每条记录的所有列值。

带 SELECT 查询的 WHERE 子句语法,用于检索表中每条记录的所有列值

如果根据要求,我们只想检索选定的列,那么我们将使用以下语法

考虑具有以下数据的 employee 表

E_ID名称薪金城市指定Date_of_Joining年龄
1Sakshi Kumari50000孟买项目经理2021-06-2024
2Tejaswini Naik75000德里System Engineer2019-12-2423
3Anuja Sharma40000斋浦尔管理者2021-08-1526
4Anushka Tripathi90000孟买Software Tester2021-06-1324
5Rucha Jagtap45000班加罗尔项目经理2020-08-0923
6Rutuja Deshmukh60000班加罗尔管理者2019-07-1726
7Swara Baviskar55000斋浦尔System Engineer2021-10-1024
8Sana Sheik45000Pune软件工程师2020-09-1026
9Swati Kumari50000PuneSoftware Tester2021-01-0125
10Mayuri Patel60000孟买项目经理2020-10-0224
11Simran Khanna45500KolhapurHR2019-01-0226
12Shivani Wagh50500德里软件开发人员2016-09-1025
13Kiran Maheshwari50000NashikHR2013-12-1223
14Tejal Jain40000德里项目经理2017-11-1025
15Mohini Shah38000Pune软件开发人员2019-03-0520

示例 1

编写一个查询,检索所有员工的记录,其中员工的薪水大于 50000。

查询

上述查询将显示所有员工的记录,其中员工的薪水大于 50000。根据条件,低于 50000 的薪水将不会显示。

您将得到以下输出

SQL CLAUSES

根据预期输出,只显示员工薪水大于 50000 的记录。employee 表中有六条记录满足给定条件。

示例 2

编写一个查询来更新员工记录,并将更新后的姓名设置为 'Harshada Sharma',其中员工的城市名称为 Jaipur。

查询


SQL CLAUSES

上述查询会将员工姓名更新为“Harshada Sharma”,其中员工的城市是 Jaipur。

为了验证记录是否已更新,我们将运行一个 select 查询。


SQL CLAUSES

employee 表中只有一条记录,其中员工的城市是 'Jaipur'。该记录的 ID 是 3,满足给定条件。因此,根据给定条件,ID 为 3 的员工姓名现已更改为 'Harshada Sharma'。

示例 3

编写一个查询来删除员工记录,其中员工的加入日期是“2013-12-12”。

查询


SQL CLAUSES

上述查询将删除加入日期为“2013-12-12”的员工的详细信息。

为了验证上述查询的结果,我们将执行 select 查询。


SQL CLAUSES

employee 表中只有一条记录,其中员工的加入日期是 '2013-12-12'。该记录的 ID 是 13,满足给定条件。因此,根据给定条件,ID 为 13 的员工现已从 employee 表中删除。

2. GROUP BY 子句

Group By 子句用于在结构化查询语言中将相似的记录排列成组。结构化查询语言中的 Group By 子句与 Select Statement 一起使用。Group by 子句放在 SQL 语句的 where 子句之后。Group By 子句专门与聚合函数(即 max()、min()、avg()、sum()、count())一起使用,以根据一个或多个列对结果进行分组。

Group By 子句的语法

上述语法将从表中选择所有数据或记录,但它会根据查询中给出的列名将所有数据或记录按组排列。

带聚合函数的 Group By 子句的语法

让我们通过示例来理解 Group By 子句。

考虑具有以下数据的 employees 表

E_ID名称薪金城市指定Date_of_Joining年龄
1Sakshi Kumari50000孟买项目经理2021-06-2024
2Tejaswini Naik75000德里System Engineer2019-12-2423
3Anuja Sharma40000斋浦尔管理者2021-08-1526
4Anushka Tripathi90000孟买Software Tester2021-06-1324
5Rucha Jagtap45000班加罗尔项目经理2020-08-0923
6Rutuja Deshmukh60000班加罗尔管理者2019-07-1726
7Swara Baviskar55000斋浦尔System Engineer2021-10-1024
8Sana Sheik45000Pune软件工程师2020-09-1026
9Swati Kumari50000PuneSoftware Tester2021-01-0125
10Mayuri Patel60000孟买项目经理2020-10-0224
11Simran Khanna45500KolhapurHR2019-01-0226
12Shivani Wagh50500德里软件开发人员2016-09-1025
13Kiran Maheshwari50000NashikHR2013-12-1223
14Tejal Jain40000德里项目经理2017-11-1025
15Mohini Shah38000Pune软件开发人员2019-03-0520

示例 1

编写一个查询来显示 employees 表的所有记录,但按 age 列对结果进行分组。

查询

上述查询将显示 employees 表的所有记录,但按 age 列分组。

您将得到以下输出

SQL CLAUSES

示例 2

编写一个查询来显示 employees 表的所有记录,按 designation 和 salary 分组。

查询

上述查询将显示 employees 表的所有记录,但按 salary 和 designation 列分组。

您将得到以下输出

SQL CLAUSES

Group By 子句使用聚合函数的示例

示例 1

编写一个查询来列出在特定职位工作的员工数量,并按员工的职位对结果进行分组。

查询

上述查询将显示职位及其对应的员工数量。所有这些结果都将按 designation 列分组。

您将得到以下输出

SQL CLAUSES

根据预期输出,将显示带有相应员工计数的职位。

示例 2

编写一个查询来显示按城市划分的员工薪资总和,并按员工年龄分组。

查询

上述查询将首先计算每个城市工作的薪资总和,然后它将显示薪资总和及其相应的薪资,但按 age 列分组。

您将得到以下输出

SQL CLAUSES

根据预期输出,将显示员工薪资的总和,对应于员工所属的城市。如果两个员工属于同一城市,那么他们将被分在一组。

3. HAVING 子句

当我们需要对表的列设置条件时,我们在 SQL 中使用 WHERE 子句。但是,如果我们想对 Group By 子句中的列使用任何条件,那么我们将把 HAVING 子句与 Group By 子句一起用于列条件。

语法

考虑具有以下数据的 employees 表

E_ID名称薪金城市指定Date_of_Joining年龄
1Sakshi Kumari50000孟买项目经理2021-06-2024
2Tejaswini Naik75000德里System Engineer2019-12-2423
3Anuja Sharma40000斋浦尔管理者2021-08-1526
4Anushka Tripathi90000孟买Software Tester2021-06-1324
5Rucha Jagtap45000班加罗尔项目经理2020-08-0923
6Rutuja Deshmukh60000班加罗尔管理者2019-07-1726
7Swara Baviskar55000斋浦尔System Engineer2021-10-1024
8Sana Sheik45000Pune软件工程师2020-09-1026
9Swati Kumari50000PuneSoftware Tester2021-01-0125
10Mayuri Patel60000孟买项目经理2020-10-0224
11Simran Khanna45500KolhapurHR2019-01-0226
12Shivani Wagh50500德里软件开发人员2016-09-1025
13Kiran Maheshwari50000NashikHR2013-12-1223
14Tejal Jain40000德里项目经理2017-11-1025
15Mohini Shah38000Pune软件开发人员2019-03-0520

示例 1

编写一个查询来显示员工姓名、薪资和城市,其中员工的最大薪资大于 40000,并按职位对结果进行分组。

查询

您将得到以下输出

SQL CLAUSES

上述输出显示了员工的姓名、薪资和城市,其中员工薪资大于 40000,并按职位分组。(具有相似职位的员工被放在一组,而具有不同职位的员工被分开)。

示例 2

编写一个查询来显示员工姓名和职位,其中员工薪资的总和大于 45000,并按城市对结果进行分组。

查询

您将得到以下输出

SQL CLAUSES

上述输出显示了员工的姓名、职位和薪资。薪资总和大于 45000,并按城市分组。(具有相似城市的员工被放在一组,而具有不同城市的员工不相似的被分开)。

4. ORDER BY 子句

无论何时我们想在 SQL 中排序,我们都使用 ORDER BY 子句。SQL 中的 ORDER BY 子句将帮助我们根据表的特定列对数据进行排序。这意味着在 ORDER BY 子句上执行的所有特定列中的数据都将被排序。相应的列值将按我们在前一个步骤中获得值的顺序显示。

我们都知道,排序意味着升序或降序。同样,ORDER BY 子句根据我们的要求以升序或降序对数据进行排序。当与 ORDER by 子句一起使用 **ASC 关键字**时,数据将按升序排序,而 **DESC 关键字**将按降序排序记录。

默认情况下,如果未指定排序顺序,SQL 将使用 ORDER BY 子句以升序进行排序。

在继续使用 ORDER BY 子句对记录进行排序的示例之前,首先我们将查看语法,以便我们更容易地查看示例。

不带 asc 和 desc 关键字的 ORDER BY 子句语法

ORDER BY 子句按升序排序的语法

ORDER BY 子句按降序排序的语法

假设我们有一个具有以下数据的 employees 表

E_ID名称薪金城市指定Date_of_Joining年龄
1Sakshi Kumari50000孟买项目经理2021-06-2024
2Tejaswini Naik75000德里System Engineer2019-12-2423
3Anuja Sharma40000斋浦尔管理者2021-08-1526
4Anushka Tripathi90000孟买Software Tester2021-06-1324
5Rucha Jagtap45000班加罗尔项目经理2020-08-0923
6Rutuja Deshmukh60000班加罗尔管理者2019-07-1726
7Swara Baviskar55000斋浦尔System Engineer2021-10-1024
8Sana Sheik45000Pune软件工程师2020-09-1026
9Swati Kumari50000PuneSoftware Tester2021-01-0125
10Mayuri Patel60000孟买项目经理2020-10-0224
11Simran Khanna45500KolhapurHR2019-01-0226
12Shivani Wagh50500德里软件开发人员2016-09-1025
13Kiran Maheshwari50000NashikHR2013-12-1223
14Tejal Jain40000德里项目经理2017-11-1025
15Mohini Shah38000Pune软件开发人员2019-03-0520

示例 1

编写一个查询,按 employees 表中的员工职位升序对记录进行排序。

查询

在这里,在 SELECT 查询中,ORDER BY 子句应用于“Designation”列以对记录进行排序,但我们没有在 ORDER BY 子句后使用 ASC 关键字进行升序排序。因此,如果我们不指定 asc 关键字,数据将默认按升序排序。

您将得到以下输出

SQL CLAUSES

根据预期输出,记录按员工职位升序显示。

示例 2

编写一个查询,按 employees 表中的员工薪资升序显示员工姓名和薪资。

查询

在这里,在 SELECT 查询中,ORDER BY 子句应用于“Salary”列以对记录进行排序。我们已使用 ASC 关键字按升序对员工薪资进行排序。

您将得到以下输出

SQL CLAUSES

所有记录均按员工薪资升序显示。

示例 3

编写一个查询,按 employees 表中存储的员工姓名降序对数据进行排序。

查询

在这里,我们已将 ORDER BY 子句与应用于 Name 列的 SELECT 查询一起使用来对数据进行排序。我们在 ORDER BY 子句后使用了 DESC 关键字以降序对数据进行排序。

您将得到以下输出

SQL CLAUSES

所有记录均按员工姓名降序显示。