这里说的过滤主要是在查询中过滤,也就是在结合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.
@H_403_197@其它比较运算
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 条件表达式永远不成立!
逻辑运算
优先级
可以使用括号改变优先级顺序