where子句用于筛选符合条件的数据行,其核心是通过比较运算符(=、<>、>、<、>=、<=)定义条件;1. 使用and要求所有条件为真,or只需任一条件为真,not用于排除特定条件;2. 高级技巧包括in(匹配多个值)、between(范围筛选)、like(通配符模式匹配)和is null/is not null(判断空值);3. 性能优化需避免对列使用函数导致索引失效、避免以%开头的like、确保数据类型匹配、慎用or并考虑union all替代,同时仅选择必要列以提升效率。正确使用where子句不仅能精准获取数据,还能显著提高查询性能。

WHERE
在使用SQL查询数据时,
WHERE
FROM
例如,如果你想从一个名为
Products
SELECT ProductName, Price FROM Products WHERE Price > 50;
这里,
Price > 50
Products
Price
WHERE
=
<>
!=
>
<
>=
<=
除了数值,你也可以筛选文本或日期。比如,查找特定名称的产品:
SELECT * FROM Customers WHERE City = 'New York';
或者找出某个日期之后的所有订单:
SELECT OrderID, OrderDate FROM Orders WHERE OrderDate > '2023-01-01';
理解这些基础操作是玩转SQL数据筛选的第一步,它们构成了所有复杂查询的基石。
在实际的数据分析中,我们很少只需要一个单一的筛选条件。数据往往复杂得多,需要我们同时考虑多个维度。这时候,SQL的逻辑运算符就派上用场了:
AND
OR
NOT
我个人觉得,
AND
OR
AND
SELECT ProductName, Price, Stock FROM Products WHERE Price > 50 AND Stock < 10;
这就像你在购物时,不仅要看价格是否符合预算,还要看有没有足够的库存。两个条件都得满足。
OR
SELECT CustomerName, City FROM Customers WHERE City = 'New York' OR City = 'London';
这里,只要客户的城市是这两个中的任意一个,他们都会出现在结果集里。
而
NOT
SELECT SupplierName, Country FROM Suppliers WHERE NOT Country = 'USA';
或者更简洁的写法,用
<>
!=
NOT
LIKE
IN
当
AND
OR
AND
OR
( )
SELECT ProductName, Price, Category FROM Products WHERE (Category = 'Electronics' AND Price > 100) OR (Category = 'Books' AND Price < 50);
这个查询会找出电子产品中价格高于100的,或者书籍中价格低于50的。没有括号的话,逻辑可能会变得混乱,导致意想不到的结果。所以,我个人的经验是,只要涉及多个逻辑运算符,就大胆地用括号,这能极大地提升查询的可读性和准确性。
除了基本的比较和逻辑运算符,
WHERE
IN
BETWEEN
LIKE
IS NULL
IS NOT NULL
IN
OR
OR
SELECT ProductName, Category FROM Products WHERE Category = 'Electronics' OR Category = 'Books' OR Category = 'Clothing';
而用
IN
SELECT ProductName, Category
FROM Products
WHERE Category IN ('Electronics', 'Books', 'Clothing');代码量减少了,可读性也大大提升。当列表很长时,这种优势尤其明显。
BETWEEN
SELECT ProductName, Price FROM Products WHERE Price BETWEEN 20 AND 100;
这等同于
Price >= 20 AND Price <= 100
BETWEEN
LIKE
%
_
SELECT ProductName FROM Products WHERE ProductName LIKE 'Smart%';
或者查找名称中包含“phone”的商品:
SELECT ProductName FROM Products WHERE ProductName LIKE '%phone%';
甚至可以查找第二个字母是'a'的商品:
SELECT ProductName FROM Products WHERE ProductName LIKE '_a%';
LIKE
LIKE
%
最后是
IS NULL
IS NOT NULL
NULL
=
!=
NULL
IS NULL
IS NOT NULL
查找所有没有填写电子邮件的客户:
SELECT CustomerName FROM Customers WHERE Email IS NULL;
查找所有已填写地址的客户:
SELECT CustomerName FROM Customers WHERE Address IS NOT NULL;
理解
NULL
IS NULL
IS NOT NULL
虽然
WHERE
我个人在工作中,常常会因为一个
WHERE
WHERE
例如,对列进行函数操作:
-- 糟糕的写法:对列使用函数,可能导致索引失效 SELECT OrderID FROM Orders WHERE YEAR(OrderDate) = 2023;
如果
OrderDate
YEAR(OrderDate)
-- 更好的写法:避免对列使用函数,让索引生效 SELECT OrderID FROM Orders WHERE OrderDate BETWEEN '2023-01-01' AND '2023-12-31';
或者,对
LIKE
%
WHERE ProductName LIKE '%phone%'
WHERE ProductName LIKE 'Smart%'
另一个常见的陷阱是数据类型不匹配。虽然有些数据库会自动进行类型转换,但这会消耗额外的资源,并且也可能导致索引失效。比如,数字列与字符串进行比较:
-- 潜在的性能问题:数字列与字符串比较 SELECT ProductID FROM Products WHERE ProductCode = '12345'; -- 如果ProductCode是整数类型
确保你的比较值与列的数据类型一致,这是一个小细节,但很重要。
再有,OR
OR
OR
OR
UNION ALL
SELECT
-- 考虑性能:如果索引不佳,复杂的OR可能导致全表扫描 SELECT CustomerID FROM Customers WHERE City = 'New York' OR State = 'CA'; -- 优化思路(有时更优): SELECT CustomerID FROM Customers WHERE City = 'New York' UNION ALL SELECT CustomerID FROM Customers WHERE State = 'CA' AND City <> 'New York'; -- 避免重复
这需要根据具体的数据库和索引情况来判断,但至少提供了一个优化的思路。
最后,一个简单但常常被忽视的点:选择合适的列。在
SELECT
SELECT *
WHERE
总而言之,
WHERE
EXPLAIN
EXPLAIN ANALYZE
以上就是sql如何使用where子句筛选符合条件的数据 sqlwhere子句筛选数据的基础教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号