本文主要详细讲解在 SQL 查询中如何运用 SELECT 语句的 WHERE 子句来精准地指定搜索条件,从而实现对数据的筛选和过滤。
WHERE子句操作符
在 SQL 中,WHERE 子句用于筛选满足特定条件的行。
以下是一些常见的操作符:
一、比较操作符
1. =(等于):用于判断两个值是否相等。
示例:
SELECT * FROM table_name WHERE column_name = value;
2. <> 或 !=(不等于):判断两个值不相等。
示例:
SELECT * FROM table_name WHERE column_name <> value;
3. <(小于):判断一个值是否小于另一个值。
示例:
SELECT * FROM table_name WHERE column_name < value;
4. >(大于):判断一个值是否大于另一个值。
示例:
SELECT * FROM table_name WHERE column_name > value;
5. <=(小于等于):判断一个值是否小于或等于另一个值。
示例:
SELECT * FROM table_name WHERE column_name <= value;
6. >=(大于等于):判断一个值是否大于或等于另一个值。
示例:
SELECT * FROM table_name WHERE column_name >= value;
二、逻辑操作符
1. AND:用于连接多个条件,只有当所有条件都为真时,结果才为真。
示例:
SELECT * FROM table_name WHERE column_name1 = value1 AND column_name2 = value2;
2. OR:连接多个条件,只要其中一个条件为真,结果就为真。
示例:
SELECT * FROM table_name WHERE column_name1 = value1 OR column_name2 = value2;
3. NOT:用于否定一个条件。
示例:
SELECT * FROM table_name WHERE NOT column_name = value;
三、范围操作符
1. BETWEEN... AND...:用于判断一个值是否在指定的范围内。
示例:
SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;
2. IN:用于判断一个值是否在一个指定的集合中。
示例:
SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);
四、模糊匹配操作符
1. LIKE:用于进行模糊匹配。 %代表零个或多个字符。
例如,
WHERE column_name LIKE '%value%
表示查找 `column_name` 列中包含 `value` 的值。
_代表一个字符。
例如,
WHERE column_name LIKE '_value'
表示查找 `column_name` 列中以 `value` 结尾且前面只有一个字符的值。
一、WHERE 基本使用
在 SELECT 语句里,数据是依据 WHERE 子句中设定的搜索条件来进行过滤的。
注意:WHERE 子句需在表名(即 FROM 子句所指定的表)之后!!!
SELECT 列名1,列名2
FROM 表名
WHERE 列名1 = 5.9;
例如,我们有一个名为“products”的表,其中包含“product_id”(产品编号)、“product_name”(产品名称)和“product_price”(价格)等列。如果我们想要查询价格为 88 的产品信息,可以使用如下 SQL 语句:
SELECT product_id, product_name
FROM products
WHERE product_price = 88;
需要特别注意的是,当同时使用 ORDER BY 和 WHERE 子句时,一定要让 ORDER BY 位于 WHERE 之后,否则会引发错误!!!
(遵循先过滤后排序的原则)
比如,我们想要先根据价格筛选出价格为 88的产品,然后再按照产品编号升序排列,正确的写法应该是:
SELECT product_id, product_name
FROM products
WHERE product_price = 88
ORDER BY product_id;
二、WHERE 子句操作符
(一)检查单个值
SELECT 列名1,列名2
FROM 表名
WHERE 列名1 < 10;
通过使用比较运算符,可以对列中的单个值进行筛选。
比如,我们还是以“products”表为例,如果想要查询价格小于 70 的产品信息,可以编写如下 SQL 语句:
SELECT product_id, product_name, product_price
FROM products
WHERE product_price < 70;
(二)不匹配检查
SELECT 列名1,列名2
FROM 表名
WHERE 列名1 <> 'abc123';
当我们需要查找列值不等于某个特定值的记录时,可以使用“<>”运算符。
假设“products”表中的“product_code”(产品代码)列,我们要查找产品代码不等于“abc123”的产品,需注意单引号的使用,正确的 SQL 语句如下:(有两个不等于都测试了一遍)
SELECT product_id, product_name
FROM products
WHERE product_code <> 'abc123';
SELECT product_id, product_name
FROM products
WHERE product_code != 'abc123';
原表,可以看到产品3的产品代码等于abc123
(三)范围值检查
SELECT 列名1,列名2
FROM 表名
WHERE 列名1 BETWEEN 5 AND 10;
如果要查询列值在某个范围内的记录,可以使用 BETWEEN 运算符。BETWEEN 会匹配范围中所有的值,包括指定的开始值和结束值。
例如,我们想要查找价格在 60到 80之间(包括 60 和 80)的产品,可以使用以下 SQL 语句:
SELECT product_id, product_name, product_price
FROM products
WHERE product_price BETWEEN 60 AND 80;
(四)空值检查
SELECT 列名
FROM 表名
WHERE 列名 IS NULL;
在某些情况下,我们需要查找列值为空的记录。这时可以使用 IS NULL 运算符。
比如,在“products”表中,“description”(产品描述)列可能存在为空的情况,如果我们想要查找没有填写描述的产品,可以这样写 SQL 语句:
SELECT product_id, product_name
FROM products
WHERE description IS NULL;
练习题1.编写SQL语句,从Products表中检索产品ID(prod_id)和产品名称(prod_name),只返回价格为9.49美元的产品。
2.编写SQL语句,从Products表中检索产品ID(prod_id)和产品名称(prod_name),只返回价格为9美元或更高的产品。
3.结合第3课和第4课编写SQL语句,从OrderItems表中检索出所有不同订单号(order_num),其中包含100个或更多的产品。
4.编写SQL语句,返回Products表中所有价格在3美元到6美元之间的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序。