SQL查询过滤Where子句用法

SQL 同时被 2 个专栏收录
6 篇文章 1 订阅
24 篇文章 1 订阅

大多数情况下,查询关注的是表中所有行的一个子集,需要用到Where过滤,本文主要介绍过滤的条件连接符(AND, OR, (),NOT),条件类型(相等条件、范围条件、成员条件、通配条件)以及当列名包含NULL值的注意事项。

1. 条件连接符

1)      AND:a AND b,选取要a和b都为真的数据子集

2)      OR:a OR b,选取要a或b都为真的数据子集

3)      ():当条件为3个或以上时,常常需要用到,比如 a AND (b OR c)

4)      NOT:NOT a,选区非a的数据子集,NOT 对开发者来说,增加了对条件评估的难度,一般尽量避免使用:

        如:WHERE end_date IS NULL

                        AND NOT (title = 'Teller' OR start_date < '2007-01-01')

         可转换为:WHERE end_date IS NULL

                                     AND title != 'Teller' AND start_date > '2007-01-01'

2. 条件类型

1)      相等条件,操作符 =,!=,<>

2)      范围条件,操作符 >,<, between,例如:

SELECT emp_id, fname, lname, start_date

FROM employee

WHERE start_date < '2007-01-01';

 

WHERE start_date BETWEEN '2005-01-01' AND '2007-01-01';

使用BETWEEN是,跟这BETWEEN后的一定要是范围的下限,AND后接范围上限,否则会是空集,这是因为BETWEEN a AND b等价于a<=x<=b

3)      成员条件,操作符 IN, NOT IN, 例如:

SELECT account_id, product_cd, cust_id, avail_balance

FROM account

WHERE product_cd IN ('CHK','SAV','CD','MM');

 

IN 后面也可以接子查询,如:

SELECT account_id, product_cd, cust_id, avail_balance

FROM account

WHERE product_cd IN (SELECT product_cd FROM product

         WHERE product_type_cd = 'ACCOUNT');

4)      匹配条件,通配符:"_"表示一个字符通配符,“%”表示任意个字符通配符,关键词LIKE

 

SELECT lname

FROM employee

WHERE lname LIKE '_a%e%'; #第二个字符为a,且后面有e字符

 

SELECT emp_id, fname, lname

FROM employee

WHERE lname LIKE 'F%' OR lname LIKE 'G%';  # 查找姓氏以F和G开头的员工姓名

3. NULL条件

注意:表达式为"IS NULL",不能写出"=NULL",两个NULL只也不能判断相等,如:

 

如果改成 = NULL, 则查询结果是空集但不会报错(不熟悉SQL常犯错误):

 

如果值中包括NULL, 则在使用"!="时要考虑到NULL值的数据,因为"!="只对有值的情况进行判断:

例如:查找上级ID不是6(Helen Fleming)的所有员工

SELECT emp_id, fname, lname, superior_emp_id

 FROM employee

WHERE superior_emp_id != 6;

结果不包含superior_emp_id列为NULL的Michael Smith

 

SELECT emp_id, fname, lname, superior_emp_id

FROM employee

WHERE superior_emp_id != 6 OR superior_emp_id IS NULL;

  • 10
    点赞
  • 2
    评论
  • 32
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值