版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
關(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ù)庫的標準語言,所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。第2頁,共91頁,2024年2月25日,星期天5.1SQL簡介SQL語言主要特點:一體化語言高度非過程化語言簡潔,易學易用統(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<目標>]|[TOFILE<文件名>[ADDITIVE]|TOPRINTER|TOSCREEN|intocursor<file>|intotable<file>]]建議:多多操作!來加深印象!第5頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢[ALL]:在查詢結(jié)果中包含所有的行(包括重復值)。它是系統(tǒng)的默認設置。[DISTINCT]:在查詢結(jié)果中刪除重復行[<別名>·]:當涉及到多表查詢時,需要通過別名來區(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ù)來源,其后列出所有要查詢的表文件名,可以加上相應的別名。WHERE:WHERE是命令可選項,其后各子句含義為:<連接條件>是指多表文件查詢的條件;<過濾條件>是指單表文件的查詢條件.第7頁,共91頁,2024年2月25日,星期天5.2數(shù)據(jù)查詢GRONPBy短語:將查詢結(jié)果按某一列(或多個列)的值進行分組;HAVING子句:HAVING子句,只與GROUPBy配合使用,用于說明分組條件;UNION[ALL]<SELECT>:說明將兩個查詢結(jié)果合并在一起輸出;若無ALL,重復記錄將被自動取消,若有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設置為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碼文件、打印機或主窗口。包含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表中學生的學號和姓名select學號,姓名fromstudent例5.2
查詢department表中所有的系名Select
系名fromdepartment第12頁,共91頁,2024年2月25日,星期天5.2.1簡單查詢2.使用distinct短語例5.3
列出學生表中的班級名稱(無重復行)select
distinct
班級fromstudent3.查詢表中全部字段例5.4
查詢學生表中全部字段select
*
fromstudent例5.5
查詢course表中的所有元組Select
*fromcourseDistinct:去掉查詢結(jié)果中的重復值“*”是通配符,表示所有字段第13頁,共91頁,2024年2月25日,星期天5.2.1簡單查詢條件查詢:select-from-where結(jié)構(gòu)4.簡單的條件查詢例5.6
查詢1992年9月1日以后出生的學生名單Select姓名
fromstudentwhere出生日期>ctod(“09/01/92”)例5.7
列出選修課的課程名稱和課程號Select課程名,課程號fromcoursewhere
課程性質(zhì)=“選修”例5.8查詢課程號是0600101,成績大于80分的學生學號及成績,且將成績由高到低列出Select學號,成績
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ù)表之間進行的連接條件。第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分的學生的學號、姓名及成績。selectstudent.學號,姓名,成績
from
student,gradewhere
成績>90and
student.學號=grade.學號或者selects.學號,姓名,成績
from
students,gradegwhere
成績>90and
s.學號=g.學號在連接查詢中引用兩個表的公共字段時,須在公共字段名前添加表名或表別名作為前綴,否則系統(tǒng)會提
示出錯。對于只在一個數(shù)據(jù)表中出現(xiàn)的字段,則無須指定前綴。在select查詢的from子句中,可以對數(shù)據(jù)表指定別名,格式為<關(guān)系名>.<別名>,指定別名后,在引用該數(shù)據(jù)表的字段時,應以別名作為數(shù)據(jù)表的前綴。第17頁,共91頁,2024年2月25日,星期天5.2.2簡單連接查詢1.等值連接例5.13
查詢上官小梅所學課程的課程名及其對應的成績select姓名,課程名,成績fromstudents,coursec,gradeg
where姓名="上官小梅"and
s.學號=g.學號
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)系與自身進行連接例5.14找出至少選修0200101號課和0600201號課學生的學號selectx.學號fromgradex,gradeywherex.學號=y.學號
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
查詢還沒有被學生選修課程的課程號和課程名select課程號,課程名fromcoursewhere課程號notin
(select
課程號
fromgrade)例5.18
查詢選修“管理學”的所有學生的學號及成績Select學號,成績
fromgradewhere
課程號=(selectdistinct課程號fromcoursewhere課程名="管理學")第22頁,共91頁,2024年2月25日,星期天5.2.3嵌套查詢例5.19
查詢同時選修了課程號為0200101和0600201兩門課程的學生姓名select
姓名
fromstudentwhere
學號in(selectg1.學號
fromgradeg1,gradeg2whereg1.學號=g2.學號andg1.課程號="0200101"andg2.課程號="0600201")第23頁,共91頁,2024年2月25日,星期天5.2.4特殊運算符特殊運算符:between…and,in,like,not,!=1.確定范圍的查詢:between…and例5.20
查詢成績在80分到90分之間的學生得分情況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的全體學生的學號、課程號和成績.select
學號,課程號,成績fromgradewhere
課程號in
("0200101","0600201")或select
學號,課程號,成績fromgradewhere
課程號=
"0200101"or
課程號="0600201"In運算符后面接一個集合,集合中的元素可以是數(shù)值、字符、日期和邏輯表達式等。第25頁,共91頁,2024年2月25日,星期天5.2.4特殊運算符3.!=和NOT例5.23
查詢不在市場營銷11-1班學生的信息。select*fromstudentwhere
班級
!="市場營銷11-1"或select*fromstudentwhere
not班級
="市場營銷11-1“例5.24
查詢成績不在80分到90分之間的學生得分情況select*fromgradewhere成績
notbetween
80and90第26頁,共91頁,2024年2月25日,星期天5.2.4特殊運算符4.模糊查詢like例5.25
在student表中,查詢2011級學生的基本情況select*fromstudentwhere
學號
like"2011%"
例5.26
在student表中,查詢所有姓“王”的學生名單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”,因為空值不是一個確定的值,所以不能用“=”這樣的運算符進行比較第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日后出生的學生人數(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é)果按某一列(或多個列)的值進行分組;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(學號)AS選課人數(shù)fromgradegroupby課程號例5.38
列出最少選修二門課程的學生姓名select姓名fromstudentwhere學號in(select學號fromgradegroupby學號
havingcount(*)>=2)第33頁,共91頁,2024年2月25日,星期天5.2.7分組與計算查詢例5.39
求出總分大于180的學生的學號,姓名及總成績selects.學號,姓名,sum(成績)as總成績fromstudents,gradegwheres.學號=g.學號groupbyg.學號havingsum(成績)>180第34頁,共91頁,2024年2月25日,星期天5.2.8排序ORDERBy<排序項>[ASC|DESC]:指定將查詢結(jié)果按哪個字段排序,ASC為升序,DESC為降序;例5.40
對學生表按姓名排序
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ù)字表達式,當不使用PERCENT時,nExpr為1至32767間的整數(shù),說明顯示前幾個記錄;當使用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位學生的得分情況。select*top5fromgradeorderby成績
desc例5.46
在grade表中查詢成績最低的30%學生的得分情況select*top30percentfromgradeorderby
成績top短語必須和orderby短語配合起來使用才有效,它不能單獨使用第37頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢用where指定的連接條件一般都是等值連接,即只有滿足連接條件的記錄才會出現(xiàn)在查詢結(jié)果中。在SQL標準中還支持表的超連接,使用下面的命令:
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,左連接:在進行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第一個表(或稱Join左邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應第二個表(或稱Join右邊的表)的屬性值為空值。第39頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢RIGHTJOIN,右連接:在進行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第二個表(或稱Join右邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應第一個表(或稱Join左邊的表)的屬性值為空值。
FULLJOIN,全連接:在進行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將兩個表中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應另一個表的屬性值為空值。第40頁,共91頁,2024年2月25日,星期天5.2.9超連接查詢例5.47
普通連接(將teacher表和department表的部分字段通過公共的字段“系號”進行連接)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
右連接假設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:<表達式><比較運算符>[ANY︱ALL︱SOME](子查詢)量詞:ANY、ALL、SOME,其中ANY與SOME為同義詞,在進行比較運算時只要子查詢中有一行能使結(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查詢還沒有被學生選修課程的課程號和課程名Select
課程號,課程名
fromcoursewhere
not
exist(select*fromgradewherecourse.課程號=grade.課程號)注意:[NOT]EXISTS只是判斷子查詢中是否有或沒有結(jié)果返回,它本身并沒有任何運算或比較。第46頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.54求必修課程號是0200101的學生中成績比必修課號是0600201課的最低成績要高的學生的學號與成績select學號,成績fromgradewhere課程號="0200101"and成績>any(select
成績fromgradewhere
課程號="0600201")等價于select學號,成績fromgradewhere課程號="0200101"and成績>(select
min(成績)
fromgradewhere
課程號="0600201")第47頁,共91頁,2024年2月25日,星期天5.2.10使用量詞和謂詞的查詢例5.55求必修課程號是0200101的學生中成績比必修課號是0600201課的最高成績要高的學生的學號與成績select學號,成績fromgradewhere課程號="0200101"and成績>all(select
成績fromgradewhere
課程號="0600201")等價于select學號,成績fromgradewhere課程號="0200101"and成績>(select
max(成績)
fromgradewhere
課程號="0600201")第48頁,共91頁,2024年2月25日,星期天5.2.11集合的并運算SQL支持集合的并(UNION)運算,即可以將兩個SELECT語句的查詢結(jié)果通過并運算合并成一個查詢結(jié)果。為了進行并運算,要求兩個查詢結(jié)果具有相同的字段個數(shù),并且對應字段的值要出自同一個值域。格式:<SELECT…>UNION[ALL]<SELECT…>說明將兩個查詢結(jié)果合并在一起輸出;若無ALL,重復記錄將被自動取消,若有ALL表示結(jié)果全部合并;第49頁,共91頁,2024年2月25日,星期天5.2.11集合的并運算例5.56
以下結(jié)果為系名為自動化系和經(jīng)濟系的教師信息select*fromteacherwhere系號=(select系號fromdepartmentwhere系名="自動化系")union;select*fromteacherwhere系號=(select系號fromdepartmentwhere系名="經(jīng)濟系")
第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文件,當查詢結(jié)束后該臨時文件是當前文件,可像一般的.dbf文件使用,當該臨時文件被關(guān)閉后,文件將自動被刪除。執(zhí)行完intotable<表文件名>后,系統(tǒng)將在默認路徑下建立數(shù)據(jù)表文件,同時打開該文件,并將其設為當前數(shù)據(jù)表。與臨時表文件不同,該表文件存放在磁盤上,關(guān)閉后不會被自動刪除。Tofile<文件名>[additive]可將查詢結(jié)果保存到一個文本文件,文本文件的默認擴展名是.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é)果直接輸出到打印機使用子句toprinter[prompt]可以直接將查詢結(jié)果輸出到打印機,若使用了prompt選項,則在打印之前還會打開打印機設置對話框。第55頁,共91頁,2024年2月25日,星期天5.3數(shù)據(jù)操作SQL的數(shù)據(jù)操作功能是指對數(shù)據(jù)庫中的數(shù)據(jù)進行操作的功能,主要包括數(shù)據(jù)的插入、數(shù)據(jù)的更新和數(shù)據(jù)的刪除,對應的SQL命令動詞分別是INSERT、UPDATE和DELETE。第56頁,共91頁,2024年2月25日,星期天5.3.1.插入數(shù)據(jù)格式1:INSERTINTO<表名>(<字段名1>[,<字段名2>]····)VALUES(<表達式1>[,<表達式2>]‥‥)功能:向指定的數(shù)據(jù)表尾部插入一條記錄,并用指定的表達式對字段賦值。說明:當對新記錄的所有字段都賦值時,可省略字段名。若只對某些字段賦值,即插入的不是完整的記錄時,則需要指定要賦值的字段名稱。VALUES子句中各個表達式的值為賦給每個字段的值,表達式和對應字段的數(shù)據(jù)類型、取值范圍必須一致。第57頁,共91頁,2024年2月25日,星期天5.3.1.插入數(shù)據(jù)例5.62
在course表中插入記錄。Insertintocoursevalues(“0600010”,””,48,3,”選修”)&&
在course表中插入記錄,課程號為“0600010”,課程名為空,學時為48,學分為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é)果。學號=“2012052102“姓名="黎明“性別="男“出生日期={^1986-09-10}insertintostudentfrommemvar第60頁,共91頁,2024年2月25日,星期天5.3.2.更新數(shù)據(jù)格式:UPDATE<表名>SET<字段名>=<表達式>[WHERE<條件>]功能:對于指定表中滿足條件的記錄,用指定的表達式的值來更新指定的字段。注意:update-sql只能在單一的表中更新記錄。第61頁,共91頁,2024年2月25日,星期天5.3.2.更新數(shù)據(jù)例5.65
將course表中所有選修課的學時增加5個學時。Updatecourseset
學時=學時+5where
課程性質(zhì)=”選修“第62頁,共91頁,2024年2月25日,星期天5.3.3刪除數(shù)據(jù)格式:DELETEFROM<表名>WHERE<條件>功能:對于指定數(shù)據(jù)表中滿足條件的記錄進行邏輯刪除。說明: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。在使用這個命令之前,首先要設計好表結(jié)構(gòu)的各種細節(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<默認值>] [PrimaryKey|Unique] [References<數(shù)據(jù)表1>[Tag<索引標志>]] [,<字段名2>...]
第67頁,共91頁,2024年2月25日,星期天5.4.1表的定義
[,PrimaryKey<索引表達式1>Tag<索引名1>], [,Unique<索引表達式2>Tag<索引名2>] [,ForeignKey<索引表達式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命令可以完成表設計器所能完成的所有功能。命令關(guān)鍵字CreateTable與CreateDBF功能相同。Name<長表名>:為所創(chuà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<默認值>]:定義字段的默認值。第70頁,共91頁,2024年2月25日,星期天5.4.1表的定義PrimaryKey|Unique:將本字段創(chuàng)建為主索引字段。或?qū)⒈咀侄蝿?chuàng)建為侯選索引字段。References<數(shù)據(jù)表1>[Tag<索引標志>]:說明本表與之建立永久聯(lián)系的父表及父表的索引名。ForeignKey:創(chuàng)建一個外部索引(非主索引),并與一個父表建立關(guān)聯(lián)。PrimaryKey<索引表達式1>Tag<索引名1>:以<索引表達式1>作為索引表達式建立主索引,索引名為<索引名1>第71頁,共91頁,2024年2月25日,星期天5.4.1表的定義[,Unique<索引表達式2>Tag<索引名2>]:以<索引表達式2>作為索引表達式建立候選索引,索引名為<索引名2>[,ForeignKey<索引表達式3>Tag<索引名3>[Nodup]References<數(shù)據(jù)表2>[Tag<索引名4>]]:以<索引表達式3>作為索引表達式建立外(普通)索引,索引名為<索引名3>,同時以該字段作為連接字段,通過引用<數(shù)據(jù)表2>的<索引標識4>建立兩數(shù)據(jù)表之間的永久性關(guān)聯(lián)。[,Check<記錄有效性規(guī)則>[Error<出錯信息2>]]):定義表記錄的有效性規(guī)則和出錯信息。第72頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.67:建立一個自由表KZScreatetablekzsfree(學號c(6),姓名;c(8),性別c(2),年齡n(3)null,入學年月d)第73頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.68
建立教學管理數(shù)據(jù)庫,再用SQL命令建立學生表、課程表、成績表。createdatabasekkkcreatetable學生(學號c(8)primarykey,姓名c(8)notnull,性別c(2),年齡n(3)check年齡>16and年齡<25error“年齡范圍在16-25,請輸入正確的年齡”,是否團員l,入學年月ddefaultctod(“09/06/2002”),備注m)createtable課程(課號c(4)primarykey,課程名c(12)notnull,學分n(2))第74頁,共91頁,2024年2月25日,星期天5.4.1表的定義createtable成績(學號c(8)references學生2,課號c(4),成績n(5,2),primarykey學號+課號tag學號課號,foreignkey課號tag課號references課程2tag課號)第75頁,共91頁,2024年2月25日,星期天5.4.1表的定義例5.69
創(chuàng)建訂貨管理數(shù)據(jù)庫,并用SQL命令建立倉庫表、職工表、供應商表及訂購單表。createdatabase
訂貨管理createtable倉庫(倉庫號C(5)primarykey,城市c(10),面積icheck(面積>0)error"面積應該大于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供應商(供應商號c(5)primarykey,供應商名c(20),地址c(20))第77頁,共91頁,2024年2月25日,星期天5.4.1表的定義createtable訂購單(職工號c(5),供應商號c(5),訂購單號c(5)primarykey,訂購日期d,foreignkey職工號tag職工號references職工1,foreignkey供應商號tag供應商號references供應商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<默認值>] [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
為課程表增加一個新的字段“學時”(數(shù)值型,寬度2)。Altertable
課程add學時n(2)check學時>0error“學時應該大于0"例5.71將課程表的“課程名”字段的寬度改為14Altertable
課程alter
課程名c(14)例5.72
為“訂購單”表增加一個新字段“總金額”(貨幣類型)altertable
訂購單add總金額ycheck總金額>0error“總金額應該大于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<默認值>][DROPDEFAULT]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舊物品買賣協(xié)議書
- 2025年遠程辦公平臺優(yōu)化項目可行性研究報告
- 掛具驗收合同范本
- 2025年食物安全追溯系統(tǒng)建設項目可行性研究報告
- 播后定級合同范本
- 2025年新型智慧能源管理系統(tǒng)建設項目可行性研究報告
- 掛車購買合同范本
- 2025年新能源汽車產(chǎn)業(yè)鏈整合項目可行性研究報告
- 2025年清潔水源管理系統(tǒng)項目可行性研究報告
- 2025年新型建筑材料研發(fā)與應用可行性研究報告
- 六章 幾何圖形初步 專題一-線段的計算 教學設計 2024--2025學年人教版數(shù)學七年級上冊
- 2GW高效N型Topcon電池智能制造項目可行性研究報告模板-立項拿地
- 鄉(xiāng)村振興戰(zhàn)略的理論與實踐智慧樹知到期末考試答案章節(jié)答案2024年華中師范大學
- 金屬硬度轉(zhuǎn)換表【HLD,HRC,HRB,HV,HB,HSD】
- 大慶一中、六十九中初四上學期期末質(zhì)量檢測物理試題
- 建材有限公司砂石卸車作業(yè)安全風險分級管控清單
- 中石化華北分公司鉆井定額使用說明
- 礦山壓力與巖層控制智慧樹知到答案章節(jié)測試2023年湖南科技大學
- 機加工車間主任年終總結(jié)3篇
- WB/T 1119-2022數(shù)字化倉庫評估規(guī)范
- GB/T 5125-1985有色金屬沖杯試驗方法
評論
0/150
提交評論