05-Oracle入門之where過濾
阿新 • • 發佈:2019-02-15
這裡說的過濾主要是在查詢中過濾,也就是在結合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 條件表示式永遠不成立!
邏輯運算
優先順序
可以使用括號改變優先順序順序