版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與SQLServer第四課檢索數(shù)據(jù)第四課檢索數(shù)據(jù)
4.1Transact-SQL運算符和函數(shù)
4.2SELECT語句
4.3高級SELECT語句
4.4關(guān)系運算實訓(xùn)四檢索數(shù)據(jù)4.1Transact-SQL語言數(shù)據(jù)運算
4.1.1Transact-SQL運算符(1)算術(shù)運算符:+、-、*、/、%注:null與任何值運算結(jié)果為null;+、-運算可用于datetime型數(shù)據(jù)。(2)字符串運算符:+(3)比較運算符:=、>、<、>=、<=、<>、!=、!>、!<(4)邏輯運算符:not、and、or、between(指定范圍)、
like(模糊匹配)、all(所有)、in(包含于)、any(任意一個)、some(部分)、exists(存在)。
邏輯常量:ture、false。(6)賦值運算符:=4.1.2Transact-SQL函數(shù)1、數(shù)學(xué)函數(shù)2、字符串函數(shù)3、日期時間函數(shù)4、類型轉(zhuǎn)換函數(shù)
1.數(shù)學(xué)函數(shù)sin(n)(正弦)
asin(n)(反正弦)pi()(圓周率)abs(n)(絕對值)exp(n)(指數(shù))log(n)(自然對數(shù))power(n,m)(nm)round(n,m)(四舍五入)sign(n)(符號)sqrt(n)(平方根)rand([n])(隨機數(shù))
2.字符串函數(shù)str(n,n1,n2)(數(shù)值轉(zhuǎn)換為字符串)len(s)(求串長)left(s,n)(左取子串)right(s,n)(右取子串)substring(s,n1,n2)(取子串)lower(s)(轉(zhuǎn)小寫)upper(s)(轉(zhuǎn)大寫)ltrim(s)(刪除左空格)rtrim(s)(刪除右空格)space(n)(產(chǎn)生空空格)reverse(s)(反轉(zhuǎn)字符串)charindex(s1,s2)(字符串s1在字符串s2中的起始位置)
3.日期時間函數(shù)getdate()、year(d)、month(d)day(d)datepart(datepart,d)(日期的datepart部分,datepart為日期類型,參見表4-4)dateadd(datepart,n,d)(日期加,即日期d的datepart部分加數(shù)值n后的新日期)datediff(datepart,d1,d2)(日期減,即日期d1與d2的datepart部分相差的值)例4-1計算香港回歸已經(jīng)有多少年、多少天,今天以后15個月是哪一天。腳本:
SELECTGETDATE(),DATEDIFF(YEAR,'1997-7-1',GETDATE()), DATEDIFF(DAY,'1997-7-1',GETDATE()),DATEADD(MONTH,15,GETDATE())
4.類型轉(zhuǎn)換函數(shù)convert(data_type,expression[,style])cast(expressionASdata_type)
其中,Style(日期樣式)取值參見表4-5。例4-2將當前時間日期轉(zhuǎn)換為美國格式(mm/dd/yyyy及mm-dd-yyyy)、ANSI(yyyy.mm.dd),并將當前時間的時間部分轉(zhuǎn)換為字符串。
腳本:selectgetdate(),convert(char(10),getdate(),101),convert(char(10),getdate(),102),convert(char(10),getdate(),110),convert(char(10),getdate(),114)4.2SELECT語句
在SQL語句中,SELECT語句是最頻繁使用的也是最重要的語句。SELECT<表達式>[AS<別名>][INTO<目標表名>]FROM<源表名>[WHERE<條件>][GROUPBY<列>[HAVING<條件>]][ORDERBY<列>[DESC]]4.2.1操縱列1.計算表達式值例4-1、例4-22.輸出列例4-3
檢索所有學(xué)生的所有信息。腳本:select*froms3、設(shè)置列標題例4-4
檢索所有學(xué)生的所有信息。腳本:selectsnameasname,'is',
year(getdate())-year(birthday)asagefroms4.1.2操縱行1.普通查詢例4-5
檢索所有1985年12月31日以后以及1982年12月31日以前出生的女生的姓名和出生日期。腳本:
selectsnamebirthdayfromswheresex=‘女'and(year(birthday)>=1986oryear(birthday)<=1982)
2.模糊查詢模糊匹配:like
通配符:%(*)、_(?)、[](指定范圍)。
例4-6
檢索所有姓李以及第二個字為李的住址在西安的學(xué)生的姓名、性別和住址。
selectsname,sex,addressfromswhere(snamelike'李%'orsnamelike'_李%')andaddresslike'%西安%'注:SQL語言中將一個漢字視為一個字符而非2個字符。4.1.2操縱行4.2.3匯總和排序1.聚合函數(shù)
count([distinct]<字段表達式>|*)max([distinct]<字段表達式>)min([distinct]<字段表達式>)sum([distinct]<字段表達式>)
avg([distinct]<字段表達式>)其中,distinct為取消重復(fù)記錄。2.分類
groupby<列>注:groupby子句可以使用表達式,但不能使用text、image、bit類型數(shù)據(jù)。例4-7
查詢每個學(xué)生所選課程的數(shù)量、總分及最高、最低分。腳本:
selectsno,count(*)asnum,sum(score),max(score),min(score)fromscgroupbysno3.分類后過濾記錄
having<條件>
例4-8
查詢平均成績及格的學(xué)生所選課程的數(shù)量、總分及最高、最低分。腳本:
selectsno,count(*)asnum,sum(score),max(score),min(score)fromscgroupbysnohavingavg(score)>=60having與where功能相同,不同的是having在groupby后執(zhí)行,可以使用聚合函數(shù)。4.2.4排序orderby<列>[desc]例4-9
檢索每個學(xué)生所選課程的數(shù)量、總分、平均分及最高、最低分,并按平均分排名次。規(guī)定當平均分相等時,最高分高在前。腳本:
selectsno,count(*)asnum,sum(score),avg(score),max(score),min(score)fromscgroupbysno
orderbyavg(score)desc,max(score)desc4.3高級SELECT語句
一、連接查詢二、子查詢?nèi)?、集合運算四、生成新表五、嵌入式Transact-SQL4.3.1連接查詢
所謂多表查詢就是從幾個表中檢索信息,這種操作通??梢酝ㄟ^表的連接實現(xiàn)。實際上,連接操作是區(qū)別關(guān)系數(shù)據(jù)庫管理系統(tǒng)與非關(guān)系數(shù)據(jù)庫管理系統(tǒng)的最重要的標志。
1.無限制連接——笛卡爾積無where子句,一般無實際意義。
例4-10
求表s與表sc的笛卡兒積。
腳:
select*froms,sc
from后有多個表,where子句為一F表達式。注:當from后有多個表時,where應(yīng)包含這多個表的關(guān)系(一般是字段的相等關(guān)系),否則即成為了笛卡爾積。
2.內(nèi)連接——F連接
例4-11
檢索選修了數(shù)據(jù)庫應(yīng)用課程及VB程序設(shè)計課程的學(xué)生的學(xué)號、姓名、課程名、成績。腳本一:腳本二:3.自連接
連接不僅可以在表之間進行,也可以使一個表同其自身進行連接,稱為自連接。
例4-12
檢索所有選修了課程編號為c001及c003的學(xué)生的學(xué)號。腳本:
selectsc1.snofromscassc1,scassc2wheresc1.sno=sc2.snoando='c001'ando='c003'4.3.2子查詢
如果一個SELECT語句嵌套在WHERE子句中,則稱這個SELECT語句為子查詢或內(nèi)層查詢,而包含子查詢的SELECT語句稱為主查詢或外查詢。為了區(qū)別主、子查詢,子查詢應(yīng)加小括號。
1.不相關(guān)子查詢所謂不相關(guān)子查詢是指子查詢的查詢條件不依賴于主查詢,此類查詢在執(zhí)行時首先執(zhí)行子查詢,然后執(zhí)行主查詢。
邏輯運算符:in(包含于)、any(某個值)、some(某些值)、all(所有值)、exists(存在結(jié)果)例4-13檢索選修了數(shù)據(jù)庫應(yīng)用課程的學(xué)生的學(xué)號、姓名、成績。腳本:selectsc.sno,sname,scorefroms,scwheresc.sno=s.snoandcno=(selectcnofromcwherecname='數(shù)據(jù)庫應(yīng)用')例4-14檢索選修了數(shù)據(jù)庫應(yīng)用及VB程序設(shè)計課程的學(xué)生的學(xué)號、姓名、課程名、成績。腳本:selectsc.sno,sname,cname,scorefroms,c,scwheresc.sno=s.snoando=oandoin(selectcnofromcwherecname='數(shù)據(jù)庫應(yīng)用'orcname='VB程序設(shè)計')2.相關(guān)子查詢
所謂相關(guān)子查詢是指子查詢的查詢條件依賴于主查詢,此類查詢在執(zhí)行時首先執(zhí)行主查詢得到第一個元組,再根據(jù)主查詢第一個元組的值執(zhí)行子查詢,依此類推直至全部查詢執(zhí)行完畢。
例4-15
檢索平均成績及格的學(xué)生的學(xué)號、姓名。腳本:
selectsno,snamefromswhereexists(selectsnofromscwheres.sno=sc.snogroupbysnohavingavg(score)>=60)4.3.3集合運算
使用union運算符可以將兩個或兩個以上的查詢結(jié)果合并為一個結(jié)果集。
例4-16
查詢表s和表s_bak中的所有學(xué)生的所有信息(假設(shè)表s_bak已存在,且結(jié)構(gòu)與表s相同)。
腳本:
(select*froms)union(select*froms_bak)4.3.4生成新表1.生成臨時表
INTO#/##<新表>
臨時表保存在臨時數(shù)據(jù)庫Tempdb中,并由SQLServer2000負責(zé)刪除。
例4-17查詢平均成績超過總平均成績的學(xué)生的學(xué)號、姓名、平均成績。
腳本:
selectsno,avg(score)asavginto#tempfromscgroupbysnohavingavg(score)>=(selectavg(score)fromsc)2.生成永久表INTO<新表>
例4-18創(chuàng)建一個包含信息501班學(xué)生的學(xué)號、姓名、性別以及出生日期的表。腳本:
selectsno,sname,sex,birthdayintotempfromswhereclass='信息501'4.3.5嵌入式Transact-SQL1.概念在宿主語言中使用的T-SQL語言。2.規(guī)則
T-SQL語句加標志以示區(qū)別,如PB中SQL語句應(yīng)加“;”。3.共享變量
T-SQL和主語言中均可使用,在主語言中定義,T-SQL中使用時加“:”。4.接口
SQL通訊區(qū)(SQLCA),其中
SQLCode=0操作成功
=-1操作失敗
=100操作成功但無返回數(shù)據(jù)
4.4關(guān)系運算
4.4.1關(guān)系模型1.關(guān)系的數(shù)學(xué)定義
定義4.1域(Domain)是一組具有相同數(shù)據(jù)類型的值的集合。定義4.2給定一組域D1、D2、…、Dn,D1、D2、…、Dn的笛卡兒積為D1XD2X…XDn={(d1,d2,…,dn)|diDi,i=1,…,n}
其中,每一個元素(d1,d2,…,dn)稱為一個元組(簡稱元組),元素中每一個值di稱為一個分量。例4-19
給定三個域:姓名={張三,李四}、性別={男,女}、課程={數(shù)據(jù)庫,軟工}則域上的笛卡兒積為:姓名X性別X課程={(張三,男,數(shù)據(jù)庫),(張三,男,軟工),(張三,女,數(shù)據(jù)庫),(張三,女,軟工),(李四,男,數(shù)據(jù)庫),(李四,男,軟工),(李四,女,數(shù)據(jù)庫),(李四,女,軟工)}定義4.3域D1、D2、…、Dn上的笛卡兒積的子集稱為在域D1、D2、…、Dn上的關(guān)系,用R(D1,D2,…,Dn)表示。其中,R表示關(guān)系名,n為關(guān)系的度或目或元數(shù)。例4-20給定三個域:姓名={張三,李四}、性別={男,女}、課程={數(shù)據(jù)庫,軟工}
則域上的教師授課關(guān)系為:教師授課(姓名,性別,課程)={(張三,男,數(shù)據(jù)庫),(李四,女,軟工)},其中n=3。
2.關(guān)系的性質(zhì)
(1)屬性取自同一個域。
(2)屬性是原子的,且屬性名不能相同。
(3)沒有重復(fù)的元組。
(4)沒有行序。
(5)理論上沒有列序,為方便可以有列序。4.4.2關(guān)系代數(shù)
1.傳統(tǒng)的集合運算(1)并(Union):R∪S={t|tR∨tS}(2)交(Intersection):R∩S={t|tR∧tS}(3)差(Difference):R-S={t|tR∧tS}(4)笛卡兒積(CartesianProduct):
RXS={t|t=(tm,tn)∧tmR∧tnS}
例4-21設(shè)關(guān)系R和關(guān)系S具有相同的關(guān)系模式,分別求出關(guān)系R和S的并、交和差。例4-22由學(xué)生關(guān)系S和課程關(guān)系C,求出其廣義笛卡兒積。2.專門的關(guān)系運算
(1)選擇(Selection):σF(R)={t|tR∧F(t)=true}(2)投影(Projection):ΠA(R)={t[A]|tR}(3)連接(Join):將兩個關(guān)系連在一起,形成一個新的關(guān)系。
包括:θ連接、等值連接、F連接、自然連接。(4)除(Division)
:R(X,Y)÷S(Y,Z)=ΠX(R)—ΠX((ΠX(R)XΠY(S))-R)
或
R(X,Y)÷S(Y,Z)={tr[X]|trR∧∏Y(S)Yx}例4-23由學(xué)生關(guān)系S,查詢所有女生的信息。關(guān)系代數(shù)表達式:σSEX='女'(S)或σ3='女'(S)例4-24由學(xué)生關(guān)系S,查詢所有學(xué)生的姓名、性別信息。關(guān)系代數(shù)表達式:ΠSNAME,SEX(S)或Π2,3(S)例4-25由學(xué)生關(guān)系S、課程關(guān)系C和選課關(guān)系SC,求、和。
例4-26由選課關(guān)系SC、課程關(guān)系C,求SC÷C。方法一:按公式R(X,Y)÷S(Y,Z)=ΠX(R)—ΠX(ΠX(R)XΠY(S))-R)計算SC(X,Y)÷C(Y),即X=(SNO),Y=(CNO),Z=(CNAME,CREDIT)。①計算T1=ΠSNO(SC)②計算T2=T1XΠCNO(C)③計算T3=T2-SC④計算T4=ΠSNO(T3)⑤計算SC÷C=T1-T4
方法二:按公式R(X,Y)÷S(Y,Z)={tr[X]|trR∧∏Y(S)Yx}。①
求R中X的各分量的象集Yx。
SC中,X=(SNO),其值有:{(1001),(1002),(1003),(2001),(2002)},其象集為:
Y(1001)={(c001),(c003)}Y(1002)={(c001)}Y(1003)={(c001)}Y(2001)={(c001),(c003)}Y(2002)={(c003)}②
求出S在Y上的投影ΠY(S)。
ΠCNO(C)={(c001),(c003)}③
選取∏Y(S)Yx的分量x。顯然Y(1001)和Y(2001)包含{(c001),(c003)}所以SC÷C={(1001),(2001)}3.關(guān)系代數(shù)表達式在關(guān)系代數(shù)中介紹了9種關(guān)系代數(shù)運算,其中并、差、笛卡兒積、選擇和投影是基本運算,交、連接、自然連接、除可以用這5種基本運算經(jīng)過有限次復(fù)合來表達。由關(guān)系運算有限次復(fù)合組成的式子稱為關(guān)系代數(shù)表達式。關(guān)系代數(shù)表達式的運算結(jié)果仍為關(guān)系。實際上,可以用關(guān)系代數(shù)表達式表示各種數(shù)據(jù)查詢操作。例4-27
對“學(xué)生選課”關(guān)系模型:
S(SNO,SNAME,SEX)C(CNO,CNAME,CREDIT)SC(SNO,CNO,SCORE)用關(guān)系代數(shù)表達式表示以下查詢并寫出相應(yīng)T-SQL語句。
(1)選修了課程編號為c001的課程的學(xué)生的學(xué)號。關(guān)系代數(shù)表達式:
∏SNO(σCNO='c001'(SC))T-SQL語句:
selectsnofromscwherecno='c001‘(2)沒有選修編號c01的課程的學(xué)生的學(xué)號。關(guān)系代數(shù)表達式:
∏SNO(R)-∏SNO(σCNO='c001'(SC))
注意不能寫為:∏SNO(σCNO<>'c001'(SC))T-SQL語句:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題79 實驗十:測量電動勢和內(nèi)電阻(含答案)-十年(2014-2023)高考物理真題分項匯編(全國通)
- 福建師范大學(xué)《體育統(tǒng)計學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《聚合物表征與測試實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 火災(zāi)自動報警系統(tǒng)驗收規(guī)范
- 必修二歷史第22課教學(xué)課件教學(xué)
- 2024年延邊客運從業(yè)資格證理論考題
- 2024年上海客運從業(yè)資格證實操考試題庫
- 試題山西省懷仁市重點中學(xué)2025屆高三數(shù)學(xué)第一學(xué)期期末達標檢測模擬試題含解析
- 2024年南昌客運資格證題目及答案解析
- 2024年陜西客運駕駛從業(yè)資格證模擬考試題答案
- 五行生克乘侮在臨床中的運用
- 供應(yīng)商考核稽查表
- 形式發(fā)票樣本(Proforma Invoice)
- 九年級個人學(xué)習(xí)目標展示
- 等腰三角形(習(xí)題)教案
- 平面四桿機構(gòu)急回特性說課課件
- QPCJ鋼軌鋁熱焊接工藝4-2ppt課件
- 液壓油缸計算器
- 絕世武林秘籍峨眉十二樁之八.附
- 高考英語3500詞匯表(附音標無中文釋譯
- 二手設(shè)備買賣合同(范本)
評論
0/150
提交評論