程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle學習筆記3--條件查詢(where)

Oracle學習筆記3--條件查詢(where)

編輯:Oracle教程

之前的查詢,結果是表中所有的記錄。如果想要只是顯示滿足一定條件的記錄,就要使用條件查詢或者稱為限定查詢。

條件查詢的基本語法:

SELECT * |(具體的列名,如 ename ,empno)

FROM table(表名)

WHERE 限定條件

小記:where字句要緊跟在from字句之後。

例:查詢emp表中,工資大於2000的員工的所有信息

SQL> select * from  emp  where sal  >  2000 ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 
6 rows selected

在上例中,使用了 > ,在操作條件中,還可以使用 >= ,= ,<= ,<,等操作符號。關於不等號,特別說明一下,使用 != 和<>都是可以的。

例:查詢員工號不是7566的雇員信息。

SQL> select * from emp where empno != 7566 ;
SQL> select * from emp where empno <> 7566 ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 
13 rows selected
上面兩種方式的查詢結果都是一樣的。

邏輯運算:

1)AND ,邏輯並;

2)OR , 邏輯或;

3)NOT,邏輯否;

例:查詢員工部門號為10且工資大於2000的雇員信息。

SQL> select * from emp  where deptno = 10 and sal > 2000 ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
如果要同時滿足兩個甚至是多個條件,使用and 連接條件字句。  

例:查詢員工部門號為10 或者員工工資大於2000 的雇員信息。

SQL> select * from emp  where deptno = 10 or sal > 2000 ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 
7 rows selected
兩個條件之間是一種或者的關系,我們使用邏輯或 OR ,來連接兩個條件。

例:查詢員工工資大於2000,同時可以領取獎金的員工信息。上面的查詢結果中,comm是空的,表示查詢結果是null。

SQL> select * from emp where sal > 1000 and comm is not null;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
上面查詢的是獎金不為空,所以使用了not ,如果要查詢comm為空的雇員信息,則條件改為 comm is null 。

其他比較運算符:

BETWEEN ... ON ...在兩個值之間,包括邊界

IN(set)值為列表set中的一個

LIKE模糊查詢

IS NULL查詢空值

between on 語法格式:

字段 between 小值 on 大值

例:查詢工資在1500 到 2500 的雇員信息

SQL> select * from emp where sal between 1500 and 2500 ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
上面的查詢結果和語句 select * from emp where sal>1500 and sal < 2500; 的查詢結果是一樣的。

IN的語法格式:

in(值1, 值2 , 值3 )

例:查詢雇員編號為 7499 , 7782 , 7844 的雇員信息

SQL> select  *  from emp where empno in (7499 , 7782 , 7844) ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
LIKE的使用要注意通配符的問題,有兩種通配符:

% --任意多個字符的匹配

_--只匹配一個字符

例;查詢名字中第二個字符是M的雇員信息。

SQL> select * from emp where ename like '_M%';
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
轉譯字符:上面中使用了 % , _ 作為了匹配字符,如果名字中含有下劃線,要如何查詢呢?

此時我們就要進行轉譯;

語法格式:

SELECT ename

FROM emp

WHERE ename LIKE ‘IT\_%‘ escape ‘\‘;

判空操作:

例:查詢表中沒有獎金的員工信息

SQL> select * from emp where comm is  null ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 
10 rows selected
如果在where條件語句中含有,字符或者是日期,要用單引號將其引起來。

格式如下:

SELECT ename, hiredate, sal

FROM emp

WHERE hiredate = '7-6月-1994'

SELECT ename, deptno

FROM emp

WHERE ename ='Whalen';

字符大小寫敏感,日期的格式敏感,日期格式為 dd-m月-yy 。

排序:

使用 ORDER BY 字句對查詢的結果進行排序。

語法格式:

select distinct * | (具體的列名)

from 表名

where 查詢的條件

ORDER BY 排序的字段 1 , 字段2 , 字段3 (asc | desc ) ;

asc-> 表示的升序 ,desc –> 表示的是降序 ,默認的是升序排列。排序除了可以按照 表中的字段進行排序,還可以使用別名來排序。

例:查詢emp表中所有的信息,對結果進行排序,首先對部門號進行排序,部門號一樣則按工資降序進行排列,如果工資一樣,則按員工號進行降序排列。 
SQL> select * from emp order by deptno ,sal desc  ,empno desc;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 
14 rows selected

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved