这里说的过滤主要是在查询中过滤,也就是在结合select语句使用过滤功能!主要用的是where子句!
使用WHERE 子句,将不满足条件的行/记录过滤掉。
where子句
WHERE 子句紧随 FROM 子句。
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
基本模式
select .... from emp where colname1 = 20 where colname1 < 20 where colname1 < 20 where colname2 between 1000 and 200 where colname2 in (10,20)
举例如下
SELECT employee_id,last_name,job_id,department_id FROM employees WHERE department_id = 90 ;
字符和日期
- 字符和日期要包含在单引号中。别名是双引号!
- 字符大小写敏感,日期格式敏感。
- 默认的日期格式是 DD-MON-RR
获取当前日期:
select sysdate from dual;
获取系统配置参数
select * from v$nls_parameters;
设置系统日期格式
alter session set NLS_DATE_FORMAT='yyyy-mm-dd'
还原系统日期格式
alter session set NLS_DATE_FORMAT='DD-MON-RR'
应用示例
select * from emp where hiredate >'1981-1-1';
比较运算
赋值使用
:=
符号
sql> select ename,sal from emp where sal <= 3000;
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
SCOTT 3000
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
13 rows selected.
其它比较运算
BETWEEN…AND…
sql> select ename,sal from emp where sal between 2500 and 3000;
ENAME SAL
---------- ----------
JONES 2975
BLAKE 2850
SCOTT 3000
FORD 3000
IN
sql> select empno,ename,sal,mgr from emp where mgr in(7698,7902);
EMPNO ENAME SAL MGR
---------- ---------- ---------- ----------
7369 SMITH 800 7902
7499 ALLEN 1600 7698
7521 WARD 1250 7698
7654 MARTIN 1250 7698
7844 TURNER 1500 7698
7900 JAMES 950 7698
6 rows selected.
LIKE
- 使用 LIKE 运算选择类似的值
- 选择条件可以包含字符或数字:
- % 代表零个或多个字符(任意个字符)。
- _ 代表一个字符。
sql> select * from emp where ename like 'S%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
- ‘%’和‘-’可以同时使用。
sql> select * from emp where ename like '_L%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
- 可以使用 ESCAPE 标识符 选择‘%’和 ‘_’ 符号。
回避特殊符号要使用转义符。例如:将%
转为\%
、_
转为\_
,然后再加上ESCAPE ‘\’
即可。
SELECT job_id FROM jobs WHERE job_id LIKE ‘IT\_%‘ escape ‘\‘;
过滤中的空值===NULL
使用 IS (NOT) NULL 判断空值。
SELECT last_name,manager_id FROM employees WHERE manager_id IS NULL;
查询10 20号部门的员工信息
select * from emp where deptno in (10,20);
或者
select * from emp where deptno in (10,20,null);
说明集合中如果存在空值NULL,是可以使用in的。
但是—not in就不是这样了!!!!
查询不是10 20号部门的员工信息
这是错误的写法
select * from emp where deptno not in (10,null);
正确写法是
select * from emp where deptno not in (10,20);
结论:如果集合中含有空值,不能使用not in 操作符; 但可使用in操作符。not in遇上空值,则 where 条件表达式永远不成立!
逻辑运算
优先级
可以使用括号改变优先级顺序