05-Oracle入门之where过滤

前端之家收集整理的这篇文章主要介绍了05-Oracle入门之where过滤前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这里说的过滤主要是在查询中过滤,也就是在结合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 条件表达式永远不成立!

逻辑运算

优先级

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

猜你在找的Oracle相关文章