1.檢索中的DISTINCT關鍵字的應用
在檢索中,如果我們需要檢索某一行但是如果這一行中只有3個不同的數據,如顏色只有紅黃綠三種顏色,但是總共有100個數據,如果我們只是簡單的使用下列SQL語句:
SELECT COLOR FROM TABLE1;
則就會產生100個會有許多重複關鍵字的結果,十分影響用戶的體驗。因此我們可以使用DISTINCT關鍵字:
SELECT DISTINCT COLOR FROM TABLE1;
這樣在最終的結果展現的過程中就會自動進行去重操作,只得到,RED,GREEN,BLUE三個不同的值,這在要求一個列(屬性)中有幾個不同的取值中可以使用。
值得注意的是DISTINCT關鍵字應用於所有列,而不僅僅是他前置的列!
例如:
SELECT DISTINCT COLOR,SHAPE FROM TABLE1;
這時候的DISTINCT不僅影響着COLOR,對於COLOR和SHAPE都產生影響。
2.返回查找結果中的LIMIT關鍵字
如果我們在使用SELECT語句進行查找的時候,不需要查找出所有的結果,或者所有的結果太多,我們可以使用LIMIT關鍵字使其只輸出有限個結果
SELECT COLOR FROM TABLE1 LIMIT 5;
這樣會使輸出結果的時候只輸出表中符合查詢條件的前五個結果。
LIMIT還有另一種使用方法
SELECT COLOR FROM TABLE1 LIMIT 5,5;
即LIMIT後面如果只有一個參數n,則輸出第一個結果開始的n個結果;
如果LIMIT後面有兩個參數m,n,則第一個參數m表示開始的結果的下標數,第二個參數n表示總共輸出幾個。
SELECT COLOR FROM TABLE1 LIMIT 5,3;
表示從第5個結果開始輸出,總共輸出3個。
值得注意的是,SQL語句中與編程語言一樣第一個結果的下標是0!
從SQL 5開始,對LIMIT的用法做出了新的規定,爲了使使用者不會對於LIMIT後面的兩個參數代表的意思感到困惑,SQL 5使用以下寫法:
SELECT COLOR FROM TABLE1 LIMIT 3 OFFSET 5;
它表示的意思就是從第5的結果開始,輸出三個結果,與上面的語句是等效的。
3.對輸出結果進行排序
對一個列進行排序:
SELECT COLOR FROM TABLE1 ORDER BY COLOR;
這就是將輸出的結果按照對於COLOR屬性的升序進行排列。
SQL語句中如果不指明排序方式,默認爲升序,升序關鍵字ASC,降序關鍵字DESC,由於默認升序,所以其實ASC基本不會使用到。
對COLOR進行降序排列:
SELECT COLOR FROM TABLE1 ORDER BY COLOR DESC;
對兩個列進行排序操作:
SELECT COLOR,SHAPE FROM TABLE1 ORDER BY COLOR DESC,SHAPE;
DESC關鍵字與DISTINCT關鍵字不同,他只作用於他之前的屬性,並且在對兩個屬性都執行排序操作的時候,有順序先後的關係。
例如上面的例子當中,執行的要求是先按照對COLOR的降序進行排列,再按照對SHAPE的升序進行排列。可以看到,只有當兩行的COLOR屬性一樣的時候我們才根據SHAPE對他們進行排列,即如果表中的行的COLOR屬性都不一樣,我們根本就不用對SHAPE進行排列。
4.數據過濾中的WHERE子句
操作符 | 說明 |
---|---|
= | 等於 |
<> | 不等於 |
!= | 不等於 |
< | 小於 |
> | 大於 |
<= | 小於等於 |
>= | 大於等於 |
BETWEEN | 在指定的兩個值中間 |
何時需使用引號?
如果將值與串類型的列進行比較的時候需要限定引號,如果與數值進行比較,則不需要使用引號。
如:
SELECT NAME,COLOR FROM TABLE1 WHERE NAME = 'FUSS';
SELECT COLOR,NUMBER FROM TABLE1 WHERE NUMBER = 123;
用where語句查詢空值null
SELECT NAME FROM TABLE1 WHERE NAME IS NULL;
注意NULL與字段包含0,空字符串或僅僅包含空格不同!
WHERE子句中還可以使用AND,OR等連接詞來進行更高級的條件過濾,並且可以使用括號來改變個條件的優先級別:
SELECT NAME,PRICE FROM TABLE1 WHERE (NAME = 1002 OR NAME = 1003) AND PRICE >=10;
即返回NAME屬性是1002或者1003並且同時PRICE大於等於10的結果,這與不添加括號有着本質區別。
IN操作符
還可以使用IN操作符配合括號來對條件指定範圍。
SELECT NAME FROM TABLE1 WHERE NAME IN (1002,1003);
括號內製定了NAME屬性能夠取到的值,該語句的以及就是返回NAME爲1002或者1003的所有結果。
所以從另一個角度上看的話IN關鍵字完成的功能與OR關鍵字完成的功能是一樣的。
NOT操作符
WHERE子句中的NOT操作符有且只有一個功能就是否定他之後跟的任何條件。
SELECT NAME FROM TABLE1 WHERE NAME NOT IN (1002,1003);
即返回NAME不是1002和1003的所有結果。