WHERE 子句
将过滤条件放在 WHERE 子句的后面,可以筛选/过滤出我们想要的符合条件的数据
SELECT * FROM 表名 WHERE 条件;
此章节以实际练习为主,代码在 DQL 目录上。条件查询是在关键字 WHERE 后加入条件判断的语句
WHERE + 关系运算符
-- 查询不同部门编号的信息SELECT * FROM EMP WHERE DEPTNO = 10 ;SELECT * FROM EMP WHERE DEPTNO > 10 ;SELECT * FROM EMP WHERE DEPTNO >= 10 ;SELECT * FROM EMP WHERE DEPTNO < 10 ;SELECT * FROM EMP WHERE DEPTNO <= 10 ;SELECT * FROM EMP WHERE DEPTNO <> 10 ;SELECT * FROM EMP WHERE DEPTNO != 10 ;-- 查询中内容默认是不区分大小写,对比两个查询结果SELECT * FROM EMP WHERE JOB = 'CLERK';SELECT * FROM EMP WHERE JOB = 'clerk';-- 区分大小写查询SELECT * FROM EMP WHERE BINARY JOB = 'cleark’ ;
WHERE + 逻辑运算符
- AND、BETWEEN ```plsql — AND (&&) 的查询结果是不包含限制值即 (值1, 值2) SELECT FROM EMP WHERE SAL > 1500 AND SAL < 3000 ; SELECT FROM EMP WHERE SAL > 1500 && SAL < 3000 ; — AND 的另一种写法
— 配合排序查询 SELECT * FROM EMP WHERE SAL > 1500 AND SAL < 3000 ORDER BY SAL ;
— BETWEEN 的查询结果是包含限制值即 [值1, 值2] SELECT * FROM EMP WHERE SAL BETWEEN 1500 AND 3000 ;
- **OR、IN**```plsql-- OR (||)SELECT * FROM EMP WHERE DEPTNO = 10 OR DEPTNO = 20 ;SELECT * FROM EMP WHERE DEPTNO = 10 || DEPTNO = 20 ; -- OR 的另一种写法-- INSELECT * FROM EMP WHERE DEPTNO IN (10, 20) ;SELECT * FROM EMP WHERE JOB IN ('MANAGER', 'CLEARK', 'ANALYST') ;
WHERE + 模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串'
- %,表示匹配 0 个或多个字符(任意字符)
- _ ,表示一个字符,有点类似占位符的作用 ```plsql — % 占位符 SELECT * FROM EMP WHERE ENAME LIKE ‘%A%’ ;
— _ 占位符 SELECT * FROM EMP WHERE ENAME LIKE ‘_A%’ ;
```plsql'a%' 以 a开头 的数据'%a' 以 a结尾 的数据'%a%' 含有a 的数据'_a_' 三位且中间字母是a的'_a' 两位且结尾字母是a的'a_' 两位且开头字母是a的
补充
关于 NULL 的判断
SELECT * FROM EMP WHERE COMM IS NULL ;SELECT * FROM EMP WHERE COMM IS NOT NULL ;
括号的使用
-- 如果不加括号,AND 的优先级高于 OR ,查看添加括号后的案例结果SELECT * FROM EMP WHERE JOB = 'SALESMAN' OR JOB = 'CLERK' AND SAL>= 1500 ;SELECT * FROM EMP WHERE JOB = 'SALESMAN' OR (JOB = 'CLERK' AND SAL>= 1500) ;-- 括号的优先级最高,同时也增加语句可读性SELECT * FROM EMP WHERE (JOB = 'SALESMAN' OR JOB = 'CLERK') AND SAL>= 1500 ;
