SQL自学:组合WHERE子句以建立功能更强、更高级的搜索条件

一、组合WHERE子句

1、AND操作符

SELECT 字段名1,字段名2,字段名3

FROM 表名

WHERE 字段名1='abc123' AND 字段名2<=4;

在 SQL 查询的 WHERE 子句中,AND 操作符连接两个或多个条件,表示只有当所有这些条件都满足时,才会选中相应的记录。

假设有一个员工表,包含字段员工姓名(employee_name)、工资(salary)和职位(position)。如果要查询职位是 “经理” 且工资大于等于 10000 的员工记录,可以这样写:

SELECT employee_name, salary, position
FROM employees
WHERE position='经理' AND salary>=10000;

2、OR操作符

SELECT 字段名1,字段名2,字段名3

FROM 表名

WHERE 字段名1='abc123' OR 字段名1='abc111';

OR 操作符用于连接多个条件,表示只要其中一个条件满足,就会选中相应的记录。OR操作符告诉DBMS匹配任一条件而不是同时匹配两个条件。

还是以员工表为例,如果要查询职位是 “经理” 或者工资大于等于 15000 的员工记录,可以这样写:

SELECT employee_name, salary, position
FROM employees
WHERE position='经理' OR salary>=15000;

3、求值顺序

SELECT 字段名1,字段名2,字段名3

FROM 表名

WHERE (字段名1='abc123' OR 字段名1='abc111')

       AND 字段名2 >=80;

将前两个条件用圆括号括了起来。因为圆括号具有比AND或OR操作符更高的优先级。

SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。此问题的解决方法是使用圆括号对操作符进行明确分组。在 SQL 中,默认情况下会先处理 AND 操作符,然后再处理 OR 操作符。如果不明确指定优先级,可能会得到不符合预期的结果。使用圆括号可以明确指定条件的组合顺序。

以员工表为例,如果要查询职位是 “经理” 或者职位是 “主管” 且工资大于等于 8000 的员工记录,正确的写法是:

SELECT employee_name, salary, position
FROM employees
WHERE (position='经理' OR position='主管') AND salary>=8000;

如果不使用圆括号,可能会先处理 AND 操作符,导致结果不准确。

4、IN操作符

SELECT 字段名1,字段名2

FROM 表名

WHERE 字段名1 IN ('abc123' ,'abc111')

ORDER BY 字段名2;

IN 操作符允许在 WHERE 子句中指定一个值的列表,只要字段的值在这个列表中,就满足条件。它可以替代多个 OR 条件。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。(IN操作符完成了与OR相同的功能)

以员工表为例,如果要查询职位是 “经理”、“主管” 或 “工程师” 的员工记录,可以这样写:

SELECT employee_name, salary, position
FROM employees
WHERE position IN ('经理', '主管', '工程师');

5、NOT操作符

SELECT 字段名1,字段名2

FROM 表名

WHERE NOT 字段名1='abc123'

ORDER BY 字段名1;

NOT 操作符用于否定后面的条件。如果条件为真,加上 NOT 后变为假;如果条件为假,加上 NOT 后变为真。

以员工表为例,如果要查询职位不是 “经理” 的员工记录,可以这样写:

SELECT employee_name, salary, position
FROM employees
WHERE NOT position='经理';

 练习题

1.编写SQL语句,从Vendors表中检索供应商名称(vend_name)​,仅返回加利福尼亚州的供应商(这需要按国家[USA]和州[CA]进行过滤,没准其他国家也存在一个加利福尼亚州)​。提示:过滤器需要匹配字符串。

2.编写SQL语句,查找所有至少订购了总量100个的BR01、BR02或BR03的订单。你需要返回OrderItems表的订单号(order_num)​、产品ID(prod_id)和数量,并按产品ID和数量进行过滤。提示:根据编写过滤器的方式,可能需要特别注意求值顺序。

3.编写SQL语句,返回所有价格在3美元到6美元之间的产品的名称(prod_name)和价格(prod_price)​。使用AND,然后按价格对结果进行排序。

4.下面的SQL语句有问题吗?​(尝试在不运行的情况下指出。​)

SELECT vend_name

FROM Vendors

ORDER BY vend_name

WHERE vend_country = 'USA' AND vend_state = 'CA';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值