第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言_第1頁(yè)
第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言_第2頁(yè)
第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言_第3頁(yè)
第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言_第4頁(yè)
第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余31頁(yè)可下載查看

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

1第4章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL主要內(nèi)容l

SQL語(yǔ)言概述

l

數(shù)據(jù)定義

l

數(shù)據(jù)更新

l

數(shù)據(jù)查詢(xún)

24.1SQL語(yǔ)言概述SQL是1974年由CHAMBERLIN和BOYEE提出的,當(dāng)時(shí)稱(chēng)為SEQUEL(StructuredEnglishQueryLanguage)。IBM公司對(duì)其進(jìn)行了修改,并用于SYSTEMR關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中。1981年IBM推出商用關(guān)系數(shù)據(jù)庫(kù)SQL/DS,并將其名字改為SQL,由于SQL語(yǔ)言功能強(qiáng)大,簡(jiǎn)潔易用,因此得到了廣泛的應(yīng)用。不僅廣泛應(yīng)用于各種大型數(shù)據(jù)庫(kù),例如SYBASE、INFORMIX、ORACLE、INGRES、DB2等,同時(shí)也大量應(yīng)用于各種小型數(shù)據(jù)庫(kù),例如VisualFoxPro、Access等。3

SQL語(yǔ)言十多年來(lái)已制訂了多個(gè)SQL標(biāo)準(zhǔn)。

1982年,美國(guó)國(guó)家標(biāo)準(zhǔn)化局(ANSI)開(kāi)始制定SQL標(biāo)準(zhǔn)。

1986年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)公布了SQL語(yǔ)言的第一個(gè)標(biāo)準(zhǔn)SQL86。

1987年,國(guó)際標(biāo)準(zhǔn)化組織(ISO)通過(guò)了SQL86標(biāo)準(zhǔn)。

1989年,國(guó)際標(biāo)準(zhǔn)化組織(ISO)對(duì)SQL86進(jìn)行了補(bǔ)充,推出了SQL89標(biāo)準(zhǔn)。

1992年,ISO又推出了SQL92標(biāo)準(zhǔn),也稱(chēng)為SQL2。目前SQL99(也稱(chēng)為SQL3)在起草中,增加了面向?qū)ο蟮墓δ堋?.1SQL語(yǔ)言概述44.1.1SQL的特點(diǎn)1.綜合統(tǒng)一2.高度非過(guò)程化3.面向集合的操作方式4.以同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方法5.語(yǔ)言簡(jiǎn)潔,易學(xué)易用4.1SQL語(yǔ)言概述5表4-1SQL語(yǔ)言的動(dòng)詞SQL功能動(dòng)詞數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)查詢(xún)SELECT數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOKE4.1SQL語(yǔ)言概述64.1.2SQL的功能1.數(shù)據(jù)定義(DataDefinition)2.數(shù)據(jù)操縱(DataManipulation)3.數(shù)據(jù)查詢(xún)(DataQuery)4.數(shù)據(jù)控制(DataControl)數(shù)據(jù)庫(kù)中的數(shù)據(jù)由多個(gè)用戶(hù)共享,為保證數(shù)據(jù)庫(kù)的安全,SQL語(yǔ)言提供數(shù)據(jù)控制語(yǔ)句DCL(DataControlLanguage,簡(jiǎn)稱(chēng)DCL)對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的控制管理。4.1SQL語(yǔ)言概述74.2數(shù)據(jù)定義

SQL語(yǔ)言使用數(shù)據(jù)定義語(yǔ)言DDL實(shí)現(xiàn)數(shù)據(jù)定義功能,主要包括定義表、定義視圖和定義索引,如表4-2所示。表4-2SQL的數(shù)據(jù)定義語(yǔ)句操作對(duì)象操作方式創(chuàng)建刪除修改表CREATETABLEDROPTABLEALTERTABLE視圖CREATEVIEWDROPVIEW索引CREATEINDEXDROPINDEX84.2.1數(shù)據(jù)類(lèi)型

當(dāng)用SQL語(yǔ)句定義表時(shí),需要為表中的每一個(gè)字段設(shè)置一個(gè)數(shù)據(jù)類(lèi)型,用來(lái)指定字段所存放的數(shù)據(jù),SQL語(yǔ)言中基本數(shù)據(jù)類(lèi)型有數(shù)值型、字符串型、時(shí)間型、二進(jìn)制型等。不同的數(shù)據(jù)庫(kù)系統(tǒng)支持的數(shù)據(jù)類(lèi)型不完全相同。4.2數(shù)據(jù)定義94.2.2創(chuàng)建表SQL語(yǔ)言使用CREATETABLE命令定義表結(jié)構(gòu)。格式:CREATETABLE<表名>

(<列名><數(shù)據(jù)類(lèi)型>[<列級(jí)完整性約束條件>][,<列名><數(shù)據(jù)類(lèi)型>[<列級(jí)完整性約束條件>]]…[,<表級(jí)完整性約束條件>]);說(shuō)明:<表名>:所要定義的基本表的名字<列名>:組成該表的各個(gè)屬性(列)<列級(jí)完整性約束條件>:涉及相應(yīng)屬性列的完整性約束條件<表級(jí)完整性約束條件>:涉及一個(gè)或多個(gè)屬性列的完整性約束條件

4.2數(shù)據(jù)定義10

表可以由一個(gè)或多個(gè)屬性(列)組成。建表的同時(shí)通常還可以定義與該表有關(guān)的完整性約束條件,這些完整性約束條件被存入系統(tǒng)的數(shù)據(jù)字典中,當(dāng)用戶(hù)操作表中數(shù)據(jù)時(shí),由DBMS自動(dòng)檢查該操作是否違背這些完整性約束條件。常用完整性約束有:主碼約束:PRIMARYKEY唯一性約束:UNIQUE非空值約束:NOTNULL參照完整性約束4.2數(shù)據(jù)定義114.2.3修改表結(jié)構(gòu)

SQL語(yǔ)言用ALTERTABLE語(yǔ)句修改表結(jié)構(gòu)。格式:

ALTERTABLE表名

[ADD新列名數(shù)據(jù)類(lèi)型[完整性約束條件]][DROP完整性約束名][MODIFY列名數(shù)據(jù)類(lèi)型];

其中,表名指定需要修改的表,ADD子句用于增加新列和新的完整性約束條件,DROP子句用于刪除指定的完整性約束條件,MODIFY子句用于修改原有列的數(shù)據(jù)類(lèi)型4.2數(shù)據(jù)定義124.2.4刪除表

當(dāng)某個(gè)表不再需要時(shí),可以使用SQL的DROPTABLE語(yǔ)句進(jìn)行刪除。其一般格式為:

DROPTABLE

表名;一旦刪除表,表中的數(shù)據(jù)和在此表上建立的索引都將被自動(dòng)刪除掉,而建立在此表上的視圖雖仍然保留,但已無(wú)法引用。因此執(zhí)行刪除操作一定要格外小心。4.2數(shù)據(jù)定義134.3數(shù)據(jù)更新4.3.1插入數(shù)據(jù)

SQL用INSERT語(yǔ)句來(lái)插入數(shù)據(jù),通常有兩種形式。1、插入單個(gè)元組格式:

INSERETINTO表名[(列名1[,列名2]…)]VALUES(常量1[,常量2]…);說(shuō)明:其功能是將新元組插入指定表中。新元組屬性列1的值為常量1,屬性列2的值為常量2,……。144.3數(shù)據(jù)更新

其中INTO子句指定要插入數(shù)據(jù)的表名及屬性列,屬性列的順序可與表定義中的順序不一致;如果沒(méi)有指定屬性列表示要插入的是一條完整的元組,且屬性列屬性與表定義中的順序一致;指定部分屬性列表示插入的元組在其余屬性列上取空值。VALUES子句提供的值的個(gè)數(shù)和類(lèi)型必須與INTO子句匹配。152、插入查詢(xún)結(jié)果。格式:

INSERETINTO表名[(列名1[,列名2]…)]

子查詢(xún);說(shuō)明:其功能是以批量插入的方式,一次將查詢(xún)的結(jié)果全部插入指定表中。4.3數(shù)據(jù)更新164.3.2修改數(shù)據(jù)

修改操作用UPDATE實(shí)現(xiàn),其語(yǔ)句的一般格式為:

UPDATE表名

SET列名=表達(dá)式[,列名=表達(dá)式]…[WHERE條件];

其功能是修改指定表中滿足WHERE條件的元組。其中,SET子句用于指定修改值,即用表達(dá)式的值取代相應(yīng)的屬性列值。如果省略WHERE子句,則表示要修改表中的所有元組。4.3數(shù)據(jù)更新174.3.3刪除數(shù)據(jù)

刪除數(shù)據(jù)用DELETE語(yǔ)句,語(yǔ)句格式為:

DELETEFROM表名

[WHERE條件];功能是從指定表中刪除滿足WHERE條件的所有元組。如果省略WHERE子句,表示刪除表中的全部元組。4.3數(shù)據(jù)更新184.4數(shù)據(jù)查詢(xún)

數(shù)據(jù)庫(kù)的查詢(xún)是數(shù)據(jù)庫(kù)的核心操作。SQL語(yǔ)言提供了SELECT語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)查詢(xún),該語(yǔ)句具有靈活的使用方式和豐富的功能。

SELECT語(yǔ)句的一般格式如下:

SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];19其中:SELECT子句:指定要顯示的屬性列;FROM子句:指定查詢(xún)對(duì)象(基本表或視圖);WHERE子句:指定查詢(xún)條件;GROUPBY子句:對(duì)查詢(xún)結(jié)果按指定列的值分組,該屬性列值相等的元組為一組。HAVING子句:對(duì)匯總結(jié)果進(jìn)行二次篩選;ORDERBY子句:對(duì)查詢(xún)結(jié)果表按指定列值的升序或降序排序。4.4數(shù)據(jù)查詢(xún)20

SELECT語(yǔ)句既可以完成簡(jiǎn)單的單表查詢(xún),也可以完成復(fù)雜的連接查詢(xún)和嵌套查詢(xún),下面以學(xué)生課程數(shù)據(jù)庫(kù)為例說(shuō)明SELECT語(yǔ)句的各種功能。學(xué)生課程數(shù)據(jù)庫(kù)包含三個(gè)表。學(xué)生表:Student(StudentID,Name,Sex,Age,DepartmentID)課程表:Subject(SubjectID,SubjectName,Credit)學(xué)生選課表:Score(StudentID,SubjectID,Score)4.4數(shù)據(jù)查詢(xún)214.4.2簡(jiǎn)單查詢(xún)簡(jiǎn)單查詢(xún)是只涉及一個(gè)表的查詢(xún)。1.選擇表中的若干列選擇表中的全部列或者部分列,屬于投影運(yùn)算,不消除重復(fù)行。(1)查詢(xún)指定列在很多情況下,用戶(hù)只用到表中的一部分屬性,這時(shí)可以通過(guò)在SELECT子句的<目標(biāo)列表達(dá)式>中指定要查詢(xún)的屬性。<目標(biāo)列表達(dá)式>中各個(gè)列的先后順序可以與表中的邏輯順序不一致,即用戶(hù)可以根據(jù)應(yīng)用的需要改變列的顯示順序。4.4數(shù)據(jù)查詢(xún)22(2)查詢(xún)?nèi)苛袑⒈碇械乃袑傩粤卸剂谐鰜?lái),有兩種方法:一種方法是在SELECT關(guān)鍵字后面列出所有列名,另外一種方法是當(dāng)列的顯示順序與其在基表中的順序相同時(shí),可以簡(jiǎn)單地將<目標(biāo)列表達(dá)式>指定為*。(3)查詢(xún)經(jīng)過(guò)計(jì)算的值

SELECT子句的<目標(biāo)列表達(dá)式>不僅可以是表中的屬性列,也可以是為算術(shù)表達(dá)式、字符串常量、函數(shù)、列別名等。4.4數(shù)據(jù)查詢(xún)232.選擇表中的若干元組(1)消除取值重復(fù)的行兩個(gè)本來(lái)并不完全相同的元組,投影到指定的某些列上后,可能變成相同的行了。在結(jié)果中消除重復(fù)行的方法是在SELECT子句中使用DISTINCT短語(yǔ)。(2)查詢(xún)滿足條件的元組查詢(xún)滿足指定條件的元組可以通過(guò)WHERE子句實(shí)現(xiàn)。WHERE子句中常用運(yùn)算符如下表所示。4.4數(shù)據(jù)查詢(xún)24查詢(xún)條件謂詞比較大小=,>,<,>=,<=,!=或<>,!>,!<,確定范圍BETWEEN…AND…NOTBETWEEN…AND…確定集合IN,NOTIN字符串匹配LIKE,NOTLIKE空值ISNULL,ISNOTNUL多重條件NOT,AND,OR4.4數(shù)據(jù)查詢(xún)253.對(duì)查詢(xún)結(jié)果排序用戶(hù)可以使用ORDERBY子句對(duì)查詢(xún)結(jié)果按可以按一個(gè)或多個(gè)屬性列排的升序(ASC)或降序(DESC)排序,缺省值為升序。當(dāng)排序列含空值時(shí)ASC指定的排序列為空值的元組最后顯示,DESC指定的排序列為空值的元組最先顯示。4.4數(shù)據(jù)查詢(xún)264.使用集函數(shù)為了進(jìn)一步方便用戶(hù),增強(qiáng)檢索功能,SQL語(yǔ)言提供了許多集函數(shù),主要有:計(jì)數(shù):COUNT([DISTINCT|ALL]*);

COUNT([DISTINCT|ALL]<列名>);計(jì)算總和:SUM([DISTINCT|ALL]<列名>);計(jì)算平均值:AVG([DISTINCT|ALL]<列名>);求最大值:MAX([DISTINCT|ALL]<列名>);求最小值:MIN([DISTINCT|ALL]<列名>);DISTINCT短語(yǔ):在計(jì)算時(shí)取消指定列中的重復(fù)值。ALL短語(yǔ):不取消重復(fù)值。ALL為缺省值。4.4數(shù)據(jù)查詢(xún)275.對(duì)查詢(xún)結(jié)果分組

GROUPBY子句將查詢(xún)結(jié)果按照按指定的一列或多列值分組,值相等的為一組。4.4數(shù)據(jù)查詢(xún)286.4.3連接查詢(xún)前面的查詢(xún)都是針對(duì)一個(gè)表進(jìn)行的。若一個(gè)查詢(xún)同時(shí)涉及兩個(gè)以上的表,則稱(chēng)之為連接查詢(xún)·連接查詢(xún)是關(guān)系數(shù)據(jù)庫(kù)中最主要的查詢(xún),包括等值連接、自然連接、非等值連接查詢(xún)、自身連接查詢(xún)、外連接查詢(xún)和復(fù)合條件連接查詢(xún)。4.4數(shù)據(jù)查詢(xún)291.等值與非等值連接查詢(xún)連接查詢(xún)中用來(lái)連接兩個(gè)表的條件稱(chēng)為連接條件或連接謂詞,其一般格式為:

[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>

比較運(yùn)算符:=、>、<、>=、<=、!=

[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>

當(dāng)連接運(yùn)算符為=時(shí),稱(chēng)為等值連接。使用其他運(yùn)算符稱(chēng)為非等值連接。連接謂詞中的列名稱(chēng)為連接字段。連接條件中的各連接字段類(lèi)型必須是可比的。但不必是相同的。4.4數(shù)據(jù)查詢(xún)302.自連接連接操作不僅可以在兩個(gè)表之間進(jìn)行,也可以是一個(gè)表與其自己進(jìn)行連接,稱(chēng)為表的自連接。自連接需要給表起別名以示區(qū)別,同時(shí)由于所有屬性名都是同名屬性,因此必須使用別名前綴。4.4數(shù)據(jù)查詢(xún)313.外連接外連接操作以指定表為連接主體,將主體表中不滿足連接條件的元組一并輸出。外連接操作是在表名后面加外連接操作符(*)或(+)指定非主體表,非主體表有一“萬(wàn)能”的虛行,該行全部由空值組成,虛行可以和主體表中所有不滿足連接條件的元組進(jìn)行連接。外連接操作的有兩種類(lèi)型,左外連接和右外連接。左外連接外連接符出現(xiàn)在連接條件的左邊,右外連接的外連接符出現(xiàn)在連接條件的右邊。4.4數(shù)據(jù)查詢(xún)326.4.4嵌套查詢(xún)?cè)赟QL語(yǔ)言中,一個(gè)SELECT-FROM-WHERE語(yǔ)句稱(chēng)為一個(gè)查詢(xún)塊。將一個(gè)查詢(xún)塊嵌套在另一個(gè)查詢(xún)塊的WHERE子句或HAVING子句的條件中的查詢(xún)稱(chēng)為嵌套查詢(xún)。

SQL語(yǔ)言允許多層嵌套查詢(xún)。即一個(gè)子查詢(xún)中還可以嵌套其他子查詢(xún)。需要特別指出的是,子查詢(xún)的SELECT語(yǔ)句中不能使用ORDERBY子句,ORDERBY子句只能對(duì)最終查詢(xún)結(jié)果排序。4.4數(shù)據(jù)查詢(xún)331.帶有IN謂詞的子查詢(xún)?cè)谇短撞樵?xún)中,子查詢(xún)的結(jié)果往往是一個(gè)集合,所以謂詞IN是嵌套查詢(xún)中最經(jīng)常用使用的謂詞。2.帶有比較運(yùn)算符

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論