1. 程式人生 > >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, 20, null);

正確寫法是

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

結論:如果集合中含有空值,不能使用not in 操作符; 但可使用in操作符。not in遇上空值 ,則 where 條件表示式永遠不成立!

邏輯運算

這裡寫圖片描述

優先順序

可以使用括號改變優先順序順序

這裡寫圖片描述