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’ ;
輸出如下:
例:要求查詢出僱員編號是7369、7499、7521的僱員的具體資訊。
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) ;
例:使用以上的格式完成(僱員編號是7369、7499、7521)的僱員資訊查詢
l SELECT * FROM emp WHERE empno IN (7369, 7499, 7521) ;
輸出如下:
例:要求查詢出僱員編號不是7369、7499、7521的僱員的具體資訊。
l SELECT * FROM emp WHERE empno NOT IN (7369, 7499, 7521) ;
輸出如下:
另外,需要說明的是,使用IN操作符不光可以用在數字上,也可以用在字串的資訊上。
例:要求查詢出僱員姓名是SMITH、ALLEN、KING的僱員的資訊。
l SELECT * FROM emp WHERE ename IN (‘SMITH’, ‘ALLEN’, ‘KING’) ;
輸出如下:
提示:如果在指定的查詢範圍中指了額外的內容,則不影響程式的執行。
例:要求查詢出僱員姓名是SMITH、ALLEN、KING、jdkjdk$#的僱員的資訊。
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 ;
輸出如下: