一、Select語(yǔ)句:67頁(yè)
基本select語(yǔ)句:
select 語(yǔ)句的一般格式如下:
select
二、單表查詢:指僅涉及一個(gè)表的查詢)(P67:基本查詢)
(一)查詢指定的列
1.查詢表中所有列:在select語(yǔ)句指定列的位置上使用*號(hào)時(shí),表示查詢表的所有列。
例1.在xs表中查詢?nèi)w學(xué)生的信息。
use xsbook
select * from xs
2.查詢表中指定的列。查詢多列時(shí),列名之間要用逗號(hào)隔開(kāi)。
例2.在xsbook數(shù)據(jù)庫(kù)的xs表中查詢學(xué)生的姓名、專業(yè)名、借書(shū)數(shù)信息。
select 姓名,專業(yè)名,借書(shū)數(shù)
go
3.指定查詢結(jié)果中的列標(biāo)題
例3:給列加顯示標(biāo)題示例:
select 借書(shū)證號(hào) as cardno,姓名 as name, 借書(shū)數(shù) as cnt
go
select cardno=借書(shū)證號(hào),name=姓名,cnt=借書(shū)數(shù)
go
4.查詢經(jīng)過(guò)計(jì)算的列(即表達(dá)式的值):
例4:查詢所有書(shū)名、單價(jià)及8折之后的圖書(shū)價(jià)格
select 書(shū)名,單價(jià),八折=單價(jià)*0.8
go
(二)、選擇行:選擇表中的部分行或全部行作為查詢的結(jié)果:(P72:篩選查詢)
格式: select [all|distinct] [top n[percent]]<目標(biāo)列表達(dá)式列表>
1. 消除查詢結(jié)果中的重復(fù)行
例5:查詢所有專業(yè)名
select distinct 專業(yè)名
go
注意:與使用Distinct關(guān)鍵字相反,當(dāng)使用關(guān)鍵字All時(shí),將保留結(jié)果集中的所有行(默認(rèn)值為All)
例如:select all 姓名,性別
2. 限制查詢結(jié)果中的返回行數(shù)
例6:查詢xs表的前5個(gè)記錄信息
select top 5 * from xs
再如:select top 50 percent * from xs
(三)查詢滿足條件的行: 用where子句實(shí)現(xiàn)條件查詢:(P70:where條件查詢)
運(yùn)算符
比較運(yùn)算符
范圍運(yùn)算符
列舉運(yùn)算符
模糊匹配運(yùn)算符
空值運(yùn)算符
邏輯運(yùn)算符
1.使用比較運(yùn)算符:P70
例7:查詢xsbook數(shù)據(jù)庫(kù)xs表中借書(shū)數(shù)在2本以上的學(xué)生情況(含2本)。
select *
2.指定范圍:P72
其中:between關(guān)鍵字之后的是范圍的下限(即低值),and關(guān)鍵字之后的是范圍的上限(即高值)
例8:查詢xs表中1980 至1985年出生的學(xué)生情況。
select *
再如:查詢xs 表中非1980年出生的學(xué)生信息。
select *
3.使用列舉:
例9:查詢xs表中專業(yè)名為'計(jì)算機(jī)'、'信息工程'、'英語(yǔ)'或'自動(dòng)化'的學(xué)生的借書(shū)證號(hào),姓名,借書(shū)數(shù),專業(yè)名。
select 借書(shū)證號(hào),姓名,借書(shū)數(shù),專業(yè)名
注意:與in相對(duì)的是 not in,用于查找表達(dá)式的值不屬于指定集合的行。
例如:查詢xs表中非'計(jì)算機(jī)'、'信息工程'、'英語(yǔ)'專業(yè)的學(xué)生情況:
select *
4.使用通配符進(jìn)行模糊查詢:P70
例10:查詢xs表中姓“王”且姓名為兩個(gè)字的學(xué)生情況
select *
再如:查詢book表中書(shū)名含有“數(shù)據(jù)”字樣的圖書(shū)情況:
select *
注意:所有通配符都必須在like 子句中才有意義,否則將被當(dāng)作普通字符處理;且like子句中的匹配串也可以是一個(gè)不含通配符的完整的字符串(如下例)。
例11:查詢xs表中計(jì)算機(jī)專業(yè)的學(xué)生情況
select *
查詢相反的情況:則使用以下語(yǔ)句:
select *
即:如果like后面的匹配串中不含通配符,那么可以用“=”(等號(hào))運(yùn)算符來(lái)替代like。即上例中的where子句等價(jià)于:where 專業(yè)名='計(jì)算機(jī)'。
5.使用null的查詢
例12:查詢xs表中專業(yè)名尚不確定的學(xué)生情況。
select *
再如:查詢xs表中專業(yè)名已確定的學(xué)生的姓名,專業(yè)名。
select 姓名,專業(yè)名
6.多重條件查詢:使用邏輯運(yùn)算符(P70)
例13:查詢xs表中借書(shū)數(shù)在3本以下的計(jì)算機(jī)專業(yè)學(xué)生的姓名和借書(shū)證號(hào)。
select 借書(shū)證號(hào),姓名
再如:查詢計(jì)算機(jī)和英語(yǔ)專業(yè)學(xué)生的基本情況:
select *
(四)對(duì)查詢結(jié)果排序:P73
例14:查詢xs表中的全體學(xué)生信息并按出生時(shí)間排序,要求晚出生的學(xué)生排在前面。
select *
思考:若本例改為以下格式的語(yǔ)句,其功能是什么?
select top 5 *
例15:請(qǐng)查詢圖書(shū)的書(shū)名、六折后的書(shū)價(jià),并將結(jié)果按六折后的書(shū)價(jià)的降序排列。
select 書(shū)名,單價(jià)*0.6 as 書(shū)價(jià)六折
說(shuō)明:本例中,order by子句也可寫(xiě)為: order by 2,這里2代表排序字段或表達(dá)式(即:?jiǎn)蝺r(jià)*0.6)在select子句中出現(xiàn)的順序號(hào)。
注意:排序表達(dá)式可有多個(gè),例如:將xs表的學(xué)生按性別的降序排序,同性別的按出生時(shí)間的升序排序:
select *
(五)使用統(tǒng)計(jì)函數(shù):又稱集函數(shù),聚合函數(shù)
函數(shù)名
AVG
count
max
min
sum
1. SUM和AVG
功能:求指定的數(shù)值型表達(dá)式的和或平均值。
例16:查詢計(jì)算機(jī)專業(yè)學(xué)生所借圖書(shū)的平均數(shù)、借書(shū)總數(shù)。
select avg(借書(shū)數(shù)) as 平均借書(shū)數(shù),sum(借書(shū)數(shù)) as 借書(shū)總數(shù)
2. Max和Min
功能:求指定表達(dá)式的最大值或最小值。
例17:在xs表中查詢學(xué)生最多和最少的借書(shū)數(shù)
select max(借書(shū)數(shù)) as 最多借書(shū)數(shù),min(借書(shū)數(shù)) as 最少借書(shū)數(shù)
3. count:
(1).count(*):
功能:統(tǒng)計(jì)記錄總數(shù)。
例18:查詢學(xué)生總數(shù)
select count(*) as 學(xué)生總數(shù)
再如:查詢已借閱了圖書(shū)的學(xué)生人數(shù)。
select count(*) as 借閱了圖書(shū)的學(xué)生數(shù)
思考:查詢計(jì)算機(jī)專業(yè)的學(xué)生總數(shù)。
(2).count([all]|[distinct] 字段名)
功能:統(tǒng)計(jì)指定字段值不為空的記錄個(gè)數(shù),字段的數(shù)據(jù)類型可以是text、image、ntext、uniqueidentifier之外的任何類型。
例19:查詢學(xué)生總數(shù)
select count(借書(shū)證號(hào)) as 總?cè)藬?shù)
說(shuō)明:
例20:查詢出版社數(shù)。
select
注意:若select 列表中使用了統(tǒng)計(jì)函數(shù),則列表中不允許再指定任何字段名,用group by子句指定的字段除外。如:以下操作將會(huì)產(chǎn)生錯(cuò)誤:
select 借書(shū)證號(hào),count(*)
(六):對(duì)查詢結(jié)果分組:P76
例21:統(tǒng)計(jì)男、女生各多少人。
select 性別,count(*) as 人數(shù)
再如:查詢各專業(yè)人數(shù)及各專業(yè)的總借書(shū)數(shù)。
select 專業(yè)名,count(*) as 各專業(yè)人數(shù),sum(借書(shū)數(shù)) as 各專業(yè)的借書(shū)總數(shù)
說(shuō)明:在使用group by子句時(shí)應(yīng)注意以下幾點(diǎn):P77
1.在使用group by子句后,select列表中只能包含:group by子句中所指定的分組字段及統(tǒng)計(jì)函數(shù)。
2.having子句的用法:
例22:查詢學(xué)生人數(shù)在2人以上(含2人)的專業(yè)的專業(yè)名以及其學(xué)生人數(shù)
select 專業(yè)名,count(*) as 人數(shù)
3. 分組查詢時(shí):不含統(tǒng)計(jì)函數(shù)的條件,通常使用where子句;含有統(tǒng)計(jì)函數(shù)的條件,則只能用having子句。
例如:查詢“體育”專業(yè)男、女生各有多少人。
select 性別,count(*) as 人數(shù)
再如:查詢平均借書(shū)數(shù)在2本以上(含)的專業(yè)及其學(xué)生人數(shù)。
select 專業(yè)名,count(*) as 人數(shù)
(七)compute子句: P77
例23:查詢計(jì)算機(jī)專業(yè)學(xué)生的借書(shū)證號(hào),姓名,出生時(shí)間及學(xué)生人數(shù)。
select 借書(shū)證號(hào),姓名,出生時(shí)間
再如:查詢所有圖書(shū)的書(shū)名,單價(jià),出版社及均價(jià)。
select 書(shū)名,單價(jià),出版社
說(shuō)明:使用compute子句時(shí)應(yīng)注意以下幾點(diǎn):
1.compute <統(tǒng)計(jì)函數(shù)名> 子句中所涉及到的字段是select 字段名列表中已列出的字段名。如:以下操作將產(chǎn)生錯(cuò)誤,思考一下為什么?
select 書(shū)名,單價(jià),出版社
2.同時(shí)使用compute...by子句和order by子句也可實(shí)現(xiàn)分組統(tǒng)計(jì)查詢,但compute...by子句必須緊跟在order by 子句之后;compute ...by子句中的分組字段必須是order
例24:查詢各專業(yè)學(xué)生的姓名,性別,專業(yè)名及各專業(yè)的學(xué)生人數(shù)。
select 姓名,性別,專業(yè)名
再如:查詢各專業(yè)學(xué)生的姓名,性別,專業(yè)名,借書(shū)數(shù)及其總借書(shū)數(shù)。
select
總結(jié):group by:可用于解決分組統(tǒng)計(jì)的問(wèn)題。即只能顯示分組字段值及統(tǒng)計(jì)函數(shù)值,且每組只有一行統(tǒng)計(jì)數(shù)據(jù)。
(八)、select語(yǔ)句的其它功能:(選學(xué))
1、復(fù)制或創(chuàng)建表(into子句):P88
into子句功能:將select語(yǔ)句查詢所得的結(jié)果保存到一個(gè)新建的表中。
注意:into 子句應(yīng)放在select 字段名列表之后。into子句不能與compute子句一起使用。
例25:由xs表創(chuàng)建'計(jì)算機(jī)專業(yè)學(xué)生借書(shū)證'表,包括借書(shū)證號(hào)和姓名。
select 借書(shū)證號(hào),姓名
再如:將xs表數(shù)據(jù)全部復(fù)制到表xs4中。
select *
又例: 只復(fù)制xs表的結(jié)構(gòu),不復(fù)制記錄,即新表為空表。
select *
2、合并結(jié)果集(Union子句):可以將兩個(gè)或多個(gè)select查詢的結(jié)果合并成一個(gè)結(jié)果集,即合并兩個(gè)或多個(gè)查詢結(jié)果的記錄。
例26:合并xsbook庫(kù)中表xs1、xs2、xs3的全部記錄(假設(shè)這三個(gè)表的結(jié)構(gòu)相同)。
select *
union
union
3、顯示變量或表達(dá)式的值(無(wú)數(shù)據(jù)源查詢):
如:
又如:select 123.56,'中國(guó)','沈陽(yáng)'
注意:這里也可以為要輸出的值指定列顯示標(biāo)題,如: select '中國(guó)' as 國(guó)家,'沈陽(yáng)' as 城市
4.用select 語(yǔ)句向表中插入多行記錄。
格式:insert into 表名[(字段列表)]
注意:insert into表名[(字段列表)]和select查詢結(jié)果集的列數(shù)、列序和對(duì)應(yīng)列的數(shù)據(jù)類型必須一致。
例27:將表xs2中全體學(xué)生的記錄數(shù)據(jù)追加到表xs1中。
insert into xs1
再如:將表xs3中女生的記錄追加到表xs1中,要求只追加借書(shū)證號(hào),姓名,性別,出生時(shí)間字段值。
insert into xs1(借書(shū)證號(hào),姓名,性別,出生時(shí)間)
注意:一個(gè)select 語(yǔ)句中各子句的順序如下:
select---[記錄范圍]---字段名列表---[into]---[from]---[where]---[group by]---[having]---[order by]---[compute---[by]]
練習(xí)一:以下所有操作均針對(duì)xsbook庫(kù)中的表xs或表book進(jìn)行。其中37-44為選做
1、查詢xs表中學(xué)生的借書(shū)證號(hào),姓名,借書(shū)數(shù)。
2、查詢book表中所有圖書(shū)信息。
3、查詢book表中的所有出版社名稱。
4、查詢book表中書(shū)名、單價(jià)、庫(kù)存量及各種庫(kù)存圖書(shū)的總價(jià)值(即總金額)。
5、查詢xs表中前3名學(xué)生的姓名,性別,出生時(shí)間。
6、查詢xs表中前30%學(xué)生的相關(guān)信息。
7、查詢xs表中計(jì)算機(jī)專業(yè)學(xué)生的相關(guān)信息。
8、查詢xs表中1979年后出生的學(xué)生的信息。
9、查詢book表中圖書(shū)單價(jià)在30-50之間的所有圖書(shū)的書(shū)名、單價(jià)。
10、查詢xs表中1980年出生的學(xué)生姓名,性別、出生時(shí)間。
11、查詢book表中圖書(shū)單價(jià)高于50元(不含50元)或低于30元(不含30元)的圖書(shū)的書(shū)名、單價(jià)。
12、查詢xs表中計(jì)算機(jī)、英語(yǔ)、體育、政治專業(yè)的學(xué)生的信息。
13、查詢xs表中非計(jì)算機(jī)、英語(yǔ)、體育專業(yè)的學(xué)生姓名、性別。
14、查詢book表中所有圖書(shū)名稱中包括了“政治”字樣的圖書(shū)的書(shū)名、單價(jià)。
15、查詢xs表中所有“王”姓同學(xué)的姓名、性別、出生時(shí)間。
16、查詢xs表中所有非計(jì)算機(jī)專業(yè)學(xué)生的信息。
17、查詢xs表中專業(yè)已確定的學(xué)生的借書(shū)證號(hào)、姓名。
18、查詢xs表中專業(yè)尚不確定的學(xué)生的信息。
19、查詢xs表中英語(yǔ)專業(yè)全體女生的姓名,出生時(shí)間。
20、查詢xs表中借書(shū)數(shù)在2本以上的全體男生的相關(guān)信息。
21、查詢xs表中計(jì)算機(jī)專業(yè)或者英語(yǔ)專業(yè)的學(xué)生姓名和借書(shū)證號(hào)。
22.查詢計(jì)算機(jī)專業(yè)的借書(shū)證號(hào),姓名,性別,并按學(xué)生借書(shū)數(shù)的降序排列記錄。
23.將xs表的所有記錄排序:先按性別排序,同性別的同學(xué)再按出生日期的升序排列記錄。
24.按庫(kù)存圖書(shū)的價(jià)值的升序排序查詢所有圖書(shū)的ISBN,書(shū)名及庫(kù)存圖書(shū)的價(jià)值(即單價(jià)*庫(kù)存量)。
25.查詢出生較早的三名同學(xué)的相關(guān)信息。
26.查詢計(jì)算機(jī)專業(yè)的學(xué)生總數(shù)。
27.查詢?nèi)w學(xué)生的總借書(shū)數(shù)、平均借書(shū)數(shù)、最多借書(shū)數(shù)和最少借書(shū)數(shù)。
28.查詢book表中有幾種圖書(shū)。
29.查詢xs表中有幾個(gè)專業(yè)。
30.查詢各專業(yè)的平均借書(shū)數(shù)。
31.查詢計(jì)算機(jī)和英語(yǔ)專業(yè)分別有多少學(xué)生。
32.查詢學(xué)生人數(shù)在2人以上(含)的專業(yè)及其學(xué)生人數(shù)。
33.查詢計(jì)算機(jī)專業(yè)學(xué)生的借書(shū)證號(hào),姓名,出生時(shí)間,借書(shū)數(shù)及平均借書(shū)數(shù)。
34.查詢所有圖書(shū)的書(shū)名,單價(jià),庫(kù)存量及庫(kù)存總量。
35.查詢各出版社所出版圖書(shū)的書(shū)名,單價(jià),出版社及平均價(jià)格。
36.查詢各專業(yè)學(xué)生的借書(shū)證號(hào),姓名,出生時(shí)間,專業(yè)名及其學(xué)生人數(shù)。
37.由xs表創(chuàng)建'英語(yǔ)專業(yè)學(xué)生'表,其中包括英語(yǔ)專業(yè)學(xué)生的全部信息。
38.復(fù)制xs表的結(jié)構(gòu)保存在表xin中,表xin中含有借書(shū)證、姓名、性別、出生時(shí)間字段。
39.將表xs1,xs2,xs3中的記錄合并到表women中,women中只包括女同學(xué)的借書(shū)證號(hào),姓名,出生時(shí)間。注意:每個(gè)select語(yǔ)句都要加where子句。
40.用下列形式顯示字符串:“中國(guó)”,“大連”,“170001”。
41.顯示計(jì)算表達(dá)式123190*3/45-2321的值。
42.顯示系統(tǒng)的當(dāng)前日期和時(shí)間。注意:用函數(shù)getdate()獲取系統(tǒng)當(dāng)前日期日間。
43.將表xs2中80年之前出生的學(xué)生記錄數(shù)據(jù)追加到表xs1中。
44.將表xs3中借書(shū)數(shù)不為0的記錄追加到表xs1中,要求只追加借書(shū)證號(hào),姓名,性別,出生時(shí)間字段值。
聯(lián)系客服