版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
四數(shù)據(jù)查詢與視圖
4.1SELECT語句概述
4.2單表查詢
4.3多表查詢
4.4嵌套查詢
4.5視圖 SQL語言最主要的功能是數(shù)據(jù)庫查詢,它是數(shù)據(jù)庫其他操作(如統(tǒng)計、插入、修改、刪除)的基礎(chǔ),也是DBMS的核心功能之一。使用SQL語句將要連接的表、查詢所需的字段、篩選記錄的條件、記錄分組的依據(jù)、排序的方式以及查詢結(jié)果的顯示方式,寫在一條SQL語句中,就可以從表或視圖中迅速、方便地檢索數(shù)據(jù),具有十分靈活的使用方式和豐富的功能。4.1SELECT語句概述
SELECT
select_list[INTO
new_table]FROM
table_source
[WHERE
search_condition][GROUP
BY
group_by_expression][HAVING
search_condition][ORDER
BY
order_expression[ASC|DESC]]
<select_list>::={*|{table_name|view_name|table_alias}.* |{column_name|expression}[[AS]column_alias] |column_alias=expression}[,...n]
將查詢結(jié)果存入新表new_table中。指定查詢條件。指定將查詢結(jié)果進行分組。
與GROUPBY聯(lián)合使用,指定分組條件。
指定查詢結(jié)果按order_expression進行排序。
指定在FROM子句內(nèi)返回表或視圖的所有列。指定查詢的列名。指定列名、常量、函數(shù)以及由運算符連接的列名、常量和函數(shù)的任意組合,或者是子查詢。
指定查詢結(jié)果集內(nèi)列名的別名。
整個SELECT語句的含義是:根據(jù)WHERE子句的條件表達式,從FROM子句指定的基本表或視圖中找出滿足條件的記錄,再按照SELECT子句中的select_list,選出記錄中的列值、或計算值、或匯總值形成的查詢結(jié)果。
SELECT語句既可以完成簡單的單表查詢,也可以完成復(fù)雜的多表查詢和嵌套查詢。4.2單表查詢——選擇表中若干列如果用戶只對表中部分列感興趣,查詢時可不使用WHERE子句,選擇表中的全部列或部分列,也稱作投影查詢。基本語法為:SELECT[ALL|DISTINCT][TOPn[PERCENT]]<select_list>FROMtable_source
參數(shù)說明:ALL:默認(rèn)設(shè)置,指定在結(jié)果集中可以顯示重復(fù)行。DISTINCT:指定在結(jié)果集中去除重復(fù)行,只顯示唯一行。TOPn[PERCENT]:指定只從查詢結(jié)果集中輸出前n行或前百分之n行?!纠?.1】查詢?nèi)w學(xué)生的學(xué)號、姓名和年齡。SELECTSNO,SNAME,SAGEFROMXS查詢指定列4.2單表查詢——選擇表中若干列【例4.2】查詢?nèi)w學(xué)生的情況。SELECTSNO,SNAME,SDEPT,SSEX,SAGE,SHEIGHT,SCPM,SRMKFROMXS或SELECT*FROMXS
查詢?nèi)苛?.2單表查詢——選擇表中若干列【例4.3】查詢?nèi)w學(xué)生的姓名及出生年份。(假設(shè)當(dāng)前年份為2009年)。SELECTSNAME,2009-SAGEFROMXS
查詢結(jié)果中包含計算項4.2單表查詢——選擇表中若干列【例4.4】查詢?nèi)w學(xué)生的姓名,并將姓和名分別顯示。SELECTSNAME,SUBSTRING(SNAME,1,1),SUBSTRING(SNAME,2,2)FROMXS查詢結(jié)果中包含計算項4.2單表查詢——選擇表中若干列【例4.5】對例4.4中的查詢結(jié)果指定列標(biāo)題。查詢結(jié)果中的列標(biāo)題顯示SELECTSNAMEAS學(xué)生姓名,SUBSTRING(SNAME,1,1)AS姓,SUBSTRING(SNAME,2,2)AS名FROMXS或SELECT學(xué)生姓名=SNAME,姓=SUBSTRING(SNAME,1,1),名=SUBSTRING(SNAME,2,2)FROMXS4.2單表查詢——選擇表中若干列【例4.6】對比以下兩條查詢語句的執(zhí)行結(jié)果,理解DISTINCT的作用。查詢結(jié)果中消除重復(fù)行①SELECTSDEPT,SSEXFROMXS②SELECTDISTINCTSDEPT,SSEXFROMXS
4.2單表查詢——選擇表中若干列【例4.7】查詢XS表中前6個學(xué)生的情況。限制結(jié)果集的返回行數(shù)①SELECTTOP6*FROMXS
②SELECTTOP60PERCENT*FROMXS
4.2單表查詢——選擇表中若干列【例4.8】查詢xs_kc表中學(xué)生成績,對其成績按以下規(guī)則進行替換:成績90~100為“優(yōu)秀”,80~89為“良好”,70~79為“中等”,60~69為“及格”,<60為“不及格”。
替換顯示結(jié)果的內(nèi)容SELECT學(xué)號=SNO,課程號=CNO,成績=SCORE,等級=CASE
WHENSCORE<60THEN'不及格'
WHENSCORE>=60ANDSCORE<=69THEN'及格'
WHENSCORE>=70ANDSCORE<=79THEN'中等'
WHENSCORE>=80ANDSCORE<=89THEN'良好'
ELSE'優(yōu)秀'ENDFROMXS_KC
4.2單表查詢——選擇表中若干列查詢時使用WHERE子句,選擇表中滿足條件的若干行,也稱作選擇查詢?;菊Z法為:SELECTselect_listFROMtable_sourceWHEREsearch_condition
查詢條件運算符比較=、>、<、>=、<=、<>或!=等;確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重條件AND,OR4.2單表查詢——選擇表中若干行【例4.9】查詢選修課程號為‘C01’的學(xué)生的學(xué)號和成績。SELECTSNO,SCOREFROMXS_KCWHERECNO='C01'
比較運算符【例4.10】查詢成績高于85分的學(xué)生的學(xué)號、課程號和成績。
SELECTSNO,CNO,SCOREFROMXS_KCWHERESCORE>854.2單表查詢——選擇表中若干行【例4.11】查詢年齡在20~23歲(含20歲和23歲)之間的學(xué)生姓名、系別。SELECTSNAME,SDEPTFROMXSWHERESAGEBETWEEN20AND23確定范圍4.2單表查詢——選擇表中若干行【例4.12】查詢選修C01或C02的學(xué)生的學(xué)號、課程號和成績。SELECTSNO,CNO,SCOREFROMXS_KCWHERECNOIN('C01','C02')確定集合4.2單表查詢——選擇表中若干行【例4.13】查詢所有姓張的學(xué)生的學(xué)號和姓名。SELECTSNO,SNAMEFROMXSWHERESNAMELIKE'張%'字符匹配【例4.14】查詢姓名中第二個漢字是“一”的學(xué)生的學(xué)號和姓名。SELECTSNO,SNAMEFROMXSWHERESNAMELIKE'_一%'4.2單表查詢——選擇表中若干行【例4.15】查詢沒有備注信息的學(xué)生情況。SELECT*FROMXSWHERESRMKISNULL涉及空值4.2單表查詢——選擇表中若干行【例4.16】查詢電力專業(yè)所有男生的情況。SELECT*FROMXSWHERESDEPT='電力'ANDSSEX='男'多重條件【例4.17】查詢選修C01或C02且分?jǐn)?shù)大于85分的學(xué)生的學(xué)號及成績。SELECTSNO,SCOREFROMXS_KCWHERE(CNO='C01'ORCNO='C02')ANDSCORE>854.2單表查詢——選擇表中若干行4.2單表查詢——聚集函數(shù)
計算諸如平均值和總和的函數(shù)被稱為聚集函數(shù)。使用聚集函數(shù)時,系統(tǒng)對整個表或表的某個組中的列進行匯總、計算,然后為它創(chuàng)建相應(yīng)字段的單個的值。在SELECT語句中可以單獨使用聚集函數(shù),也可以與語句GROUPBY聯(lián)合使用,列的數(shù)據(jù)類型決定了在該列上可以使用的聚集函數(shù)類型。
函數(shù)作用數(shù)據(jù)類型COUNT統(tǒng)計列中元組的個數(shù)任意類型MIN求一列值中的最小值除bit以外的數(shù)據(jù)類型MAX求一列值中的最大值SUM計算一列值的總和只能用于數(shù)值型字段,如int、decimal、float、money等AVG計算一列值的平均值【例4.18】查詢電力系學(xué)生的總?cè)藬?shù)。SELECTCOUNT(*)FROMXSWHERESDEPT='電力'COUNT函數(shù)【例4.19】查詢選修了課程的學(xué)生人數(shù)。SELECTCOUNT(DISTINCTSNO)FROMXS_KC4.2單表查詢——聚集函數(shù)
【例4.20】查詢課程號為‘C01’的學(xué)生成績的最高分和最低分。SELECTMAX(SCORE)最高分,MIN(SCORE)最低分FROMXS_KCWHERECNO='C01'MAX函數(shù)和MIN函數(shù)【例4.21】查詢課程號為‘C01’的學(xué)生成績的總分和平均分。
SELECTSUM(SCORE)總分,AVG(SCORE)平均分FROMXS_KCWHERECNO='C01'SUM函數(shù)和AVG函數(shù)4.2單表查詢——聚集函數(shù)
4.2單表查詢——查詢結(jié)果分組
在SELECT語句中使用GROUPBY子句可以將查詢結(jié)果分組,并返回行的匯總信息,即對于GROUPBY子句中定義的每個組,各返回一個結(jié)果。此時,SELECT子句中的列名必須為分組列或列函數(shù)?;菊Z法為:
[GROUPBY[ALL]group_by_expression[,...n][WITH{CUBE|ROLLUP}]]其中,WITHCUBE或WITHROLLUP用于在查詢結(jié)果中附加匯總結(jié)果。
【例4.22】查詢各系學(xué)生人數(shù)。SELECTSDEPT系別,COUNT(*)人數(shù)FROMXSGROUPBYSDEPTGROUPBY基本用法4.2單表查詢——查詢結(jié)果分組
【例4.23】查詢各門課程的平均成績和選修人數(shù)。SELECTCNO課程號,AVG(SCORE)平均成績,COUNT(*)選修人數(shù)FROMXS_KCGROUPBYCNOGROUPBY基本用法4.2單表查詢——查詢結(jié)果分組
【例4.24】查詢各系男生人數(shù)、女生人數(shù)。SELECTSDEPT系別,SSEX性別,COUNT(*)人數(shù)FROMXSGROUPBYSDEPT,SSEXGROUPBY基本用法4.2單表查詢——查詢結(jié)果分組
【例4.25】查詢各系男生人數(shù)、女生人數(shù)、各系人數(shù)和總?cè)藬?shù)。SELECTSDEPT系別,SSEX性別,COUNT(*)人數(shù)FROMXSGROUPBYSDEPT,SSEXWITHROLLUP使用ROLLUP和CUBE子句4.2單表查詢——查詢結(jié)果分組
【例4.26】除例4.25的查詢要求外,還需匯總男生總數(shù)和女生總數(shù)。SELECTSDEPT系別,SSEX性別,COUNT(*)人數(shù)FROMXSGROUPBYSDEPT,SSEXWITHCUBE使用ROLLUP和CUBE子句4.2單表查詢——查詢結(jié)果分組
【例4.27】查詢平均成績80分以上的學(xué)生學(xué)號和平均成績。
SELECTSNO,AVG(SCORE)AS平均成績FROMXS_KCGROUPBYSNOHAVINGAVG(SCORE)>=80使用HAVING子句4.2單表查詢——查詢結(jié)果分組
【例4.28】查詢?nèi)w學(xué)生的情況,查詢結(jié)果按所在系的系號升序排列,同系學(xué)生按年齡降序排列。SELECT*FROMXSORDERBYSDEPT,SAGEDESC【例4.29】查詢學(xué)生的學(xué)號和平均分,且按平均分降序排列。
SELECTSNO,AVG(SCORE)AS平均成績FROMXS_KCGROUPBYSNOORDERBY平均成績
DESC4.2單表查詢——查詢結(jié)果分組
【例4.30】查詢電力系學(xué)生的學(xué)號、姓名、年齡,并產(chǎn)生一個學(xué)生總?cè)藬?shù)行。
SELECTSNO,SNAME,SAGEFROMXSWHERESDEPT='電力'COMPUTECOUNT(SNO)4.2單表查詢——查詢結(jié)果分組
【例4.31】將學(xué)生按專業(yè)名排序,并匯總各專業(yè)人數(shù)和平均身高。SELECTSDEPT,SNO,SNAME,SAGE,SHEIGHTFROMXSORDERBYSDEPTCOMPUTECOUNT(SNO),AVG(SHEIGHT)BYSDEPT4.2單表查詢——查詢結(jié)果分組
4.2單表查詢——查詢結(jié)果生成新表
【例4.32】由XS表創(chuàng)建“電力系學(xué)生”表,包括學(xué)號、姓名、年齡、身高。
SELECTSNO,SNAME,SAGE,SHEIGHTINTO電力系學(xué)生FROMXSWHERESDEPT='電力'4.2單表查詢——聯(lián)合查詢
【例4.33】將XS表中數(shù)學(xué)系學(xué)生和“電力系學(xué)生”表數(shù)據(jù)合并。SELECTSNO,SNAME,SAGE,SHEIGHTFROMXSWHERESDEPT='數(shù)學(xué)'UNIONSELECT*FROM電力系學(xué)生
4.3多表查詢實際應(yīng)用中,數(shù)據(jù)往往需要同時在相關(guān)聯(lián)的多個表中得到。例如,需要查詢電力系所有學(xué)生的成績。多表查詢是指同時涉及兩個以上的表的查詢,又稱為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢。包括內(nèi)連接、外連接和自連接。
內(nèi)連接連接查詢中用來連接多個表的條件稱為連接條件,連接的表名之間用逗號隔開。內(nèi)聯(lián)接使用比較運算符根據(jù)每個表共有的列的值匹配兩個表中的行。其一般格式為:[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>也可使用[INNER]JOINON子句實現(xiàn),其一般格式為:FROM<表名1>[INNER]JOIN<表名2>[ON<條件表達式>]內(nèi)連接【例4.33】查詢每個學(xué)生的情況及選修課程的情況。SELECTXS.*,XS_KC.*FROMXS,XS_KCWHEREXS.SNO=XS_KC.SNOSELECTXS.*,XS_KC.*FROMXSJOINXS_KCONXS.SNO=XS_KC.SNO4.3多表查詢內(nèi)連接【例4.34】查詢選修了“電磁場”課程且成績在85分以上的學(xué)生學(xué)號、姓名、課程名和成績。SELECTXS.SNO,SNAME,CNAME,SCOREFROMXS,KC,XS_KCWHEREXS.SNO=XS_KC.SNOANDKC.CNO=XS_KC.CNOANDCNAME='電磁場'ANDSCORE>=85SELECTXS.SNO,SNAME,CNAME,SCOREFROMXSJOINXS_KCONXS.SNO=XS_KC.SNOJOINKCONKC.CNO=XS_KC.CNOWHERECNAME='電磁場'ANDSCORE>=854.3多表查詢外連接外連接返回FROM子句中提到的至少一個表或視圖的所有行,包括左外連接、右外連接和全外連接。其一般格式為:FROM<表名1>LEFT|RIGHT|FULL[OUTER]JOIN<表名2>[ON<條件表達式>]左外連接的結(jié)果集包括LEFTOUTER子句中指定的左表的所有行。如果左表的某行在右表中沒有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為NULL。右外連接是左外連接的反向連接,返回右表的所有行,如果右表的某行在左表中沒有匹配行,則將為左表返回NULL。全外連接是左外連接和右外連接的并集。
4.3多表查詢外連接【例4.37】查詢課程被選修的情況,要求包含學(xué)號、課程號、課程名,同時還需顯示沒人選修的課程。SELECTXS_KC.SNO,KC.CNO,CNAMEFROMXS_KCRIGHTJOINKCONKC.CNO=XS_KC.CNO4.3多表查詢自連接將一個表與它自身進行連接,稱為自連接。使用自連接時需為表指定兩個別名,且對列的引用都要用別名限定。
【例4.38】查詢與“趙一”同一專業(yè)的學(xué)生姓名。SELECTDISTINCTA.SNAMEFROMXSAJOINXSBONA.SDEPT=B.SDEPTANDB.SNAME='趙一'4.3多表查詢在SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING子句的條件中的查詢稱為嵌套查詢。外層查詢稱為父查詢(或主查詢),內(nèi)層查詢稱為子查詢(或從查詢),先處理子查詢,再處理父查詢。子查詢可以嵌套多層,子查詢的結(jié)果集又成為父查詢的條件。4.4嵌套查詢4.4嵌套查詢簡單嵌套查詢【例4.39】查詢課程號為‘C01’且成績高于學(xué)號為‘010’的所有學(xué)生的學(xué)號和成績。SELECTSNO,SCOREFROMXS_KCWHERECNO='C01'ANDSCORE> (SELECTSCOREFROMXS_KC WHERECNO='C01'ANDSNO='010')【例4.40】查詢課程號為‘C01’且成績在平均分以上的學(xué)生的學(xué)號和姓名。SELECTXS.SNO,SNAMEFROMXS,XS_KCWHEREXS.SNO=XS_KC.SNOANDCNO='C01'ANDSCORE>(SELECTAVG(SCORE)FROMXS_KC WHERECNO='C01')4.4嵌套查詢帶IN謂詞的嵌套查詢【例4.41】查詢選修了課程的學(xué)生情況。SELECT*FROMXSWHERESNOIN(SELECTDISTINCTSNOFROMXS_KC)【例4.42】查詢所有課程中不及格的學(xué)生的學(xué)號、姓名和所在院系。SELECTSNO,SNAME,SDEPTFROMXSWHERESNOIN(SELECTDISTINCTSNOFROMXS_KC WHERESCORE<60)4.5視圖視圖是從一個或多個表或視圖中導(dǎo)出的表,是一個“虛”表,其結(jié)構(gòu)和數(shù)據(jù)建立在對基本表的查詢基礎(chǔ)之上。和基本表一樣,視圖也包括多個被定義的列和多個數(shù)據(jù)行,但視圖中的數(shù)據(jù)并不以視圖結(jié)構(gòu)存儲在數(shù)據(jù)庫中,而是存儲在視圖所引用的表中,并且在引用視圖時動態(tài)生成。對視圖的操作與對表的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。對視圖中的數(shù)據(jù)進行修改時,相應(yīng)的基本表的數(shù)據(jù)也會發(fā)生變化,同時,若基本表的數(shù)據(jù)發(fā)生變化,則這種變化也可以自動地反映到視圖中。4.5視圖4.5使用T-SQL管理視圖創(chuàng)建視圖,語法格式如下:CREATEVIEWview_name
ASselect_statement
注意:在SELECT語句中,不能使用COMPUTE、COMPUTEBY等語句,不能使用INTO關(guān)鍵字,不能使用臨時表。
【例4.47】使用T-SQL語句創(chuàng)建視圖。CREATEVIEWVIEW2ASSELECTXS.SNO,XS.SNAME,XS.SDEPT,XS_KC.CNO,XS_KC.SCOREFROMXS,XS_KCWHEREXS.SNO=XS_KC.SNOANDXS.SDEPT='電力'ANDXS_KC.SCORE>=804.5使用T-SQL管理視圖修改視圖,語法格式如下:ALTERVIEW
view_nameASselect_statement刪除視圖,語法格式如下:
DROPVIEW
view_
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車庫租賃及智能停車設(shè)備安裝合同3篇
- 二零二五年度雛雞養(yǎng)殖場與動物疫病防控中心合作合同4篇
- 科技賦能下的寵物醫(yī)療行業(yè)發(fā)展前景
- 科技創(chuàng)新助力創(chuàng)新藥物研發(fā)的市場突破
- 二零二五年度車間承包與新能源應(yīng)用合作協(xié)議4篇
- 二零二五年度GPS技術(shù)在智能穿戴設(shè)備中的應(yīng)用合同3篇
- 網(wǎng)絡(luò)時代下家庭教育的新視角-家庭網(wǎng)絡(luò)安全教育的重要性及實踐路徑
- 教育、醫(yī)療、辦公多領(lǐng)域下的農(nóng)業(yè)科技發(fā)展探討
- 二零二五年度櫥柜行業(yè)展會參展與采購合同4篇
- 二零二五年度文化產(chǎn)業(yè)發(fā)展藝人合作合同2篇
- 肩袖損傷護理查房
- 迅雷網(wǎng)盤最最最全影視資源-持續(xù)更新7.26
- 設(shè)備運維管理安全規(guī)范標(biāo)準(zhǔn)
- 辦文辦會辦事實務(wù)課件
- 大學(xué)宿舍人際關(guān)系
- 2023光明小升初(語文)試卷
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- GB/T 13234-2018用能單位節(jié)能量計算方法
- 申請使用物業(yè)專項維修資金征求業(yè)主意見表
- 房屋買賣合同簡單范本 房屋買賣合同簡易范本
- 無抽搐電休克治療規(guī)范
評論
0/150
提交評論