初識MySQL(1)查詢,排序,過濾數據

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的所有結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章