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

下載本文檔

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

文檔簡介

1、5.1 SOL簡介5.2 數(shù)據(jù)查詢5.3 數(shù)據(jù)操作5.4 數(shù)據(jù)定義SQL是Sturctured Query Language(結(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。SQL語言主要特點: 一體化語言 高度非過程化 語言簡潔,易學(xué)易用 統(tǒng)一的語法格式,不同的工作方式 視圖數(shù)據(jù)結(jié)構(gòu)SQL操作的兩個基本數(shù)據(jù)結(jié)構(gòu)對象是:表和視圖格式:格式:SELECT ALL|DISTINCT , FROM , WHERE AND 連接條件連接條件 AND|OR AND |O

2、R GROUP By ,分組列分組列HAVING UNION ALL ORDER By ASCENDING|DESCENDING,ASCENDING|DESCENDING INTO | TO FILE ADDITIVE | TO PRINTER | TO SCREEN|into cursor|into table建議:多多操作!來加深印象!ALL:在查詢結(jié)果中包含所有的行(包括重復(fù)值)。它是在查詢結(jié)果中包含所有的行(包括重復(fù)值)。它是系統(tǒng)的默認(rèn)設(shè)置。系統(tǒng)的默認(rèn)設(shè)置。DISTINCT:在查詢結(jié)果中刪除重復(fù)行在查詢結(jié)果中刪除重復(fù)行:當(dāng)涉及到多表查詢時,需要通過別名來區(qū)分不同當(dāng)涉及到多表查詢時,需要

3、通過別名來區(qū)分不同表文件中的字段。表文件中的字段。:檢索項主要是檢索項主要是FROM子句中所給出的表文件中的子句中所給出的表文件中的字段名。選中的字段名可以和字段名。選中的字段名可以和SQL函數(shù)一起使用。函數(shù)一起使用。常用到的函數(shù)有:常用到的函數(shù)有:平均值函數(shù)平均值函數(shù)AVG():求一列數(shù)據(jù)的平均值求一列數(shù)據(jù)的平均值最小值函數(shù)最小值函數(shù)MIN():求一列數(shù)的最小值求一列數(shù)的最小值最大值函數(shù)最大值函數(shù)MAX():求一列數(shù)的最大值求一列數(shù)的最大值計數(shù)函數(shù)計數(shù)函數(shù)COUNT():求一列中該字段的個數(shù)求一列中該字段的個數(shù)求和函數(shù)求和函數(shù)SUM():求一列數(shù)的總和求一列數(shù)的總和FROM:form子句也是

4、命令中不可缺少的成分,用于指定數(shù)子句也是命令中不可缺少的成分,用于指定數(shù)據(jù)來源,其后列出所有要查詢的表文件名,可以加上相應(yīng)的據(jù)來源,其后列出所有要查詢的表文件名,可以加上相應(yīng)的別名。別名。WHERE:WHERE是命令可選項,其后各子句含義為:是命令可選項,其后各子句含義為: 是指多表文件查詢的條件;是指多表文件查詢的條件;是指單表是指單表文件的查詢條件文件的查詢條件.GRONP By短語:短語:將查詢結(jié)果按某一列將查詢結(jié)果按某一列(或多個列或多個列)的值進(jìn)行的值進(jìn)行分組;分組;HAVING子句:子句: HAVING子句,只與子句,只與GROUP By配合使用,配合使用,用于說明分組條件;用于說

5、明分組條件;UNION ALL :說明將兩個查詢結(jié)果合并在一說明將兩個查詢結(jié)果合并在一起輸出;若無起輸出;若無ALL,重復(fù)記錄將被自動取消,若有,重復(fù)記錄將被自動取消,若有ALL表示表示結(jié)果全部合并;結(jié)果全部合并;ORDER By ASC|DESC:ORDER BY子句指定子句指定按哪個字段對查詢結(jié)果排序按哪個字段對查詢結(jié)果排序,ASC為升序,為升序, DESC為降序;為降序;INTO Destination:指定在何處保存查詢結(jié)果。如果在同指定在何處保存查詢結(jié)果。如果在同一個查詢中同時包含了一個查詢中同時包含了INTO子句和子句和TO子句,則子句,則TO子句不起子句不起作用。如果沒有包含作用

6、。如果沒有包含INTO子句,查詢結(jié)果顯示在子句,查詢結(jié)果顯示在“瀏覽瀏覽”窗窗口中??谥小estination可以是下列三種子句之一可以是下列三種子句之一DBF TableName|TABLE TableName:將查詢結(jié)果保存到一個表中,如果指定將查詢結(jié)果保存到一個表中,如果指定的表已經(jīng)打開,并且的表已經(jīng)打開,并且SET SAFETY設(shè)置設(shè)置為為OFF,則,則VFP在不給出任何警告信息在不給出任何警告信息的情況下改寫該表。執(zhí)行完的情況下改寫該表。執(zhí)行完SELECT語語句后,該表仍然保持打開活動狀態(tài)。句后,該表仍然保持打開活動狀態(tài)。CURSOR CursorName:將查詢結(jié):將查詢結(jié)果保存

7、到臨時表中。如果指定了一果保存到臨時表中。如果指定了一個已打開表的名稱,則個已打開表的名稱,則VFP產(chǎn)生錯產(chǎn)生錯誤信息。執(zhí)行完誤信息。執(zhí)行完SELECT語句后,語句后,臨時表仍然保持打開,但只讀。一臨時表仍然保持打開,但只讀。一旦關(guān)閉臨時表,則自動刪除它。旦關(guān)閉臨時表,則自動刪除它。ARRAY ArrayName:將查詢結(jié)果保存到數(shù)組中。如果查詢將查詢結(jié)果保存到數(shù)組中。如果查詢結(jié)果中不包含任何記錄,則不創(chuàng)建這結(jié)果中不包含任何記錄,則不創(chuàng)建這個數(shù)組。個數(shù)組。TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN:如果命令中包含了如果命令

8、中包含了TO子句,但沒有包括子句,但沒有包括INTO子句,則查詢結(jié)果定向輸出到名為子句,則查詢結(jié)果定向輸出到名為FileName的的ASCII碼文件、打印機(jī)或主窗口。包含碼文件、打印機(jī)或主窗口。包含ADDITIVE子句使查詢結(jié)果子句使查詢結(jié)果追加到所指定的文本文件的內(nèi)容后面。追加到所指定的文本文件的內(nèi)容后面。5.2.1 簡單查詢簡單查詢簡單查詢基于單個表,由簡單查詢基于單個表,由select-from構(gòu)成無條件查詢,構(gòu)成無條件查詢,select-from-where構(gòu)成條件查詢構(gòu)成條件查詢無條件查詢無條件查詢:select-from構(gòu)成構(gòu)成1.查詢表中部分字段查詢表中部分字段例例5.1查詢查詢

9、student表中學(xué)生的學(xué)號和姓名表中學(xué)生的學(xué)號和姓名select 學(xué)號學(xué)號,姓名姓名 from student例例5.2 查詢查詢department表中所有的系名表中所有的系名Select 系名系名 from department5.2.1 簡單查詢簡單查詢2.使用使用distinct短語短語例例5.3 列出學(xué)生表中的班級名稱列出學(xué)生表中的班級名稱 (無重復(fù)行無重復(fù)行)select distinct 班級班級 from student3.查詢表中全部字段查詢表中全部字段例例5.4 查詢學(xué)生表中全部字段查詢學(xué)生表中全部字段select * from student例例5.5 查詢查詢cour

10、se表中的所有元組表中的所有元組Select * from courseDistinct:去掉查詢結(jié)果去掉查詢結(jié)果中的重復(fù)值中的重復(fù)值“*”是通配符是通配符,表示所有字表示所有字段段5.2.1 簡單查詢簡單查詢條件查詢:條件查詢:select-from-where結(jié)構(gòu)結(jié)構(gòu)4.簡單的條件查詢簡單的條件查詢例例5.6 查詢查詢1992年年9月月1日以后出生的學(xué)生名單日以后出生的學(xué)生名單Select 姓名姓名 from student where 出生日期出生日期ctod(“09/01/92”)例例5.7 列出選修課的課程名稱和課程號列出選修課的課程名稱和課程號Select 課程名課程名,課程號課程

11、號 from course where 課程性質(zhì)課程性質(zhì)=“選修選修”例例5.8 查詢課程號是查詢課程號是0600101,成績大于成績大于80分的學(xué)生學(xué)號及成績分的學(xué)生學(xué)號及成績,且將成績由高到低列出且將成績由高到低列出Select 學(xué)號學(xué)號,成績成績 from grade where 課程號課程號=“0600101” and 成績成績80 order by 成績成績 desc5.2.1 簡單查詢簡單查詢4.簡單的條件查詢簡單的條件查詢例例5.9 查詢查詢teacher表中工資多于表中工資多于2200元的職工所在的系號元的職工所在的系號Select distinct 系號 from teach

12、er where 工資2200例例5.10 給出在系號給出在系號“01”或或“02”工作并且工資少于工作并且工資少于3000元的教師編號元的教師編號select 教師編號 from teacher where 工資2200) and (teacher.系號=department.系號)例例5.12找出成績大于找出成績大于90分的學(xué)生的學(xué)號、姓名及成績。分的學(xué)生的學(xué)號、姓名及成績。select student.學(xué)號,姓名,成績 from student,grade where 成績90 and student.學(xué)號=grade.學(xué)號或者select s.學(xué)號,姓名,成績 from student

13、 s,grade g where 成績90 and s.學(xué)號=g.學(xué)號在連接查詢中引用兩個表的公共字在連接查詢中引用兩個表的公共字段時,須在公共字段名前添加表名段時,須在公共字段名前添加表名或表別名作為前綴,否則系統(tǒng)會提或表別名作為前綴,否則系統(tǒng)會提示出錯。對于只在一個數(shù)據(jù)表中出示出錯。對于只在一個數(shù)據(jù)表中出現(xiàn)的字段,則無須指定前綴?,F(xiàn)的字段,則無須指定前綴。在在select查詢的查詢的from子句中,可以子句中,可以對數(shù)據(jù)表指定別名,對數(shù)據(jù)表指定別名,格式為格式為. ,指定別名后,在引用指定別名后,在引用該數(shù)據(jù)表的字段時,應(yīng)以別名作為該數(shù)據(jù)表的字段時,應(yīng)以別名作為數(shù)據(jù)表的前綴。數(shù)據(jù)表的前綴。

14、5.2.2 簡單連接查詢簡單連接查詢1.等值連接等值連接例例5.13 查詢上官小梅所學(xué)課程的課程名及其對應(yīng)的成績查詢上官小梅所學(xué)課程的課程名及其對應(yīng)的成績select 姓名,課程名,成績 from student s,course c,grade g where 姓名=上官小梅 and s.學(xué)號=g.學(xué)號 and g.課程號=c.課程號對于對于3個表的連接查詢,使用個表的連接查詢,使用where子句指定查詢條件時,其形式為子句指定查詢條件時,其形式為:from , where and 5.2.2 簡單連接查詢簡單連接查詢2.自連接查詢:自連接查詢:同一關(guān)系與自身進(jìn)行連接同一關(guān)系與自身進(jìn)行連接例

15、例5.14 找出至少選修找出至少選修0200101號課和號課和0600201號課學(xué)生的學(xué)號課學(xué)生的學(xué)號號select x.學(xué)號學(xué)號 from grade x, grade y where x.學(xué)號學(xué)號=y.學(xué)號學(xué)號 and x.課程號課程號=0200101 and y.課程號課程號=06002015.2.3 嵌套查詢嵌套查詢 在一個select命令的where子句中,如果還出現(xiàn)了另一個select命令,則這種查詢稱為嵌套查詢嵌套查詢。 Vfp只支持只支持單層單層嵌套查詢。嵌套查詢。 嵌套查詢所要求的結(jié)果出自一個關(guān)系,但相關(guān)的條件卻涉及多個關(guān)系:一般外層查詢的條件依賴內(nèi)層查詢的結(jié)果,而內(nèi)層查詢與

16、外層查詢無關(guān)。5.2.3 嵌套查詢嵌套查詢例例5.15 查詢哪些系至少有一個教師的工資為查詢哪些系至少有一個教師的工資為2200元。元。select 系名 from department where 系號 in (select 系號 from teacher where 工資=2200)例例5.16 查詢所有教師的工資都多于查詢所有教師的工資都多于2200元的系的信息。元的系的信息。select * from department where 系號 not in (select 系號 from teacher where 工資=80 and 成績成績1992-01-01As的作用是在查詢結(jié)果中

17、將的作用是在查詢結(jié)果中將指定列命名為一個新的名稱指定列命名為一個新的名稱Count(*)是是count()函數(shù)的一函數(shù)的一種特殊形式,用來統(tǒng)計查詢種特殊形式,用來統(tǒng)計查詢結(jié)果的記錄個數(shù)結(jié)果的記錄個數(shù)5.2.6 簡單的計算查詢(庫函數(shù)查詢)簡單的計算查詢(庫函數(shù)查詢)例例5.32 查詢查詢grade表中成績的最高分、最低分及平均分。表中成績的最高分、最低分及平均分。select max(成績成績)as 最高分最高分,min(成績成績)as 最低分最低分,avg(成成績績) as 平均分平均分 from grade例例5.33 查詢查詢grade表中所有選修課的成績總和表中所有選修課的成績總和se

18、lect sum(成績成績)from grade where 課程號課程號 in (select 課課程號程號 from course where 課程性質(zhì)課程性質(zhì)=選修選修)5.2.7 分組與計算查詢分組與計算查詢 GRONP By短語:短語: 將查詢結(jié)果按某一列將查詢結(jié)果按某一列(或多個列或多個列)的值的值進(jìn)行分組;進(jìn)行分組; HAVING子句:子句: HAVING子句,只與子句,只與GROUP By配合使用,配合使用,用于說明分組條件;用于說明分組條件;5.2.7 分組與計算查詢分組與計算查詢例例5.34 查詢男女生人數(shù)查詢男女生人數(shù)Select 性別性別,count(*) from s

19、tudent group by 性別性別或或Select 性別性別,count(性別性別) from student group by 性別性別例例5.35 求每個系的教師的平均工資求每個系的教師的平均工資select 系號系號,avg(工資工資) from teacher group by 系號系號例例5.36 求至少有兩名教師的每個系的平均工資求至少有兩名教師的每個系的平均工資select 系號系號,count(*),avg(工資工資) from teacher group by 系號系號 having count(*)=2Count(*)為每一組的記錄為每一組的記錄個數(shù)個數(shù)5.2.7 分

20、組與計算查詢分組與計算查詢例例5.37 列出各門課的平均成績、最高成績、最低成績和選課列出各門課的平均成績、最高成績、最低成績和選課人數(shù)人數(shù)select 課程號課程號, AVG(成績成績) AS 平均成績平均成績, MAX(成績成績) AS 最最高分高分, MIN(成績成績) AS 最低分最低分, COUNT(學(xué)號學(xué)號) AS 選課人數(shù)選課人數(shù) from grade group by 課程號課程號例例5.38 列出最少選修二門課程的學(xué)生姓名列出最少選修二門課程的學(xué)生姓名select 姓名姓名 from student where 學(xué)號學(xué)號 in(select 學(xué)號學(xué)號 from grade g

21、roup by 學(xué)號學(xué)號 having count(*)=2)5.2.7 分組與計算查詢分組與計算查詢例例5.39 求出總分大于求出總分大于180的學(xué)生的學(xué)號的學(xué)生的學(xué)號,姓名及總成績姓名及總成績select s.學(xué)號學(xué)號,姓名姓名,sum(成績成績) as 總成績總成績 from student s, grade g where s.學(xué)號學(xué)號=g.學(xué)號學(xué)號 group by g.學(xué)號學(xué)號 having sum(成績成績)1805.2.8 排序排序ORDER By ASC|DESC:指定將查詢結(jié)果按哪個指定將查詢結(jié)果按哪個字段排序字段排序,ASC為升序,為升序, DESC為降序;為降序;例例5

22、.40 對學(xué)生表按姓名排序?qū)W(xué)生表按姓名排序 Select * from student order by 姓名姓名例例5.41 對對teacher表按工資升序檢索出全部教師的信息。表按工資升序檢索出全部教師的信息。 select * from teacher order by 工資工資例例5.42 先按系號排序,再按工資降序排序輸出全部教師信息先按系號排序,再按工資降序排序輸出全部教師信息select * from teacher order by 系號系號,工資工資 desc5.2.8 排序排序顯示前幾項記錄:顯示前幾項記錄:有時只需要查找滿足條件的前幾個記錄,這時可使用top短語格式:T

23、OP nExpr PERCENT說明: nExpr為數(shù)字表達(dá)式,當(dāng)不使用PERCENT時, nExpr為1至32767間的整數(shù),說明顯示前幾個記錄;當(dāng)使用PERCENT時, nExpr是0.01至99.99間的實數(shù),說明顯示結(jié)果中前百分之幾的記錄。5.2.8 排序排序例例5.43 顯示顯示teacher表工資最高的表工資最高的3位教師的信息位教師的信息select * top 3 from teacher order by 工資 desc例例5.44 顯示顯示teacher表工資最低的那表工資最低的那20%教師的信息教師的信息select * top 20 percent from teach

24、er order by 工資例例5.45 在grade表中查詢成績最高的5位學(xué)生的得分情況。select * top 5 from grade order by 成績 desc例例5.46 在grade表中查詢成績最低的30%學(xué)生的得分情況select * top 30 percent from grade order by 成績top短語必須和短語必須和order by短語短語配合起來使用才有效,它不配合起來使用才有效,它不能單獨使用能單獨使用5.2.9 超連接查詢超連接查詢 用where指定的連接條件一般都是等值連接,即只有滿足連接條件的記錄才會出現(xiàn)在查詢結(jié)果中。 在SQL標(biāo)準(zhǔn)中還支持表的

25、超連接,使用下面的命令:Select From Table1 Inner | Left | Right | Full JoinTable2 On Where 其中,其中,innerinner代表內(nèi)連接,即普通連接;代表內(nèi)連接,即普通連接;Left、Right、Full分別代表左連接、右連接和全連接,分別代表左連接、右連接和全連接,Left、Right、Full三種三種連接方式也稱為外連接。連接方式也稱為外連接。5.2.9 超連接查詢超連接查詢 INNER JOIN(JOIN),普通連接:普通連接:只有滿足連接條件的記錄才出現(xiàn)在查詢結(jié)果中。 LIFT JOIN,左連接左連接:在進(jìn)行連接運(yùn)算時,首

26、先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第一個表(或稱Join左邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第二個表(或稱Join右邊的表)的屬性值為空值。5.2.9 超連接查詢超連接查詢 RIGHT JOIN,RIGHT JOIN,右連接右連接: :在進(jìn)行連接運(yùn)算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第二個表(或稱Join右邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第一個表(或稱Join左邊的表)的屬性值為空值。 FULL JOIN,FULL JOIN,全連接:全連接:在進(jìn)行連接運(yùn)算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時

27、將兩個表中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)另一個表的屬性值為空值。5.2.9 超連接查詢超連接查詢例例5.47 普通連接(將普通連接(將teacher表和表和department表的部分字段表的部分字段通過公共的字段通過公共的字段“系號系號”進(jìn)行連接)進(jìn)行連接)select d.系號系號, 系名系名,教師編號教師編號,教師姓名教師姓名 from Department d,teacher t where d.系號系號=t.系號系號等價于等價于select d.系號系號, 系名系名,教師編號教師編號,教師姓名教師姓名 from Department d join teacher

28、t on d.系號系號=t.系號系號等價于等價于select d.系號系號, 系名系名,教師編號教師編號,教師姓名教師姓名 from Department d inner join teacher t on d.系號系號=t.系號系號5.2.9 超連接查詢超連接查詢例例5.48 左連接左連接select d.系號系號, 系名系名,教師編號教師編號,教師姓名教師姓名 from Department d Left join teacher t on d.系號系號=t.系號系號例例5.49 右連接右連接假設(shè)假設(shè)teacher表插入一條記錄表插入一條記錄“2006108”,“07”, “劉麗劉麗”,1

29、972-06-24, “副教授副教授”,2500.00select d.系號系號, 系名系名,教師編號教師編號,教師姓名教師姓名 from Department d Right join teacher t on d.系號系號=t.系號系號5.2.9 超連接查詢超連接查詢例例5.50 全連接全連接select d.系號系號, 系名系名,教師編號教師編號,教師姓名教師姓名 from Department d Full join teacher t on d.系號系號=t.系號系號Join 連接格式在連接多個表時的書寫方連接格式在連接多個表時的書寫方法要特別注意,在這種格式中法要特別注意,在這種格

30、式中join和和on的順序很重要,特別要注意的順序很重要,特別要注意join的順序的順序與與on的順序正好相反的順序正好相反5.2.10 使用量詞和謂詞的查詢使用量詞和謂詞的查詢 格式格式1:比較運(yùn)算符比較運(yùn)算符ANYALLSOME(子查詢子查詢) 量詞量詞:ANY、ALL、SOME,其中ANY與SOME為同義詞,在進(jìn)行比較運(yùn)算時只要子查詢中有一行能使結(jié)果為真,則結(jié)果就為真;而ALL則要求子查詢中的所有行都使結(jié)果為真時,結(jié)果才為真。 格式格式2:NOTEXISTS(子查詢子查詢) 謂詞:謂詞:EXISTS,EXISTS或或NOT EXISTS是用來檢查在子查詢中是是用來檢查在子查詢中是否有結(jié)果

31、返回(即存在元組或不存在元組)否有結(jié)果返回(即存在元組或不存在元組)5.2.10 使用量詞和謂詞的查詢使用量詞和謂詞的查詢例例5.51 檢索那些系中還沒有教師的系的信息檢索那些系中還沒有教師的系的信息。select * from department where not exists (select * from teacher where 系號=department.系號)等價于等價于select * from department where 系號 not in (select 系號 from teacher )例例5.52 檢索那些系中至少已經(jīng)有一個教師的系的信息。檢索那些系中至少已經(jīng)有

32、一個教師的系的信息。 select * from department where exists (select * from teacher Where 系號=department.系號)等價于等價于select * from department where 系號 in (select 系號 from teacher)5.2.10 使用量詞和謂詞的查詢使用量詞和謂詞的查詢例例5.53 查詢還沒有被學(xué)生選修課程的課程號和課程名查詢還沒有被學(xué)生選修課程的課程號和課程名Select 課程號課程號,課程名課程名 from course where not exist(select * from g

33、rade where course.課程號課程號=grade.課程號課程號)注意:注意:NOTEXISTS只是只是 判斷子判斷子查詢中是否有或沒有結(jié)果返回,查詢中是否有或沒有結(jié)果返回,它本身并沒有任何運(yùn)算或比較。它本身并沒有任何運(yùn)算或比較。5.2.10 使用量詞和謂詞的查詢使用量詞和謂詞的查詢例例5.54 求必修課程號是求必修課程號是0200101的學(xué)生中成績比必修課號的學(xué)生中成績比必修課號是是0600201課的最低成績要高的學(xué)生的學(xué)號與成績課的最低成績要高的學(xué)生的學(xué)號與成績 select 學(xué)號學(xué)號,成績成績 from grade where 課程號課程號=0200101 and 成績成績an

34、y (select 成績成績 from grade where 課程號課程號=0600201)等價于等價于select 學(xué)號學(xué)號,成績成績 from grade where 課程號課程號=0200101 and 成績成績 (select min(成績成績) from grade where 課程號課程號=0600201)5.2.10 使用量詞和謂詞的查詢使用量詞和謂詞的查詢例例5.55 求必修課程號是求必修課程號是0200101的學(xué)生中成績比必修課號的學(xué)生中成績比必修課號是是0600201課的最高成績要高的學(xué)生的學(xué)號與成績課的最高成績要高的學(xué)生的學(xué)號與成績 select 學(xué)號學(xué)號,成績成績 f

35、rom grade where 課程號課程號=0200101 and 成績成績all(select 成績成績 from grade where 課程號課程號=0600201)等價于等價于select 學(xué)號學(xué)號,成績成績 from grade where 課程號課程號=0200101 and 成績成績 (select max(成績成績) from grade where 課程號課程號=0600201)5.2.11 集合的并運(yùn)算集合的并運(yùn)算SQL支持集合的并支持集合的并(UNION)運(yùn)算,即可以將兩個運(yùn)算,即可以將兩個SELECT 語語句的查詢結(jié)果通過并運(yùn)算合并成一個查詢結(jié)果。為了進(jìn)行并句的查詢結(jié)

36、果通過并運(yùn)算合并成一個查詢結(jié)果。為了進(jìn)行并運(yùn)算,要求兩個查詢結(jié)果具有相同的字段個數(shù),并且對應(yīng)字運(yùn)算,要求兩個查詢結(jié)果具有相同的字段個數(shù),并且對應(yīng)字段的值要出自同一個值域。段的值要出自同一個值域。 格式:格式:UNION ALL 說明將兩個查詢結(jié)果合并在一起輸出;若無說明將兩個查詢結(jié)果合并在一起輸出;若無ALL,重復(fù)記,重復(fù)記錄將被自動取消,若有錄將被自動取消,若有ALL表示結(jié)果全部合并;表示結(jié)果全部合并;5.2.11 集合的并運(yùn)算集合的并運(yùn)算例例5.56 以下結(jié)果為系名為自動化系和經(jīng)濟(jì)系的教師信息以下結(jié)果為系名為自動化系和經(jīng)濟(jì)系的教師信息select * from teacher where

37、系號=(select 系號 from department where 系名=自動化系)union;select * from teacher where 系號=(select 系號 from department where 系名=經(jīng)濟(jì)系) 5.2.11 集合的并運(yùn)算集合的并運(yùn)算例例5.57 以下結(jié)果為以下結(jié)果為“選修課選修課”和和“必修課必修課”的課程相關(guān)信息。的課程相關(guān)信息。select 課程名課程名,課程號課程號 from course where 課程性質(zhì)課程性質(zhì)=選修選修“Unionselect 課程名課程名,課程號課程號 from course where 課程性質(zhì)課程性質(zhì)=“必

38、修必修“5.2.12 查詢結(jié)果的輸出查詢結(jié)果的輸出查詢結(jié)果的輸出去向查詢結(jié)果的輸出去向 Into Array Into Array Into Cursor Into Cursor Into Dbf Into Dbf| |TableTable To File To File To Printer prompt To Printer promptInto cursor產(chǎn)生的臨時產(chǎn)生的臨時表文件是只讀的表文件是只讀的.dbf文件,當(dāng)查詢結(jié)束后文件,當(dāng)查詢結(jié)束后該臨時文件是當(dāng)前文件,可像一般的該臨時文件是當(dāng)前文件,可像一般的.dbf文件使用,當(dāng)該臨時文件被關(guān)閉后,文文件使用,當(dāng)該臨時文件被關(guān)閉后,文件

39、將自動被刪除。件將自動被刪除。執(zhí)行完執(zhí)行完into table 后,系統(tǒng)后,系統(tǒng)將在默認(rèn)路徑下建立數(shù)據(jù)表文件,同時將在默認(rèn)路徑下建立數(shù)據(jù)表文件,同時打開該文件,并將其設(shè)為當(dāng)前數(shù)據(jù)表。打開該文件,并將其設(shè)為當(dāng)前數(shù)據(jù)表。與臨時表文件不同,該表文件存放在磁與臨時表文件不同,該表文件存放在磁盤上,關(guān)閉后不會被自動刪除。盤上,關(guān)閉后不會被自動刪除。To fileadditive可將查詢結(jié)果可將查詢結(jié)果保存到一個文本文件,文本文件的默認(rèn)保存到一個文本文件,文本文件的默認(rèn)擴(kuò)展名是擴(kuò)展名是.txt,若使用,若使用additive可將查詢可將查詢結(jié)果追加到原文本文件的尾部,否則將結(jié)果追加到原文本文件的尾部,否則

40、將覆蓋原有文件。覆蓋原有文件。5.2.12 查詢結(jié)果的輸出查詢結(jié)果的輸出1.將查詢結(jié)果存放在數(shù)組將查詢結(jié)果存放在數(shù)組例例5.58 將查詢到的選修課的課程號和課程名存放在數(shù)組將查詢到的選修課的課程號和課程名存放在數(shù)組xx中。中。select 課程號,課程名 from course where 課程性質(zhì)=“選修” into array xx?xx(1,1),xx(1,2)?xx(2,1),xx(2,2)5.2.12 查詢結(jié)果的輸出查詢結(jié)果的輸出2.將查詢結(jié)果存放到臨時表文件將查詢結(jié)果存放到臨時表文件例例5.59 將查詢到的選修課的課程號和課程名存放在臨時將查詢到的選修課的課程號和課程名存放在臨時.

41、dbf表表文件文件xx中中。 select 課程號,課程名 from course where 課程性質(zhì)=選修“into cursor xx3.將查詢結(jié)果存放到永久表文件將查詢結(jié)果存放到永久表文件例例5.60 將查詢到選修課的課程號和課程名存放在永久表文件將查詢到選修課的課程號和課程名存放在永久表文件yy中中select 課程號,課程名 from course where 課程性質(zhì)=“選修“into table yy5.2.12 查詢結(jié)果的輸出查詢結(jié)果的輸出4.將查詢結(jié)果存放到文本文件將查詢結(jié)果存放到文本文件若命令中包含了若命令中包含了to子句,但沒有包含子句,但沒有包含into子句,則子句,

42、則to子句起子句起作用。作用。例例5.61 將查詢到的選修課的課程號和課程名存放在文本文件將查詢到的選修課的課程號和課程名存放在文本文件 xx中。中。select 課程號課程號,課程名課程名 from course where 課程性質(zhì)課程性質(zhì)=選修選修 to file xx5.將查詢結(jié)果直接輸出到打印機(jī)將查詢結(jié)果直接輸出到打印機(jī)使用子句使用子句to printerprompt可以直接將查詢結(jié)果輸出到打印可以直接將查詢結(jié)果輸出到打印機(jī),若使用了機(jī),若使用了prompt選項,則在打印之前還會打開打印機(jī)設(shè)選項,則在打印之前還會打開打印機(jī)設(shè)置對話框。置對話框。5.3 數(shù)據(jù)操作數(shù)據(jù)操作SQL的數(shù)據(jù)操作

43、功能是指對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行操作的功能,主要包括數(shù)據(jù)的插入、數(shù)據(jù)的更新和數(shù)據(jù)的刪除,對應(yīng)的SQL命令動詞分別是INSERT、UPDATE和DELETE。5.3.1.插入數(shù)據(jù)插入數(shù)據(jù) 格式格式1:INSERT INTO (, ) VALUES (, ) 功能:功能:向指定的數(shù)據(jù)表尾部插入一條記錄,并用指定的表達(dá)式向指定的數(shù)據(jù)表尾部插入一條記錄,并用指定的表達(dá)式對字段賦值。對字段賦值。 說明:說明: 當(dāng)對新記錄的所有字段都賦值時,可省略字段名。若只對某些當(dāng)對新記錄的所有字段都賦值時,可省略字段名。若只對某些字段賦值,即插入的不是完整的記錄時,則需要指定要賦值的字段賦值,即插入的不是完整的記錄時,則

44、需要指定要賦值的字段名稱。字段名稱。 VALUES子句中各個表達(dá)式的值為賦給每個字段的值,表達(dá)式子句中各個表達(dá)式的值為賦給每個字段的值,表達(dá)式和對應(yīng)字段的數(shù)據(jù)類型、取值范圍必須一致。和對應(yīng)字段的數(shù)據(jù)類型、取值范圍必須一致。5.3.1.插入數(shù)據(jù)插入數(shù)據(jù)例例5.62 在course表中插入記錄。Insert into course values(“0600010”,”,48,3,”選修”)& 在course表中插入記錄,課程號為“0600010”,課程名為空,學(xué)時為48,學(xué)分為3,課程性質(zhì)為“選修”Insert into course(課程號,課程名) values (“0600020”,”信息資

45、源管理“)& 在course表中插入記錄,課程號為“0600020”,課程名為”信息資源管理“5.3.1.插入數(shù)據(jù)插入數(shù)據(jù) 格式格式2:Insert Into From Array |MEMVAR 功能:功能:向指定的數(shù)據(jù)表插入一條新記錄,插入新記錄的字段值來自于數(shù)組元素或內(nèi)存變量。例例5.63 輸入以下命令并查看輸出結(jié)果。輸入以下命令并查看輸出結(jié)果。dimension b(4)b(1)=“2012052101b(2)=張珊 b(3)=女 b(4)=.null.insert into student from array b5.3.1.插入數(shù)據(jù)插入數(shù)據(jù)例例5.64 輸入以下命令并查看輸出結(jié)果。

46、輸入以下命令并查看輸出結(jié)果。學(xué)號=“2012052102“姓名=黎明“性別=男“出生日期=1986-09-10insert into student from memvar5.3.2.更新數(shù)據(jù)更新數(shù)據(jù) 格式:格式:UPDATE SET= WHERE 功能:功能:對于指定表中滿足條件的記錄,用指定的表達(dá)式的值對于指定表中滿足條件的記錄,用指定的表達(dá)式的值來更新指定的字段。來更新指定的字段。 注意:注意:update-sql只能在單一的表中更新記錄。只能在單一的表中更新記錄。5.3.2.更新數(shù)據(jù)更新數(shù)據(jù)例例5.65 將course表中所有選修課的學(xué)時增加5個學(xué)時。Update course set

47、 學(xué)時=學(xué)時+5 where 課程性質(zhì)=”選修“5.3.3 刪除數(shù)據(jù)刪除數(shù)據(jù) 格式:格式:DELETE FROM WHERE 功能:功能:對于指定數(shù)據(jù)表中滿足條件的記錄進(jìn)行邏輯刪除。對于指定數(shù)據(jù)表中滿足條件的記錄進(jìn)行邏輯刪除。 說明:說明:where用來指定刪除的條件,若不使用用來指定刪除的條件,若不使用where子句,則邏輯刪除表中的全部記錄。子句,則邏輯刪除表中的全部記錄。5.3.3 刪除數(shù)據(jù)刪除數(shù)據(jù)例例5.66 邏輯刪除邏輯刪除course表中課程性質(zhì)為選修的記錄。表中課程性質(zhì)為選修的記錄。Delete from course where 課程性質(zhì)課程性質(zhì)=“選修選修”5.4 數(shù)據(jù)定義數(shù)

48、據(jù)定義SQL的數(shù)據(jù)定義功能主要包括數(shù)據(jù)庫、表、視圖、存儲過程、規(guī)則和索引等對象的定義。本節(jié)主要介紹使用CREATE TABLE命令建立數(shù)據(jù)表結(jié)構(gòu),使用ALTER TABLE命令修改數(shù)據(jù)表結(jié)構(gòu)以及使用DROP TABLE命令刪除數(shù)據(jù)表。5.4.1 表的定義表的定義SQL語言提供的定義表的命令是Create Table。在使用這個命令之前,首先要設(shè)計好表結(jié)構(gòu)的各種細(xì)節(jié),包括: 表名; 各列(字段)的名稱、數(shù)據(jù)類型、寬度; 哪(幾)列將組成表的主鍵; 表中的哪些列必須提供數(shù)據(jù);5.4.1 表的定義表的定義創(chuàng)建表的語句格式如下:創(chuàng)建表的語句格式如下:Create Table | Dbf Name Fr

49、ee ( (字段寬度, ) Null | Not Null Check ErrorDefault Primary Key | UniqueReferences Tag , . 5.4.1 表的定義表的定義,Primary Key Tag , ,Unique Tag ,Foreign Key Tag Nodup References Tag, Check Error ) 功能:創(chuàng)建一個由指定字段組成的數(shù)據(jù)表。功能:創(chuàng)建一個由指定字段組成的數(shù)據(jù)表。5.4.1 表的定義表的定義關(guān)于關(guān)于Create Table命令說明如下命令說明如下: 用CREATE Table命令可以完成表設(shè)計器所能完成的所有功能

50、。 命令關(guān)鍵字Create Table 與Create DBF功能相同。 Name :為所創(chuàng)建的表定義長表名,只有當(dāng)前有打開的數(shù)據(jù)庫時,才能使用此選項。 Free:創(chuàng)建為自由表。5.4.1 表的定義表的定義 (字段寬度字段寬度, ) :4 4個個選項依次分別定義字段名、字段類型,數(shù)值型和字符型字選項依次分別定義字段名、字段類型,數(shù)值型和字符型字段的寬度,數(shù)值型字段的小數(shù)位寬度。段的寬度,數(shù)值型字段的小數(shù)位寬度。 Null | Not Null:定義本字段是否可以為空。定義本字段是否可以為空。 Check Error:定義本字段的有效性規(guī)則和出錯時的提示信息字符串。 Default :定義字段的

51、默認(rèn)值。5.4.1 表的定義表的定義 Primary Key | Unique:將本字段創(chuàng)建為主索引字段?;?qū)⒈咀侄蝿?chuàng)建為侯選索引字段。 References Tag:說明本表與之建立永久聯(lián)系的父表及父表的索引名。 Foreign Key:創(chuàng)建一個外部索引(非主索引),并與一個父表建立關(guān)聯(lián)。 Primary Key Tag :以以作為索引表達(dá)式建立主索引,索引名為作為索引表達(dá)式建立主索引,索引名為5.4.1 表的定義表的定義 ,Unique Tag :以作為索引表達(dá)式建立候選索引,索引名為 ,Foreign Key Tag Nodup References Tag:以作為索引表達(dá)式建立外(普通

52、)索引,索引名為,同時以該字段作為連接字段,通過引用的建立兩數(shù)據(jù)表之間的永久性關(guān)聯(lián)。 , Check Error ):定義表記錄的有效性規(guī)則和出錯信息。5.4.1 表的定義表的定義例例5.67:建立一個自由表KZScreate table kzs free(學(xué)號 c(6), 姓名; c(8), 性別 c(2), 年齡 n(3) null, 入學(xué)年月 d)5.4.1 表的定義表的定義例例5.68 建立教學(xué)管理數(shù)據(jù)庫,再用SQL命令建立學(xué)生表、課程表、成績表。create database kkkcreate table 學(xué)生(學(xué)號 c(8) primary key, 姓名 c(8) not nu

53、ll, 性別 c(2), 年齡 n(3) check 年齡16 and 年齡0) error 面積應(yīng)該大于0)5.4.1 表的定義表的定義create table 職工(倉庫號 C(5),職工號 c(5) primary key,工資 i check(工資=1000 and 工資=5000)error “工資值的范圍在1000-5000!“ default 1200,foreign key 倉庫號 tag 倉庫號 references 倉庫1)create table 供應(yīng)商(供應(yīng)商號 c(5) primary key,供應(yīng)商名 c(20),地址 c(20)5.4.1 表的定義表的定義crea

54、te table 訂購單(職工號 c(5),供應(yīng)商號 c(5),訂購單號 c(5) primary key,訂購日期 d,foreign key 職工號 tag 職工號 references 職工1,foreign key 供應(yīng)商號 tag 供應(yīng)商號 references 供應(yīng)商1)5.4.2 表結(jié)構(gòu)的修改表結(jié)構(gòu)的修改Alter Table命令用于修改表結(jié)構(gòu),可以增添字段、刪除字段、改變字段的定義、增添或刪除約束等。5.4.2 表結(jié)構(gòu)的修改表結(jié)構(gòu)的修改 Alter Table命令有命令有3種格式。種格式。格式格式1:Alter Table Add | Alter Column (字段寬度字段寬

55、度, ) Null | Not Null CheckError Default Primary Key | UniqueReferences Tag 5.4.2 表結(jié)構(gòu)的修改表結(jié)構(gòu)的修改功能:這種格式用來添加字段或修改字段的參數(shù) ??梢孕薷淖侄蔚念愋?、寬度、有效性規(guī)則等,但不能修改字段名,不能刪除字段及已定義的字段有效性規(guī)則。不管是否修改字段類型,必須將字段名和類型一同在命令中列出。5.4.2 表結(jié)構(gòu)的修改表結(jié)構(gòu)的修改例例5.70 為課程表增加一個新的字段“學(xué)時”(數(shù)值型,寬度2)。Alter table 課程 add 學(xué)時 n(2) check 學(xué)時0 error “學(xué)時應(yīng)該大于0例例5.7

56、1將課程表的“課程名”字段的寬度改為14Alter table 課程 alter 課程名c(14) 例例5.72 為“訂購單”表增加一個新字段“總金額”(貨幣類型)alter table 訂購單 add 總金額 y check 總金額0 error “總金額應(yīng)該大于0“例例5.73 將訂購單的“訂購單號”字段的寬度改為6alter table 訂購單 alter 訂購單號 c(6)5.4.2 表結(jié)構(gòu)的修改表結(jié)構(gòu)的修改格式格式2:ALTER TABLE ALTER COLUMN NULL | NOT NULL SET CHECKERROR SET DEFAULT DROP DEFAULTDROP CHECK

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論