




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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語言主要特點:一體化語言高度非過程化語言簡潔,易學(xué)易用統(tǒng)一的語法格式,不同的工作方式視圖數(shù)據(jù)結(jié)構(gòu)SQL操作的兩個基本數(shù)據(jù)結(jié)構(gòu)對象是:表和視圖第3頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢格式:SELECT[ALL|DISTINCT][<別名>·]<檢索項>[,<別名>·]<檢索項>····]FROM<表名>[<別名>][,<表名>[<別名>]···][WHERE<連接條件>[AND<連接條件···][AND|OR<過濾條件>[AND|OR<過濾條件>···]]][GROUPBy<分組列>[,<分組列···]][HAVING<過濾條件>][UNION[ALL]<SELECT>][ORDERBy<排序項>[ASCENDING|DESCENDING][,<排序項>[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)涉及到多表查詢時,需要通過別名來區(qū)分不同表文件中的字段。<檢索項>:檢索項主要是FROM子句中所給出的表文件中的字段名。選中的字段名可以和SQL函數(shù)一起使用。常用到的函數(shù)有:平均值函數(shù)AVG(<字段名>):求一列數(shù)據(jù)的平均值最小值函數(shù)MIN(<字段名>):求一列數(shù)的最小值最大值函數(shù)MAX(<字段名>):求一列數(shù)的最大值計數(shù)函數(shù)COUNT(<字段名>):求一列中該字段的個數(shù)求和函數(shù)SUM(<字段名>):求一列數(shù)的總和第6頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢FROM:form子句也是命令中不可缺少的成分,用于指定數(shù)據(jù)來源,其后列出所有要查詢的表文件名,可以加上相應(yīng)的別名。WHERE:WHERE是命令可選項,其后各子句含義為:<連接條件>是指多表文件查詢的條件;<過濾條件>是指單表文件的查詢條件.第7頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢GRONPBy短語:將查詢結(jié)果按某一列(或多個列)的值進(jìn)行分組;HAVING子句:HAVING子句,只與GROUPBy配合使用,用于說明分組條件;UNION[ALL]<SELECT>:說明將兩個查詢結(jié)果合并在一起輸出;若無ALL,重復(fù)記錄將被自動取消,若有ALL表示結(jié)果全部合并;第8頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢ORDERBy<排序項>[ASC|DESC]:ORDERBY子句指定按哪個字段對查詢結(jié)果排序,ASC為升序,DESC為降序;第9頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢[INTODestination]:指定在何處保存查詢結(jié)果。如果在同一個查詢中同時包含了INTO子句和TO子句,則TO子句不起作用。如果沒有包含INTO子句,查詢結(jié)果顯示在“瀏覽”窗口中。Destination可以是下列三種子句之一DBFTableName|TABLETableName:將查詢結(jié)果保存到一個表中,如果指定的表已經(jīng)打開,并且SETSAFETY設(shè)置為OFF,則VFP在不給出任何警告信息的情況下改寫該表。執(zhí)行完SELECT語句后,該表仍然保持打開活動狀態(tài)。CURSORCursorName:將查詢結(jié)果保存到臨時表中。如果指定了一個已打開表的名稱,則VFP產(chǎn)生錯誤信息。執(zhí)行完SELECT語句后,臨時表仍然保持打開,但只讀。一旦關(guān)閉臨時表,則自動刪除它。ARRAYArrayName:將查詢結(jié)果保存到數(shù)組中。如果查詢結(jié)果中不包含任何記錄,則不創(chuàng)建這個數(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簡單查詢簡單查詢基于單個表,由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")多個查詢條件可以用AND、OR或者NOT連接第15頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢連接是關(guān)系的基本操作之一,連接查詢是一種基于多個關(guān)系(表)的查詢。對于連接查詢,檢索項來自不同的關(guān)系,在FROM短語后多個數(shù)據(jù)表的名稱之間用逗號隔開,在WHERE短語中必須指定數(shù)據(jù)表之間進(jìn)行的連接條件。第16頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢1.等值連接對于等值連接,連接條件通常是兩個數(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é)號在連接查詢中引用兩個表的公共字段時,須在公共字段名前添加表名或表別名作為前綴,否則系統(tǒng)會提
示出錯。對于只在一個數(shù)據(jù)表中出現(xiàn)的字段,則無須指定前綴。在select查詢的from子句中,可以對數(shù)據(jù)表指定別名,格式為<關(guān)系名>.<別名>,指定別名后,在引用該數(shù)據(jù)表的字段時,應(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個表的連接查詢,使用where子句指定查詢條件時,其形式為:
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嵌套查詢在一個select命令的where子句中,如果還出現(xiàn)了另一個select命令,則這種查詢稱為嵌套查詢。Vfp只支持單層嵌套查詢。嵌套查詢所要求的結(jié)果出自一個關(guān)系,但相關(guān)的條件卻涉及多個關(guān)系:一般外層查詢的條件依賴內(nèi)層查詢的結(jié)果,而內(nèi)層查詢與外層查詢無關(guān)。第20頁,共91頁,2024年2月25日,星期天5.2.3嵌套查詢例5.15查詢哪些系至少有一個教師的工資為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
查詢同時選修了課程號為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特殊運算符特殊運算符: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特殊運算符2.In例5.22
列出課程號是0200101和課程號是0600201的全體學(xué)生的學(xué)號、課程號和成績.select
學(xué)號,課程號,成績fromgradewhere
課程號in
("0200101","0600201")或select
學(xué)號,課程號,成績fromgradewhere
課程號=
"0200101"or
課程號="0600201"In運算符后面接一個集合,集合中的元素可以是數(shù)值、字符、日期和邏輯表達(dá)式等。第25頁,共91頁,2024年2月25日,星期天5.2.4特殊運算符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特殊運算符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空值查詢時要用isnull,而不是“=null”,因為空值不是一個確定的值,所以不能用“=”這樣的運算符進(jìn)行比較第28頁,共91頁,2024年2月25日,星期天5.2.6簡單的計算查詢(庫函數(shù)查詢)用于計算檢索的庫函數(shù)有:count()、sum()、avg()、max()、min()例5.29
統(tǒng)計student表中班級的個數(shù)selectcount(distinct班級)as
班級個數(shù)fromstudent例5.30
統(tǒng)計student表中男生人數(shù)selectcount(*)fromstudentwhere
性別=“男"例5.31查詢1992年1月1日后出生的學(xué)生人數(shù)selectcount(*)fromstudentwhere出生日期>{^1992-01-01}As的作用是在查詢結(jié)果中將指定列命名為一個新的名稱Count(*)是count()函數(shù)的一種特殊形式,用來統(tǒng)計查詢結(jié)果的記錄個數(shù)第29頁,共91頁,2024年2月25日,星期天5.2.6簡單的計算查詢(庫函數(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分組與計算查詢GRONPBy短語:
將查詢結(jié)果按某一列(或多個列)的值進(jìn)行分組;HAVING子句:
HAVING子句,只與GROUPBy配合使用,用于說明分組條件;第31頁,共91頁,2024年2月25日,星期天5.2.7分組與計算查詢例5.34
查詢男女生人數(shù)Select性別,count(*)fromstudentgroupby
性別或Select性別,count(性別)fromstudentgroupby
性別例5.35
求每個系的教師的平均工資select系號,avg(工資)fromteachergroupby系號例5.36
求至少有兩名教師的每個系的平均工資select系號,count(*),avg(工資)fromteachergroupby
系號havingcount(*)>=2Count(*)為每一組的記錄個數(shù)第32頁,共91頁,2024年2月25日,星期天5.2.7分組與計算查詢例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分組與計算查詢例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<排序項>[ASC|DESC]:指定將查詢結(jié)果按哪個字段排序,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排序顯示前幾項記錄:有時只需要查找滿足條件的前幾個記錄,這時可使用top短語格式:TOPnExpr[PERCENT]說明:
nExpr為數(shù)字表達(dá)式,當(dāng)不使用PERCENT時,nExpr為1至32767間的整數(shù),說明顯示前幾個記錄;當(dāng)使用PERCENT時,nExpr是0.01至99.99間的實數(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短語配合起來使用才有效,它不能單獨使用第37頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢用where指定的連接條件一般都是等值連接,即只有滿足連接條件的記錄才會出現(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)行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第一個表(或稱Join左邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第二個表(或稱Join右邊的表)的屬性值為空值。第39頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢RIGHTJOIN,右連接:在進(jìn)行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第二個表(或稱Join右邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第一個表(或稱Join左邊的表)的屬性值為空值。
FULLJOIN,全連接:在進(jìn)行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將兩個表中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)另一個表的屬性值為空值。第40頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢例5.47
普通連接(將teacher表和department表的部分字段通過公共的字段“系號”進(jìn)行連接)selectd.系號,系名,教師編號,教師姓名fromDepartmentd,teachertwhered.系號=t.系號等價于selectd.系號,系名,教師編號,教師姓名fromDepartmentdjointeachertond.系號=t.系號等價于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連接格式在連接多個表時的書寫方法要特別注意,在這種格式中join和on的順序很重要,特別要注意join的順序與on的順序正好相反第43頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢格式1:<表達(dá)式><比較運算符>[ANY︱ALL︱SOME](子查詢)量詞:ANY、ALL、SOME,其中ANY與SOME為同義詞,在進(jìn)行比較運算時只要子查詢中有一行能使結(jié)果為真,則結(jié)果就為真;而ALL則要求子查詢中的所有行都使結(jié)果為真時,結(jié)果才為真。格式2:[NOT]︱EXISTS(子查詢)謂詞:EXISTS,EXISTS或NOTEXISTS是用來檢查在子查詢中是否有結(jié)果返回(即存在元組或不存在元組)第44頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.51檢索那些系中還沒有教師的系的信息。select*fromdepartmentwherenotexists(select*fromteacherwhere系號=department.系號)等價于select*fromdepartmentwhere系號notin(select系號fromteacher)例5.52
檢索那些系中至少已經(jīng)有一個教師的系的信息。
select*fromdepartmentwhereexists(select*fromteacherWhere系號=department.系號)等價于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é)果返回,它本身并沒有任何運算或比較。第46頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.54求必修課程號是0200101的學(xué)生中成績比必修課號是0600201課的最低成績要高的學(xué)生的學(xué)號與成績select學(xué)號,成績fromgradewhere課程號="0200101"and成績>any(select
成績fromgradewhere
課程號="0600201")等價于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")等價于select學(xué)號,成績fromgradewhere課程號="0200101"and成績>(select
max(成績)
fromgradewhere
課程號="0600201")第48頁,共91頁,2024年2月25日,星期天5.2.11集合的并運算SQL支持集合的并(UNION)運算,即可以將兩個SELECT語句的查詢結(jié)果通過并運算合并成一個查詢結(jié)果。為了進(jìn)行并運算,要求兩個查詢結(jié)果具有相同的字段個數(shù),并且對應(yīng)字段的值要出自同一個值域。格式:<SELECT…>UNION[ALL]<SELECT…>說明將兩個查詢結(jié)果合并在一起輸出;若無ALL,重復(fù)記錄將被自動取消,若有ALL表示結(jié)果全部合并;第49頁,共91頁,2024年2月25日,星期天5.2.11集合的并運算例5.56
以下結(jié)果為系名為自動化系和經(jīng)濟(jì)系的教師信息select*fromteacherwhere系號=(select系號fromdepartmentwhere系名="自動化系")union;select*fromteacherwhere系號=(select系號fromdepartmentwhere系名="經(jīng)濟(jì)系")
第50頁,共91頁,2024年2月25日,星期天5.2.11集合的并運算例5.57以下結(jié)果為“選修課”和“必修課”的課程相關(guān)信息。select課程名,課程號fromcoursewhere課程性質(zhì)="選修“Unionselect課程名,課程號fromcoursewhere課程性質(zhì)=“必修“第51頁,共91頁,2024年2月25日,星期天5.2.12查詢結(jié)果的輸出查詢結(jié)果的輸出去向⑴
IntoArray<數(shù)組名>⑵IntoCursor<臨時表名>⑶IntoDbf|Table<表名>⑷ToFile<文本文件名>⑸ToPrinter[prompt]Intocursor<臨時表文件名>產(chǎn)生的臨時表文件是只讀的.dbf文件,當(dāng)查詢結(jié)束后該臨時文件是當(dāng)前文件,可像一般的.dbf文件使用,當(dāng)該臨時文件被關(guān)閉后,文件將自動被刪除。執(zhí)行完intotable<表文件名>后,系統(tǒng)將在默認(rèn)路徑下建立數(shù)據(jù)表文件,同時打開該文件,并將其設(shè)為當(dāng)前數(shù)據(jù)表。與臨時表文件不同,該表文件存放在磁盤上,關(guān)閉后不會被自動刪除。Tofile<文件名>[additive]可將查詢結(jié)果保存到一個文本文件,文本文件的默認(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é)果存放到臨時表文件例5.59
將查詢到的選修課的課程號和課程名存放在臨時.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選項,則在打印之前還會打開打印機(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命令動詞分別是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)對新記錄的所有字段都賦值時,可省略字段名。若只對某些字段賦值,即插入的不是完整的記錄時,則需要指定要賦值的字段名稱。VALUES子句中各個表達(dá)式的值為賦給每個字段的值,表達(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é)時為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é)時增加5個學(xué)時。Updatecourseset
學(xué)時=學(xué)時+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。在使用這個命令之前,首先要設(shè)計好表結(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<出錯信息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<出錯信息2>]])
功能:創(chuàng)建一個由指定字段組成的數(shù)據(jù)表。第68頁,共91頁,2024年2月25日,星期天5.4.1表的定義
關(guān)于CreateTable命令說明如下:用CREATETable命令可以完成表設(shè)計器所能完成的所有功能。命令關(guān)鍵字CreateTable與CreateDBF功能相同。Name<長表名>:為所創(chuàng)建的表定義長表名,只有當(dāng)前有打開的數(shù)據(jù)庫時,才能使用此選項。Free:創(chuàng)建為自由表。第69頁,共91頁,2024年2月25日,星期天5.4.1表的定義<字段名1><字段類型>[(字段寬度[,<小數(shù)位數(shù)>])]
:4個選項依次分別定義字段名、字段類型,數(shù)值型和字符型字段的寬度,數(shù)值型字段的小數(shù)位寬度。Null|NotNull:定義本字段是否可以為空。[Check<字段有效性規(guī)則>[Error<出錯信息1>]]:定義本字段的有效性規(guī)則和出錯時的提示信息字符串。[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)建一個外部索引(非主索引),并與一個父表建立關(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ù)據(jù)表2>的<索引標(biāo)識4>建立兩數(shù)據(jù)表之間的永久性關(guān)聯(lián)。[,Check<記錄有效性規(guī)則>[Error<出錯信息2>]]):定義表記錄的有效性規(guī)則和出錯信息。第72頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.67:建立一個自由表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<出錯信息>]] [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
為課程表增加一個新的字段“學(xué)時”(數(shù)值型,寬度2)。Altertable
課程add學(xué)時n(2)check學(xué)時>0error“學(xué)時應(yīng)該大于0"例5.71將課程表的“課程名”字段的寬度改為14Altertable
課程alter
課程名c(14)例5.72
為“訂購單”表增加一個新字段“總金額”(貨幣類型)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<錯誤信息>]][SETDEFAULT<默認(rèn)值>][DROPDEFAULT]
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 籃球場地租賃合同協(xié)議
- 冷庫維修合同協(xié)議
- 合同額變更的補(bǔ)充協(xié)議
- 種子合同協(xié)議范本
- 解除運輸協(xié)議合同
- 華圖協(xié)議班合同條款
- 貨物合同變更協(xié)議
- 夫妻終身協(xié)議合同
- 可轉(zhuǎn)股協(xié)議存款合同樣本
- 簡易加工協(xié)議合同
- 中國近現(xiàn)代史基本問題專題研究
- 2024-2030年中國CAE行業(yè)市場競爭格局及投資模式分析報告
- 報錯價格整改報告范文
- 《煤礦電氣安全培訓(xùn)》課件
- 服裝設(shè)計與工藝教育基礎(chǔ)知識單選題100道及答案解析
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- 化工企業(yè)試生產(chǎn)方案
- GB/T 6003.2-2024試驗篩技術(shù)要求和檢驗第2部分:金屬穿孔板試驗篩
- 入學(xué)教育學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 中國鐵路南昌局集團(tuán)有限公司招聘筆試題庫2024
- MMG-23600-特種車輛市場調(diào)研報告全球行業(yè)規(guī)模展望2024-2030 Sample-Zjh
評論
0/150
提交評論