SQL語言迅速基礎(chǔ)之3
發(fā)表時間:2024-06-09 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]我們?nèi)粘J褂肧QL語言的工作過程中,使用最多的還是從已經(jīng)建立好的數(shù)據(jù)庫中查詢信息。下面,我們就來詳細(xì)介紹一下如何使用SQL語言實現(xiàn)各種數(shù)據(jù)庫查詢操作。SELECT…FROM 為方便講解,我們在數(shù)據(jù)庫中創(chuàng)建名為Store_Information的如下數(shù)據(jù)表。Store_InformationSto...
我們?nèi)粘J褂肧QL語言的工作過程中,使用最多的還是從已經(jīng)建立好的數(shù)據(jù)庫中查詢信息。下面,我們就來詳細(xì)介紹一下如何使用SQL語言實現(xiàn)各種數(shù)據(jù)庫查詢操作。
SELECT…FROM
為方便講解,我們在數(shù)據(jù)庫中創(chuàng)建名為Store_Information的如下數(shù)據(jù)表。
Store_Information
Store_Name
Sales
Date
Los Angeles
$1500
Jan-10-2000
San Diego
$250
Jan-11-2000
Los Angeles
$300
Jan-12-2000
Boston
$700
Jan-12-2000
SQL語言中用于數(shù)據(jù)庫查詢的最簡單的命令就是SELECT…FROM,語法格式為:
SELECT "column_name" FROM "table_name"
例如,如果我們希望查詢Store_Information數(shù)據(jù)表中所有的商店名稱時,可以使用如下命令:
SELECT store_name FROM Store_Information
查詢結(jié)果顯示為:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston
如果用戶希望一次查詢多個字段,可以將所要查詢的字段名稱依次加入SELECT關(guān)鍵字之后,中間用“,”隔開即可。
DISTINCT
SELECT關(guān)鍵字支持用戶查詢數(shù)據(jù)表中指定字段的所有數(shù)據(jù),但是這樣有時就會不可避免的出現(xiàn)重復(fù)信息。如果用戶希望只查詢那些具有不同記錄值的信息的話,可以使用SQL語言的DISTINCT關(guān)鍵字。語法格式如下:
SELECT DISTINCT "column_name"
FROM "table_name"
例如,我們可以使用以下命令查詢Store_Information數(shù)據(jù)表具有不同記錄值的所有記錄。
SELECT DISTINCT Store_Name FROM Store_Information
查詢結(jié)果如下:
Store_Name
Los Angeles
San Diego
Boston
WHERE
除了選擇具有不同記錄值的記錄之外,有時我們可能還會需要根據(jù)某些條件對數(shù)據(jù)庫中的數(shù)據(jù)進行查詢。例如,我們可能需要查詢Store_Information數(shù)據(jù)表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE關(guān)鍵字設(shè)定查詢條件。語法格式如下:
SELECT "column_name"
FROM "table_name"
WHERE "condition"
由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息:
SELECT store_name FROM Store_Information WHERE Sales > 1000
查詢結(jié)果顯示為:
store_name
Los Angeles
運算函數(shù)
現(xiàn)在,我們已經(jīng)了解到在使用SQL語言進行數(shù)據(jù)庫查詢操作時可以通過對數(shù)值的判斷設(shè)定靈活的查詢條件。為了增強對運算的支持能力,SQL提供了眾多實用的運算函數(shù)供廣大用戶使用。例如,我們可以直接在SQL命令中調(diào)用SUM或AVG這兩個分別用于計算總數(shù)和平均數(shù)的函數(shù)。語法格式如下:
SELECT "function type"("column_name")
FROM "table_name"
如果我們希望查詢Store_Information數(shù)據(jù)表中所有商店的總銷售額的話,可以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
查詢結(jié)果顯示為:
SUM(Sales)
$2750
COUNT
除了SUM和AVG函數(shù)之外,COUNT函數(shù)是SQL語言中另一個較為常用的運算函數(shù)。COUNT函數(shù)可以用來計算數(shù)據(jù)表中指定字段所包含的記錄數(shù)目。語法格式為:
SELECT COUNT("column_name")
FROM "table_name"
例如,如果我們希望查詢Store_Information數(shù)據(jù)表中的有關(guān)商店的記錄條數(shù)時,可以使用如下命令:
SELECT COUNT(store_name)
FROM Store_Information
查詢結(jié)果顯示為:
Count(store_name)
4
COUNT函數(shù)可以和DISTINCT關(guān)鍵字一起使用從而可以查詢數(shù)據(jù)表中指定字段中所有具有不同記錄值的記錄數(shù)目。例如,如果我們希望查詢Store_Information數(shù)據(jù)表中不同商店的數(shù)目時,可以使用如下命令:
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
查詢結(jié)果顯示為:
Count(DISTINCT store_name)
3
GROUP BY
下面我們來進一步看一下SQL語言中的集合函數(shù)。上文中,我們曾使用SUM函數(shù)計算所有商店的銷售總額,如果我們希望計算每一家商店各自的總銷售額時該怎么辦呢?要實現(xiàn)這一目的我們需要做兩件事:首先,我們需要查詢商店名稱和銷售額兩個字段;然后,我們使用SQL語言的GROUP BY命令將銷售額按照不同的商店進行分組,從而計算出不同商店的銷售總額。GROUP BY命令的語法格式為:
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
我們可以使用如下命令實現(xiàn)上述查詢目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
查詢結(jié)果顯示為:
store_name SUM(Sales)
Los Angeles $1800
San Diego $250
Boston $700
小注:
GROUP BY關(guān)鍵字一般應(yīng)用于同時查詢多個字段并對字段進行算術(shù)運算的SQL命令中。
HAVING
用戶在使用SQL語言的過程中可能希望解決的另一個問題就是對由sum或其它集合函數(shù)運算結(jié)果的輸出進行限制。例如,我們可能只希望看到Store_Information數(shù)據(jù)表中銷售總額超過1500美圓的商店的信息,這時我們就需要使用HAVING從句。語法格式為:
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
HAVING (arithematic function condition)
(GROUP BY從句可選)
由此,我們可以使用如下命令實現(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語言中設(shè)定集合函數(shù)的查詢條件時使用HAVING從句而不是WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結(jié)尾處。
ALIAS
下面,我們重點介紹一下如何在SQL命令中設(shè)定別名。SQL語言中一般使用兩種類型的別名,分別為字段別名和數(shù)據(jù)表別名。
簡單的說,使用字段別名可以幫助我們有效的組織查詢的輸出結(jié)果。例如,上文所列舉的多個實例中,當(dāng)我們計算商店銷售總額時,顯示結(jié)果中就會出現(xiàn)SUM(sales)。雖然SUM(sales)并不會對我們理解查詢結(jié)果帶來不便,但是如果我們需要在查詢中使用多項復(fù)雜運算時,顯示結(jié)果就不會這么直觀了。如果這時我們使用字段別名就會極大的提高查詢結(jié)果的可讀性。
對于數(shù)據(jù)表別名,我們可以通過將別名直接放置在FROM從句中數(shù)據(jù)表名稱的后面設(shè)定。數(shù)據(jù)表別名在我們下面將要講述的連接多個數(shù)據(jù)表進行查詢的操作中極為有用。
字段和數(shù)據(jù)表別名的語法格式如下:
SELECT "table_alias"."column_name1" "column_alias"
FROM "table_name" "table_alias"
即別名都直接放置在各自對應(yīng)名稱的后面,中間用空格分開。
以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
連接多個數(shù)據(jù)表
最后,我們來看一下如果使用SQL語言連接多個數(shù)據(jù)表,實現(xiàn)對多個數(shù)據(jù)表的查詢。為方便講解,我們在數(shù)據(jù)庫中分別創(chuàng)建了兩個名為Store_Information和Region的數(shù)據(jù)表。
Store_Information
Store_Name
Sales
Date
Los Angeles
$1500
Jan-10-2000
San Diego
$250
Jan-11-2000
Los Angeles
$300
Jan-12-2000
Boston
$700
Jan-12-2000
Region
Region_Name
Store_Name
East
Boston
East
New York
West
Los Angeles
West
San Diego
下面,我們就來看一下通過數(shù)據(jù)表的連接實現(xiàn)按不同區(qū)域查詢銷售額。
我們注意到在名為Region的數(shù)據(jù)表中包含區(qū)域和商店兩個字段信息,而在名為Store_Information的數(shù)據(jù)表中則包含每一家商店的銷售信息。因此,為了得到按區(qū)域劃分的銷售信息,我們需要將兩個不同數(shù)據(jù)表的信息結(jié)合在一起進行查詢。通過對上述兩個數(shù)據(jù)表的分析,我們發(fā)現(xiàn)每個數(shù)據(jù)表中都包含一個名為Store_Name的字段,因此,我們可以使用如下命令實現(xiàn)查詢目的:
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
查詢結(jié)果顯示為:
REGION SALES
East $700
West $2050
說明:
上述查詢命令的前兩行用于指定所要查詢的目標(biāo)字段,分別為Region數(shù)據(jù)表中的Region_Name字段和Store_Information數(shù)據(jù)表中Sales字段的記錄值總數(shù)。這里,我們設(shè)定兩個字段的別名分別為REGION和SALES,兩個數(shù)據(jù)表的別名分別為A1和A2。如果我們只使用字段別名而不設(shè)定數(shù)據(jù)表別名的話,上述SQL命令的第一行就變成 如下形式:
SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES
由此我們可以看出有效的使用數(shù)據(jù)表別名,可以極大的簡化對多個數(shù)據(jù)表進行操作的SQL命令。
上述查詢命令的第3行為WHERE從句,正是該從句設(shè)定了兩個數(shù)據(jù)表的連接條件。因為我們希望確保Region數(shù)據(jù)表中的Store_Name字段能夠與Store_Information數(shù)據(jù)表中的同名字段相對應(yīng),所以我們規(guī)定兩個字段的記錄值應(yīng)當(dāng)相等。在連接多個數(shù)據(jù)表時,一定要準(zhǔn)確設(shè)定數(shù)據(jù)表的連接條件,如果WHERE從句設(shè)定不正確,則可能導(dǎo)致查詢結(jié)果中出現(xiàn)眾多不相關(guān)的數(shù)據(jù)