SQL 子句

SQL 子句

  • SQL子句帮助我们从表中检索一组或一批记录。
  • SQL子句帮助我们指定对表的列或记录的条件。

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

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

让我们逐个查看每个子句及其示例。我们将使用MySQL数据库来编写示例查询。

1. WHERE子句

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

带有SELECT查询的WHERE子句

星号符号与WHERE子句一起在SELECT查询中使用,以检索表中每条记录的所有列值。

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

SELECT * FROM TABLENAME WHERE CONDITION;

如果根据需求,我们只想检索特定的列,则使用下面的语法:

SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLENAME WHERE CONDITION;

考虑具有以下数据的员工表:

E_ID Name Salary City Designation Date_of_Joining Age
1 Sakshi Kumari 50000 Mumbai Project Manager 2021-06-20 24
2 Tejaswini Naik 75000 Delhi System Engineer 2019-12-24 23
3 Anuja Sharma 40000 Jaipur Manager 2021-08-15 26
4 Anushka Tripathi 90000 Mumbai Software Tester 2021-06-13 24
5 Rucha Jagtap 45000 Bangalore Project Manager 2020-08-09 23
6 Rutuja Deshmukh 60000 Bangalore Manager 2019-07-17 26
7 Swara Baviskar 55000 Jaipur System Engineer 2021-10-10 24
8 Sana Sheik 45000 Pune Software Engineer 2020-09-10 26
9 Swati Kumari 50000 Pune Software Tester 2021-01-01 25
10 Mayuri Patel 60000 Mumbai Project Manager 2020-10-02 24
11 Simran Khanna 45500 Kolhapur HR 2019-01-02 26
12 Shivani Wagh 50500 Delhi Software Developer 2016-09-10 25
13 Kiran Maheshwari 50000 Nashik HR 2013-12-12 23
14 Tejal Jain 40000 Delhi Project Manager 2017-11-10 25
15 Mohini Shah 38000 Pune Software Developer 2019-03-05 20

示例1:

编写一个查询以检索所有员工工资大于50000的记录。

查询:

mysql> SELECT * FROM employees WHERE Salary > 50000;

上述查询将显示所有那些员工工资大于50000的记录。根据条件,低于50000工资的记录将不会被显示。

您将会得到以下输出:

SQL 子句

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

示例2:

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

查询:

mysql> UPDATE employees SET Name = "Harshada Sharma" WHERE City = "Jaipur";

SQL 子句

上述查询将会将员工的名字更新为“Harshada Sharma”,当员工所在的城市是Jaipur时。

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

mysql> SELECT * FROM employees;

SQL 子句

只有一个员工表中的记录,该记录的城市为’Jaipur’。该记录的ID为3,满足给定条件。根据给定条件,员工ID为3的员工姓名现在更改为’Harshada Sharma’。

示例3:

编写一个查询来删除员工加入日期为”2013-12-12″的记录。

查询:

mysql> DELETE FROM employees WHERE Date_of_Joining = "2013-12-12";

SQL 子句

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

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

mysql> SELECT *FROM employees;

SQL 子句

在员工表中只有一条记录的员工入职日期为’2013-12-12’。该记录的ID为13,符合给定的条件。因此,根据给定的条件,员工ID为13的员工现已从员工表中删除。

2. GROUP BY子句

在结构化查询语言中,Group By子句用于将相似类型的记录按组进行排列。在结构化查询语言中,Group By子句与Select语句一起使用。Group By子句放置在SQL语句的where子句之后。Group By子句通常与聚合函数一起使用,例如max()、min()、avg()、sum()、count(),以根据一个或多个列分组结果。

Group By子句的语法:

SELECT * FROM TABLENAME GROUP BY COLUMNNAME; 

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

具有聚合函数的Group By子句的语法:

SELECT COLUMNNAME1, Aggregate_FUNCTION (COLUMNNAME) FROM TABLENAME GROUP BY COLUMNNAME;

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

考虑以下数据的员工表:

E_ID Name Salary City Designation Date_of_Joining Age
1 Sakshi Kumari 50000 Mumbai Project Manager 2021-06-20 24
2 Tejaswini Naik 75000 Delhi System Engineer 2019-12-24 23
3 Anuja Sharma 40000 Jaipur Manager 2021-08-15 26
4 Anushka Tripathi 90000 Mumbai Software Tester 2021-06-13 24
5 Rucha Jagtap 45000 Bangalore Project Manager 2020-08-09 23
6 Rutuja Deshmukh 60000 Bangalore Manager 2019-07-17 26
7 Swara Baviskar 55000 Jaipur System Engineer 2021-10-10 24
8 Sana Sheik 45000 Pune Software Engineer 2020-09-10 26
9 Swati Kumari 50000 Pune Software Tester 2021-01-01 25
10 Mayuri Patel 60000 Mumbai Project Manager 2020-10-02 24
11 Simran Khanna 45500 Kolhapur HR 2019-01-02 26
12 Shivani Wagh 50500 Delhi Software Developer 2016-09-10 25
13 Kiran Maheshwari 50000 Nashik HR 2013-12-12 23
14 Tejal Jain 40000 Delhi Project Manager 2017-11-10 25
15 Mohini Shah 38000 Pune Software Developer 2019-03-05 20

例子 1:

编写一个查询来显示员工表的所有记录,但根据年龄列对结果进行分组。

查询:

mysql> SELECT * FROM employees GROUP BY Age;

以上查询将按年龄列对员工表的所有记录进行分组显示。

您将得到以下输出:

SQL 子句

示例2:

编写一个查询,按职位和薪水分组显示员工表的所有记录。

查询:

mysql> SELECT * FROM employees GROUP BY Salary, Designation;

以上查询将显示所有员工表的记录,但按薪水和职位列进行分组。

您将获得以下输出:

SQL 子句

使用聚合函数的GROUP BY子句的示例

示例1:

编写一个查询,列出在特定职位上工作的员工数量,并按员工的职位分组显示结果。

查询:

mysql> SELECT COUNT (E_ID) AS Number_of_Employees, Designation FROM employees GROUP BY Designation;

以上查询将显示与相应的员工人数一起工作在该职位上的职位。所有这些结果将按职位列分组。

您将获得以下输出:

SQL 子句

根据预期输出,显示具有相应员工数量的职位。

示例2:

编写查询,按照员工的年龄分组,显示员工薪水的总和。

查询:

mysql> SELECT SUM (Salary) AS Salary, City FROM employees GROUP BY City;

上述查询将首先计算每个城市工作的薪资总和,然后根据年龄列将薪资总和和相应的薪资分组显示。

您将得到以下输出:

SQL 子句

TABLENAME GROUP BY COLUMNNAME HAVING CONDITION; 

考虑以下数据的员工表:

E_ID Name Salary City Designation Date_of_Joining Age
1 Sakshi Kumari 50000 Mumbai Project Manager 2021-06-20 24
2 Tejaswini Naik 75000 Delhi System Engineer 2019-12-24 23
3 Anuja Sharma 40000 Jaipur Manager 2021-08-15 26
4 Anushka Tripathi 90000 Mumbai Software Tester 2021-06-13 24
5 Rucha Jagtap 45000 Bangalore Project Manager 2020-08-09 23
6 Rutuja Deshmukh 60000 Bangalore Manager 2019-07-17 26
7 Swara Baviskar 55000 Jaipur System Engineer 2021-10-10 24
8 Sana Sheik 45000 Pune Software Engineer 2020-09-10 26
9 Swati Kumari 50000 Pune Software Tester 2021-01-01 25
10 Mayuri Patel 60000 Mumbai Project Manager 2020-10-02 24
11 Simran Khanna 45500 Kolhapur HR 2019-01-02 26
12 Shivani Wagh 50500 Delhi Software Developer 2016-09-10 25
13 Kiran Maheshwari 50000 Nashik HR 2013-12-12 23
14 Tejal Jain 40000 Delhi Project Manager 2017-11-10 25
15 Mohini Shah 38000 Pune Software Developer 2019-03-05 20

3. HAVING 子句:

当需要对表中的列设置条件时,可以使用SQL中的WHERE子句。但如果想在Group By子句中对列使用任何条件,则使用HAVING子句和Group By子句来表示列条件。

语法:

TABLENAME GROUP BY COLUMNNAME HAVING CONDITION;  

考虑包含以下数据的employees表:

E_ID Name Salary City Designation Date_of_Joining Age
1 Sakshi Kumari 50000 Mumbai Project Manager 2021-06-20 24
2 Tejaswini Naik 75000 Delhi System Engineer 2019-12-24 23
3 Anuja Sharma 40000 Jaipur Manager 2021-08-15 26
4 Anushka Tripathi 90000 Mumbai Software Tester 2021-06-13 24
5 Rucha Jagtap 45000 Bangalore Project Manager 2020-08-09 23
6 Rutuja Deshmukh 60000 Bangalore Manager 2019-07-17 26
7 Swara Baviskar 55000 Jaipur System Engineer 2021-10-10 24
8 Sana Sheik 45000 Pune Software Engineer 2020-09-10 26
9 Swati Kumari 50000 Pune Software Tester 2021-01-01 25
10 Mayuri Patel 60000 Mumbai Project Manager 2020-10-02 24
11 Simran Khanna 45500 Kolhapur HR 2019-01-02 26
12 Shivani Wagh 50500 Delhi Software Developer 2016-09-10 25
13 Kiran Maheshwari 50000 Nashik HR 2013-12-12 23
14 Tejal Jain 40000 Delhi Project Manager 2017-11-10 25
15 Mohini Shah 38000 Pune Software Developer 2019-03-05 20

示例 1:

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

查询:

mysql> SELECT Name, City, MAX (Salary) AS Salary FROM employees GROUP BY Designation HAVING MAX (Salary) > 40000;

您将获得以下输出:

SQL 子句

上述输出显示了一个员工的姓名、工资和所在城市,其中员工的工资大于40000,按照职称分组。(拥有相似职称的员工位于同一组,具有其他职称的员工单独分组)。

示例2:

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

查询:

mysql> SELECT Name, Designation, SUM (Salary) AS Salary FROM employees GROUP BY City HAVING SUM (Salary) > 45000;

您将获得以下输出:

SQL 子句

上述输出显示了员工的姓名、职位和工资。根据城市对薪水求和,薪水总和大于45000(相同城市的员工放在一组,不同城市的员工放在不同组中)。

4. ORDER BY子句

在SQL中,当我们想要对任何内容进行排序时,我们使用ORDER BY子句。SQL中的ORDER BY子句可以帮助我们根据表中的特定列对数据进行排序。这意味着我们执行ORDER BY子句的特定列中存储的所有数据都将被排序。相应的列值将按照我们在之前步骤中获得值的顺序显示。

众所周知,排序意味着按照升序或降序排序。同样地,ORDER BY子句根据我们的需求以升序或降序方式对数据进行排序。当与ORDER BY子句一起使用时,使用ASC关键字将按升序将数据排序,而使用DESC关键字将按降序将记录排序。

默认情况下,如果我们没有指定排序顺序,则SQL中的排序将使用ORDER BY子句按升序进行排序。

在进行排序示例之前,让我们首先看一下没有asc和desc关键字的ORDER BY子句的语法,这样我们就可以更容易地通过示例进行了解。

没有asc和desc关键字的ORDER BY子句的语法:

SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMNAME;

ORDER BY子句的语法用于按升序进行排序:

SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME ASC;

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

SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME DESC;

考虑我们有一个带有以下数据的员工表:

E_ID Name Salary City Designation Date_of_Joining Age
1 Sakshi Kumari 50000 Mumbai Project Manager 2021-06-20 24
2 Tejaswini Naik 75000 Delhi System Engineer 2019-12-24 23
3 Anuja Sharma 40000 Jaipur Manager 2021-08-15 26
4 Anushka Tripathi 90000 Mumbai Software Tester 2021-06-13 24
5 Rucha Jagtap 45000 Bangalore Project Manager 2020-08-09 23
6 Rutuja Deshmukh 60000 Bangalore Manager 2019-07-17 26
7 Swara Baviskar 55000 Jaipur System Engineer 2021-10-10 24
8 Sana Sheik 45000 Pune Software Engineer 2020-09-10 26
9 Swati Kumari 50000 Pune Software Tester 2021-01-01 25
10 Mayuri Patel 60000 Mumbai Project Manager 2020-10-02 24
11 Simran Khanna 45500 Kolhapur HR 2019-01-02 26
12 Shivani Wagh 50500 Delhi Software Developer 2016-09-10 25
13 Kiran Maheshwari 50000 Nashik HR 2013-12-12 23
14 Tejal Jain 40000 Delhi Project Manager 2017-11-10 25
15 Mohini Shah 38000 Pune Software Developer 2019-03-05 20

例子 1:

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

查询:

mysql> SELECT * FROM employees ORDER BY Designation;

在一个SELECT查询中,我们对列’Designation’应用了ORDER BY子句来对记录进行排序,但是我们没有在ORDER BY子句之后使用ASC关键字来按升序排序。所以,默认情况下,如果我们没有指定asc关键字,数据将按照升序排序。

你将获得以下输出:

SQL 子句

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

例2:

编写一个查询,按照员工的工资升序显示员工姓名和工资。 来自员工表。

查询:

mysql> SELECT Name, Salary FROM employees ORDER BY Salary ASC;

在SELECT查询中,使用ORDER BY子句对’Salary’列进行排序以排序记录。我们使用ASC关键字按升序对员工的薪水进行排序。

您将获得以下输出:

SQL 子句

所有记录按照员工的薪水升序显示。

示例3:

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

查询:

mysql> SELECT * FROM employees ORDER BY Name DESC;

在这里,我们使用ORDER BY子句对Name列应用SELECT查询来对数据进行排序。我们在ORDER BY子句后使用DESC关键字以按降序排列数据。

您将获得以下输出:

SQL 子句

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程