




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、機(jī)械自動(dòng)化學(xué)院機(jī)械自動(dòng)化學(xué)院20142014主講:主講: 顧顧 曦曦 電話:電話:1569718107915697181079EmailEmail:主要內(nèi)容SQL概述數(shù)據(jù)定義數(shù)據(jù)更新1簡(jiǎn)單查詢簡(jiǎn)單查詢 連接查詢連接查詢嵌套子查詢嵌套子查詢 聚合查詢聚合查詢 集合運(yùn)算集合運(yùn)算 SQL查詢一般格式查詢一般格式數(shù)據(jù)更新數(shù)據(jù)更新2 視圖視圖 12:2621.1 投影運(yùn)算投影運(yùn)算1.2 選擇運(yùn)算選擇運(yùn)算 1.3 排序運(yùn)算排序運(yùn)算1.4 查詢表查詢表1.1 投影運(yùn)算SQL查詢的基本結(jié)構(gòu)包括3個(gè)子句:SELECT子句對(duì)應(yīng)投影運(yùn)算,指定查詢結(jié)果中所需要的屬性或表達(dá)式FROM子句 對(duì)應(yīng)笛卡爾積,給出查詢所涉及的
2、表,表可以是基本表、視圖或查詢表WHERE子句 對(duì)應(yīng)選擇運(yùn)算,指定查詢結(jié)果元組所需要滿足的選擇條件注意:SELECT是必須的,其他是可選的。12:264基本語(yǔ)法為 SELECT A1, A2, ., An /*需要查找的屬性或表達(dá)式*/ FROM R1, R2, ., Rm /*查詢所涉及的表*/ WHERE P /*代表謂詞(即選擇條件),如果省略 WHERE子句,表示P為真*/SQL的查詢結(jié)果中允許包含重復(fù)元組一般理解的執(zhí)行過程:首先對(duì)表R1, R2, ., Rm執(zhí)行笛卡爾積然后在笛卡爾積中選擇使得謂詞P為真的記錄再在A1, A2, ., An屬性列中進(jìn)行投影運(yùn)算,不消除重復(fù)元組12:26
3、51.1.1 查詢指定列選取表中的全部列全部列或指定列指定列,通過SELECT確定要查詢的屬性例3.1 查詢所有班級(jí)的班級(jí)編號(hào)、班級(jí)名稱和所屬學(xué)院 SELECT classNo, className, institute FROM Class該查詢的執(zhí)行過程是:從Class表中依次取出每個(gè)元組對(duì)每個(gè)元組僅選取classNo、className和institute三個(gè)屬性的值,形成一個(gè)新元組最后將這些新元組組織為一個(gè)結(jié)果關(guān)系輸出12:2661.1.2 消除重復(fù)元組需要消除重復(fù)元組,使用DISTINCT關(guān)鍵字例3.2 查詢所有學(xué)院的名稱。 SELECT institute FROM Class上述
4、查詢不消除重復(fù)元組消除重復(fù)元組 SELECT DISTINCT institute FROM Class12:2671.1.3 查詢所有列兩種方法:將所有的列在SELECT子句中列出(可以改變列的顯示順序);使用*符號(hào),*表示所有屬性,按照表定義時(shí)的順序顯示所有屬性 例3.3 查詢所有班級(jí)的全部信息。 SELECT classNo, className, classNum, grade, institute FROM Class或 SELECT * FROM Class12:2681.1.4 給屬性列取別名可為屬性列取一個(gè)便于理解的列名,如用中文來顯示列名為屬性列取別名特別適合經(jīng)過計(jì)算的列例3
5、.4 查詢所有班級(jí)的所屬學(xué)院、班級(jí)編號(hào)和班級(jí)名稱,要求用中文顯示列名可使用AS關(guān)鍵字取別名: SELECT institute AS 所屬學(xué)院, classNo AS 班級(jí)編號(hào), className AS 班級(jí)名稱 FROM Class12:2691.1.5 查詢經(jīng)過計(jì)算的列可使用屬性、常數(shù)、函數(shù)和表達(dá)式 例3.5 查詢每個(gè)班級(jí)編號(hào)、班級(jí)名稱以及該班級(jí)現(xiàn)在為幾年級(jí),并將班級(jí)編號(hào)中大寫字母改為小寫字母輸出 SELECT lower(classNo) 班級(jí)編號(hào), className, year(curdate() - grade AS 年級(jí) FROM Class函數(shù)lower()將大寫字母改為小寫
6、字母函數(shù)curdate()獲取當(dāng)前系統(tǒng)的日期其他函數(shù):now(), getdate()函數(shù)year()提取日期中的年份12:26101.2 選擇運(yùn)算(WHERE子句)WHERE子句可實(shí)現(xiàn)關(guān)系代數(shù)中的選擇運(yùn)算WHERE常用的查詢條件有:比較運(yùn)算:、=、=、=、(或!=)范圍查詢:BETWEEN.AND集合查詢:IN空值查詢:IS null字符匹配查詢:LIKE邏輯查詢:AND、OR、NOT12:26111.2.1 比較運(yùn)算比較運(yùn)算符、=、=、=、(或!=) 例3.6 查詢2007級(jí)的班級(jí)編號(hào)、班級(jí)名稱和所屬學(xué)院。 SELECT classNo, className, institute FROM
7、 Class WHERE grade=200712:2612該查詢的執(zhí)行過程可能有多種方法:全表掃描法依次取出Class表中的每個(gè)元組判斷該元組的grade屬性值是否等于2007若是則將該元組的班級(jí)編號(hào)、班級(jí)名稱和所屬學(xué)院屬性取出,形成一個(gè)新元組最后將所有新元組組織為一個(gè)結(jié)果關(guān)系輸出該方法適用于小表,或者該表未在grade屬性列上建索引索引搜索法如果該表在grade屬性列上建有索引,且滿足條件的記錄不多,則可使用索引搜索法來檢索數(shù)據(jù)具體使用何種方法由數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化器來選擇,詳見第8章內(nèi)容12:2613在學(xué)生Student表中查詢年齡大于或等于19歲的同學(xué)學(xué)號(hào)、姓名和出生日期。 SEL
8、ECT studentNo, studentName, birthday FROM Student WHERE year(curdate() - year(birthday)=19例3.7 12:2614.1.2.2 范圍查詢BETWEEN.AND用于查詢屬性值在某一個(gè)范圍內(nèi)的元組NOT BETWEEN.AND用于查詢屬性值不在某一個(gè)范圍內(nèi)的元組BETWEEN后是屬性的下限值,AND后是屬性的上限值例3.8 在選課Score表中查詢成績(jī)?cè)?090分之間的同學(xué)學(xué)號(hào)、課程號(hào)和相應(yīng)成績(jī) SELECT studentNo, courseNo, score FROM Score WHERE score
9、BETWEEN 80 AND 90該查詢也可以使用邏輯運(yùn)算AND實(shí)現(xiàn),見例3.2212:2615例3.9 在選課Score表中查詢成績(jī)不在8090分之間的同學(xué)學(xué)號(hào)、課程號(hào)和相應(yīng)成績(jī)。 SELECT studentNo, courseNo, score FROM Score WHERE score NOT BETWEEN 80 AND 90該查詢也可以使用邏輯運(yùn)算OR實(shí)現(xiàn),見例3.2312:26161.2.3 集合查詢IN用于查詢屬性值在某個(gè)集合內(nèi)某個(gè)集合內(nèi)的元組NOT IN用于查詢屬性值不在某個(gè)集合內(nèi)不在某個(gè)集合內(nèi)的元組 IN后面是集合,可以是具體的集合,也可以是查詢出來的查詢出來的元組集合元
10、組集合(該部分內(nèi)容詳見3.4節(jié)的內(nèi)容)。例3.10 在選課Score表中查詢選修了“001”、“005”或“003”課程的同學(xué)學(xué)號(hào)、課程號(hào)和相應(yīng)成績(jī)。 SELECT studentNo, courseNo, score FROM Score WHERE courseNo IN (001, 005, 003)該查詢也可以使用邏輯運(yùn)算OR實(shí)現(xiàn),見例3.1912:2617例3.11 在學(xué)生 Student表中查詢籍貫不是“南昌”或“上?!钡耐瑢W(xué)姓名、籍貫和所屬班級(jí)編號(hào)。 SELECT studentName, native, classNo FROM Student WHERE native NOT
11、 IN (南昌, 上海)該查詢也可以使用邏輯運(yùn)算AND實(shí)現(xiàn),見例3.2112:26181.2.4 空值查詢空值表示未知或不確定的值,空值表示為nullIS null用于查詢屬性值為空值IS NOT null用于查詢屬性值不為空值IS不能用“=”替代例3.12 在課程Course表中查詢先修課程為空值先修課程為空值的課程信息。 SELECT * FROM Course WHERE priorCourse IS NULL12:2619例3.13 在課程Course表中查詢有有先修課程的課程信息。 SELECT * FROM Course WHERE priorCourse IS NOT NULL1
12、2:26201.2.5 字符匹配查詢LIKE用于字符匹配查詢,語(yǔ)法格式為:NOT LIKE ESCAPE 查詢的含義是:如果在LIKE前沒有NOT,則查詢指定的屬性列值與相匹配的元組;如果在LIKE前有NOT,則查詢指定的屬性列值不與相匹配的元組。12:2621可以是一個(gè)具體的字符串,也可以包括通配符%和_%表示任意長(zhǎng)度的字符串a(chǎn)b%,表示所有以ab開頭的任意長(zhǎng)度的字符串;zhang%ab,表示以zhang開頭,以ab結(jié)束,中間可以是任意個(gè)字符的字符串。符號(hào)_(下劃線下劃線)表示任意一個(gè)字符ab_,表示所有以 ab開頭的3個(gè)字符的字符串,其中第3個(gè)字符為任意字符;a_b表示所有以a開頭,以b
13、結(jié)束的4個(gè)字符的字符串,且第2、3個(gè)字符為任意字符。12:2622例3.14 在班級(jí)Class表中查詢班級(jí)名稱中含有會(huì)計(jì)的班級(jí)信息 SELECT * FROM Class WHERE className LIKE %會(huì)計(jì)%注意:字符串必須用一對(duì)引號(hào)括起來可單可雙,小心匹配。12:2623例3.15 在學(xué)生Student表中查詢所有姓王且全名為3個(gè)漢字的同學(xué)學(xué)號(hào)和姓名 SELECT studentNo, studentName FROM Student WHERE studentName LIKE 王_注意:在中文SQL-Server中,如果匹配字符串為漢字,則一個(gè)下劃線代表一個(gè)漢字;如果是西文
14、,則一個(gè)下劃線代表一個(gè)字符。12:2624例3.16 在學(xué)生Student表中查詢名字中不含有“福”的同學(xué)學(xué)號(hào)和姓名。 SELECT studentNo, studentName FROM Student WHERE studentName NOT LIKE %福%12:2625例3.17 在學(xué)生Student表中查詢蒙古族的同學(xué)學(xué)號(hào)和姓名 SELECT studentNo, studentName FROM Student WHERE nation LIKE 蒙古族注意:如果匹配字符串中不含有%和_,則LIKE與比較運(yùn)算符“=”的查詢結(jié)果一樣SELECT studentNo, student
15、Name FROM Student WHERE nation=蒙古族12:2626轉(zhuǎn)義如果查詢字串中本身要包含如果查詢字串中本身要包含%和和_,必須對(duì)通配符進(jìn)行轉(zhuǎn)義處理。mysql轉(zhuǎn)義字符轉(zhuǎn)義字符是是。例3.18 在班級(jí)Class表中查詢班級(jí)名稱中含有“08_”符號(hào)的班級(jí)名稱 SELECT className FROM Class WHERE className LIKE %08% 緊跟在符號(hào)后的%不是通配符,而是普通的用戶要查詢的符號(hào)12:26271.2.6 邏輯查詢SQL提供AND、OR和NOT邏輯運(yùn)算符分別實(shí)現(xiàn)邏輯與、邏輯或和邏輯非運(yùn)算例3.19 在選課Score表中查詢選修了“001”
16、、“005”或“003”課程的同學(xué)學(xué)號(hào)、課程號(hào)和相應(yīng)成績(jī)SELECT studentNo, courseNo, scoreFROM ScoreWHERE courseNo=001 OR courseNo=005 OR courseNo=003在例3.10中使用的是集合運(yùn)算,本例中采用邏輯“或”運(yùn)算12:2628例3.20 在Student表中查詢1991年出生且籍貫為“漢族”的同學(xué)學(xué)號(hào)、姓名、出生日期。 SELECT studentNo, studentName, birthday FROM Student WHERE year(birthday)=1991 AND nation=漢族12:2
17、629注意:在邏輯運(yùn)算中,不可以對(duì)注意:在邏輯運(yùn)算中,不可以對(duì)同一個(gè)屬性同一個(gè)屬性進(jìn)行進(jìn)行邏輯邏輯“與與”的的等值運(yùn)算等值運(yùn)算例:在選課Score表中查詢同時(shí)選修了“001”和“002”課程的同學(xué)的選課信息,如下查詢是錯(cuò)誤的,得不到結(jié)果: SELECT * FROM Score WHERE courseNo=001 AND courseNo=002要實(shí)現(xiàn)該查詢,需要使用連接運(yùn)算或嵌套子查詢通過連接運(yùn)算表示該查詢,參見例3.29、例3.31通過嵌套子查詢,參見例3.39、例3.40 12:2630例3.21 在Student表中查詢籍貫不是“南昌”或“上?!钡耐瑢W(xué)姓名、籍貫和所屬班級(jí)編號(hào)。SEL
18、ECT studentName, native, classNo FROM Student WHERE native!=南昌 AND native!=上海例3.22 在選課Score表中查詢成績(jī)?cè)?090分之間的同學(xué)學(xué)號(hào)、課程號(hào)和相應(yīng)成績(jī)。SELECT studentNo, courseNo, score FROM Score WHERE score= 80 AND score=9012:2631例3.23 在選課Score表中查詢成績(jī)不在8090分之間的同學(xué)學(xué)號(hào)、課程號(hào)和相應(yīng)成績(jī)。SELECT studentNo, courseNo, score FROM Score WHERE score
19、9012:26321.3 排序運(yùn)算使用ORDER BY 子句實(shí)現(xiàn)排序運(yùn)算,其語(yǔ)法為: ORDER BY ASC | DESC , ASC | DESC, . 其中:, , .可以是屬性、函數(shù)或表達(dá)式缺省按升序(ASC)排序,按降序排序,必須指明DESC選項(xiàng)該運(yùn)算含義是:在查詢結(jié)果中首先按的值進(jìn)行排序在值相等的情況下再按值排序,依此類推12:2633例3.24 在學(xué)生 Student表中查詢籍貫不是“南昌”或“上?!钡耐瑢W(xué)姓名、籍貫和所屬班級(jí)編號(hào),并按籍貫的降序排序輸出。SELECT studentName, native, classNo FROM Student WHERE native!=
20、南昌 AND native!=上海 ORDER BY native DESC12:2634例3.25 在學(xué)生Student表中查詢“女”學(xué)生的學(xué)號(hào)、姓名、所屬班級(jí)編號(hào)和出生日期,并按班級(jí)編號(hào)的升序、出生日期的月份降序排序輸出。SELECT studentNo, studentName, classNo, birthday FROM Student WHERE sex=女 ORDER BY classNo, month(birthday) DESC其中:month()函數(shù)表示提取日期表達(dá)式的月份12:26351.4 查詢表FROM子句后面可以是基本關(guān)系基本關(guān)系、視圖視圖,還可以是查詢表查詢表例3
21、.26 查詢1991年出生的“女”同學(xué)基本信息。分析:可以先將學(xué)生表中的女生記錄查詢出來,然后再對(duì)查詢表進(jìn)行選擇、投影操作。SELECT studentNo, studentName, birthday FROM (SELECT * FROM Student WHERE sex=女) AS a WHERE year(birthday)=199112:2636在FROM子句后是一個(gè)子查詢,表示對(duì)子查詢的查詢結(jié)果查詢表進(jìn)行查詢必須為查詢表取一個(gè)名稱必須為查詢表取一個(gè)名稱(稱為元組變量元組變量),如使用AS a取名為a FROM (SELECT * FROM Student WHERE sex=女)
22、 AS a該查詢等價(jià)于下面的查詢:SELECT studentNo, studentName, birthday FROM student WHERE year(birthday)=1991 AND sex=女12:26372.1 等值與非等值連接等值與非等值連接2.2 自表連接自表連接2.3 外連接外連接 12:2638涉及到多個(gè)關(guān)系的查詢,需用到連接運(yùn)算連接運(yùn)算或子查詢子查詢連接運(yùn)算是關(guān)系數(shù)據(jù)庫(kù)中使用最廣泛的一種運(yùn)算,包括內(nèi)連接內(nèi)連接( INNER JOIN,包括等值連接等值連接、自然連接自然連接、非等值連接非等值連接、自表連接)自表連接)和外連接外連接等?;拘问剑?FROM 涉及有多個(gè)
23、表涉及有多個(gè)表WHERE 涉及連接條件涉及連接條件12:26392.1 等值與非等值連接返回的結(jié)果集是兩個(gè)表中所有相匹配的數(shù)據(jù)所有相匹配的數(shù)據(jù),舍棄舍棄不匹配不匹配的數(shù)據(jù)的數(shù)據(jù)。該運(yùn)算在WHERE子句中加入連接多個(gè)關(guān)系的連接條件格式為:WHERE . . . . . 12:2640比較運(yùn)算符、=、=、=、(或!=)當(dāng)比較運(yùn)算符為=時(shí),表示等值連接其他運(yùn)算為非等值連接WHERE子句的連接謂詞中的屬性稱為連接屬性連接屬性之間必須具有可比性12:26412.1.1 等值連接例3.27 查找會(huì)計(jì)學(xué)院全體同學(xué)的學(xué)號(hào)、姓名、籍貫、班級(jí)編學(xué)號(hào)、姓名、籍貫、班級(jí)編號(hào)號(hào)和所在班級(jí)名稱班級(jí)名稱。該查詢的結(jié)果為學(xué)號(hào)
24、、姓名、籍貫、班級(jí)編號(hào)和班級(jí)名稱,在SELECT子句中必須包含這些屬性由于班級(jí)名稱和所屬學(xué)院在班級(jí)表Class中,學(xué)號(hào)、姓名、籍貫、班級(jí)編號(hào)在學(xué)生表Student中,F(xiàn)ROM子句必須包含Class表和Student表由于班級(jí)編號(hào)classNo既是班級(jí)表的主碼,也是學(xué)生表的外碼,這2個(gè)表的連接條件是classNo相等,在WHERE子句中必須包含連接條件Student.classNo=Class.classNo本查詢要查詢出會(huì)計(jì)學(xué)院的學(xué)生記錄,在WHERE子句中還必須包括選擇條件institute=會(huì)計(jì)學(xué)院12:2642SELECT studentNo, studentName, native,
25、Student.classNo, classNameFROM Student, ClassWHERE Student.classNo=Class.classNo AND institute=會(huì)計(jì)學(xué)院在連接操作中,如果涉及到多個(gè)表的相同屬性名相同屬性名,必須在相同的屬性名前加上表名加以區(qū)分如Student.classNo、Class.classNoWHERE子句中Student.classNo=Class.classNo為連接條件連接條件(from子句中涉及的關(guān)系)institute=會(huì)計(jì)學(xué)院 為選擇條件選擇條件12:2643別名可為參與連接的表取別名(稱為元組變量),在相同的屬性名前加上表的別
26、名。將Student表取別名為a,Class表取別名為b,班級(jí)編號(hào)分別用a.classNo和b.classNo表示。本例可以改寫為: SELECT studentNo, studentName, native, b.classNo, className FROM Student AS a, Class AS b WHERE a.classNo=b.classNo AND institute=會(huì)計(jì)學(xué)院12:2644注:注:AS可有可無例3.28 查找選修了課程名稱為“計(jì)算機(jī)原理”的同學(xué)學(xué)號(hào)、姓名。查詢結(jié)果為學(xué)號(hào)、姓名學(xué)號(hào)、姓名,在SELECT子句中必須包含這些屬性學(xué)號(hào)和姓名在學(xué)生表中,課程名稱在
27、課程表中,F(xiàn)ROM子句必須包含學(xué)生表Student、課程表Course學(xué)生表與課程表之間是多對(duì)多聯(lián)系,需通過成績(jī)表轉(zhuǎn)換為兩個(gè)多對(duì)一的聯(lián)系,F(xiàn)ROM子句必須包含成績(jī)表Score12:2645課程號(hào)既是課程表的主碼,也是成績(jī)表的外碼,這2個(gè)表的連接條件是課程號(hào)相等;學(xué)號(hào)既是學(xué)生表的主碼,也是成績(jī)表的外碼,這2個(gè)表的連接條件是學(xué)號(hào)相等。在WHERE子句中涉及三個(gè)關(guān)系的連接,其連接條件為 Course.courseNo=Score.courseNo AND Score.studentNo=Student.studentNo查找選修“計(jì)算機(jī)原理”課程的同學(xué),在WHERE子句中必須包括選擇條件course
28、Name=計(jì)算機(jī)原理12:2646SELECT a.studentNo, studentName FROM Student a, Course b, Score c WHERE b.courseNo=c.courseNo AND c.studentNo=a.studentNo AND b.courseName=計(jì)算機(jī)原理注意:本例使用了無as的元組變量a、b、c多對(duì)多關(guān)系轉(zhuǎn)化為2個(gè)一對(duì)多關(guān)系的方法12:2647例3.29 查找同時(shí)選修了編號(hào)為“001”和“002”課程的同學(xué)學(xué)號(hào)、姓名、課程號(hào)和相應(yīng)成績(jī)相應(yīng)成績(jī),并按學(xué)號(hào)排序輸出。查詢結(jié)果為學(xué)號(hào)、姓名、課程號(hào)和相應(yīng)成績(jī),在SELECT子句中必須包
29、含這些屬性學(xué)號(hào)和姓名在學(xué)生表中,課程號(hào)和成績(jī)?cè)诔煽?jī)表中,F(xiàn)ROM子句必須包含學(xué)生表Student和成績(jī)表Score學(xué)號(hào)既是學(xué)生表的主碼,也是成績(jī)表的外碼,這2個(gè)表的連接條件是學(xué)號(hào)相等,WHERE子句必須包含這個(gè)連接條件 SELECT a.studentNo, studentName, b.courseNo, b.score FROM Student a, Score b WHERE a.studentNo=b.studentNo 12:2648為表示同時(shí)選修“001”和“002”課程的選擇條件首先在WHERE子句中直接包含選擇條件courseNo=001以查找出所有選修了“001”課程的同學(xué)
30、SELECT a.studentNo, studentName, b.courseNo, b.score FROM Student a, Score b WHERE a.studentNo=b.studentNo AND b.courseNo=00112:2649為表示同時(shí)選修“001”和“002”課程的選擇條件其次,基于成績(jī)表其次,基于成績(jī)表Score構(gòu)造一個(gè)查詢表構(gòu)造一個(gè)查詢表c,查找出選修了,查找出選修了編號(hào)為編號(hào)為“002”課程的所有同學(xué)課程的所有同學(xué) (SELECT * FROM Score WHERE courseNo=002) c最后,將選修了編號(hào)為最后,將選修了編號(hào)為“001”
31、課程的元組與查詢表課程的元組與查詢表c的元的元組關(guān)于學(xué)號(hào)進(jìn)行等值連接組關(guān)于學(xué)號(hào)進(jìn)行等值連接SELECT a.studentNo, studentName, b.courseNo, b.score, c.courseNo, c.scoreFROM Student a, Score b, (SELECT * FROM Score WHERE courseNo=002) cWHERE b.courseNo=001 AND a.studentNo=b.studentNo AND a.studentNo=c.studentNo如果連接成功,表示該同學(xué)同時(shí)選修了這兩門課程如果連接成功,表示該同學(xué)同時(shí)選修了
32、這兩門課程12:2650要求按學(xué)號(hào)排序輸出,需要排序語(yǔ)句ORDER BY本查詢語(yǔ)句為:SELECT a.studentNo, studentName, b.courseNo, b.score, c.courseNo, c.scoreFROM Student a, Score b, (SELECT * FROM Score WHERE courseNo=002) cWHERE b.courseNo=001 AND a.studentNo=b.studentNo AND a.studentNo=c.studentNoORDER BY a.studentNo12:2651該查詢也可以表示為: SEL
33、ECT a.studentNo, studentName, b.courseNo, b.score, c.courseNo, c.score FROM Student a, (SELECT * FROM Score WHERE courseNo=001) b, (SELECT * FROM Score WHERE courseNo=002) c WHERE a.studentNo=b.studentNo AND a.studentNo=c.studentNo ORDER BY a.studentNo12:2652該查詢還可以表示為: SELECT a.studentNo, studentNam
34、e, b.courseNo, b.score, c.courseNo, c.score FROM Student a, Score b, Score c WHERE a.studentNo=b.studentNo AND a.studentNo=c.studentNo AND b.courseNo=001 AND c.courseNo=002 ORDER BY a.studentNo12:26532.1.2 自然連接自然連接的方法是在等值連接的基礎(chǔ)上消除重復(fù)列消除重復(fù)列例3.30 實(shí)現(xiàn)成績(jī)表Score和課程表Course的自然連接。SELECT studentNo, a.courseNo, s
35、core, courseName, creditHour, courseHour, priorCourse FROM Score a, Course b WHERE a.courseNo=b.courseNo課程編號(hào)在兩個(gè)關(guān)系中同時(shí)出現(xiàn),且相同,只需輸出一次,即在SELECT子句中僅需出現(xiàn)1次,因此使用a.courseNo,也可以使用b.courseNo。其他列名是唯一的,不需要加上元組變量12:26542.1.3 非等值連接非等值連接使用的比較少。練習(xí):以例2.16(p61)為基礎(chǔ)。寫出SQL。12:26552.2 自表連接若某個(gè)表與自己進(jìn)行連接,稱為自表連接主要用途是檢索一張表內(nèi)部的匹配情
36、況主要用途是檢索一張表內(nèi)部的匹配情況例3.31 查找同時(shí)同時(shí)選修了編號(hào)為“001”和“002”課程的同學(xué)學(xué)號(hào)、姓名、課程號(hào)和相應(yīng)成績(jī)相應(yīng)成績(jī),并按學(xué)號(hào)排序輸出。學(xué)生姓名在學(xué)生表中,必須包含學(xué)生表(取別名為a)考慮兩個(gè)成績(jī)表,分別起別名b和c(Score b, Score c)b表用于查詢選修了編號(hào)為“001”課程的同學(xué)c表用于查詢選修了編號(hào)為“002”課程的同學(xué)12:2656FROM子句還必須包含兩個(gè)成績(jī)表b和c,且在WHERE子句中包含兩個(gè)選擇條件: b.courseNo=001 AND c.courseNo=002一方面,成績(jī)表b與成績(jī)表c在學(xué)號(hào)上做等值連接等值連接(自表連接),如果連接成
37、功,表示學(xué)生同時(shí)選修了編號(hào)為“001”和“002”的課程另一方面,學(xué)生表與成績(jī)表b (或成績(jī)表c)在學(xué)號(hào)上做等值連接等值連接。WHERE子句包含兩個(gè)連接條件:b.studentNo=c.studentNo AND a.studentNo=b.studentNo12:2657本查詢語(yǔ)句為SELECT a.studentNo, studentName, b.courseNo, b.score, c.courseNo, c.scoreFROM Student a, Score b, Score cWHERE b.courseNo=001 AND c.courseNo=002 AND a.studen
38、tNo=b.studentNo AND b.studentNo=c.studentNoORDER BY a.studentNol本查詢結(jié)果與例3.29相同l在該查詢中,F(xiàn)ROM子句后面包含了兩個(gè)參與自表連接的成績(jī)表Score,必須定義元組變量加以區(qū)分l自表連接的條件是b.studentNo=c.studentNo12:2658例3.32 在學(xué)生表Student中查找與“李宏冰”同學(xué)在同一個(gè)班的同學(xué)姓名、班級(jí)編號(hào)和出生日期。 SELECT a.studentName, a.classNo, a.birthday FROM Student a, Student b WHERE b.studentName=李宏冰 AND a.classNo=b.classNo12:2659+-+-+-+| studentName | classNo | birthday |+-+-+-+| 王紅 | CP0802 | 0000-00-00 00:00:00 | 李志強(qiáng) | CP0802 | 0000-00-00 00:00:00 | 黃勇 | CP0802 | 0000-00-00 00:00:00 | 李宏冰 | CP0802 | 0000-00-00 00:00:00 | 江宏昌 | CP0802 | 0000-00-00 00:00:00 | 吳敏 | CP0802 | 00
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)培訓(xùn)中的心理調(diào)適技巧探討
- 湖北省孝感市孝南區(qū)2024年物理八年級(jí)第一學(xué)期期末監(jiān)測(cè)模擬試題含解析
- 生態(tài)農(nóng)業(yè)采棉機(jī)操作手勞務(wù)協(xié)議
- 電子工程師崗前指導(dǎo):電路與設(shè)備維護(hù)技能
- 酒店保潔人員的腰腿保護(hù)措施
- 零售行業(yè)市場(chǎng)現(xiàn)狀與消費(fèi)升級(jí)趨勢(shì)分析報(bào)告
- 初中生物課程中的合作學(xué)習(xí)策略
- 2025至2030中國(guó)步態(tài)分析儀行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 科研機(jī)構(gòu)復(fù)工復(fù)產(chǎn)安全培訓(xùn)心得體會(huì)
- 2025至2030中國(guó)自動(dòng)駕駛汽車和先進(jìn)駕駛輔助系統(tǒng)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 廣東深圳市南山區(qū)機(jī)關(guān)事業(yè)單位面向高校畢業(yè)生招聘編外人員104人歷年重點(diǎn)基礎(chǔ)提升難、易點(diǎn)模擬試題(共500題)附帶答案詳解
- 放化療相關(guān)口腔黏膜炎預(yù)防及護(hù)理課件
- 北京市海淀區(qū)2025屆高一下生物期末檢測(cè)模擬試題含解析
- JT∕T 795-2023 事故汽車修復(fù)技術(shù)規(guī)范
- 2024四川廣元市檢察機(jī)關(guān)招聘聘用制書記員22人筆試備考題庫(kù)及答案解析
- 內(nèi)科患者VTE風(fēng)險(xiǎn)評(píng)估表
- 一年級(jí)上冊(cè)美術(shù)教案-第1課 讓大家認(rèn)識(shí)我:誠(chéng)實(shí)最好 ▏人美版
- 科學(xué)認(rèn)識(shí)天氣智慧樹知到期末考試答案2024年
- (高清版)DZT 0064.15-2021 地下水質(zhì)分析方法 第15部分:總硬度的測(cè)定 乙二胺四乙酸二鈉滴定法
- 心理體檢收費(fèi)目錄
- 雅魯藏布江米林-加查段沿線暴雨泥石流危險(xiǎn)度評(píng)價(jià)的中期報(bào)告
評(píng)論
0/150
提交評(píng)論