SQL Where子句

在本教程中,您将学习如何使用SQL WHERE子句根据指定的条件筛选表中的行记录。

1. SQL WHERE子句简介

要从表中选择某些行,请在SELECT语句中使用WHERE子句。 以下说明了SELECT语句中WHERE子句的语法:

SELECT 
    column1, column2, ...
FROM
    table
WHERE
    condition;

WHERE子句紧跟在FROM子句之后出现。 WHERE子句包含一个或多个逻辑表达式,用于计算表中的每一行。 如果条件计算为true,则满足条件的行记录将包含在结果集中; 否则,它将被排除在外。

请注意,SQL具有三值逻辑,即TRUEFALSEUNKNOWN。 这意味着如果某行导致条件计算为FALSENULL,则不会返回该行。

请注意,WHERE子句后面的逻辑表达式也称为谓词。 可以使用各种运算符来形成WHERE子句中使用的行选择条件。

下表显示了SQL比较运算符

编号 运算符 含义
1 = 等于
2 <>!= 不等于
3 < 小于
4 > 大于
5 <= 小于或等于
6 >= 大于或等于

要形成一个简单的表达式,可以使用上面的一个运算符和两个操作数,这两个操作数可以是一侧的列名,另一侧是文字值,例如:

salary > 1000

表示:“工资是否大于1000?”。或者可以在运算符的两侧使用列名称,例如:

min_salary < max_salary

这个表达式提出了另一个问题:“最低工资是否低于最高薪水?”。
在表达式中使用的文字值可以是数字,字符,日期和时间,具体取决于使用的格式:

  • 数字:使用可以是整数或小数的数字而不使用任何格式,例如:100,200.5
  • 字符:使用由单引号或双引号括起的字符,例如:'100''John Dan'
  • 日期:使用数据库存储的格式。 它取决于数据库系统,例如,MySQL使用'yyyy-mm-dd'格式来存储日期数据。
  • 时间:使用数据库系统用于存储时间的格式。 例如,MySQL使用'HH:MM:SS'来存储时间数据。

SELECT语句外,还可以在UPDATEDELETE语句中使用WHERE子句指定要更新或删除的行。

2. SQL WHERE示例

我们将使用employees表来演示如何使用WHERE子句从表中选择数据。

mysql> desc employees;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name    | varchar(20)  | YES  |     | NULL    |                |
| last_name     | varchar(25)  | NO   |     | NULL    |                |
| email         | varchar(100) | NO   |     | NULL    |                |
| phone_number  | varchar(20)  | YES  |     | NULL    |                |
| hire_date     | date         | NO   |     | NULL    |                |
| job_id        | int(11)      | NO   | MUL | NULL    |                |
| salary        | decimal(8,2) | NO   |     | NULL    |                |
| manager_id    | int(11)      | YES  | MUL | NULL    |                |
| department_id | int(11)      | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set

带有数字比较示例的SQL WHERE子句

以下查询查找薪水大于14000的员工,并根据薪水按降序对结果集进行排序。

SELECT
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary > 14000
ORDER BY
    salary DESC;

执行上面示例代码,得到以下结果 -

以下查询查找在部门ID为5中工作的所有员工。

SELECT
    employee_id, first_name, last_name, department_id
FROM
    employees
WHERE
    department_id = 5
ORDER BY
    first_name;

执行上面示例代码,得到以下结果 -

带有字符示例的SQL WHERE子句

SQL不区分大小写。 但是,当涉及比较中的值时,它区分大小写。 例如,以下查询查找姓氏(last_name)为Zhang的员工。

SELECT
    employee_id, first_name, last_name
FROM
    employees
WHERE
    last_name = 'Zhang';

执行上面示例代码,得到以下结果 -

mysql> SELECT
    employee_id, first_name, last_name
FROM
    employees
WHERE
    last_name = 'Zhang';
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         116 | Shelli     | Zhang     |
|         117 | Sigal      | Zhang     |
|         118 | Guy        | Zhang     |
|         119 | Karen      | Zhang     |
+-------------+------------+-----------+
4 rows in set

但是,如果查询值是:ZHangzhang,则不会返回任何行记录。

带有日期示例的SQL WHERE子句

要获得1999年1月1日之后加入公司的所有员工,请使用以下查询:

SELECT
    employee_id, first_name, last_name, hire_date
FROM
    employees
WHERE
    hire_date >= '1999-01-01'
ORDER BY
    hire_date DESC;

执行上面示例代码,得到以下结果 -

如果想查询1999年加入公司的员工,可以通过以下几种方式实现:

  • 使用YEAR函数从hire_date列获取年份数据,并使用等于(=)运算符来形成表达式。
  • 使用AND运算符使用两个表达式。
  • 使用BETWEEN运算符。

以下语句说明了如何使用第一种方式:

SELECT
    employee_id, first_name, last_name, hire_date
FROM
    employees
WHERE
    YEAR (hire_date) = 1999
ORDER BY
    hire_date DESC;

执行上面示例代码,得到以下结果 -

在本教程中,我们向您展示了如何使用SQL WHERE子句根据指定的条件过滤数据。


猿狮妹
2022-09-22
SQLWhere 子句 在线教程
热门教程
1 SQL Max()函数 在本教程中,您将学习如何使用SQL Max函数查找组中的最大值。1. SQL MAX函数简介SQL提供MAX()函数,用于在一组值中查找最大值。 以下是MAX函数的语法。MAX(expression)MAX函数忽略NULL值。与SUM,COUNT和AVG函数不同,DISTINCT选项不适用于MAX函数。2. SQL MAX函数示例...
2 SQL复制表 如果要将SQL表复制到同一数据库中的另一个表中,可以使用select语句。从一个表复制到另一个表的语法如下:SELECT * INTO FROM 例如,可以使用以下语句将hr_employee表的记录复制到employee表中。SELECT * INTO employee FROM hr_employee;注意:SELECT INTO与INSERT INTO语句完全不同...
3 SQL教程 SQL是一种数据库计算机语言,用于检索和管理关系数据库中的数据。 SQL代表结构化查询语言(英文:*Structured Query Language*),SQL(结构化查询语言)用于对存储在数据库中的记录执行操作,例如:更新记录,删除记录,创建和修改表,视图等。
4 SQL Count()函数 本教程将向您展示如何使用SQL COUNT函数来获取组中的项目数。1. SQL COUNT函数简介SQL COUNT函数是一个聚合函数,它返回符合条件行数。 可以使用SELECT语句中的COUNT函数来获取员工数量,每个部门的员工数量,指定工作岗位的员工数量等。以下是SQL COUNT函数的语法:COUNTC ([ALL | DISTINCT] expression);COUNT函数的结果取决于传递给它的参数。默认情况下,COUNT函数使用ALL关键字,无论是否...
5 SQL All运算符 在本教程中,您将了解SQL ALL运算符以及如何使用它来将值与一组值进行比较。1. SQL ALL运算符简介SQL ALL运算符是一个逻辑运算符,它将单个值与子查询返回的单列值集进行比较。以下是SQL ALL运算符的语法:WHERE column_name comparison_operator ALL (subquery)SQL ALL运算符必须以比较运算符开头,例如:>,>=,<,<=,<>,=,后跟子查询。 某些数据库系统(...
6 SQL自连接 本教程将向您展示如何使用SQL自连接技术将表连接到自身。1. SQL自连接简介有时,将表连接到自身是很有用的。 这种类型的连接称为自连接。我们将一张表连接到自身来评估同一个表中其他行的行。 要执行自联接,我们使用内连接或左连接子句。因为同一个表在单个查询中出现两次,所以必须使用表别名。 以下语句说明了如何将表连接到自身。...
7 SQL聚合函数 在本教程中,您将了解SQL聚合函数,包括:AVG(),COUNT(),MIN(),MAX()和SUM()。SQL聚合函数计算一组值并返回单个值。 例如,平均函数(AVG)采用值列表并返回平均值。因为聚合函数对一组值进行操作,所以它通常与SELECT语句的GROUP BY子句一起使用。 GROUP BY子句将结果集划分为值分组,聚合函数为每个分组返回单个值。SELECT c1, aggregate_function(c2)FROM tableGROUP BY c1;...
8 SQL检查约束 在本教程中,将学习如何使用SQL CHECK约束来验证基于布尔表达式的列或一组列中的数据。1. SQL CHECK约束简介CHECK约束是SQL中的完整性约束,它允许您指定列或列集中的值必须满足布尔表达式。您可以在单个列或整个表上定义CHECK约束。 如果在单个列上定义CHECK约束,则CHECK约束仅检查此列的值。 但是,如果在表上定义CHECK约束,则会根据同一行的其他列中的值限制列中的值。...
9 SQL Intersect运算符 本教程解释了SQL INTERSECT运算符,并向演示如何应用它来获取两个或多个查询的交集。1. SQL INTERSECT运算符简介INTERSECT运算符是一个集合运算符,它从SELECT语句返回两个或多个结果集的不同行。假设有两个表记录:A(1,2)和B(2,3)。下图说明了A和B表的交集。...
10 SQL Order By排序 本教程将演示如何使用SQL ORDER BY子句根据指定的标准按升序或降序对结果集进行排序。1. SQL ORDER BY子句简介当使用SELECT语句查询表中的数据时,结果集中显示的行的顺序可能与您的预期不符。在某些情况下,结果集中显示的行按其物理存储在表中的顺序排列。 但是,如果查询优化器使用索引来处理查询,则行记录将显示为它们以索引键顺序存储。 因此,结果集中的行顺序未确定或不可预测。查询优化器是数据库系统中的内置软件组件,用于确定SQL语句查询请求数据的最有效方...
  • Copyright © 2021 猿狮院, All rights reserved.