1. 程式人生 > >SQL語句之WHERE查詢子句

SQL語句之WHERE查詢子句

限定查詢(WHERE子句)

      之前的查詢是將一張表的全部記錄查詢出來,那麼現在如果希望可以根據指定的條件查詢的話,則必須指定限定查詢。

      格式:

           [SELECT] [{DISTINCT}] [* |具體的列別名FROM表名稱] [{WHERE 條件(s)}]

           例:查詢出工資大5000的僱員的資訊。

                 數學計算中,工資大於5000:sal > 5000

                 l  SELECT * FROM emp WHERE sal > 4000 ;

                 輸出如下:

                                  

           例:查詢每月可以得到獎金的僱員資訊

                 獎金是comm欄位,只要欄位中存在內容,則表示內容不為空(null),如果存在內容,則會顯示具體的值。

                 l  不為空的表示:欄位 IS NOT NULL

                 l  SELECT * FROM emp WHERE comm IS NOT NULL ;

                 輸出如下:

                 

           例:查詢沒有獎金的僱員

                 沒有獎金則comm欄位的內容肯定是NULL,

                 l  肯定是空的表示:IS NULL

                 l  SELECT * FROM emp WHERE comm IS NULL ;

                 輸出如下:

                 

           例:要求查詢出基本工資大於1500,同時可以領取獎金的僱員資訊。

                 l  此時應該是兩個條件,而且兩個條件必須同時滿足

                 l  既然要求兩個條件全部滿足,則必須使用AND操作符進行條件的連線。

                 l  SELECT * FROM emp WHERE sal > 1500 AND comm IS NOT NULL ;

                 輸出如下:

                 

           例:要求查詢出基本工資大於1500,或者可以領取獎金的僱員資訊。

                 l  如果要表現出或者的概念是由OR 進行連線,表示兩個條件有一個滿足就輸出資訊。

                 l  SELECT * FROM emp WHERE sal > 3000 OR comm IS NOT NULL ;

                 輸出如下:

                 

                 之前使用NOT可以取反,把真的條件變為假,把假的變為真的。

           例:要求查詢出基本工資不大於1500或者不可以領取獎金的僱員資訊。

                 l  此時相當於是對(基本工資大於1500並且可以領取獎金的僱員)整體的條件取反,我們可以用()來表示一組整體。

                 l  SELECT * FROM emp WHERE NOT (sal > 1500 AND comm IS NOT NULL) ;

                 l  上面的取反後的意思就是基本工資小於等於1500或者不可以領取獎金的僱員資訊。所以,也可以用下面的語句查詢,輸出都是一樣的

                 l  SELECT * FROM emp WHERE sal <= 1500 OR comm IS NULL ;

                 輸出如下:(第一條語句)

                 

                 輸出如下:(第二條語句)

                  

           例:查詢基本工資大於1500並且小於3000的全部僱員的資訊。

                 l  SELECT * FROM emp WHERE sal > 1500 AND sal < 3000 ;

                 輸出如下:

                 

                 在SQL語法中,提供了一個專門的指定範圍的查詢的過濾語句,BETWEEN … AND…

                 語句格式:欄位 BETWEEN最小值 AND 最大值 ;

           :使用BETWEEN …AND …完成(基本工資大於等於1500並且小於等於3000)的查詢。

                 l  SELECT * FROM emp WHERE BETWEEN 1500 AND 3000 ;

                 輸出如下:

                 

                 實際上BETWEEN … AND … 操作等價:sal >= 1500 AND sal <= 3000 ;包含了等於的功能。

           例:要求查詢出在1981年僱傭的全部僱員資訊。

                 l  從1981年1月1日 ~ 1981年12月31日之間的僱員

                 l  日期加入的時候要加入“‘“。

                 l  SELECT * FROM emp WHERE hiredate BETWEEN ‘1-1月 -81’ AND ’31-12月 -81’ ;

                 輸出如下:

                 

                 結論:BETWEEN … AND … 查詢除了可以支援數字之外,也可以支援日期的查詢

                 l  隨著深入的學習會發現,日期實際上也是以數字的形式表示出來的。

           例:查詢出姓名是SMITH的僱員資訊。

                 l  此時告訴了要查詢的姓名,條件:ename = ‘smith’ ;

                 l  SELECT * FROM emp WHERE ename = ‘smith’ ;

                 輸出如下:

                 

                 執行以上的查詢語句之後,並不會返回查詢結果,再次查詢資料庫表的資訊,發現smith是採用大寫的形式表示出來的,在ORACLE中是對大小寫敏感的,所以在查詢的時候必須以大寫的形式進行條件的編寫,語句修改如下:

                 l  SELECT * FROM emp WHERE ename = ‘SMITH’ ;

                 輸出如下:

                 

           例:要求查詢出僱員編號是736974997521的僱員的具體資訊

                 l  如果此時按照之前的做法,則設定條件要使用OR連線

                 l  SELECT * FROM emp WHERE empno = 7369 OR empno = 7499 OR empno = 7521;

                 輸出如下:

                 

                 我們發現這樣也是可以的,但是,如果讓我們查詢幾十條呢?實際上,此時是指定了查詢的範圍,既然有範圍了,那麼,在SQL語句中就可以使用IN操作符完成。

                 l  語法格式:

                           欄位 IN (1,2, ………, n) ;

                 l  如果現在要求查詢的內容不在此範圍之中,則可以使用NOT IN,語法如下

                           欄位 NOT IN (1,2, ………, n) ;

           例:使用以上的格式完成(僱員編號是736974997521)的僱員資訊查詢

                 l  SELECT * FROM emp WHERE empno IN (7369, 7499, 7521) ;

                 輸出如下:

                 

           例:要求查詢出僱員編號不是736974997521的僱員的具體資訊。

                 l  SELECT * FROM emp WHERE empno NOT IN (7369, 7499, 7521) ;

                 輸出如下:

                 

                 另外,需要說明的是,使用IN操作符不光可以用在數字上,也可以用在字串的資訊上。

           例:要求查詢出僱員姓名是SMITHALLENKING的僱員的資訊。

                 l  SELECT * FROM emp WHERE ename IN (‘SMITH’, ‘ALLEN’, ‘KING’) ;

                 輸出如下:

                 

                 提示:如果在指定的查詢範圍中指了額外的內容,則不影響程式的執行。   

           例:要求查詢出僱員姓名是SMITHALLENKINGjdkjdk$#的僱員的資訊。

                 l  SELECT * FROM emp WHERE ename IN (‘SMITH’, ‘ALLEN’, ‘KING’, ‘jdkjdk$#’);

                 輸出如下:

                 

                 在一般的日常見到的站點中經常發現有模糊查詢功能,即:輸入一個指定的關鍵字,把符合的內容全部查詢出來,在SQL中使用LIKE語句完成。

                 在使用LIKE語句的時候要注意萬用字元的使用,在LIKE語句中主要使用以下兩種萬用字元

                 l  “%”:可以匹配任意長度的內容;

                 l  “_”:可以匹配一個長度的內容;

      例:查詢出所有僱員姓名中第二個字母是“M”的僱員資訊。

                 l  SELECT * FROM emp WHERE ename LIKE ‘_M%’ ;

                 輸出如下:

                 

          例:要求查詢僱員姓名中包含字母M的僱員資訊。

                l  此時,表示可以任意的位置上出現字母M

                l  SELECT * FORM emp WHERE ename LIKE ‘%M%’ ;

                輸出如下:

                

                但是,要提醒大家的是:“如果在使用LIKE的時候沒有指定查詢的關鍵字,則表示查詢全部“。

                使用LIKE 還可以方便的進行日期的查詢功能。

          例:要求查詢出在1981年僱傭的僱員資訊。

                l  SELECT * FROM emp WHERE hiredate LIKE ‘%81%’ ;

                輸出如下:

                

                在操作條件中還可以使用:>、>=、=、<=等計算符。

                不等於符號:在SQL中如果要想使用不等於符號,可以有兩種形式:“<>”、“!=”

          例:要求查詢編號不為7369的僱員的資訊

                l  使用“<>”完成

                l  SELECT * FROM emp WHERE empno <> 7369 ;

                輸出如下:

                

                l  使用“!=”完成

                l  SELECT * FROM emp WHERE empno != 7369 ;

                輸出如下: