Oracle學習筆記 3

來源:互聯網
上載者:User

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

條件查詢的基本文法:

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


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.