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.

其它比较运算

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相关文章