結(jié)構(gòu)化查詢語言_第1頁
結(jié)構(gòu)化查詢語言_第2頁
結(jié)構(gòu)化查詢語言_第3頁
結(jié)構(gòu)化查詢語言_第4頁
結(jié)構(gòu)化查詢語言_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

關(guān)于結(jié)構(gòu)化查詢語言5.1SQL簡介SQL是SturcturedQueryLanguage(結(jié)構(gòu)化查詢語言)的縮寫。SQL包含數(shù)據(jù)查詢、數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制等功能。其中查詢是SQL語言的重要組成部分。SQL是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。第2頁,共91頁,2024年2月25日,星期天5.1SQL簡介SQL語言主要特點(diǎn):一體化語言高度非過程化語言簡潔,易學(xué)易用統(tǒng)一的語法格式,不同的工作方式視圖數(shù)據(jù)結(jié)構(gòu)SQL操作的兩個(gè)基本數(shù)據(jù)結(jié)構(gòu)對象是:表和視圖第3頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢格式:SELECT[ALL|DISTINCT][<別名>·]<檢索項(xiàng)>[,<別名>·]<檢索項(xiàng)>····]FROM<表名>[<別名>][,<表名>[<別名>]···][WHERE<連接條件>[AND<連接條件···][AND|OR<過濾條件>[AND|OR<過濾條件>···]]][GROUPBy<分組列>[,<分組列···]][HAVING<過濾條件>][UNION[ALL]<SELECT>][ORDERBy<排序項(xiàng)>[ASCENDING|DESCENDING][,<排序項(xiàng)>[ASCENDING|DESCENDING···]]第4頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢[[INTO<目標(biāo)>]|[TOFILE<文件名>[ADDITIVE]|TOPRINTER|TOSCREEN|intocursor<file>|intotable<file>]]建議:多多操作!來加深印象!第5頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢[ALL]:在查詢結(jié)果中包含所有的行(包括重復(fù)值)。它是系統(tǒng)的默認(rèn)設(shè)置。[DISTINCT]:在查詢結(jié)果中刪除重復(fù)行[<別名>·]:當(dāng)涉及到多表查詢時(shí),需要通過別名來區(qū)分不同表文件中的字段。<檢索項(xiàng)>:檢索項(xiàng)主要是FROM子句中所給出的表文件中的字段名。選中的字段名可以和SQL函數(shù)一起使用。常用到的函數(shù)有:平均值函數(shù)AVG(<字段名>):求一列數(shù)據(jù)的平均值最小值函數(shù)MIN(<字段名>):求一列數(shù)的最小值最大值函數(shù)MAX(<字段名>):求一列數(shù)的最大值計(jì)數(shù)函數(shù)COUNT(<字段名>):求一列中該字段的個(gè)數(shù)求和函數(shù)SUM(<字段名>):求一列數(shù)的總和第6頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢FROM:form子句也是命令中不可缺少的成分,用于指定數(shù)據(jù)來源,其后列出所有要查詢的表文件名,可以加上相應(yīng)的別名。WHERE:WHERE是命令可選項(xiàng),其后各子句含義為:<連接條件>是指多表文件查詢的條件;<過濾條件>是指單表文件的查詢條件.第7頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢GRONPBy短語:將查詢結(jié)果按某一列(或多個(gè)列)的值進(jìn)行分組;HAVING子句:HAVING子句,只與GROUPBy配合使用,用于說明分組條件;UNION[ALL]<SELECT>:說明將兩個(gè)查詢結(jié)果合并在一起輸出;若無ALL,重復(fù)記錄將被自動(dòng)取消,若有ALL表示結(jié)果全部合并;第8頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢ORDERBy<排序項(xiàng)>[ASC|DESC]:ORDERBY子句指定按哪個(gè)字段對查詢結(jié)果排序,ASC為升序,DESC為降序;第9頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢[INTODestination]:指定在何處保存查詢結(jié)果。如果在同一個(gè)查詢中同時(shí)包含了INTO子句和TO子句,則TO子句不起作用。如果沒有包含INTO子句,查詢結(jié)果顯示在“瀏覽”窗口中。Destination可以是下列三種子句之一DBFTableName|TABLETableName:將查詢結(jié)果保存到一個(gè)表中,如果指定的表已經(jīng)打開,并且SETSAFETY設(shè)置為OFF,則VFP在不給出任何警告信息的情況下改寫該表。執(zhí)行完SELECT語句后,該表仍然保持打開活動(dòng)狀態(tài)。CURSORCursorName:將查詢結(jié)果保存到臨時(shí)表中。如果指定了一個(gè)已打開表的名稱,則VFP產(chǎn)生錯(cuò)誤信息。執(zhí)行完SELECT語句后,臨時(shí)表仍然保持打開,但只讀。一旦關(guān)閉臨時(shí)表,則自動(dòng)刪除它。ARRAYArrayName:將查詢結(jié)果保存到數(shù)組中。如果查詢結(jié)果中不包含任何記錄,則不創(chuàng)建這個(gè)數(shù)組。第10頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]:如果命令中包含了TO子句,但沒有包括INTO子句,則查詢結(jié)果定向輸出到名為FileName的ASCII碼文件、打印機(jī)或主窗口。包含ADDITIVE子句使查詢結(jié)果追加到所指定的文本文件的內(nèi)容后面。第11頁,共91頁,2024年2月25日,星期天5.2.1簡單查詢簡單查詢基于單個(gè)表,由select-from構(gòu)成無條件查詢,select-from-where構(gòu)成條件查詢無條件查詢:select-from構(gòu)成1.查詢表中部分字段例5.1查詢student表中學(xué)生的學(xué)號和姓名select學(xué)號,姓名fromstudent例5.2

查詢department表中所有的系名Select

系名fromdepartment第12頁,共91頁,2024年2月25日,星期天5.2.1簡單查詢2.使用distinct短語例5.3

列出學(xué)生表中的班級名稱(無重復(fù)行)select

distinct

班級fromstudent3.查詢表中全部字段例5.4

查詢學(xué)生表中全部字段select

*

fromstudent例5.5

查詢course表中的所有元組Select

*fromcourseDistinct:去掉查詢結(jié)果中的重復(fù)值“*”是通配符,表示所有字段第13頁,共91頁,2024年2月25日,星期天5.2.1簡單查詢條件查詢:select-from-where結(jié)構(gòu)4.簡單的條件查詢例5.6

查詢1992年9月1日以后出生的學(xué)生名單Select姓名

fromstudentwhere出生日期>ctod(“09/01/92”)例5.7

列出選修課的課程名稱和課程號Select課程名,課程號fromcoursewhere

課程性質(zhì)=“選修”例5.8查詢課程號是0600101,成績大于80分的學(xué)生學(xué)號及成績,且將成績由高到低列出Select學(xué)號,成績

fromgradewhere

課程號=“0600101”and成績>80orderby

成績desc第14頁,共91頁,2024年2月25日,星期天5.2.1簡單查詢4.簡單的條件查詢例5.9

查詢teacher表中工資多于2200元的職工所在的系號Selectdistinct系號fromteacherwhere

工資>2200例5.10

給出在系號“01”或“02”工作并且工資少于3000元的教師編號select教師編號fromteacherwhere工資<3000and(系號="01"OR系號="02")多個(gè)查詢條件可以用AND、OR或者NOT連接第15頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢連接是關(guān)系的基本操作之一,連接查詢是一種基于多個(gè)關(guān)系(表)的查詢。對于連接查詢,檢索項(xiàng)來自不同的關(guān)系,在FROM短語后多個(gè)數(shù)據(jù)表的名稱之間用逗號隔開,在WHERE短語中必須指定數(shù)據(jù)表之間進(jìn)行的連接條件。第16頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢1.等值連接對于等值連接,連接條件通常是兩個(gè)數(shù)據(jù)表的公共字段的值相等。例5.11找出工資多于2200元的教師編號和他們所在的系名。

select

教師編號,系名from

teacher,department;

where(工資>2200)and(teacher.系號=department.系號)例5.12找出成績大于90分的學(xué)生的學(xué)號、姓名及成績。selectstudent.學(xué)號,姓名,成績

from

student,gradewhere

成績>90and

student.學(xué)號=grade.學(xué)號或者selects.學(xué)號,姓名,成績

from

students,gradegwhere

成績>90and

s.學(xué)號=g.學(xué)號在連接查詢中引用兩個(gè)表的公共字段時(shí),須在公共字段名前添加表名或表別名作為前綴,否則系統(tǒng)會(huì)提

示出錯(cuò)。對于只在一個(gè)數(shù)據(jù)表中出現(xiàn)的字段,則無須指定前綴。在select查詢的from子句中,可以對數(shù)據(jù)表指定別名,格式為<關(guān)系名>.<別名>,指定別名后,在引用該數(shù)據(jù)表的字段時(shí),應(yīng)以別名作為數(shù)據(jù)表的前綴。第17頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢1.等值連接例5.13

查詢上官小梅所學(xué)課程的課程名及其對應(yīng)的成績select姓名,課程名,成績fromstudents,coursec,gradeg

where姓名="上官小梅"and

s.學(xué)號=g.學(xué)號

andg.課程號=c.課程號對于3個(gè)表的連接查詢,使用where子句指定查詢條件時(shí),其形式為:

from<數(shù)據(jù)表1>,<數(shù)據(jù)表2>,<數(shù)據(jù)表3>where<連接條件1>and<連接條件2>第18頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢2.自連接查詢:同一關(guān)系與自身進(jìn)行連接例5.14找出至少選修0200101號課和0600201號課學(xué)生的學(xué)號selectx.學(xué)號fromgradex,gradeywherex.學(xué)號=y.學(xué)號

andx.課程號="0200101"andy.課程號="0600201"第19頁,共91頁,2024年2月25日,星期天5.2.3嵌套查詢在一個(gè)select命令的where子句中,如果還出現(xiàn)了另一個(gè)select命令,則這種查詢稱為嵌套查詢。Vfp只支持單層嵌套查詢。嵌套查詢所要求的結(jié)果出自一個(gè)關(guān)系,但相關(guān)的條件卻涉及多個(gè)關(guān)系:一般外層查詢的條件依賴內(nèi)層查詢的結(jié)果,而內(nèi)層查詢與外層查詢無關(guān)。第20頁,共91頁,2024年2月25日,星期天5.2.3嵌套查詢例5.15查詢哪些系至少有一個(gè)教師的工資為2200元。select系名fromdepartmentwhere系號

in

(select

系號

fromteacherwhere

工資=2200)例5.16

查詢所有教師的工資都多于2200元的系的信息。select*fromdepartmentwhere

系號notin(select

系號fromteacherwhere

工資<=2200)and系號in(select系號

from

teacher)第21頁,共91頁,2024年2月25日,星期天5.2.3嵌套查詢例5.17

查詢還沒有被學(xué)生選修課程的課程號和課程名select課程號,課程名fromcoursewhere課程號notin

(select

課程號

fromgrade)例5.18

查詢選修“管理學(xué)”的所有學(xué)生的學(xué)號及成績Select學(xué)號,成績

fromgradewhere

課程號=(selectdistinct課程號fromcoursewhere課程名="管理學(xué)")第22頁,共91頁,2024年2月25日,星期天5.2.3嵌套查詢例5.19

查詢同時(shí)選修了課程號為0200101和0600201兩門課程的學(xué)生姓名select

姓名

fromstudentwhere

學(xué)號in(selectg1.學(xué)號

fromgradeg1,gradeg2whereg1.學(xué)號=g2.學(xué)號andg1.課程號="0200101"andg2.課程號="0600201")第23頁,共91頁,2024年2月25日,星期天5.2.4特殊運(yùn)算符特殊運(yùn)算符:between…and,in,like,not,!=1.確定范圍的查詢:between…and例5.20

查詢成績在80分到90分之間的學(xué)生得分情況select*fromgradewhere成績between80and90或select*fromgradewhere成績>=80and成績<=90例5.21查詢工資不在2200元到2500元范圍內(nèi)的教師信息。select*fromteacherwhere工資notbetween2200and2500注意in和between的區(qū)別第24頁,共91頁,2024年2月25日,星期天5.2.4特殊運(yùn)算符2.In例5.22

列出課程號是0200101和課程號是0600201的全體學(xué)生的學(xué)號、課程號和成績.select

學(xué)號,課程號,成績fromgradewhere

課程號in

("0200101","0600201")或select

學(xué)號,課程號,成績fromgradewhere

課程號=

"0200101"or

課程號="0600201"In運(yùn)算符后面接一個(gè)集合,集合中的元素可以是數(shù)值、字符、日期和邏輯表達(dá)式等。第25頁,共91頁,2024年2月25日,星期天5.2.4特殊運(yùn)算符3.!=和NOT例5.23

查詢不在市場營銷11-1班學(xué)生的信息。select*fromstudentwhere

班級

!="市場營銷11-1"或select*fromstudentwhere

not班級

="市場營銷11-1“例5.24

查詢成績不在80分到90分之間的學(xué)生得分情況select*fromgradewhere成績

notbetween

80and90第26頁,共91頁,2024年2月25日,星期天5.2.4特殊運(yùn)算符4.模糊查詢like例5.25

在student表中,查詢2011級學(xué)生的基本情況select*fromstudentwhere

學(xué)號

like"2011%"

例5.26

在student表中,查詢所有姓“王”的學(xué)生名單select

姓名fromstudentwhere

姓名like"王%"注意like的使用及%與_的區(qū)別第27頁,共91頁,2024年2月25日,星期天5.2.5空值查詢例5.27

查詢teacher表中出生日期還沒有確定的教師信息。select*fromteacherwhere

出生日期isnull例5.28

查詢teacher表中已經(jīng)確定了出生日期的教師信息。select*fromteacherwhere

出生日期isnotnull空值怎么查?Isnull空值查詢時(shí)要用isnull,而不是“=null”,因?yàn)榭罩挡皇且粋€(gè)確定的值,所以不能用“=”這樣的運(yùn)算符進(jìn)行比較第28頁,共91頁,2024年2月25日,星期天5.2.6簡單的計(jì)算查詢(庫函數(shù)查詢)用于計(jì)算檢索的庫函數(shù)有:count()、sum()、avg()、max()、min()例5.29

統(tǒng)計(jì)student表中班級的個(gè)數(shù)selectcount(distinct班級)as

班級個(gè)數(shù)fromstudent例5.30

統(tǒng)計(jì)student表中男生人數(shù)selectcount(*)fromstudentwhere

性別=“男"例5.31查詢1992年1月1日后出生的學(xué)生人數(shù)selectcount(*)fromstudentwhere出生日期>{^1992-01-01}As的作用是在查詢結(jié)果中將指定列命名為一個(gè)新的名稱Count(*)是count()函數(shù)的一種特殊形式,用來統(tǒng)計(jì)查詢結(jié)果的記錄個(gè)數(shù)第29頁,共91頁,2024年2月25日,星期天5.2.6簡單的計(jì)算查詢(庫函數(shù)查詢)例5.32

查詢grade表中成績的最高分、最低分及平均分。selectmax(成績)as最高分,min(成績)as最低分,avg(成績)as平均分fromgrade例5.33

查詢grade表中所有選修課的成績總和selectsum(成績)fromgradewhere課程號

in(select課程號fromcoursewhere課程性質(zhì)="選修")第30頁,共91頁,2024年2月25日,星期天5.2.7分組與計(jì)算查詢GRONPBy短語:

將查詢結(jié)果按某一列(或多個(gè)列)的值進(jìn)行分組;HAVING子句:

HAVING子句,只與GROUPBy配合使用,用于說明分組條件;第31頁,共91頁,2024年2月25日,星期天5.2.7分組與計(jì)算查詢例5.34

查詢男女生人數(shù)Select性別,count(*)fromstudentgroupby

性別或Select性別,count(性別)fromstudentgroupby

性別例5.35

求每個(gè)系的教師的平均工資select系號,avg(工資)fromteachergroupby系號例5.36

求至少有兩名教師的每個(gè)系的平均工資select系號,count(*),avg(工資)fromteachergroupby

系號havingcount(*)>=2Count(*)為每一組的記錄個(gè)數(shù)第32頁,共91頁,2024年2月25日,星期天5.2.7分組與計(jì)算查詢例5.37

列出各門課的平均成績、最高成績、最低成績和選課人數(shù)select課程號,AVG(成績)AS平均成績,MAX(成績)AS最高分,MIN(成績)AS最低分,COUNT(學(xué)號)AS選課人數(shù)fromgradegroupby課程號例5.38

列出最少選修二門課程的學(xué)生姓名select姓名fromstudentwhere學(xué)號in(select學(xué)號fromgradegroupby學(xué)號

havingcount(*)>=2)第33頁,共91頁,2024年2月25日,星期天5.2.7分組與計(jì)算查詢例5.39

求出總分大于180的學(xué)生的學(xué)號,姓名及總成績selects.學(xué)號,姓名,sum(成績)as總成績fromstudents,gradegwheres.學(xué)號=g.學(xué)號groupbyg.學(xué)號havingsum(成績)>180第34頁,共91頁,2024年2月25日,星期天5.2.8排序ORDERBy<排序項(xiàng)>[ASC|DESC]:指定將查詢結(jié)果按哪個(gè)字段排序,ASC為升序,DESC為降序;例5.40

對學(xué)生表按姓名排序

Select*fromstudentorderby

姓名例5.41

對teacher表按工資升序檢索出全部教師的信息。

select*fromteacher

orderby工資例5.42

先按系號排序,再按工資降序排序輸出全部教師信息select*fromteacherorderby

系號,工資desc第35頁,共91頁,2024年2月25日,星期天5.2.8排序顯示前幾項(xiàng)記錄:有時(shí)只需要查找滿足條件的前幾個(gè)記錄,這時(shí)可使用top短語格式:TOPnExpr[PERCENT]說明:

nExpr為數(shù)字表達(dá)式,當(dāng)不使用PERCENT時(shí),nExpr為1至32767間的整數(shù),說明顯示前幾個(gè)記錄;當(dāng)使用PERCENT時(shí),nExpr是0.01至99.99間的實(shí)數(shù),說明顯示結(jié)果中前百分之幾的記錄。第36頁,共91頁,2024年2月25日,星期天5.2.8排序例5.43

顯示teacher表工資最高的3位教師的信息select*top3fromteacherorderby

工資desc例5.44

顯示teacher表工資最低的那20%教師的信息select*top20percentfromteacherorderby

工資例5.45

在grade表中查詢成績最高的5位學(xué)生的得分情況。select*top5fromgradeorderby成績

desc例5.46

在grade表中查詢成績最低的30%學(xué)生的得分情況select*top30percentfromgradeorderby

成績top短語必須和orderby短語配合起來使用才有效,它不能單獨(dú)使用第37頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢用where指定的連接條件一般都是等值連接,即只有滿足連接條件的記錄才會(huì)出現(xiàn)在查詢結(jié)果中。在SQL標(biāo)準(zhǔn)中還支持表的超連接,使用下面的命令:

Select…… FromTable1[[Inner|Left|Right|FullJoinTable2 On<連接條件> Where……其中,inner代表內(nèi)連接,即普通連接;Left、Right、Full分別代表左連接、右連接和全連接,Left、Right、Full三種連接方式也稱為外連接。第38頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢INNERJOIN(JOIN),普通連接:只有滿足連接條件的記錄才出現(xiàn)在查詢結(jié)果中。LIFTJOIN,左連接:在進(jìn)行連接運(yùn)算時(shí),首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時(shí)將第一個(gè)表(或稱Join左邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第二個(gè)表(或稱Join右邊的表)的屬性值為空值。第39頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢RIGHTJOIN,右連接:在進(jìn)行連接運(yùn)算時(shí),首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時(shí)將第二個(gè)表(或稱Join右邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第一個(gè)表(或稱Join左邊的表)的屬性值為空值。

FULLJOIN,全連接:在進(jìn)行連接運(yùn)算時(shí),首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時(shí)將兩個(gè)表中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)另一個(gè)表的屬性值為空值。第40頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢例5.47

普通連接(將teacher表和department表的部分字段通過公共的字段“系號”進(jìn)行連接)selectd.系號,系名,教師編號,教師姓名fromDepartmentd,teachertwhered.系號=t.系號等價(jià)于selectd.系號,系名,教師編號,教師姓名fromDepartmentdjointeachertond.系號=t.系號等價(jià)于selectd.系號,系名,教師編號,教師姓名fromDepartmentdinnerjointeachertond.系號=t.系號第41頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢例5.48左連接selectd.系號,系名,教師編號,教師姓名fromDepartmentdLeftjointeachertond.系號=t.系號例5.49

右連接假設(shè)teacher表插入一條記錄“2006108”,“07”,“劉麗”,{^1972-06-24},“副教授”,2500.00selectd.系號,系名,教師編號,教師姓名fromDepartmentdRightjointeachertond.系號=t.系號第42頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢例5.50全連接selectd.系號,系名,教師編號,教師姓名fromDepartmentdFulljointeachertond.系號=t.系號Join連接格式在連接多個(gè)表時(shí)的書寫方法要特別注意,在這種格式中join和on的順序很重要,特別要注意join的順序與on的順序正好相反第43頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢格式1:<表達(dá)式><比較運(yùn)算符>[ANY︱ALL︱SOME](子查詢)量詞:ANY、ALL、SOME,其中ANY與SOME為同義詞,在進(jìn)行比較運(yùn)算時(shí)只要子查詢中有一行能使結(jié)果為真,則結(jié)果就為真;而ALL則要求子查詢中的所有行都使結(jié)果為真時(shí),結(jié)果才為真。格式2:[NOT]︱EXISTS(子查詢)謂詞:EXISTS,EXISTS或NOTEXISTS是用來檢查在子查詢中是否有結(jié)果返回(即存在元組或不存在元組)第44頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.51檢索那些系中還沒有教師的系的信息。select*fromdepartmentwherenotexists(select*fromteacherwhere系號=department.系號)等價(jià)于select*fromdepartmentwhere系號notin(select系號fromteacher)例5.52

檢索那些系中至少已經(jīng)有一個(gè)教師的系的信息。

select*fromdepartmentwhereexists(select*fromteacherWhere系號=department.系號)等價(jià)于select*fromdepartmentwhere系號in(select系號fromteacher)第45頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.53查詢還沒有被學(xué)生選修課程的課程號和課程名Select

課程號,課程名

fromcoursewhere

not

exist(select*fromgradewherecourse.課程號=grade.課程號)注意:[NOT]EXISTS只是判斷子查詢中是否有或沒有結(jié)果返回,它本身并沒有任何運(yùn)算或比較。第46頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.54求必修課程號是0200101的學(xué)生中成績比必修課號是0600201課的最低成績要高的學(xué)生的學(xué)號與成績select學(xué)號,成績fromgradewhere課程號="0200101"and成績>any(select

成績fromgradewhere

課程號="0600201")等價(jià)于select學(xué)號,成績fromgradewhere課程號="0200101"and成績>(select

min(成績)

fromgradewhere

課程號="0600201")第47頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.55求必修課程號是0200101的學(xué)生中成績比必修課號是0600201課的最高成績要高的學(xué)生的學(xué)號與成績select學(xué)號,成績fromgradewhere課程號="0200101"and成績>all(select

成績fromgradewhere

課程號="0600201")等價(jià)于select學(xué)號,成績fromgradewhere課程號="0200101"and成績>(select

max(成績)

fromgradewhere

課程號="0600201")第48頁,共91頁,2024年2月25日,星期天5.2.11集合的并運(yùn)算SQL支持集合的并(UNION)運(yùn)算,即可以將兩個(gè)SELECT語句的查詢結(jié)果通過并運(yùn)算合并成一個(gè)查詢結(jié)果。為了進(jìn)行并運(yùn)算,要求兩個(gè)查詢結(jié)果具有相同的字段個(gè)數(shù),并且對應(yīng)字段的值要出自同一個(gè)值域。格式:<SELECT…>UNION[ALL]<SELECT…>說明將兩個(gè)查詢結(jié)果合并在一起輸出;若無ALL,重復(fù)記錄將被自動(dòng)取消,若有ALL表示結(jié)果全部合并;第49頁,共91頁,2024年2月25日,星期天5.2.11集合的并運(yùn)算例5.56

以下結(jié)果為系名為自動(dòng)化系和經(jīng)濟(jì)系的教師信息select*fromteacherwhere系號=(select系號fromdepartmentwhere系名="自動(dòng)化系")union;select*fromteacherwhere系號=(select系號fromdepartmentwhere系名="經(jīng)濟(jì)系")

第50頁,共91頁,2024年2月25日,星期天5.2.11集合的并運(yùn)算例5.57以下結(jié)果為“選修課”和“必修課”的課程相關(guān)信息。select課程名,課程號fromcoursewhere課程性質(zhì)="選修“Unionselect課程名,課程號fromcoursewhere課程性質(zhì)=“必修“第51頁,共91頁,2024年2月25日,星期天5.2.12查詢結(jié)果的輸出查詢結(jié)果的輸出去向⑴

IntoArray<數(shù)組名>⑵IntoCursor<臨時(shí)表名>⑶IntoDbf|Table<表名>⑷ToFile<文本文件名>⑸ToPrinter[prompt]Intocursor<臨時(shí)表文件名>產(chǎn)生的臨時(shí)表文件是只讀的.dbf文件,當(dāng)查詢結(jié)束后該臨時(shí)文件是當(dāng)前文件,可像一般的.dbf文件使用,當(dāng)該臨時(shí)文件被關(guān)閉后,文件將自動(dòng)被刪除。執(zhí)行完intotable<表文件名>后,系統(tǒng)將在默認(rèn)路徑下建立數(shù)據(jù)表文件,同時(shí)打開該文件,并將其設(shè)為當(dāng)前數(shù)據(jù)表。與臨時(shí)表文件不同,該表文件存放在磁盤上,關(guān)閉后不會(huì)被自動(dòng)刪除。Tofile<文件名>[additive]可將查詢結(jié)果保存到一個(gè)文本文件,文本文件的默認(rèn)擴(kuò)展名是.txt,若使用additive可將查詢結(jié)果追加到原文本文件的尾部,否則將覆蓋原有文件。第52頁,共91頁,2024年2月25日,星期天5.2.12查詢結(jié)果的輸出1.將查詢結(jié)果存放在數(shù)組例5.58將查詢到的選修課的課程號和課程名存放在數(shù)組xx中。select課程號,課程名fromcoursewhere課程性質(zhì)=“選修”intoarrayxx?xx(1,1),xx(1,2)?xx(2,1),xx(2,2)第53頁,共91頁,2024年2月25日,星期天5.2.12查詢結(jié)果的輸出2.將查詢結(jié)果存放到臨時(shí)表文件例5.59

將查詢到的選修課的課程號和課程名存放在臨時(shí).dbf表文件xx中。

select課程號,課程名fromcoursewhere課程性質(zhì)="選修“intocursorxx3.將查詢結(jié)果存放到永久表文件例5.60

將查詢到選修課的課程號和課程名存放在永久表文件yy中select課程號,課程名fromcoursewhere課程性質(zhì)=“選修“intotableyy第54頁,共91頁,2024年2月25日,星期天5.2.12查詢結(jié)果的輸出4.將查詢結(jié)果存放到文本文件若命令中包含了to子句,但沒有包含into子句,則to子句起作用。例5.61將查詢到的選修課的課程號和課程名存放在文本文件xx中。select課程號,課程名fromcoursewhere課程性質(zhì)="選修"

tofilexx5.將查詢結(jié)果直接輸出到打印機(jī)使用子句toprinter[prompt]可以直接將查詢結(jié)果輸出到打印機(jī),若使用了prompt選項(xiàng),則在打印之前還會(huì)打開打印機(jī)設(shè)置對話框。第55頁,共91頁,2024年2月25日,星期天5.3數(shù)據(jù)操作SQL的數(shù)據(jù)操作功能是指對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行操作的功能,主要包括數(shù)據(jù)的插入、數(shù)據(jù)的更新和數(shù)據(jù)的刪除,對應(yīng)的SQL命令動(dòng)詞分別是INSERT、UPDATE和DELETE。第56頁,共91頁,2024年2月25日,星期天5.3.1.插入數(shù)據(jù)格式1:INSERTINTO<表名>(<字段名1>[,<字段名2>]····)VALUES(<表達(dá)式1>[,<表達(dá)式2>]‥‥)功能:向指定的數(shù)據(jù)表尾部插入一條記錄,并用指定的表達(dá)式對字段賦值。說明:當(dāng)對新記錄的所有字段都賦值時(shí),可省略字段名。若只對某些字段賦值,即插入的不是完整的記錄時(shí),則需要指定要賦值的字段名稱。VALUES子句中各個(gè)表達(dá)式的值為賦給每個(gè)字段的值,表達(dá)式和對應(yīng)字段的數(shù)據(jù)類型、取值范圍必須一致。第57頁,共91頁,2024年2月25日,星期天5.3.1.插入數(shù)據(jù)例5.62

在course表中插入記錄。Insertintocoursevalues(“0600010”,””,48,3,”選修”)&&

在course表中插入記錄,課程號為“0600010”,課程名為空,學(xué)時(shí)為48,學(xué)分為3,課程性質(zhì)為“選修”Insertintocourse(課程號,課程名)values(“0600020”,”信息資源管理“)&&

在course表中插入記錄,課程號為“0600020”,課程名為”信息資源管理“第58頁,共91頁,2024年2月25日,星期天5.3.1.插入數(shù)據(jù)格式2:InsertInto<表名>FromArray<數(shù)組名>|MEMVAR功能:向指定的數(shù)據(jù)表插入一條新記錄,插入新記錄的字段值來自于數(shù)組元素或內(nèi)存變量。例5.63輸入以下命令并查看輸出結(jié)果。dimensionb(4)b(1)=“2012052101"b(2)="張珊"b(3)="女"b(4)=.null.insertintostudentfromarrayb第59頁,共91頁,2024年2月25日,星期天5.3.1.插入數(shù)據(jù)例5.64輸入以下命令并查看輸出結(jié)果。學(xué)號=“2012052102“姓名="黎明“性別="男“出生日期={^1986-09-10}insertintostudentfrommemvar第60頁,共91頁,2024年2月25日,星期天5.3.2.更新數(shù)據(jù)格式:UPDATE<表名>SET<字段名>=<表達(dá)式>[WHERE<條件>]功能:對于指定表中滿足條件的記錄,用指定的表達(dá)式的值來更新指定的字段。注意:update-sql只能在單一的表中更新記錄。第61頁,共91頁,2024年2月25日,星期天5.3.2.更新數(shù)據(jù)例5.65

將course表中所有選修課的學(xué)時(shí)增加5個(gè)學(xué)時(shí)。Updatecourseset

學(xué)時(shí)=學(xué)時(shí)+5where

課程性質(zhì)=”選修“第62頁,共91頁,2024年2月25日,星期天5.3.3刪除數(shù)據(jù)格式:DELETEFROM<表名>WHERE<條件>功能:對于指定數(shù)據(jù)表中滿足條件的記錄進(jìn)行邏輯刪除。說明:where<條件>用來指定刪除的條件,若不使用where子句,則邏輯刪除表中的全部記錄。第63頁,共91頁,2024年2月25日,星期天5.3.3刪除數(shù)據(jù)例5.66邏輯刪除course表中課程性質(zhì)為選修的記錄。Deletefromcoursewhere

課程性質(zhì)=“選修”第64頁,共91頁,2024年2月25日,星期天5.4數(shù)據(jù)定義SQL的數(shù)據(jù)定義功能主要包括數(shù)據(jù)庫、表、視圖、存儲過程、規(guī)則和索引等對象的定義。本節(jié)主要介紹使用CREATETABLE命令建立數(shù)據(jù)表結(jié)構(gòu),使用ALTERTABLE命令修改數(shù)據(jù)表結(jié)構(gòu)以及使用DROPTABLE命令刪除數(shù)據(jù)表。第65頁,共91頁,2024年2月25日,星期天5.4.1表的定義SQL語言提供的定義表的命令是CreateTable。在使用這個(gè)命令之前,首先要設(shè)計(jì)好表結(jié)構(gòu)的各種細(xì)節(jié),包括:①表名;②各列(字段)的名稱、數(shù)據(jù)類型、寬度;③哪(幾)列將組成表的主鍵;④表中的哪些列必須提供數(shù)據(jù);第66頁,共91頁,2024年2月25日,星期天5.4.1表的定義

創(chuàng)建表的語句格式如下:

CreateTable|Dbf<表名>[Name<長表名>][Free] (<字段名1><字段類型>[(字段寬度[,<小數(shù)位數(shù)>])] [Null|NotNull] [Check<字段有效性規(guī)則>[Error<出錯(cuò)信息1>]] [Default<默認(rèn)值>] [PrimaryKey|Unique] [References<數(shù)據(jù)表1>[Tag<索引標(biāo)志>]] [,<字段名2>...]

第67頁,共91頁,2024年2月25日,星期天5.4.1表的定義

[,PrimaryKey<索引表達(dá)式1>Tag<索引名1>], [,Unique<索引表達(dá)式2>Tag<索引名2>] [,ForeignKey<索引表達(dá)式3>Tag<索引名3>[Nodup]References<數(shù)據(jù)表2>[Tag<索引名4>]] [,Check<記錄有效性規(guī)則>[Error<出錯(cuò)信息2>]])

功能:創(chuàng)建一個(gè)由指定字段組成的數(shù)據(jù)表。第68頁,共91頁,2024年2月25日,星期天5.4.1表的定義

關(guān)于CreateTable命令說明如下:用CREATETable命令可以完成表設(shè)計(jì)器所能完成的所有功能。命令關(guān)鍵字CreateTable與CreateDBF功能相同。Name<長表名>:為所創(chuàng)建的表定義長表名,只有當(dāng)前有打開的數(shù)據(jù)庫時(shí),才能使用此選項(xiàng)。Free:創(chuàng)建為自由表。第69頁,共91頁,2024年2月25日,星期天5.4.1表的定義<字段名1><字段類型>[(字段寬度[,<小數(shù)位數(shù)>])]

:4個(gè)選項(xiàng)依次分別定義字段名、字段類型,數(shù)值型和字符型字段的寬度,數(shù)值型字段的小數(shù)位寬度。Null|NotNull:定義本字段是否可以為空。[Check<字段有效性規(guī)則>[Error<出錯(cuò)信息1>]]:定義本字段的有效性規(guī)則和出錯(cuò)時(shí)的提示信息字符串。[Default<默認(rèn)值>]:定義字段的默認(rèn)值。第70頁,共91頁,2024年2月25日,星期天5.4.1表的定義PrimaryKey|Unique:將本字段創(chuàng)建為主索引字段。或?qū)⒈咀侄蝿?chuàng)建為侯選索引字段。References<數(shù)據(jù)表1>[Tag<索引標(biāo)志>]:說明本表與之建立永久聯(lián)系的父表及父表的索引名。ForeignKey:創(chuàng)建一個(gè)外部索引(非主索引),并與一個(gè)父表建立關(guān)聯(lián)。PrimaryKey<索引表達(dá)式1>Tag<索引名1>:以<索引表達(dá)式1>作為索引表達(dá)式建立主索引,索引名為<索引名1>第71頁,共91頁,2024年2月25日,星期天5.4.1表的定義[,Unique<索引表達(dá)式2>Tag<索引名2>]:以<索引表達(dá)式2>作為索引表達(dá)式建立候選索引,索引名為<索引名2>[,ForeignKey<索引表達(dá)式3>Tag<索引名3>[Nodup]References<數(shù)據(jù)表2>[Tag<索引名4>]]:以<索引表達(dá)式3>作為索引表達(dá)式建立外(普通)索引,索引名為<索引名3>,同時(shí)以該字段作為連接字段,通過引用<數(shù)據(jù)表2>的<索引標(biāo)識4>建立兩數(shù)據(jù)表之間的永久性關(guān)聯(lián)。[,Check<記錄有效性規(guī)則>[Error<出錯(cuò)信息2>]]):定義表記錄的有效性規(guī)則和出錯(cuò)信息。第72頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.67:建立一個(gè)自由表KZScreatetablekzsfree(學(xué)號c(6),姓名;c(8),性別c(2),年齡n(3)null,入學(xué)年月d)第73頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.68

建立教學(xué)管理數(shù)據(jù)庫,再用SQL命令建立學(xué)生表、課程表、成績表。createdatabasekkkcreatetable學(xué)生(學(xué)號c(8)primarykey,姓名c(8)notnull,性別c(2),年齡n(3)check年齡>16and年齡<25error“年齡范圍在16-25,請輸入正確的年齡”,是否團(tuán)員l,入學(xué)年月ddefaultctod(“09/06/2002”),備注m)createtable課程(課號c(4)primarykey,課程名c(12)notnull,學(xué)分n(2))第74頁,共91頁,2024年2月25日,星期天5.4.1表的定義createtable成績(學(xué)號c(8)references學(xué)生2,課號c(4),成績n(5,2),primarykey學(xué)號+課號tag學(xué)號課號,foreignkey課號tag課號references課程2tag課號)第75頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.69

創(chuàng)建訂貨管理數(shù)據(jù)庫,并用SQL命令建立倉庫表、職工表、供應(yīng)商表及訂購單表。createdatabase

訂貨管理createtable倉庫(倉庫號C(5)primarykey,城市c(10),面積icheck(面積>0)error"面積應(yīng)該大于0")第76頁,共91頁,2024年2月25日,星期天5.4.1表的定義createtable職工(倉庫號C(5),職工號c(5)primarykey,工資icheck(工資>=1000and工資<=5000)error“工資值的范圍在1000-5000!“default1200,foreignkey倉庫號tag倉庫號references倉庫1)createtable供應(yīng)商(供應(yīng)商號c(5)primarykey,供應(yīng)商名c(20),地址c(20))第77頁,共91頁,2024年2月25日,星期天5.4.1表的定義createtable訂購單(職工號c(5),供應(yīng)商號c(5),訂購單號c(5)primarykey,訂購日期d,foreignkey職工號tag職工號references職工1,foreignkey供應(yīng)商號tag供應(yīng)商號references供應(yīng)商1)第78頁,共91頁,2024年2月25日,星期天5.4.2表結(jié)構(gòu)的修改AlterTable命令用于修改表結(jié)構(gòu),可以增添字段、刪除字段、改變字段的定義、增添或刪除約束等。第79頁,共91頁,2024年2月25日,星期天5.4.2表結(jié)構(gòu)的修改AlterTable命令有3種格式。格式1:

AlterTable<表名> Add|Alter[Column]<字段名1><字段類型>[(字段寬度[,<小數(shù)位數(shù)>])]

[Null|NotNull] [Check<字段有效性規(guī)則>[Error<出錯(cuò)信息>]] [Default<默認(rèn)值>] [PrimaryKey|Unique] [References<表名1>[Tag<索引名>]]第80頁,共91頁,2024年2月25日,星期天5.4.2表結(jié)構(gòu)的修改功能:這種格式用來添加字段或修改字段的參數(shù)??梢孕薷淖侄蔚念愋汀挾?、有效性規(guī)則等,但不能修改字段名,不能刪除字段及已定義的字段有效性規(guī)則。不管是否修改字段類型,必須將字段名和類型一同在命令中列出。第81頁,共91頁,2024年2月25日,星期天5.4.2表結(jié)構(gòu)的修改例5.70

為課程表增加一個(gè)新的字段“學(xué)時(shí)”(數(shù)值型,寬度2)。Altertable

課程add學(xué)時(shí)n(2)check學(xué)時(shí)>0error“學(xué)時(shí)應(yīng)該大于0"例5.71將課程表的“課程名”字段的寬度改為14Altertable

課程alter

課程名c(14)例5.72

為“訂購單”表增加一個(gè)新字段“總金額”(貨幣類型)altertable

訂購單add總金額ycheck總金額>0error“總金額應(yīng)該大于0“例5.73

將訂購單的“訂購單號”字段的寬度改為6altertable訂購單alter

訂購單號c(6)第82頁,共91頁,2024年2月25日,星期天5.4.2表結(jié)構(gòu)的修改格式2:ALTERTABLE<表名>ALTER[COLUMN]<字段名>[NULL|NOTNULL][SETCHECK<字段有效性規(guī)則>[ERROR<錯(cuò)誤信息>]][SETDEFAULT<默認(rèn)值>][DROPDEFAULT]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論