DISTINCT
SELECT關(guān)鍵字支持用戶查詢數(shù)據(jù)表中指定字段的所有數(shù)據(jù),但是這樣有時(shí)就會(huì)不可避免的出現(xiàn)重復(fù)信息。如果用戶希望只查詢那些具有不同記錄值的信息的話,可以使用SQL語(yǔ)言的DISTINCT關(guān)鍵字。語(yǔ)法格式如下:
SELECT DISTINCT "column_name" FROM "table_name"
distinct的只顯示一次重復(fù)出更的值。不過(guò)這個(gè)值出現(xiàn)多少次只顯示一次。
select distinct 字段名1,字段名2 from 表格 order by 字段名1
distinct 字段名1 意思是只顯示一次字段名1顯示的是第一次出現(xiàn)的。最好和order by 結(jié)合使用。可以提高效率。注意,是結(jié)果集,如果你選了N個(gè)字段,當(dāng)N個(gè)字段都相同時(shí) 才會(huì)被視為相同,而只返加一個(gè) 當(dāng)然,如果N=1的話,情況就會(huì)比較明顯 此外,distinct 會(huì)對(duì)返回的結(jié)果集進(jìn)行排序 所以會(huì)大大影響查詢效率,大數(shù)據(jù)集時(shí)比較明顯
order by id desc 是降序 全稱(chēng)descend 升序是ASC 全稱(chēng) ascend
ORDER BY 子句
按照遞增或遞減順序在指定字段中對(duì)查詢的結(jié)果記錄進(jìn)行排序。
WHERE
除了選擇具有不同記錄值的記錄之外,有時(shí)我們可能還會(huì)需要根據(jù)某些條件對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行查詢。例如,我們可能需要查詢Store_Information數(shù)據(jù)表中銷(xiāo)售額超過(guò)1000美圓的商店。為此,我們可以使用SQL語(yǔ)言的WHERE關(guān)鍵字設(shè)定查詢條件。語(yǔ)法格式如下:
SELECT "column_name" FROM "table_name" WHERE "condition"
由此,我們可以使用如下命令查詢銷(xiāo)售額超過(guò)1000美圓的商店信息:
SELECT store_name FROM Store_Information WHERE Sales > 1000
運(yùn)算函數(shù)
現(xiàn)在,我們已經(jīng)了解到在使用SQL語(yǔ)言進(jìn)行數(shù)據(jù)庫(kù)查詢操作時(shí)可以通過(guò)對(duì)數(shù)值的判斷設(shè)定靈活的查詢條件。為了增強(qiáng)對(duì)運(yùn)算的支持能力,SQL提供了眾多實(shí)用的運(yùn)算函數(shù)供廣大用戶使用。例如,我們可以直接在SQL命令中調(diào)用SUM或AVG這兩個(gè)分別用于計(jì)算總數(shù)和平均數(shù)的函數(shù)。語(yǔ)法格式如下:
SELECT "function type"("column_name") FROM "table_name"
如果我們希望查詢Store_Information數(shù)據(jù)表中所有商店的總銷(xiāo)售額的話,可以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
COUNT
除了SUM和AVG函數(shù)之外,COUNT函數(shù)是SQL語(yǔ)言中另一個(gè)較為常用的運(yùn)算函數(shù)。COUNT函數(shù)可以用來(lái)計(jì)算數(shù)據(jù)表中指定字段所包含的記錄數(shù)目。語(yǔ)法格式為:
SELECT COUNT("column_name") FROM "table_name"
例如,如果我們希望查詢Store_Information數(shù)據(jù)表中的有關(guān)商店的記錄條數(shù)時(shí),可以使用如下命令:
SELECT COUNT(store_name) FROM Store_Information
COUNT函數(shù)可以和DISTINCT關(guān)鍵字一起使用從而可以查詢數(shù)據(jù)表中指定字段中所有具有不同記錄值的記錄數(shù)目。例如,如果我們希望查詢Store_Information數(shù)據(jù)表中不同商店的數(shù)目時(shí),可以使用如下命令:
SELECT COUNT(DISTINCT store_name) FROM Store_Information
GROUP BY
下面我們來(lái)進(jìn)一步看一下SQL語(yǔ)言中的集合函數(shù)。使用SUM函數(shù)計(jì)算所有商店的銷(xiāo)售總額,如果我們希望計(jì)算每一家商店各自的總銷(xiāo)售額時(shí)該怎么辦呢?要實(shí)現(xiàn)這一目的我們需要做兩件事:首先,我們需要查詢商店名稱(chēng)和銷(xiāo)售額兩個(gè)字段;然后,我們使用SQL語(yǔ)言的GROUP BY命令將銷(xiāo)售額按照不同的商店進(jìn)行分組,從而計(jì)算出不同商店的銷(xiāo)售總額。GROUP BY命令的語(yǔ)法格式為:
SELECT "column_name1", SUM("column_name2") FROM "table_name" GROUP BY "column_name1"
我們可以使用如下命令實(shí)現(xiàn)上述查詢目的:
SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name
GROUP BY關(guān)鍵字一般應(yīng)用于同時(shí)查詢多個(gè)字段并對(duì)字段進(jìn)行算術(shù)運(yùn)算的SQL命令中。
HAVING
用戶在使用SQL語(yǔ)言的過(guò)程中可能希望解決的另一個(gè)問(wèn)題就是對(duì)由sum或其它集合函數(shù)運(yùn)算結(jié)果的輸出進(jìn)行限制。例如,我們可能只希望看到Store_Information數(shù)據(jù)表中銷(xiāo)售總額超過(guò)1500美圓的商店的信息,這時(shí)我們就需要使用HAVING從句。語(yǔ)法格式為:
SELECT "column_name1", SUM("column_name2") FROM "table_name" GROUP BY "column_name1"
HAVING (arithematic function condition)
(GROUP BY從句可選)
由此,我們可以使用如下命令實(shí)現(xiàn)上述查詢目的:
SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name
HAVING SUM(sales) > 1500
查詢結(jié)果顯示為:
store_name SUM(Sales) Los Angeles $1800
小注:
SQL語(yǔ)言中設(shè)定集合函數(shù)的查詢條件時(shí)使用HAVING從句而不是WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結(jié)尾處。
ALIAS
下面,我們重點(diǎn)介紹一下如何在SQL命令中設(shè)定別名。SQL語(yǔ)言中一般使用兩種類(lèi)型的別名,分別為字段別名和數(shù)據(jù)表別名。
簡(jiǎn)單的說(shuō),使用字段別名可以幫助我們有效的組織查詢的輸出結(jié)果。例如,上文所列舉的多個(gè)實(shí)例中,當(dāng)我們計(jì)算商店銷(xiāo)售總額時(shí),顯示結(jié)果中就會(huì)出現(xiàn)SUM(sales)。雖然SUM(sales)并不會(huì)對(duì)我們理解查詢結(jié)果帶來(lái)不便,但是如果我們需要在查詢中使用多項(xiàng)復(fù)雜運(yùn)算時(shí),顯示結(jié)果就不會(huì)這么直觀了。如果這時(shí)我們使用字段別名就會(huì)極大的提高查詢結(jié)果的可讀性。
對(duì)于數(shù)據(jù)表別名,我們可以通過(guò)將別名直接放置在FROM從句中數(shù)據(jù)表名稱(chēng)的后面設(shè)定。數(shù)據(jù)表別名在我們下面將要講述的連接多個(gè)數(shù)據(jù)表進(jìn)行查詢的操作中極為有用。
字段和數(shù)據(jù)表別名的語(yǔ)法格式如下:
SELECT "table_alias"."column_name1" "column_alias" FROM "table_name" "table_alias"
即別名都直接放置在各自對(duì)應(yīng)名稱(chēng)的后面,中間用空格分開(kāi)。
以Store_Information數(shù)據(jù)表為例,我們可以在GROUP BY一節(jié)中所使用的SQL命令中設(shè)置如下字段和數(shù)據(jù)表別名:
SELECT A1.store_name Store, SUM(Sales) "Total Sales" FROM Store_Information A1 GROUP BY A1.store_name
查詢結(jié)果顯示為:
Store Total Sales
Los Angeles $1800
San Diego $250
Boston $700