




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 關(guān)系數(shù)據(jù)庫(kù)規(guī)范言語(yǔ) 5.1 SQL概述 5.2 SQL的數(shù)據(jù)查詢(xún)功能 5.3 SQL的定義功能 5.4 SQL的數(shù)據(jù)操作功能5.1 SQL概述 SQL是Structured Query Language的縮寫(xiě),意思為“構(gòu)造化查詢(xún)言語(yǔ) 。 SQL特點(diǎn): 言語(yǔ)簡(jiǎn)約、規(guī)范 非過(guò)程化 高度靈敏化 平臺(tái)無(wú)關(guān)性 SQL具有以下功能: 查詢(xún)數(shù)據(jù)庫(kù)中的數(shù)據(jù) 更新數(shù)據(jù)庫(kù)中的數(shù)據(jù) 設(shè)置數(shù)據(jù)庫(kù)用戶(hù)訪問(wèn)的權(quán)限 修正數(shù)據(jù)庫(kù)表的構(gòu)造 添加、刪除數(shù)據(jù)庫(kù)中的表、視圖5.2 SQL的數(shù)據(jù)查詢(xún)功能的數(shù)據(jù)查詢(xún)功能 SELECT語(yǔ)句是數(shù)據(jù)查詢(xún)言語(yǔ)組中獨(dú)一的語(yǔ)句,它包括單表查詢(xún)、多表銜接查詢(xún)、嵌套查詢(xún)和集合查詢(xún)等。 5.2.1
2、 SELECT語(yǔ)法格式 SELECT ALL|DISTINCT TOP|PERCENT , AS FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC INTO ARRAY |INTO CURSOR |INTO DBF|TABLE |TO FILE ADDITIVE|TO PRINTERPROMPT 【闡明】整個(gè)語(yǔ)句的含義是,根據(jù)WHERE子句的條件表達(dá)式,從FROM子句指定的根本表或視圖中查找出滿足條件的記錄,再按SELECT子句中的目的表達(dá)式選出記錄中的字段值構(gòu)成結(jié)果表。GROUP限定結(jié)果分組,ORDER限定結(jié)果的排序。 SELECT子句對(duì)應(yīng)關(guān)系代數(shù)
3、中的投影運(yùn)算,其后面列出的屬性名集合就是需求進(jìn)展查詢(xún)的數(shù)據(jù)集合; FROM闡明要查詢(xún)的數(shù)據(jù)來(lái)自哪個(gè)或哪些表,可以對(duì)單個(gè)表或多個(gè)表進(jìn)展查詢(xún); WHERE闡明查詢(xún)條件,即選擇元組的條件; GROUP BY短語(yǔ)用于對(duì)查詢(xún)結(jié)果進(jìn)展分組,可以利用它進(jìn)展分組匯總; HAVING短語(yǔ)必需跟隨GROUP BY運(yùn)用,它用來(lái)限定分組必需滿足的條件; ORDER BY短語(yǔ)用來(lái)對(duì)查詢(xún)的結(jié)果進(jìn)展排序。5.2.2 簡(jiǎn)單查詢(xún)1. SELECT語(yǔ)句 SELECT語(yǔ)句從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)并將查詢(xún)結(jié)果以表格的方式前往,其結(jié)果必是一個(gè)關(guān)系。 在簡(jiǎn)單查詢(xún)中,可以從一個(gè)數(shù)據(jù)表中查詢(xún)部分或者全部的字段?!纠?.1】查詢(xún)“學(xué)生表中一切學(xué)生的
4、姓名。 SELECT 姓名 FROM 學(xué)生【例5.2】查詢(xún)“課程表中一切的信息。 SELECT * FROM 課程 查詢(xún)結(jié)果也可以是經(jīng)過(guò)某一字段或者幾個(gè)字段計(jì)算得到的虛擬字段。 【例5.3】查詢(xún)“入學(xué)成果表中,學(xué)生的學(xué)號(hào)、姓名,以及語(yǔ)文、外語(yǔ)、數(shù)學(xué)的平均成果。 SELECT 學(xué)號(hào),姓名,(語(yǔ)文+外語(yǔ)+數(shù)學(xué))/3 FROM 入學(xué)成果 運(yùn)用“AS重新為新字段命名的SELECT語(yǔ)句如下。 SELECT 學(xué)號(hào),姓名,(語(yǔ)文+外語(yǔ)+數(shù)學(xué))/3 AS 平均分 FROM 入學(xué)成果 在查詢(xún)中,能夠產(chǎn)生完全一樣的兩個(gè)元組,用“DISTINCT關(guān)鍵字可以去掉反復(fù)記錄。 【例5.4】查詢(xún)“學(xué)生表中,一切的專(zhuān)業(yè)稱(chēng)號(hào)。
5、 SELECT DISTINCT(專(zhuān)業(yè)) FROM 學(xué)生2.WHERE子句 帶上WHERE子句的查詢(xún)就是條件查詢(xún)。查詢(xún)的條件主要包括比較、范圍設(shè)定、匹配測(cè)試、NULL值測(cè)試以及組合條件。1比較條件比較是SQL中最經(jīng)常運(yùn)用的查詢(xún)條件,運(yùn)算符有=、=、?!纠?.5】查詢(xún)“學(xué)生表中,計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的姓名、學(xué)號(hào)以及入學(xué)成果。SELECT 姓名,學(xué)號(hào),入學(xué)成果 FROM 學(xué)生 WHERE 專(zhuān)業(yè)=計(jì)算機(jī) 2范圍設(shè)定 測(cè)試表達(dá)式的值取自某個(gè)范圍時(shí),運(yùn)用NOTBETWEEN.AND.來(lái)限定。 【例5.6】查詢(xún)外語(yǔ)成果在110分到130分之間的學(xué)生的姓名。 SELECT 姓名 FROM 入學(xué)成果 WHERE 外
6、語(yǔ) BETWEEN 110 AND 130 3匹配測(cè)試 當(dāng)查詢(xún)需求進(jìn)展字符串匹配時(shí),運(yùn)用“LIKE。在匹配測(cè)試表達(dá)式中運(yùn)用的通配符百分號(hào)%代表恣意個(gè)恣意字符,下劃線_代表一個(gè)恣意字符。 【例5.7】查詢(xún)一切姓“王的同窗的信息。 SELECT * FROM 學(xué)生 WHERE 姓名 LIKE “王% 4NULL值測(cè)試 NULL表示空,意思是還沒(méi)有確定,與數(shù)值“0不一樣,0表示一個(gè)確切的數(shù)。 在判別NULL值時(shí)要運(yùn)用“IS語(yǔ)句 【例5.8】查詢(xún)沒(méi)有安排上課教師的課程。 SELECT * FROM 課程 WHERE 教師號(hào) IS NULL 5組合條件 搜索條件中還可運(yùn)用AND、OR、NOT將簡(jiǎn)單的查詢(xún)
7、條件進(jìn)展組合,進(jìn)展復(fù)雜的搜索。 【例5.9】查詢(xún)計(jì)算機(jī)專(zhuān)業(yè)的女生信息。 SELECT * FROM 學(xué)生 WHERE 性別=女 AND 專(zhuān)業(yè)=計(jì)算機(jī)5.2.3 嵌套查詢(xún) 1.1.帶有比較運(yùn)算的子查詢(xún)和運(yùn)用量詞的查詢(xún)帶有比較運(yùn)算的子查詢(xún)和運(yùn)用量詞的查詢(xún) 當(dāng)子查詢(xún)的前往結(jié)果是個(gè)單列時(shí),可以運(yùn)用當(dāng)子查詢(xún)的前往結(jié)果是個(gè)單列時(shí),可以運(yùn)用 、= =、!=!=等或運(yùn)用帶有量詞等或運(yùn)用帶有量詞ANYANY、SOMESOME、ALLALL的比較運(yùn)算的比較運(yùn)算符進(jìn)展查詢(xún)。符進(jìn)展查詢(xún)。 其中其中ANYANY和和SOMESOME是同義詞,在進(jìn)展比較運(yùn)算時(shí)只需子是同義詞,在進(jìn)展比較運(yùn)算時(shí)只需子查詢(xún)中有一行能使結(jié)果為真,
8、那么結(jié)果為真。而查詢(xún)中有一行能使結(jié)果為真,那么結(jié)果為真。而ALLALL那么要求子查詢(xún)中的一切行都使結(jié)果為真時(shí),結(jié)果那么要求子查詢(xún)中的一切行都使結(jié)果為真時(shí),結(jié)果才為真。才為真。 【例【例5.105.10】查詢(xún)和劉云飛同一個(gè)專(zhuān)業(yè)的學(xué)生的姓名、】查詢(xún)和劉云飛同一個(gè)專(zhuān)業(yè)的學(xué)生的姓名、性別以及出生日期。性別以及出生日期。 SELECT SELECT 姓名姓名, ,性別性別, ,出生日期出生日期 FROM FROM 學(xué)生學(xué)生 WHERE WHERE 專(zhuān)專(zhuān)業(yè)業(yè)=(SELECT =(SELECT 專(zhuān)業(yè)專(zhuān)業(yè) FROM FROM 學(xué)生學(xué)生 WHERE WHERE 姓名姓名= =劉云飛劉云飛) ) 【例5.11】查
9、詢(xún)課程成果高于學(xué)號(hào)為“110102的一切科成果的學(xué)生學(xué)號(hào)這里并不是每一門(mén)課程對(duì)應(yīng)比較。 SELECT 學(xué)號(hào) FROM 選課 WHERE 成果ALL (SELECT 成果 FROM 選課 WHERE 學(xué)號(hào)=110102) 【例5.12】查詢(xún)課程成果至少高于學(xué)號(hào)為“110102的一門(mén)課成果的學(xué)生學(xué)號(hào)以及成果。 SELECT 學(xué)號(hào),成果 FROM 選課 WHERE 成果SOME (SELECT 成果 FROM 選課; WHERE 學(xué)號(hào)=110102) 2.2.運(yùn)用謂詞的查詢(xún)運(yùn)用謂詞的查詢(xún) 子查詢(xún)中運(yùn)用最多的是謂詞子查詢(xún)中運(yùn)用最多的是謂詞ININ,EXISTSEXISTS和和NOT INNOT IN,
10、NOT EXISTSNOT EXISTS,含義為當(dāng)查詢(xún)的,含義為當(dāng)查詢(xún)的指定字段值包含或不包含在子查詢(xún)結(jié)指定字段值包含或不包含在子查詢(xún)結(jié)果字段值表中時(shí)條件為真。果字段值表中時(shí)條件為真。 ININ用來(lái)測(cè)試集合中的成員,該集合是由用來(lái)測(cè)試集合中的成員,該集合是由SELECTSELECT子句產(chǎn)生的一組值的集合。子句產(chǎn)生的一組值的集合。 EXISTSEXISTS或或NOT EXISTSNOT EXISTS是用來(lái)檢查在子查詢(xún)是用來(lái)檢查在子查詢(xún)中能否有結(jié)果前往。中能否有結(jié)果前往。 【例5.13】查詢(xún)計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的學(xué)號(hào)、所選的課程號(hào)以及該門(mén)課的成果。 SELECT 學(xué)號(hào),課程號(hào),成果 FROM 選課 WH
11、ERE 學(xué)號(hào) IN (SELECT 學(xué)號(hào) FROM 學(xué)生; WHERE 專(zhuān)業(yè)=計(jì)算機(jī)) EXISTS可測(cè)試一個(gè)子查詢(xún)的結(jié)果能否有元組,當(dāng)作為子查詢(xún)結(jié)果的集合為非空時(shí)那么主查詢(xún)前往結(jié)果,否那么不前往。NOT EXISTS那么與之相反。 【例5.14】查詢(xún)沒(méi)有選修任何一門(mén)課的學(xué)生信息。 SELECT * FROM 學(xué)生 WHERE NOT EXISTS (SELECT * FROM 選課; WHERE 學(xué)號(hào)=學(xué)生.學(xué)號(hào))5.2.4 聯(lián)接查詢(xún) 有一些查詢(xún)同時(shí)涉及到兩個(gè)或兩個(gè)以上的表時(shí),這種查詢(xún)稱(chēng)之為聯(lián)接查詢(xún)也稱(chēng)為多表查詢(xún)。 1.簡(jiǎn)單聯(lián)接查詢(xún) 【例5.15】查詢(xún)一切學(xué)生的姓名、學(xué)號(hào)以及入學(xué)時(shí)該學(xué)生的語(yǔ)
12、文、數(shù)學(xué)、外語(yǔ)、綜合的成果。 SELECT 學(xué)生.姓名,學(xué)生.學(xué)號(hào),語(yǔ)文,數(shù)學(xué),外語(yǔ),綜合 FROM 學(xué)生,入學(xué)成果; WHERE 學(xué)生.學(xué)號(hào)=入學(xué)成果.學(xué)號(hào) SQL允許在FROM子句中為關(guān)系名定義別名,格式為: . 例5.15的查詢(xún)語(yǔ)句可以寫(xiě)做: SELECT S.姓名,S.學(xué)號(hào),語(yǔ)文,數(shù)學(xué),外語(yǔ),綜合 FROM 學(xué)生 S,入學(xué)成果 R; WHERE S.學(xué)號(hào)=R.學(xué)號(hào) 聯(lián)接條件聯(lián)接條件 2.2.超聯(lián)接查詢(xún)超聯(lián)接查詢(xún) 假設(shè)想要將不符合聯(lián)接條件的記錄也查詢(xún)出來(lái),假設(shè)想要將不符合聯(lián)接條件的記錄也查詢(xún)出來(lái),就要利用超聯(lián)接查詢(xún),超聯(lián)接分為內(nèi)聯(lián)接也稱(chēng)為就要利用超聯(lián)接查詢(xún),超聯(lián)接分為內(nèi)聯(lián)接也稱(chēng)為等值聯(lián)接
13、、左聯(lián)接、右聯(lián)接和全聯(lián)接。其語(yǔ)法構(gòu)等值聯(lián)接、左聯(lián)接、右聯(lián)接和全聯(lián)接。其語(yǔ)法構(gòu)造如下:造如下: 【格式】【格式】 SELECTFROM SELECTFROM INNER|LEFT|RIGHT|FULL JOIN INNER|LEFT|RIGHT|FULL JOIN ON ON WHERE WHERE【闡明】INNER JOIN 或JOIN為內(nèi)聯(lián)接,也稱(chēng)為等值聯(lián)接,按照聯(lián)接條件進(jìn)展聯(lián)接,不滿足條件的記錄不會(huì)出如今查詢(xún)結(jié)果中,是常用的一種聯(lián)接方式。LEFT JOIN 為左聯(lián)接,除滿足銜接條件的記錄出如今查詢(xún)結(jié)果中外,第一個(gè)表不滿足條件的記錄也會(huì)出如今查詢(xún)結(jié)果中。RIGHT JOIN 為右聯(lián)接,除滿足
14、銜接條件的記錄出如今查詢(xún)結(jié)果中外,第二個(gè)表不滿足條件的記錄也會(huì)出如今查詢(xún)結(jié)果中。FULL JOIN 為全聯(lián)接,除滿足銜接條件的記錄出如今查詢(xún)結(jié)果中外,兩個(gè)表中不滿足條件的記錄也會(huì)出如今查詢(xún)結(jié)果中。ON 指明聯(lián)接條件,而不能在WHERE后面給出聯(lián)接條件。 【例5.16】?jī)?nèi)聯(lián)接查詢(xún)。 SELECT 學(xué)生.學(xué)號(hào), 學(xué)生.姓名,入學(xué)成果,數(shù)學(xué) FROM 學(xué)生 JOIN 入學(xué)成果 ; ON 學(xué)生.學(xué)號(hào)=入學(xué)成果.學(xué)號(hào) 留意:多個(gè)表用“JOIN語(yǔ)句聯(lián)接的順序要與聯(lián)接條件“ON的順序恰好相反。 等價(jià)于簡(jiǎn)單聯(lián)接查詢(xún)方式。 SELECT 學(xué)生.學(xué)號(hào), 學(xué)生.姓名,入學(xué)成果,數(shù)學(xué) FROM 學(xué)生,入學(xué)成果; WH
15、ERE 學(xué)生.學(xué)號(hào)=入學(xué)成果.學(xué)號(hào) 【例5.17】左聯(lián)接查詢(xún)。 SELECT 學(xué)生.學(xué)號(hào),姓名,課程名,成果 FROM (學(xué)生 LEFT JOIN 選課; ON 學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào))LEFT JOIN 課程 ON 選課.課程號(hào)=課程.課程號(hào) 由于是左聯(lián)接查詢(xún),其中學(xué)生表中有四個(gè)學(xué)生記錄沒(méi)有選課,不符合聯(lián)接條件,同樣也被查詢(xún)出來(lái),該學(xué)生沒(méi)有選課,因此相應(yīng)的課程名和成果為空。 【例5.18】右聯(lián)接查詢(xún)。 SELECT 學(xué)生.學(xué)號(hào),姓名,課程名,成果 FROM (學(xué)生 RIGHT JOIN 選課; ON 學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào))RIGHT JOIN 課程 ON 選課.課程號(hào)=課程.課程號(hào) 由于是
16、右聯(lián)接查詢(xún),其中課程表中有的課程記錄沒(méi)有被學(xué)生所選,不符合聯(lián)接條件,同樣也被查詢(xún)出來(lái),該課程沒(méi)有被學(xué)生所選,因此相應(yīng)的學(xué)號(hào)和姓名為空。 【例5.19】全聯(lián)接查詢(xún)。 SELECT 學(xué)生.學(xué)號(hào),姓名,課程名,成果 FROM (學(xué)生 FULL JOIN 選課; ON 學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào)) FULL JOIN 課程 ON 選課.課程號(hào)=課程.課程號(hào) 全聯(lián)接查詢(xún)的結(jié)果是左聯(lián)接查詢(xún)和右聯(lián)接查詢(xún)結(jié)果的并集。5.2.5 排序排序ORDER BY子句子句 運(yùn)用ORDER BY子句對(duì)按照一個(gè)或多個(gè)字段對(duì)查詢(xún)結(jié)果進(jìn)展升序ASC或降序DESC陳列,默以為升序陳列。 ORDER BY語(yǔ)句只能對(duì)最終的查詢(xún)結(jié)果進(jìn)展排序
17、,在子查詢(xún)中不能運(yùn)用。 ORDER BY語(yǔ)句后不能接任何運(yùn)算表達(dá)式,不能按某個(gè)表達(dá)式的運(yùn)算結(jié)果進(jìn)展排序。 對(duì)于空值排序,升序時(shí)空值記錄將最后顯示,降序時(shí)將最先顯示。 【例5.20】查詢(xún)計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生信息,結(jié)果按入學(xué)成果降序陳列。 SELECT * FROM 學(xué)生 WHERE 專(zhuān)業(yè)=計(jì)算機(jī) ORDER BY 入學(xué)成果 DESC 運(yùn)用TOP PERCENT語(yǔ)句可以只顯示排序之后的前幾條記錄或前百分之多少條記錄。 【例5.21】查詢(xún)?nèi)雽W(xué)成果前五名的學(xué)生信息。 SELECT * TOP 5 FROM 學(xué)生 ORDER BY 入學(xué)成果 DESC 【例5.22】查詢(xún)1001這門(mén)課成果在前50%的學(xué)生的學(xué)
18、號(hào)、成果。查詢(xún)結(jié)果如圖5.21所示。 SELECT * TOP 50 PERCENT FROM 選課 WHERE 課程號(hào)=1001 ORDER BY 成果 DESC 留意: TOP語(yǔ)句要與ORDER BY語(yǔ)句同時(shí)運(yùn)用才有效。5.2.6 計(jì)算查詢(xún)與分組查詢(xún)計(jì)算查詢(xún)與分組查詢(xún)GROUP BY 子句子句 1.1.計(jì)算查詢(xún)計(jì)算查詢(xún) 有時(shí)用戶(hù)的懇求需求對(duì)查詢(xún)的內(nèi)容進(jìn)展計(jì)算才干得到結(jié)果。有時(shí)用戶(hù)的懇求需求對(duì)查詢(xún)的內(nèi)容進(jìn)展計(jì)算才干得到結(jié)果。常用的計(jì)算函數(shù)如下:常用的計(jì)算函數(shù)如下: COUNT(COUNT() )統(tǒng)計(jì)元組個(gè)數(shù)統(tǒng)計(jì)元組個(gè)數(shù) COUNT(DISTINCT|ALL COUNT(DISTINCT|AL
19、L ) ) 統(tǒng)計(jì)一列中值的個(gè)數(shù)。統(tǒng)計(jì)一列中值的個(gè)數(shù)。 SUM(DISTINCT|ALL SUM(DISTINCT|ALL ) 計(jì)算某一列值的總和計(jì)算某一列值的總和( (此列此列必需是數(shù)值型必需是數(shù)值型) )。 AVG(DISTINCT|ALL AVG(DISTINCT|ALL ) 計(jì)算某一列值的平均值計(jì)算某一列值的平均值( (此此列必需是數(shù)值型列必需是數(shù)值型) )。 MAX(DISTINCT|ALL MAX(DISTINCT|ALL ) 計(jì)算某一列值的最大值。計(jì)算某一列值的最大值。 MIN(DISTINCT|ALL MIN(DISTINCT|ALL ) 計(jì)算某一列值的最小值。計(jì)算某一列值的最小
20、值。 留意:假設(shè)指定留意:假設(shè)指定DISTINCTDISTINCT短語(yǔ),那么表示在計(jì)算時(shí)要取消指短語(yǔ),那么表示在計(jì)算時(shí)要取消指定列中的反復(fù)值。定列中的反復(fù)值。 【例5.23】查詢(xún)選修了課程的學(xué)生的人數(shù)。 SELECT COUNT(DISTINCT 學(xué)號(hào)) FROM 選課 【例5.24】查詢(xún)“入學(xué)成果表中,學(xué)生外語(yǔ)的平均成果。 SELECT AVG(外語(yǔ)) AS 外語(yǔ)平均成果 FROM 入學(xué)成果 其中,運(yùn)用“AS關(guān)鍵字對(duì)查詢(xún)結(jié)果的屬性重新命名。 2.2.分組查詢(xún)分組查詢(xún) GROUP BYGROUP BY子句將查詢(xún)結(jié)果按某一列或多列子句將查詢(xún)結(jié)果按某一列或多列的值分組,值相等的為一組。同時(shí)還可以的
21、值分組,值相等的為一組。同時(shí)還可以用用HAVINGHAVING語(yǔ)句對(duì)分組的記錄加以限定再計(jì)語(yǔ)句對(duì)分組的記錄加以限定再計(jì)算。算。 HAVINGHAVING語(yǔ)句不能單獨(dú)運(yùn)用只能跟在語(yǔ)句不能單獨(dú)運(yùn)用只能跟在GROUP GROUP BYBY語(yǔ)句之后,在查詢(xún)過(guò)程中與語(yǔ)句之后,在查詢(xún)過(guò)程中與WHEREWHERE語(yǔ)句并語(yǔ)句并不矛盾,不矛盾,WHEREWHERE語(yǔ)句限定一切記錄,語(yǔ)句限定一切記錄,HAVINGHAVING語(yǔ)句只限定分組。語(yǔ)句只限定分組。 【例5.25】查詢(xún)各專(zhuān)業(yè)學(xué)生的入學(xué)成果平均值。 SELECT 專(zhuān)業(yè),AVG(入學(xué)成果) FROM 學(xué)生 GROUP BY 專(zhuān)業(yè) 在分組查詢(xún)時(shí),有時(shí)要求分組需求
22、滿足某個(gè)條件時(shí)才可以檢索,這時(shí)可以用HAVING子句來(lái)限定分組。 【例5.26】查詢(xún)選修了兩門(mén)含兩門(mén)以上課程的學(xué)生的學(xué)號(hào)以及平均成果。 SELECT 學(xué)號(hào),AVG(成果) AS 平均成果 FROM 選課 GROUP BY 學(xué)號(hào); HAVING COUNT(*)=2 【闡明】HAVING子句和WHERE子句的區(qū)別: 1WHERE子句是用來(lái)指定表中各行所應(yīng)滿足的條件,用于基表或視圖,而HAVING子句是用來(lái)指定每一分組所滿足的條件,作用于組,只需滿足HAVING條件的那些組才干在結(jié)果中被顯示。 2HAVING子句總是跟在GROUP BY子句之后,不可以單獨(dú)運(yùn)用。HAVING子句和WHERE子句不矛
23、盾,在查詢(xún)中是先用WHERE子句限定元組,然后進(jìn)展分組,最后再用HAVING子句限定分組。5.2.7 集合的并運(yùn)算 運(yùn)用UNION子句可以進(jìn)展集合的并運(yùn)算,即可以將兩個(gè)SELECT語(yǔ)句的查詢(xún)結(jié)果合并成一個(gè)查詢(xún)結(jié)果。 【例5.27】查詢(xún)“教師表中教授和副教授的教師號(hào)、姓名、性別和職稱(chēng)。查詢(xún)結(jié)果如圖5.26所示。 SELECT 教師號(hào),姓名,性別,職稱(chēng) FROM 教師 WHERE 職稱(chēng)=教授; UNION SELECT 教師號(hào),姓名,性別,職稱(chēng) FROM 教師 ; WHERE 職稱(chēng)=副教授5.2.8 查詢(xún)?nèi)ハ?1.在查詢(xún)窗口中顯示查詢(xún)結(jié)果 運(yùn)用SELECT語(yǔ)句查詢(xún)默許情況下,是將結(jié)果顯示在查詢(xún)窗口
24、中。 2.利用暫時(shí)表文件存放查詢(xún)結(jié)果 運(yùn)用INTO CURSOR語(yǔ)句可以將查詢(xún)結(jié)果存放在暫時(shí)表文件中,該表是一個(gè)只讀的表文件,可以像普通的表文件一樣在程序中運(yùn)用,程序終了封鎖文件時(shí)該表文件將自動(dòng)刪除。 【例5.28】將一切的課程信息放到暫時(shí)表tmp中。 SELECT * FROM 課程 INTO CURSOR tmp 3.利用永久表文件存放查詢(xún)結(jié)果 運(yùn)用INTO DBFTABLE 語(yǔ)句可以將查詢(xún)結(jié)果存放在永久表文件中,該SELECT語(yǔ)句執(zhí)行完查詢(xún)之后,該表將以自在表保管并作為當(dāng)前文件自動(dòng)翻開(kāi)。 【例5.29】將一切女生的信息放入永久表girls中。 SELECT * FROM 學(xué)生 WHERE
25、 性別=女 INTO TABLE girls 4.利用文本文件存放查詢(xún)結(jié)果 運(yùn)用TO FILEADDITIVE語(yǔ)句可以將查詢(xún)結(jié)果存放在文本文件中。 假設(shè)運(yùn)用ADDITIVE語(yǔ)句,查詢(xún)結(jié)果將追加到該文本文件尾部,否那么將覆蓋原有文件。 【例5.30】將每位教師所教授的課程情況存入文本文件course中。 SELECT 教師.姓名,課程.課程名 FROM 教師,課程 WHERE 教師.教師號(hào)=課程.教師號(hào); TO FILE course 5.利用數(shù)組存放查詢(xún)結(jié)果 運(yùn)用INTO ARRAY語(yǔ)句將查詢(xún)結(jié)果存放在變量數(shù)組中,假設(shè)查詢(xún)結(jié)果是多列多條記錄,將其自動(dòng)存在二維數(shù)組中,數(shù)組的行列與記錄的行列元素對(duì)
26、應(yīng)。 在涉及到計(jì)算查詢(xún)時(shí),查詢(xún)結(jié)果普通是一個(gè)數(shù)值,如平均值、最值等,可以將其存放到一維數(shù)組的第一元素中,然后在程序中再進(jìn)展處置。 【例5.31】計(jì)算學(xué)生表中有多少位男學(xué)生將其存放在變量x中。 SELECT COUNT(*) FROM 學(xué)生 WHERE 性別=男 INTO ARRAY x 【例5.32】將學(xué)生的信息存放到二維數(shù)組s中。 SELECT * FROM 學(xué)生 INTO ARRAY s 二維數(shù)組s是一個(gè)8行8列的數(shù)組,每一行存放某個(gè)學(xué)生的一切信息字段。例如s(1,1)存放的是“110101,s(1,2)存放是“王芳,以此類(lèi)推。5.3 SQL的定義功能 5.3.1 5.3.1 表的創(chuàng)建表的
27、創(chuàng)建 創(chuàng)建表命令:創(chuàng)建表命令: 【格式】【格式】 CREATE TABLE CREATE TABLE ( ( ( ( , ,)NULL|NOT NULL CHECK )NULL|NOT NULL CHECK 域完好性域完好性約束條件約束條件 ERROR ERROR 出錯(cuò)信息出錯(cuò)信息 DEFAULT DEFAULT 默許值默許值 PRIMARY KEY PRIMARY KEY, 2 【例5.33】建立“教室管理數(shù)據(jù)庫(kù),在此數(shù)據(jù)庫(kù)中建立“教室數(shù)據(jù)庫(kù)表。 CREATE DATABASE 教室管理 CREATE TABLE 教室(教室編號(hào) C(4) PRIMARY KEY,樓名 C(12),面積 I
28、CHECK(面積0) ERROR 面積應(yīng)為非負(fù)! DEFAULT 100) 【闡明】其中“教室編號(hào)是主關(guān)鍵字主索引,用PRIMARY KEY闡明,用CHECK為“面積字段值闡明了有效性規(guī)那么面積0,用ERROR為該有效性規(guī)那么闡明了出錯(cuò)提示信息“面積應(yīng)為非負(fù)!,同時(shí)為面積設(shè)置了一個(gè)默許值為100。 建立“自習(xí)教室數(shù)據(jù)庫(kù)表,運(yùn)用FOREIGN KEYTAGREFERENCES 短語(yǔ),將兩個(gè)表進(jìn)展永久性聯(lián)接。 CREATE TABLE 自習(xí)教室 (教室編號(hào) C(4),運(yùn)用者 C(12),運(yùn)用時(shí)間 C(10), FOREIGN KEY 教室編號(hào) TAG 教室編號(hào) REFERENCES 教室) 其中,
29、“FOREIGN KEY 教室編號(hào)是為“自習(xí)教室表建立普通索引,“TAG 教室編號(hào)REFERENCES 教室是經(jīng)過(guò)“教室編號(hào)字段與“教室表進(jìn)展永久性銜接。5.3.2 表的刪除 刪除表命令: 【格式】DROP TABLE 【闡明】該命令將表從數(shù)據(jù)庫(kù)中物理性的刪除,在執(zhí)行該命令時(shí)最好將數(shù)據(jù)庫(kù)翻開(kāi),再刪除其中的表,否那么表可以刪除,但是表在數(shù)據(jù)庫(kù)中的信息將不能刪除,以后翻開(kāi)數(shù)據(jù)庫(kù)之后將會(huì)出現(xiàn)錯(cuò)誤。5.3.3 表構(gòu)造的修正 修正表構(gòu)造的命令是ALTER TABLE,該命令有三種格式。 【格式1】ALTER TABLE ADD|ALTER COLUMN 數(shù)據(jù)類(lèi)型 (寬度,小數(shù)位數(shù)) NULL|NOT N
30、ULL CHECK域完好性約束條件 ERROR 出錯(cuò)信息DEFAULT 默許值 PRIMARY KEY|UNIQUE REFERENCES TAG 標(biāo)識(shí)名 【闡明】該格式可以添加ADD新的字段或修正ALTER已有的字段。從命令格式可以看出,該格式可以修正字段的類(lèi)型、寬度、有效性規(guī)那么、錯(cuò)誤信息、默許值,定義主關(guān)鍵字和聯(lián)絡(luò)等。但是不能修正字段名,不能刪除字段,也不能刪除曾經(jīng)定義的規(guī)那么等。 【例5.34】向“教室表中添加一個(gè)“樓層字段。 ALTER TABLE 教室 ADD樓層 N (3) I CHECK樓層0 ERROR “樓層應(yīng)為非負(fù); DEFAULT 100 【例5.35】將“教室表中的“
31、教室編號(hào)字段的寬度由4改為6。 ALTER TABLE教室ALTER教室編號(hào) C(6) 【格式2】ALTER TABLE ALTERCOLUMN NULL|NOT NULL SET DEFAULT 默許值 SET CHECK 域完好性約束條件 ERROR 出錯(cuò)信息 DROP DEFAULT DROP CHECK 闡明:該格式主要用于定義、修正和刪除有效性規(guī)那么和默許定義。 【例5.36】修正“教室表中的“面積字段的有效性規(guī)那么。 ALTER TABLE 教室 ALTER面積SET CHECK面積30 ERROR 面積應(yīng)大于30平方米 ALTER面積SET DEFAULT 40 【例5.37】刪
32、除“教室表中的“面積字段的域完好性約束條件。 ALTER TABLE 教室 ALTER 面積 DROP CHECK 【例5.38】刪除“教室表中的“面積字段的默許值。 ALTER TABLE 教室 ALTER 面積 DROP DEFAULT 【格式3】ALTER TABLE DROPCOLUMN SET CHECK 域完好性約束條件 ERROR 出錯(cuò)信息 DROP CHECK ADD PRIMARY KEY 字段名 TAG 標(biāo)示名 DROP PRIMARY KEY RENAME COLUMN TO 闡明:該格式可以刪除字段DROPCOLUMN、修正字段名RENAME COLUMN等。 【例5.
33、39】修正教室表中“面積字段的稱(chēng)號(hào)為“運(yùn)用面積。 ALTER TABLE 教室 RENAME COLUMN 面積 TO運(yùn)用面積 【例5.40】刪除教室表中“運(yùn)用面積字段。 ALTER TABLE 教室 DROP COLUMN 運(yùn)用面積5.3.4 視圖的定義 視圖是一個(gè)虛擬的表,在存儲(chǔ)介質(zhì)中找不到相應(yīng)的存儲(chǔ)文件。 視圖類(lèi)似SELECT 語(yǔ)句的查詢(xún)窗口,視圖保管了這個(gè)查詢(xún)窗口,保管了查詢(xún)的數(shù)據(jù)是滿足什么樣的條件來(lái)自于哪幾個(gè)表,真正的數(shù)據(jù)還是分別保管在各自的表中。 視圖可援用一個(gè)或多個(gè)表,或者援用其他視圖,視圖是可以更新的,它可援用遠(yuǎn)程表。 視圖最大的特點(diǎn)是,依賴(lài)于表,不獨(dú)立存在,雖不保管真正的數(shù)據(jù)
34、,但是可以像普通的表一樣進(jìn)展建立查詢(xún)、表單、報(bào)表等。 1.1.定義視圖命令定義視圖命令 【格式】【格式】CREATE VIEW CREATE VIEW AS AS 其中其中SELECTSELECT語(yǔ)句可以是恣意的語(yǔ)句可以是恣意的SELECTSELECT查詢(xún)語(yǔ)查詢(xún)語(yǔ)句,它闡明和限定了視圖中的數(shù)據(jù);視圖的句,它闡明和限定了視圖中的數(shù)據(jù);視圖的字段名與字段名與SELECTSELECT語(yǔ)句中指定的字段名一樣。語(yǔ)句中指定的字段名一樣。 1 1從單個(gè)表派生出來(lái)的視圖從單個(gè)表派生出來(lái)的視圖 【例【例5.415.41】建立商品的商品號(hào)、商品名以及】建立商品的商品號(hào)、商品名以及產(chǎn)地的視圖。產(chǎn)地的視圖。 CREA
35、TE VIEW CREATE VIEW 商品產(chǎn)地信息商品產(chǎn)地信息 AS SELECT AS SELECT 商品商品號(hào)號(hào), ,商品名商品名, ,產(chǎn)地產(chǎn)地 FROM FROM 商品商品 其中其中“商品產(chǎn)地信息是視圖的稱(chēng)號(hào)。商品產(chǎn)地信息是視圖的稱(chēng)號(hào)。 2 2從多個(gè)表派生出來(lái)的視圖從多個(gè)表派生出來(lái)的視圖 【例【例5.425.42】建立學(xué)生的學(xué)號(hào)、姓名、所選的】建立學(xué)生的學(xué)號(hào)、姓名、所選的課程的課程名以及該門(mén)課的成果的視圖。課程的課程名以及該門(mén)課的成果的視圖。 CREATE VIEW CREATE VIEW 成果單成果單 AS SELECT AS SELECT 學(xué)生學(xué)生. .學(xué)號(hào)學(xué)號(hào), ,姓名姓名, ,
36、課程名課程名, ,成果成果 FROM FROM 學(xué)生學(xué)生, ,選課選課, ,課程課程 WHERE WHERE 學(xué)生學(xué)生. .學(xué)號(hào)學(xué)號(hào)= =選課選課. .學(xué)號(hào)學(xué)號(hào) AND AND 課程課程. .課程課程號(hào)號(hào)= =選課選課. .課程號(hào)課程號(hào) 此時(shí),假設(shè)要查詢(xún)王芳所選的課程以及成果,此時(shí),假設(shè)要查詢(xún)王芳所選的課程以及成果,那么運(yùn)用如下語(yǔ)句:那么運(yùn)用如下語(yǔ)句: SELECT SELECT 學(xué)號(hào)學(xué)號(hào), ,姓名姓名, ,課程名課程名, ,成果成果 FROM FROM 成果成果單單 WHERE WHERE 姓名姓名= =王芳王芳 3 3視圖中的虛字段視圖中的虛字段用一個(gè)查詢(xún)來(lái)建立一個(gè)視圖的用一個(gè)查詢(xún)來(lái)建立一
37、個(gè)視圖的SELECTSELECT字句可以字句可以包含算術(shù)表達(dá)式或函數(shù),這些表達(dá)式或函數(shù)與視包含算術(shù)表達(dá)式或函數(shù),這些表達(dá)式或函數(shù)與視圖的其他字段一樣對(duì)待,由于它們是計(jì)算得來(lái)的,圖的其他字段一樣對(duì)待,由于它們是計(jì)算得來(lái)的,并不存儲(chǔ)在表中,所以稱(chēng)為虛字段。并不存儲(chǔ)在表中,所以稱(chēng)為虛字段。例如有一個(gè)根本表構(gòu)造為:職工職工號(hào),職例如有一個(gè)根本表構(gòu)造為:職工職工號(hào),職工姓名,工資工姓名,工資 建立一個(gè)視圖建立一個(gè)視圖“職工薪金,運(yùn)用的命令如職工薪金,運(yùn)用的命令如下:下: CREATE VIEW CREATE VIEW 職工薪金職工薪金 AS SELECT AS SELECT 職工號(hào)職工號(hào), ,工資工資 AS AS 月薪月薪, ,工資工資* *12 AS 12 AS 年薪年薪; ; FROM FROM 職工職工 這里這里SELECTSELECT短語(yǔ)中利用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代理電動(dòng)車(chē)合同范例
- 借名買(mǎi)房合同范本
- 租賃合同通知函
- 農(nóng)村收購(gòu)單車(chē)合同范例
- 農(nóng)村果園承包合同范本
- 云平臺(tái)建設(shè)合同范本
- 云南租房合同范本
- 供應(yīng)電水氣合同范本
- 水電站隧道排水孔施工方案
- 乙方裝修合同范本
- 2024-2025學(xué)年新教材高中化學(xué) 第三章 鐵 金屬材料 2.1 合金說(shuō)課稿 新人教版必修1
- 《籃球防守腳步移動(dòng)技術(shù) 滑步》教案
- 完整版項(xiàng)目部組織機(jī)構(gòu)圖
- 浙江省杭州市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 人工智能客服機(jī)器人使用手冊(cè)
- 品牌全球化體育營(yíng)銷(xiāo)趨勢(shì)洞察報(bào)告 2024
- 安徽省蕪湖市普通高中2025屆高考全國(guó)統(tǒng)考預(yù)測(cè)密卷物理試卷含解析
- (新版)拖拉機(jī)駕駛證科目一知識(shí)考試題庫(kù)500題(含答案)
- (人衛(wèi)版第九版?zhèn)魅静W(xué)總論(一))課件
- 工業(yè)機(jī)器人仿真與離線編程項(xiàng)目-8-KUKA-Sim-Pro-軟件的介紹及基本操作
- 第2課++生涯規(guī)劃+筑夢(mèng)未來(lái)(課時(shí)2)【中職專(zhuān)用】中職思想政治《心理健康與職業(yè)生涯》高效課堂 (高教版基礎(chǔ)模塊)
評(píng)論
0/150
提交評(píng)論