SQL WHERE筛选表中的行记录
在本教程中,您将学习如何使用SQL WHERE
子句根据指定的条件筛选表中的行记录。
1. SQL WHERE子句简介
要从表中选择某些行,请在SELECT
语句中使用WHERE
子句。 以下说明了SELECT
语句中WHERE
子句的语法:
SELECT
column1, column2, ...
FROM
table
WHERE
condition;
WHERE
子句紧跟在FROM
子句之后出现。 WHERE
子句包含一个或多个逻辑表达式,用于计算表中的每一行。 如果条件计算为true
,则满足条件的行记录将包含在结果集中; 否则,它将被排除在外。
请注意,SQL具有三值逻辑,即TRUE
,FALSE
和UNKNOWN
。 这意味着如果某行导致条件计算为FALSE
或NULL
,则不会返回该行。
请注意,WHERE
子句后面的逻辑表达式也称为谓词。 可以使用各种运算符来形成WHERE
子句中使用的行选择条件。更多教程请访问http://www.manongzj.com
下表显示了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
语句外,还可以在UPDATE或DELETE语句中使用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
但是,如果查询值是:ZHang
或zhang
,则不会返回任何行记录。
带有日期示例的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年加入公司的员工,可以通过以下几种方式实现:
以下语句说明了如何使用第一种方式:
SELECT
employee_id, first_name, last_name, hire_date
FROM
employees
WHERE
YEAR (hire_date) = 1999
ORDER BY
hire_date DESC;
执行上面示例代码,得到以下结果 -
在本教程中,我们向您展示了如何使用SQL WHERE
子句根据指定的条件过滤数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)