05-Oracle入门之where过滤

来源:互联网 发布:淘宝卖家骂人扣几分 编辑:程序博客网 时间:2024/06/04 01:12

这里说的过滤主要是在查询中过滤,也就是在结合select语句使用过滤功能!主要用的是where子句!

使用WHERE 子句,将不满足条件的行/记录过滤掉。

where子句

WHERE 子句紧随 FROM 子句。

SELECT  *|{[DISTINCT] column|expression [alias],...}FROM    table[WHERE  condition(s)];

基本模式

select ....from empwhere colname1 = 20where colname1 <  20where colname1 < 20where colname2 between 1000 and 200where colname2 in (10, 20)

举例如下

SELECT employee_id, last_name, job_id, department_idFROM   employeesWHERE  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         800ALLEN        1600WARD         1250JONES        2975MARTIN       1250BLAKE        2850CLARK        2450SCOTT        3000TURNER       1500ADAMS        1100JAMES         950FORD         3000MILLER       130013 rows selected.

其它比较运算

这里写图片描述

BETWEEN…AND…

SQL> select ename,sal from emp where sal between 2500 and 3000;ENAME         SAL---------- ----------JONES        2975BLAKE        2850SCOTT        3000FORD         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       76986 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_idFROM   jobsWHERE  job_id LIKE ‘IT\_%‘ escape ‘\‘;

过滤中的空值===NULL

使用 IS (NOT) NULL 判断空值。

SELECT last_name, manager_idFROM   employeesWHERE  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, 20, null);

正确写法是

select * from emp where deptno not in (10, 20);

结论:如果集合中含有空值,不能使用not in 操作符; 但可使用in操作符。not in遇上空值 ,则 where 条件表达式永远不成立!

逻辑运算

这里写图片描述

优先级

可以使用括号改变优先级顺序

这里写图片描述

0 0
原创粉丝点击