關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(二)_第1頁(yè)
關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(二)_第2頁(yè)
關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(二)_第3頁(yè)
關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(二)_第4頁(yè)
關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(二)_第5頁(yè)
已閱讀5頁(yè),還剩105頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(二)SQL的數(shù)據(jù)操縱語(yǔ)言DML(Data Manipulation Language) 插入/修改/刪除記錄DML:Insert: 插入記錄Delete:刪除記錄Update: 修改記錄Select:查詢記錄4.4 SQL的數(shù)據(jù)查詢DQL (Data Query Language) SELECT查詢結(jié)構(gòu)SELECT基本查詢聯(lián)接查詢嵌套查詢查詢結(jié)果的連接:并、交、差Select查詢結(jié)構(gòu)Select 指定希望查看的列From 指定要查詢的表Where 指定查詢條件Group By 指定要分組的列Having 指定分組的條件Order By 指定如何排序4.4.1

2、單表查詢1 查詢特定的列:查詢所有學(xué)生的學(xué)號(hào)和姓名Select sno, sname From Student2 查詢?nèi)坑涗洠翰樵內(nèi)康膶W(xué)生信息Select * From Student* 表示所有列 等同于Select sno, sname, age, sex From Student二、Select基本查詢3 使用別名:查詢所有學(xué)生的學(xué)號(hào)和姓名Select sno AS 學(xué)號(hào), sname AS 姓名 From Student結(jié)果為: 學(xué)號(hào) 姓名 - 95001 李勇 95002 劉晨 95003 張立華如果別名包含空格,須使用雙引號(hào)Select sno AS “Student Numb

3、er” From Student二、Select基本查詢4 使用表達(dá)式:查詢所有學(xué)生的學(xué)號(hào)、姓名和出生年份Select sno , sname AS 學(xué)生,2005age AS 出生年份 From Student表達(dá)式可以是算術(shù)表達(dá)式、字符型常量、函數(shù)等。結(jié)果為: Sno 學(xué)生 出生年份 - 95001 李勇 1976 95002 劉晨 1977 95003 張立華 1978Select sno, to_char(birth, mm-dd-yyyy) AS birthday From StudentSelect Count(sno) As 學(xué)生人數(shù) From Student二、Select基本

4、查詢5 消除取值重復(fù)的行:用Distinct 例:查詢選修了課程的學(xué)生的學(xué)號(hào)Select Sno from SC;Select Distinct Sno from SC;結(jié)果為: Sno Sno - - 95001 95001 95001 95002 95001 95002 95002 查詢學(xué)生的姓名:Select Distinct sname From Student ( Distinct只對(duì)記錄有效,不針對(duì)某個(gè)特定列)Select Distinct sname, age From Student二、Select基本查詢5 查詢滿足條件的元組:查詢20歲以上的學(xué)生的學(xué)號(hào)和姓名Select s

5、no AS 學(xué)號(hào), sname AS 姓名 From Student Where age 20無(wú)Where子句時(shí)返回全部的記錄結(jié)果為: 學(xué)號(hào) 姓名 - 95001 李勇 95002 劉晨 WHERE子句中的關(guān)系運(yùn)算符算術(shù)比較符:, =, =, =, 確定范圍:BETWEEN AND, NOT BETWEEN AND 確定集合:IN , Not IN空值:IS NULL 和 IS NOT NULL字符匹配:LIKE, NOT LIKE多重條件:AND, OR存在謂詞:EXISTS二、Select基本查詢二、Select基本查詢(1)比較大小:比較符:, =, =, =, ,可和NOT連用。例:查

6、詢計(jì)算機(jī)系全體學(xué)生的名單。SELECT Sname FROM Student WHERE Sdept = CS ;二、Select基本查詢例:查詢所有年齡在20歲以下的學(xué)生姓名及年齡。SELECT Sname, Sage FROM Student WHERE Sage = 20) ;例:查詢學(xué)生成績(jī)有不及格的學(xué)生的學(xué)號(hào)。SELECT DISTINCT Sno FROM SC WHERE Grade 60 ;二、Select基本查詢(2)確定范圍: BETWEEN AND, NOT BETWEEN AND例:查詢年齡在2023歲(包括20歲和23歲)之間的學(xué)生姓名,系別和年齡。SELECT Sn

7、ame,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23 ;二、Select基本查詢例:查詢年齡不在2023歲(包括20歲和23歲)之間的學(xué)生姓名,系別和年齡。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 ;二、Select基本查詢(3)確定集合謂詞IN可以用來(lái)查找屬性值屬于指定集合的元組。例:查詢s001,s003,s006和s008四學(xué)生的信息Select * From StudentWhere sno IN (s001,s003,s006,

8、s008)二、Select基本查詢查詢信息系、數(shù)學(xué)系、計(jì)算機(jī)系學(xué)生的姓名和性別。 Select Sname, Ssex From Student Where Sdept IN (IS,MA,CS)查詢既不是信息系、數(shù)學(xué)系,也不是計(jì)算機(jī)系學(xué)生的姓名和性別。 Select Sname, Ssex From Student Where Sdept NOT IN (IS,MA,CS)二、Select基本查詢(4)字符匹配:謂詞 LIKE 可以用來(lái)進(jìn)行字符串的匹配,其一般格式為: NOT LIKE ESCAPE 其含義是查找指定的屬性列值與相匹配的元組。其中: %(百分號(hào)):代表任意長(zhǎng)度(可以為0)的字

9、符串; _(下劃線):代表任意單個(gè)字符。 例:查詢姓名的第一個(gè)字母為R的學(xué)生Select * From Student Where Sname LIKE R% ;例:查詢姓名的第一個(gè)字母為R并且倒數(shù)第二個(gè)字母為S的學(xué)生Select * From Student Where Sname LIKE R%S_ ;例:查詢學(xué)號(hào)為“95001”的學(xué)生Select * From Student Where Sno LIKE 95001(或 WHERE Sno=95001);二、Select基本查詢 例: 查姓“歐陽(yáng)”且全名為3個(gè)漢字的學(xué)生的姓名。 SELECT Sname, Sno FROM Studen

10、t WHERE Sname LIKE 歐陽(yáng)_ _;二、Select基本查詢二、Select基本查詢例: 查所有姓劉的學(xué)生的姓名、學(xué)號(hào)和性別。 SELECT Sname, Sdept, Ssex FROM Student WHERE Sname LIKE 劉%;例: 查名字中第二字為“陽(yáng)”字的學(xué)生的姓名和學(xué)號(hào)。 SELECT Sname, Sno FROM Student WHERE Sname LIKE _ _陽(yáng)%;例: 查所有不姓劉的學(xué)生姓名。 SELECT Sname FROM Student WHERE Sname NOT LIKE 劉%; 二、Select基本查詢例: 查DB_Desi

11、gn課程的課程號(hào)和學(xué)分。 SELECT Cno,Ccredit FROM course WHERE Cname LIKE DB_Design ESCAPE ;例: 查以“DB_”開(kāi)頭,且倒數(shù)第3個(gè)字符為i的課程的詳細(xì)情況。 WHERE Cname LIKE DB_%i_ _ ESCAPE ; 二、Select基本查詢二、Select基本查詢(5)涉及空值的查詢:謂詞IS NOT NULL可用來(lái)查詢空值和非空值: (這里的IS不能用等號(hào))查詢?nèi)鄙倌挲g數(shù)據(jù)的學(xué)生Select * From Student Where age IS NULL ;查詢所有有成績(jī)記錄的學(xué)生學(xué)號(hào)和課程號(hào)。Select Sn

12、o,Cno From SC Where Grade IS NOT NULL; (6)多重條件查詢: 可用 NOT、AND 和 OR 連接例:查年齡為空且姓名第一個(gè)字母為R的學(xué)生 Select * From Student Where age IS NULL and sname LIKE R%二、Select基本查詢二、Select基本查詢查CS系年齡在20歲以下的學(xué)生姓名 Select Sname From Student Where Sdept=CS and Sage 5 使用聚集函數(shù) WHERE子句與HAVING短語(yǔ)的根本區(qū)別在于作用對(duì)象不同。 WHERE子句作用于基本表或視圖,從中選擇滿

13、足條件的元組。HAVING短語(yǔ)作用于組,從中選擇滿足條件的組。使用聚集函數(shù)Having子句中必須是聚集函數(shù)的比較式,而且聚集函數(shù)的比較式也只能通過(guò)Having子句給出Having中的聚集函數(shù)可與Select中的不同例:查詢?nèi)藬?shù)在60以上的各個(gè)班級(jí)的學(xué)生平均年齡Select class, AVG(age) From StudentGroup By classHaving COUNT(*) 60 (12)4.4.2 連接查詢一個(gè)查詢同時(shí)涉及兩個(gè)以上的表,稱為連接查詢包括等值連接、自然連接、非等值連接查詢、自身連接查詢、外連接查詢和符合條件連接查詢。查詢結(jié)果返回兩個(gè)表中與聯(lián)接條件相互匹配的記錄,不返

14、回不相匹配的記錄。連接查詢示例中用到的表SnoSnameAge01Sa2002Sb2103sc21SnoCnoScore01C18001C28502C189Student表SC表(sno是外鍵, cno是外鍵)cnoCnamecreditC1Ca3C2Cb4C3Cc3.5Course表一、等值與非等值連接查詢連接條件(連接謂詞)一般格式為: . 其中主要有:=、=、=、!=連接謂詞還可以使用下面形式: . BETWEEN . AND .說(shuō)明:當(dāng)連接運(yùn)算符為=時(shí)為等值連接,其他為非等值連接;連接謂詞中的列名為連接字段,其類型必須是可比的,但不必是相同的。(1)聯(lián)接查詢例子查詢每個(gè)學(xué)生的學(xué)號(hào),姓名

15、和所選課程號(hào)Select student.sno,student.sname,oFrom student,scWhere student.sno = sc.sno 聯(lián)接條件若存在相同的列名,須用表名做前綴 查詢學(xué)生的學(xué)號(hào),姓名,所選課程號(hào)和課程名Select student.sno,student.sname, o,ameFrom student,sc,courseWhere student.sno = sc.sno and o = o 聯(lián)接條件(2)使用表別名查詢姓名為sa的學(xué)生所選的課程號(hào)和課程名Select o, ameFrom student a, sc b, course cWher

16、e a.sno=b.sno and o=o and a.sname=sa表別名可以在查詢中代替原來(lái)的表名使用(2)使用表別名聯(lián)接查詢與基本查詢結(jié)合:查詢男學(xué)生的學(xué)號(hào),姓名和所選的課程數(shù),結(jié)果按學(xué)號(hào)升序排列Select a.sno, a.sname, count(o) as c_countFrom student a, sc bWhere a.sno = b.sno and a.sex=MGroup By a.sno, a.snameOrder By student.snoGroup By子句將SELECT中除聚集函數(shù)外的屬性a.sno, a.sname必須列在其中二、自身連接 連接操作不僅可以

17、在兩個(gè)表之間進(jìn)行,也可以是一個(gè)表與其自己進(jìn)行連接,這種連接稱為表的自身連接。 例 查詢每一門課的間接先修課(即先修課的先修課)。 SELECT FIRST.Cno,SECOND.CpnoFROM Course FIRST,Course SECONDWHERE FIRST.Cpno=SECOND.Cno; 、外連接 在通常的連接操作中,有滿足連接條件的元組才能作為結(jié)果輸出。在特殊的連接操作中,即使沒(méi)有滿足連接條件的元組也需要作為結(jié)果輸出,就需要使用外連接(Outer Join)。外連接的運(yùn)算符通常為*。有的關(guān)系數(shù)據(jù)庫(kù)中也用十。 例33 查詢每個(gè)學(xué)生及其選修課程的情況 SELECT Student

18、.Sno,Sname, FROM Student,SC WHERE Student.Sno=SC.Sno(*); 外連接符若出現(xiàn)在連接運(yùn)算符的右邊,稱其為左外連接。相應(yīng)地,如果外連接符出現(xiàn)在連接運(yùn)算符的左邊,則稱為右外連接。四.復(fù)合條件連接 WHERE子句中有多個(gè)條件的連接操作,稱為復(fù)合條件連接。例 查詢選修2號(hào)課程且成績(jī)?cè)?0分以上的所有學(xué)生。 SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno=2 AND SC.Grade 90; 4.復(fù)合條件連接 例 查詢每個(gè)學(xué)生選修的課程名及其成績(jī)。

19、SELECT Student.Sno,Sname, Course.Cname,SC.Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno and SC.Cno=Course.Cno; 4.4.3 嵌套查詢?cè)赟QL語(yǔ)言中,一個(gè)SELECT-FROM-WHERE語(yǔ)句稱為一個(gè)查詢塊。在一個(gè)查詢語(yǔ)句中嵌套了另一個(gè)查詢語(yǔ)句(即:將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語(yǔ)的條件中的查詢稱為嵌套查詢或子查詢) *子查詢的SELECT語(yǔ)句中不能使用ORDER BY子句,ORDER BY子句永遠(yuǎn)只能對(duì)最終查詢結(jié)果排序。嵌套查詢的求解方法

20、是由里向外處理。 無(wú)關(guān)子查詢相關(guān)子查詢聯(lián)機(jī)視圖一.帶有IN謂詞的子查詢 帶有IN謂詞的子查詢是指父查詢與子查詢之間用IN進(jìn)行連接,判斷某個(gè)屬性列值是否在子查詢的結(jié)果中。 例 查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。 分步來(lái)完成此查詢 : 確定“劉晨”所在系名 查找所有在IS系學(xué)習(xí)的學(xué)生。 子查詢 :SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept IN (SELECT Sdept FROM Student Where Sname=劉晨); 自身連接查詢:SELECT Sl.Sno,Sl.Sname,Sl.SdeptFROM Student Sl,Stude

21、nt S2WHERE Sl.Sdept=S2.Sdept AND s2.sname=劉晨; 二者查詢效率不同 例查詢選修了課程名為信息系統(tǒng)的學(xué)生學(xué)號(hào)和姓名。 SELECT Sno,SnameFROM StudentWHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course Where cname=信息系統(tǒng));本查詢同樣可以用連接查詢實(shí)現(xiàn) SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC,Cno=COUrSe

22、.Cno AND Course.Cname=信息系統(tǒng); 二.帶有比較運(yùn)算符的子查詢 當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),可以用,=,=,!=或等比較運(yùn)算符。 例37 查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept= (SELECT Sdept FROM Student Where Sname=劉晨); 例 查詢選修了課程名為信息系統(tǒng)的學(xué)生學(xué)號(hào)和姓名。用=運(yùn)算符和IN謂詞共同完成 SELECT Sno,Sna FROM Student WHERE Sno IN (SELECT Sno FROM SC WHE

23、RE Cno= (SELECT Cno FROM Course Where cname=信息系統(tǒng));三.帶有ANY或ALL謂詞的子查詢 ANY 大于子查詢結(jié)果中的某個(gè)值=ANY大于等于子查詢結(jié)果中的某個(gè)值=ANY小于等于子查詢結(jié)果中的某個(gè)值=ANY等于子查詢結(jié)果中的某個(gè)值!=ANY或ANY 不等于子查詢結(jié)果中的某個(gè)值A(chǔ)LL大于子查詢結(jié)果中的所有值=ALL大于等于子查詢結(jié)果中的所有值=ALL小于等于子查詢結(jié)果中的所有值=ALL 等于子查詢結(jié)果中的所有值(通常沒(méi)有實(shí)際意義,!=ALL或ALL不等于子查詢結(jié)果中的任何一個(gè)值 例 查詢其他系中比IS系任一學(xué)生年齡小的學(xué)生名單。SELECT Sname,

24、SageFROM StudentWHERE Sage ANY (SELECT Sage FROM Student WHERE Sdept=IS) AND Sdept ISORDER BY Sage DESC; 本查詢實(shí)際上也可以用集函數(shù)實(shí)現(xiàn) SELECTSname,Sage FROMStudent WHERESage (SELECTMAX(Sage) FROMStudent WHERESdept=IS) ANDSdeptIS ORDER BY Sage DESC; 例 查詢其他系中比IS系所有學(xué)生年齡都小的學(xué)生名單。 SELECT Sname,Sage FROM Student WHERE S

25、age ALL (SELECT Sage FROM Student WHERE Sdept=IS) AND SdeptIS ORDER BY Sage DESC; 用集函數(shù)實(shí)現(xiàn) SELECT Sname,Sage FROM Student Where sage (SELECT MIN(Sage) FROM Student WHERE Sdept=IS) AND SdeptIS ORDER BY Sage DESC; 表4-6 ANY,ALL謂詞與集函數(shù)及l(fā)N謂詞的等價(jià)轉(zhuǎn)換關(guān)系 四. 帶EXISTS謂詞的子查詢 EXISTS代表存在量詞。帶有EXISTS謂詞的子查詢不返回任何實(shí)際數(shù)據(jù),它只產(chǎn)生邏

26、輯真值“true”?;蜻壿嫾僦怠癴alse “。例41 查詢所有選修了1號(hào)課程的學(xué)生姓名。 SELECTSname FROMStudent WHEREEXISTS (SELECT * FROMSC WHERESno=Student.SnoAND Cno=1); 無(wú)關(guān)子查詢舉例父查詢與子查詢相互獨(dú)立,子查詢語(yǔ)句不依賴父查詢中返回的任何記錄,可以獨(dú)立執(zhí)行。查詢沒(méi)有選修課程的所有學(xué)生的學(xué)號(hào)和姓名Select sno,snameFrom studentWhere sno NOT IN ( select distinct sno From sc);子查詢返回選修了課程的學(xué)生學(xué)號(hào)集合,它與外層的查詢無(wú)依賴

27、關(guān)系,可以單獨(dú)執(zhí)行無(wú)關(guān)子查詢一般與IN一起使用,用于返回一個(gè)值列表相關(guān)子查詢舉例相關(guān)子查詢的結(jié)果依賴于父查詢的返回值查詢選修了課程的學(xué)生學(xué)號(hào)和姓名Select sno, snameFrom studentWhere EXISTS (Select * From sc Where sc.sno = student.sno)相關(guān)子查詢的查詢條件依賴于外層父查詢的某個(gè)屬性值。處理過(guò)程 :首先取外層查詢中Student表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值(即Sno值)處理內(nèi)層查詢,若WHERE子句返回值為真(即內(nèi)層查詢結(jié)果非空),則取此元組放入結(jié)果表;然后再檢查Student表的下一個(gè)元組;重復(fù)

28、這一過(guò)程,直至Student表全部檢查完畢為止。 相關(guān)子查詢不可單獨(dú)執(zhí)行,依賴于外層查詢EXISTS(子查詢):當(dāng)子查詢返回結(jié)果非空時(shí)為真,否則為假執(zhí)行分析:對(duì)于student的每一行,根據(jù)該行的sno去sc中查找有無(wú)匹配記錄例 查詢沒(méi)有選修1號(hào)課程的學(xué)生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno=1);此例用連接運(yùn)算難于實(shí)現(xiàn) 不同形式的查詢間的替換 一些帶EXISTS或NOT EXISTS謂詞的子查詢不能被其他形式的子查詢等價(jià)替換所有帶IN謂詞

29、、比較運(yùn)算符、ANY和ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價(jià)替換。 例:查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。可以用帶EXISTS謂詞的子查詢替換: SELECT Sno,Sname,Sdept FROM Student S1 WHERE EXISTS SELECT * FROM Student S2 WHERE S2.Sdept = S1.Sdept AND S2.Sname = 劉晨 ;用EXISTS/NOT EXISTS實(shí)現(xiàn)全稱量詞(難點(diǎn))SQL語(yǔ)言中沒(méi)有全稱量詞 (For all)可以把帶有全稱量詞的謂詞轉(zhuǎn)換為等價(jià)的帶有存在量詞的謂詞: (x)P ( x( P) 帶有EX

30、ISTS謂詞的子查詢(續(xù))例 查詢選修了全部課程的學(xué)生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno= Student.Sno AND Cno= Course.Cno);帶有EXISTS謂詞的子查詢(續(xù)) 用EXISTS/NOT EXISTS實(shí)現(xiàn)邏輯蘊(yùn)函(難點(diǎn))SQL語(yǔ)言中沒(méi)有蘊(yùn)函(Implication)邏輯運(yùn)算可以利用謂詞演算將邏輯蘊(yùn)函謂詞等價(jià)轉(zhuǎn)換為: p q pq 帶有EXISTS謂詞的子查詢(續(xù)) 例44 查

31、詢至少選修了學(xué)生95002選修的全部課程的學(xué)生號(hào)碼。解題思路:用邏輯蘊(yùn)函表達(dá):查詢學(xué)號(hào)為x的學(xué)生,對(duì)所有的課程y,只要95002學(xué)生選修了課程y,則x也選修了y。形式化表示:用P表示謂詞 “學(xué)生95002選修了課程y”用q表示謂詞 “學(xué)生x選修了課程y”則上述查詢?yōu)? (y) p q 帶有EXISTS謂詞的子查詢(續(xù))等價(jià)變換: (y)p q (y (p q ) (y ( p q) y(pq)變換后語(yǔ)義:不存在這樣的課程y,學(xué)生95002選修了y,而學(xué)生x沒(méi)有選。帶有EXISTS謂詞的子查詢(續(xù))用NOT EXISTS謂詞表示: SELECT DISTINCT Sno FROM SC SCX

32、WHERE NOT EXISTS (SELECT * FROM SC SCY WHERE SCY.Sno = 95002 AND NOT EXISTS (SELECT * FROM SC SCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno);4.4.4 集合查詢 集合操作主要包括:并操作:UNION、UNION ALL交操作:INTERSECT差操作:EXCEPT (集合查詢是對(duì)查詢結(jié)果的連接)(1)Union和Union All例44求計(jì)算機(jī)科學(xué)系的所有學(xué)生及年齡不大于19歲的學(xué)生SELECT*FROMStudentWHERESdept=CSUNION

33、SELECT*FROMStudentWHERESage=19; (1)Union和Union All查詢課程平均成績(jī)?cè)?0分以上或者年齡小于20的學(xué)生學(xué)號(hào)(Select sno From student where age90) )UNION操作自動(dòng)去除重復(fù)記錄UNION All操作不去除重復(fù)記錄(2)Except操作:差查詢未選修課程的學(xué)生學(xué)號(hào)(Select sno From Student) Except (Select distinct sno From SC)(3)Intersect操作返回兩個(gè)查詢結(jié)果的交集查詢課程平均成績(jī)?cè)?0分以上并且年齡小于20的學(xué)生學(xué)號(hào)(Select sno

34、From student where age90) )例45查詢選修了課程1或者選修了課程 的學(xué)生。SELECTSno FROMSC WHERECno=1 UNION SELECTSno FROMSC Wherecno=;例49 查詢選修課程1的學(xué)生集合與選修課程2的學(xué)生集合的差集。本例實(shí)際上是查詢選修了課程1但沒(méi)有選修課程2的學(xué)生。 SELECT Sno FROM SC WHERE Cno= AND Sno NOT IN ( SELECT Sno FROM SC Where cno=2 );(3)聯(lián)接視圖子查詢出現(xiàn)在From子句中作為表使用查詢只選修了1門或2門課程的學(xué)生學(xué)號(hào)和課程數(shù)Sele

35、ct sno,count_cnoFrom (Select s.sno as sno, count(sc.sno) as count_cno From student s, sc Where s.sno=sc.sno Group by s.sno) SC2, studentWhere sc2.sno = student.sno and (count_cno=1 OR count_cno=2)聯(lián)機(jī)視圖可以和其它表一樣使用4.4.5 SELECT語(yǔ)句的一般格式SELECT ALL|DISTINCT 別名 , 別名 FROM 別名 , 別名 WHERE GROUP BY , .HAVING ORDER

36、 BY ASC|DESC , ASC|DESC ;目標(biāo)列表達(dá)式目標(biāo)列表達(dá)式格式(1) . *(2) .,. :由屬性列、作用于屬性列的集函數(shù)和常量的任意算術(shù)運(yùn)算(+,-,*,/)組成的運(yùn)算公式。集函數(shù)格式 COUNT SUM AVG (DISTINCT|ALL ) MAX MIN COUNT (DISTINCT|ALL *)條件表達(dá)式格式(1) ANY|ALL (SELECT語(yǔ)句)條件表達(dá)式格式 (2) NOT BETWEEN AND (SELECT (SELECT 語(yǔ)句) 語(yǔ)句)條件表達(dá)式格式 (3) (, ) NOT IN (SELECT語(yǔ)句)條件表達(dá)式格式 (4) NOT LIKE (5

37、) IS NOT NULL (6) NOT EXISTS (SELECT語(yǔ)句)條件表達(dá)式格式 (7) AND AND OR OR4.5 數(shù) 據(jù) 更 新數(shù)據(jù)更新操作有3個(gè):向表中添加若干行數(shù)據(jù)修改表中的數(shù)據(jù)刪除表中的若干行數(shù)據(jù)4.5.1 插入數(shù)據(jù)1、插入元組到基本表中 格式: Insert Into (列名1,列名2,列名n) Values(值1,值2,值n)例1:Insert Into Student(Sno, Sname, Age, Sex)Values(s001,John,21,M)Create Table Student( Sno Varchar2(10) Constraint PK P

38、rimary Key, Sname Varchar2(20), Age Number(3), Sex Char(1) DEFAULT F) INTO子句指定要插入數(shù)據(jù)的表名及屬性列屬性列的順序可與表定義中的順序不一致沒(méi)有指定屬性列:表示要插入的是一條完整的元組,且屬性列屬性與表定義中的順序一致指定部分屬性列:插入的元組在其余屬性列上取空值 VALUES子句 提供的值必須與INTO子句匹配值的個(gè)數(shù)值的類型(1)Insert其它例子例2:Insert Into StudentValues(s002,Mike,21,M)如果插入的值與表的列名精確匹配(順序,類型),則可以省略列名表例3:Insert

39、 Into Student(sno, sname)Values(s003,Mary )如果列名沒(méi)有出現(xiàn)在列表中,則插入記錄時(shí)該列自動(dòng)以默認(rèn)值填充,若沒(méi)有默認(rèn)值則設(shè)為空SnoSnameAgeSexs003MaryF(2)日期數(shù)據(jù)的插入例4:Alter Table Student Add birth Date;Insert Into StudentValues(s004,Rose, 22, F, to_date(11/08/1981, dd/mm/yyyy));Insert Into StudentValues(s005,Jack, 22, M, to_date(12-08-1981, dd-mm-yyyy));使用To_Date函數(shù)插入日期型2. 插入子查詢結(jié)果語(yǔ)句格式 INSERT INTO ( , ) 子查詢;功能 將子查詢結(jié)果插入指定表中插入子查詢結(jié)果(續(xù))例3 對(duì)每一個(gè)系,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫(kù)。第一步:建表 CREATE TABLE Deptage (Sde

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論