《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第4章_第1頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第4章_第2頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第4章_第3頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第4章_第4頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第4章_第5頁(yè)
已閱讀5頁(yè),還剩86頁(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)介

第4章數(shù)據(jù)檢索

4.1運(yùn)算符和函數(shù)4.2基本SELECT語(yǔ)句4.3復(fù)雜SELECT語(yǔ)句4.4數(shù)據(jù)庫(kù)原理(二)——關(guān)系運(yùn)算小結(jié)習(xí)題

4.1運(yùn)算符和函數(shù)

4.1.1Transact-SQL運(yùn)算符

1.算術(shù)運(yùn)算符

算術(shù)運(yùn)算符可以對(duì)數(shù)值類型或貨幣類型的數(shù)據(jù)進(jìn)行運(yùn)算。

算術(shù)運(yùn)算符包括:+?(加)、-(減)、*?(乘)、/?(除)、%?(取余)。

2.字符串運(yùn)算符

字符串運(yùn)算符可以對(duì)字符串、二進(jìn)制串進(jìn)行連接運(yùn)算。

字符串運(yùn)算符包括:+(加)。

3.關(guān)系運(yùn)算符

關(guān)系運(yùn)算符可以在相同的數(shù)值類型(除text、image外)間進(jìn)行運(yùn)算,并返回邏輯值TRUE(真)或FALSE(假)。

關(guān)系運(yùn)算符包括:=?(等于)、>?(大于)、<?(小于)、>=?(大于等于)、<=?(小于等于)、<>?(不等于)、!=?(不等于)、!>?(不大于)、!<?(不小于)。

4.邏輯運(yùn)算符

邏輯運(yùn)算符可以對(duì)邏輯值進(jìn)行運(yùn)算,并返回邏輯值TRUE(真)或FALSE(假)。

邏輯運(yùn)算符包括:NOT(非)、AND(與)、OR(或)、BETWEEN(指定范圍)、LIKE(模糊匹配)、ALL(所有)、IN(包含于)、ANY(任意一個(gè))、SOME(部分)、EXISTS(存在)。

5.賦值運(yùn)算符

賦值運(yùn)算符可以將表達(dá)式的值賦給一個(gè)變量。

賦值運(yùn)算符包括:=。4.1.2Transact-SQL函數(shù)

1.數(shù)學(xué)函數(shù)

數(shù)學(xué)函數(shù)通常返回需要運(yùn)算的數(shù)據(jù)的數(shù)值。常用的數(shù)學(xué)函數(shù)見表4-1。

2.字符串函數(shù)

大多數(shù)字符串函數(shù)只能用于char和varchar數(shù)據(jù)類型,以及明確轉(zhuǎn)換成char和varchar的數(shù)據(jù)類型。個(gè)別字符串函數(shù)也能用于binary和varbinary數(shù)據(jù)類型。常用的字符串函數(shù)見表4-2。

3.日期時(shí)間函數(shù)

日期時(shí)間函數(shù)用于處理日期和時(shí)間數(shù)據(jù)。?常用的日期時(shí)間函數(shù)見表4-3,表4-4為datepart的格式。實(shí)例4-1

計(jì)算香港回歸已經(jīng)有多少年、多少天,今天以后15個(gè)月是哪一天。

在查詢編輯器中輸入如圖4-1所示的SQL語(yǔ)句并執(zhí)行。圖4-1日期時(shí)間函數(shù)實(shí)例

4.類型轉(zhuǎn)換函數(shù)

類型轉(zhuǎn)換函數(shù)包括:

CAST(expressionASdate_type)

CONVERT(date_type,expression[,style])

其中,style為日期格式代碼,參見表4-5。實(shí)例4-2

將當(dāng)前時(shí)間的日期轉(zhuǎn)換為美國(guó)格式(mm/dd/yyyy及mm-dd-yyyy)、ANSI(yyyy.mm.dd)格式的字符串,并將當(dāng)前時(shí)間的時(shí)間部分轉(zhuǎn)換為字符串。

在查詢編輯器中輸入如圖4-2所示的SQL語(yǔ)句并執(zhí)行。圖4-2類型轉(zhuǎn)換函數(shù)實(shí)例

4.2基本SELECT語(yǔ)句

在SQLServer2005中,檢索可通過(guò)SELECT語(yǔ)句來(lái)實(shí)現(xiàn)。

在SQL語(yǔ)句中,SELECT語(yǔ)句是使用最頻繁的,也是最重要的語(yǔ)句,SQLServer2005的所有檢索都是由SELECT語(yǔ)句完成的。SELECT語(yǔ)句的基本語(yǔ)法格式如下:

SELECT<表達(dá)式>[AS<別名>][INTO<目標(biāo)表名>]

FROM<源表名>

[WHERE<條件>]

[GROUPBY<列>[HAVING<條件>]][ORDERBY<列>[DESC]]4.2.1操縱列

1.計(jì)算表達(dá)式的值

SELECT語(yǔ)句的最簡(jiǎn)單格式是輸出表達(dá)式的值,即SELECT子句中使用表達(dá)式。參見實(shí)例4-1、實(shí)例4-2。

2.輸出所有列

SELECT子句使用“*”,可以表示輸出FROM子句所指定表的所有列。

實(shí)例4-3

檢索所有學(xué)生的所有信息。

在查詢編輯器中輸入如圖4-3所示的SQL語(yǔ)句并執(zhí)行。圖4-3檢索所有列

3.設(shè)置列標(biāo)題

在默認(rèn)的情況下,輸出列時(shí)列標(biāo)題就是表的列名,輸出表達(dá)式時(shí)列標(biāo)題為“無(wú)列名”。如果要改變列標(biāo)題,可以使用“=”或“AS”關(guān)鍵字。

實(shí)例4-4

檢索所有學(xué)生的年齡。

在查詢編輯器中輸入如圖4-4所示的SQL語(yǔ)句并執(zhí)行。圖4-4設(shè)置列標(biāo)題4.2.2操縱行

使用WHERE子句可以過(guò)濾出表中滿足條件的記錄,即完成關(guān)系的選擇運(yùn)算。實(shí)際上,數(shù)據(jù)的檢索絕大部分是通過(guò)WHERE子句實(shí)現(xiàn)的。

1.普通查詢

在WHERE子句中使用邏輯表達(dá)式可以完成絕大部分的檢索要求。

實(shí)例4-5

檢索所有1985年12月31日以后和1982年12月31日以前出生的女生的姓名和出生日期。

在查詢編輯器中輸入如圖4-5所示的SQL語(yǔ)句并執(zhí)行。圖4-5普通查詢

2.模糊查詢

利用模糊匹配運(yùn)算符LIKE,以及在LIKE中允許使用的匹配符:%(任意個(gè)字符)、_(任意一個(gè)字符),可以實(shí)現(xiàn)模糊檢索。

實(shí)例4-6

檢索所有姓李或第二個(gè)字為李的住址在西安的學(xué)生的姓名、性別和住址。

在查詢編輯器中輸入如圖4-6所示的SQL語(yǔ)句并執(zhí)行。圖4-6模糊查詢4.2.3分類匯總

1.聚合函數(shù)

聚合函數(shù)主要包括:

COUNT(distinct<列表達(dá)式>|*):指定列唯一值的個(gè)數(shù)或記錄總數(shù);

MAX([distinct]<列表達(dá)式>):指定列的最大值或指定列唯一值的最大值;

MIN([distinct]<列表達(dá)式>):指定列的最小值或指定列唯一值的最小值;

SUM([distinct]<列表達(dá)式>):指定列的算術(shù)和或指定列唯一值的算術(shù)和;

AVG([distinct]<列表達(dá)式>):指定列的算術(shù)平均值或指定列唯一值的算術(shù)平均值。

2.分類

所謂分類,就是將指定列的值相等的記錄劃為一組,可以通過(guò)GROUPBY子句實(shí)現(xiàn)。一般而言,分類的目的是為了對(duì)每一組記錄產(chǎn)生一個(gè)統(tǒng)計(jì)值,所以GROUPBY子句通常伴隨有聚合函數(shù)。

GROUPBY子句的基本語(yǔ)法格式如下:

GROUPBY<列1>[,<列2>…]

實(shí)例4-7

檢索每個(gè)學(xué)生所選課程的數(shù)量、總分及最高、最低分。

在查詢編輯器中輸入如圖4-7所示的SQL語(yǔ)句并執(zhí)行。圖4-7分類匯總

3.分類后過(guò)濾記錄

使用HAVING子句可以對(duì)分類后的記錄進(jìn)行過(guò)濾,HAVING子句與WHERE子句的功能和格式均相同,不同的是HAVING子句必須在GROUPBY子句后執(zhí)行,所以也具有如可以使用聚合函數(shù)等特點(diǎn)。

實(shí)例4-8

檢索平均成績(jī)及格的學(xué)生所選課程的數(shù)量、總分及最高、最低分。

在查詢編輯器中輸入如圖4-8所示的SQL語(yǔ)句并執(zhí)行。圖4-8使用HAVING子句4.2.4排序

使用ORDERBY子句可以按一個(gè)或多個(gè)列的值順序輸出記錄。

ORDERBY子句的基本語(yǔ)法格式如下:

ORDERBY<列1>[DESC][,<列2>[DESC]…]

其中,排序默認(rèn)升序,指定DESC則為降序。

實(shí)例4-9

檢索每個(gè)學(xué)生所選課程的數(shù)量、總分、平均分及最高、最低分,并按平均分排名次。規(guī)定當(dāng)平均分相等時(shí),最高分高的在前。

在查詢編輯器中輸入如圖4-9所示的SQL語(yǔ)句并執(zhí)行。圖4-9排序輸出

4.3復(fù)雜SELECT語(yǔ)句

4.3.1連接查詢

1.無(wú)限制連接——笛卡兒積

無(wú)限制連接就是對(duì)表的連接不加任何限制條件。顯然,無(wú)限制連接的結(jié)果是表的笛卡兒積。表現(xiàn)在SELECT語(yǔ)句中的形式是FROM子句為多個(gè)表并且無(wú)WHERE子句。無(wú)限制連接一般無(wú)實(shí)際意義。

實(shí)例4-10

求表sc與表s的笛卡兒積。

在查詢編輯器中輸入如圖4-10所示的SQL語(yǔ)句并執(zhí)行。圖4-10表sc與表s的笛卡兒積

2.內(nèi)連接——F連接

內(nèi)連接就是將表中的記錄按照一定的條件與其他表的一些記錄連接起來(lái)。連接的條件通??梢杂靡粋€(gè)邏輯表達(dá)式描述,所以內(nèi)連接又稱為F連接。表現(xiàn)在SELECT語(yǔ)句中的形式是包括多個(gè)表并且用WHERE或ON子句指定一個(gè)邏輯表達(dá)式。

實(shí)例4-11

檢索選修了數(shù)據(jù)庫(kù)應(yīng)用課程或VB程序設(shè)計(jì)課程的學(xué)生的學(xué)號(hào)、姓名、課程名、成績(jī)。

說(shuō)明:對(duì)前面例子中的“學(xué)生選課”關(guān)系模型的課程關(guān)系模式c約定其中的列cname為候選建,即表c中無(wú)課程名相同的課程。

方法一:在查詢編輯器中輸入如圖4-11所示的SQL語(yǔ)句并執(zhí)行。圖4-11用WHERE子句指定連接條件方法二:在查詢編輯器中輸入如圖4-12所示的SQL語(yǔ)句并執(zhí)行。圖4-12在FROM子句中用JOIN指定連接條件

3.自連接

連接不僅可以在表之間進(jìn)行,也可以使一個(gè)表同其自身進(jìn)行連接,稱為自連接。

實(shí)例4-12

檢索所有同時(shí)選修了課程編號(hào)為c001和c003的學(xué)生的學(xué)號(hào)。

方法一:在查詢編輯器中輸入如圖4-13所示的SQL語(yǔ)句并執(zhí)行。圖4-13用WHERE子句實(shí)現(xiàn)自連接方法二:在查詢編輯器中輸入如圖4-14所示的SQL語(yǔ)句并執(zhí)行。圖4-14在FROM子句中用JOIN實(shí)現(xiàn)自連接4.3.2子查詢

1.子查詢的概念

如果一個(gè)SELECT語(yǔ)句嵌套在一個(gè)WHERE子句中,則稱這個(gè)SELECT語(yǔ)句為子查詢或內(nèi)層查詢,而包含子查詢的SELECT語(yǔ)句稱為主查詢或外查詢。為了區(qū)別主、子查詢,子查詢應(yīng)加小括號(hào)。

根據(jù)與主查詢的關(guān)系,子查詢可以分為相關(guān)子查詢和不相關(guān)子查詢兩類。

2.不相關(guān)子查詢

所謂不相關(guān)子查詢是指子查詢的查詢條件不依賴于主查詢,此類查詢?cè)趫?zhí)行時(shí)首先執(zhí)行子查詢,然后執(zhí)行主查詢。

在主查詢的WHERE子句中,可以使用比較運(yùn)算符以及邏輯運(yùn)算符來(lái)連接子查詢。其中常用的邏輯運(yùn)算符包括IN(包含于)、ANY(某個(gè)值)、SOME(某些值)、ALL(所有值)、EXISTS(存在結(jié)果)。

實(shí)例4-13

檢索選修了數(shù)據(jù)庫(kù)應(yīng)用課程的學(xué)生的學(xué)號(hào)、姓名、成績(jī)。

在查詢編輯器中輸入如圖4-15所示的SQL語(yǔ)句并執(zhí)行。圖4-15不相關(guān)子查詢實(shí)例一實(shí)例4-14

檢索選修了數(shù)據(jù)庫(kù)應(yīng)用課程或VB程序設(shè)計(jì)課程的學(xué)生的學(xué)號(hào)、姓名、課程名、成績(jī)。

在查詢編輯器中輸入如圖4-16所示的SQL語(yǔ)句并執(zhí)行。

該語(yǔ)句中的“IN”可以用“=ANY”或“=SOME”替換,即“包含于”與“等于某個(gè)值”、“等于某些值”等價(jià)。

顯然,該子查詢與實(shí)例4-11的連接查詢等價(jià)。圖4-16不相關(guān)子查詢實(shí)例二

3.相關(guān)子查詢

所謂相關(guān)子查詢是指子查詢的查詢條件依賴于主查詢,此類查詢?cè)趫?zhí)行時(shí)首先執(zhí)行主查詢得到第一個(gè)元組,再根據(jù)主查詢第一個(gè)元組的值執(zhí)行子查詢,依此類推直至全部查詢執(zhí)行完畢。

相關(guān)子查詢相對(duì)比較復(fù)雜,在此僅舉一例,詳細(xì)內(nèi)容見實(shí)例4-15。

實(shí)例4-15

檢索平均成績(jī)及格的學(xué)生的學(xué)號(hào)、姓名。

在查詢編輯器中輸入如圖4-17所示的SQL語(yǔ)句并執(zhí)行。圖4-17相關(guān)子查詢實(shí)例4.3.3集合運(yùn)算

使用UNION運(yùn)算符可以將兩個(gè)或兩個(gè)以上的查詢結(jié)果合并為一個(gè)結(jié)果集。并運(yùn)算與連接查詢是不同的,并運(yùn)算增加的是行的數(shù)量,而連接查詢只能增加列的數(shù)量。

實(shí)例4-16

查詢表s和表s_bak中的所有學(xué)生的所有信息(假設(shè)表s_bak已存在,且結(jié)構(gòu)與表s相同)。

在查詢編輯器中輸入如圖4-18所示的SQL語(yǔ)句并執(zhí)行。圖4-18集合運(yùn)算查詢實(shí)例4.3.4生成新表

1.生成臨時(shí)表

當(dāng)INTO子句創(chuàng)建的表名前加“#”(局部臨時(shí)表)或“##”(全局臨時(shí)表)時(shí),所創(chuàng)建的表就是一個(gè)臨時(shí)表。臨時(shí)表保存在臨時(shí)數(shù)據(jù)庫(kù)Tempdb中,并由SQLServer2005負(fù)責(zé)刪除。

實(shí)例4-17

查詢平均成績(jī)超過(guò)總平均成績(jī)的學(xué)生的學(xué)號(hào)、姓名、平均成績(jī)。

在查詢編輯器中輸入如圖4-19所示的SQL語(yǔ)句并執(zhí)行。圖4-19使用SELECT創(chuàng)建臨時(shí)表

2.生成永久表

當(dāng)INTO子句創(chuàng)建的表名前未加“#”或“##”時(shí),所創(chuàng)建的表就是一個(gè)永久表。

實(shí)例4-18

創(chuàng)建一個(gè)包含信息501班學(xué)生的學(xué)號(hào)、姓名、性別以及出生日期的表。

在查詢編輯器中輸入如圖4-20所示的SQL語(yǔ)句并執(zhí)行。圖4-20使用SELECT創(chuàng)建表4.3.5嵌入式Transact-SQL

1.嵌入式Transact-SQL的概念

T-SQL有兩種使用方式:一種是在SQLServer交互方式下使用,稱為交互式T-SQL;另一種是嵌入在宿主語(yǔ)言的程序中使用,稱為嵌入式T-SQL。

由于T-SQL與宿主語(yǔ)言差別很大,因此宿主語(yǔ)言一般不能處理T-SQL語(yǔ)句。通常采用的方法是預(yù)處理方式,即先用預(yù)處理程序?qū)υ闯绦蜻M(jìn)行掃描,識(shí)別出其中的T-SQL語(yǔ)句并處理成宿主語(yǔ)言的函數(shù)調(diào)用形式,然后使用T-SQL函數(shù)庫(kù)將其編譯為目標(biāo)程序。因此必須對(duì)T-SQL語(yǔ)句加標(biāo)志。不同的宿主語(yǔ)言的標(biāo)志不同,如PowerBuilder中T-SQL語(yǔ)句應(yīng)在語(yǔ)句末尾加“;”。

2.?Transact-SQL和宿主語(yǔ)言的接口

數(shù)據(jù)庫(kù)管理系統(tǒng)與宿主語(yǔ)言程序間的數(shù)據(jù)傳遞是通過(guò)SQL通信區(qū)SQLCA實(shí)現(xiàn)的。在SQLCA中有一個(gè)特殊的共享變量SQLCode,起著解釋T-SQL語(yǔ)句執(zhí)行狀況的作用。當(dāng)一條T-SQL語(yǔ)句執(zhí)行成功時(shí),系統(tǒng)自動(dòng)給SQLCode賦0;當(dāng)操作失敗時(shí),自動(dòng)給SQLCode賦-1。因此,在宿主語(yǔ)言中利用SQLCA.SQLCode的值,可以判斷T-SQL語(yǔ)句的執(zhí)行狀況。

另外,允許在T-SQL語(yǔ)句中使用宿主語(yǔ)言的程序變量,稱為共享變量,但在引用時(shí)應(yīng)在共享變量前加“:”作為標(biāo)志。

4.4數(shù)據(jù)庫(kù)原理(二)——關(guān)系運(yùn)算

4.4.1關(guān)系模型

1.關(guān)系的數(shù)學(xué)定義

定義4.1

域(Domain)是一組具有相同數(shù)據(jù)類型的值的集合。

例如,整數(shù)、實(shí)數(shù)、0~100的整數(shù)、{男,女}等。

定義4.2

給定一組域D1、D2、…、Dn,D1、D2、…、Dn的笛卡兒積為

D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,…,n}

其中,每一個(gè)元素(d1,d2,…,dn)稱為一個(gè)元組(簡(jiǎn)稱元組),元素中每一個(gè)值di稱為一個(gè)分量。實(shí)例4-19

給定三個(gè)域:姓名={張三,李四}、性別={男,女}、課程={數(shù)據(jù)庫(kù),軟工},則域上的笛卡兒積為:

姓名?×?性別?×?課程?=?{(張三,男,數(shù)據(jù)庫(kù)),(張三,男,軟工),(張三,女,數(shù)據(jù)庫(kù)),(張三,女,軟工),(李四,男,數(shù)據(jù)庫(kù)),(李四,男,軟工),(李四,女,數(shù)據(jù)庫(kù)),(李四,女,軟工)}

其中,(張三,男,數(shù)據(jù)庫(kù))等為元組,張三、男、數(shù)據(jù)庫(kù)為分量,基數(shù)為2?×?2?×?2?=?8,即姓名?×?性別?×?課程共有8個(gè)元組。定義4.3

域D1、D2、…、Dn上的笛卡兒積的子集稱為在域D1、D2、…、Dn上的關(guān)系,用R(D1,D2,…,Dn)表示。其中,R表示關(guān)系名;n為關(guān)系的度、目或元數(shù)。

關(guān)系是笛卡兒積的子集,所以關(guān)系也是一個(gè)二維表,表的每行對(duì)應(yīng)一個(gè)元組,表的每列對(duì)應(yīng)一個(gè)域。由于域可以相同,因此為了加以區(qū)分,必須對(duì)每列起一個(gè)名字。關(guān)系中的每一列稱為屬性,列名稱為屬性名,n目關(guān)系必有n個(gè)屬性。n=l的關(guān)系只含有一個(gè)屬性,稱為單元關(guān)系,n?=?2的關(guān)系為二元關(guān)系,以此類推。

在SQLServer數(shù)據(jù)庫(kù)中,通常關(guān)系被稱為表,屬性被稱為字段,元組則被稱為記錄。實(shí)例4-20

給定三個(gè)域:姓名={張三,李四}、性別={男,女}、課程={數(shù)據(jù)庫(kù),軟工},則域上的教師授課關(guān)系為教師授課(姓名,性別,課程)?=?{(張三,男,數(shù)據(jù)庫(kù)),(李四,女,軟工)},其中n?=?3。

該教師關(guān)系可以表示為表4-6。

2.關(guān)系的性質(zhì)

盡管關(guān)系與二維表有類似之處,但又有區(qū)別。嚴(yán)格地說(shuō),關(guān)系是一種規(guī)范化的二維表,具有以下性質(zhì):

(1)屬性取自同一個(gè)域。

(2)屬性是原子的,且屬性名不能相同。

(3)沒有重復(fù)的元組。

(4)沒有行序。

(5)理論上沒有列序,為使用方便可以有列序。4.4.2關(guān)系代數(shù)

關(guān)系代數(shù)是一種抽象的查詢語(yǔ)言,是關(guān)系數(shù)據(jù)操縱語(yǔ)言的一種傳統(tǒng)表達(dá)方式,是用對(duì)關(guān)系的運(yùn)算來(lái)表達(dá)查詢。

任何一種運(yùn)算都是將一定的運(yùn)算操作應(yīng)用于一定的運(yùn)算對(duì)象上,得到預(yù)期的運(yùn)算結(jié)果。關(guān)系代數(shù)的運(yùn)算對(duì)象是關(guān)系,運(yùn)算結(jié)果亦為關(guān)系。關(guān)系代數(shù)的運(yùn)算符包括4類:集合運(yùn)算符、專門的關(guān)系運(yùn)算符、比較運(yùn)算符和邏輯運(yùn)算符。如表4-7所示。

1.傳統(tǒng)的集合運(yùn)算

(1)并(Union)。

定義4.4

設(shè)關(guān)系R和關(guān)系S都具有相同的關(guān)系模式(即兩個(gè)關(guān)系都有相同的屬性,且相應(yīng)的屬性取自同一個(gè)域),則關(guān)系R和關(guān)系S的并是由屬于關(guān)系R或關(guān)系S的元組構(gòu)成的集合,記為R∪S?=?{t|t∈R∨tS},其中t為元組變量。

需要注意的是,并的結(jié)果應(yīng)刪除重復(fù)元組。

(2)交(Intersection)。

定義4.5設(shè)關(guān)系R和關(guān)系S具有相同的關(guān)系模式,R和S的交是由屬于R又屬于S的元組構(gòu)成的集合,記為R∩?S={t?|?tR∧tS}。

(3)差(Difference)。定義4.6

設(shè)關(guān)系R和關(guān)系S具有相同的關(guān)系模式,R和S的差是由屬于R但不屬于S的所有元組構(gòu)成的集合,記為R-S={t|t∈R∧t

S}。

實(shí)例4-21

設(shè)關(guān)系R和關(guān)系S具有相同的關(guān)系模式,分別求出關(guān)系R和S的并、交和差,如圖4-21所示。圖4-21關(guān)系的并、交、差運(yùn)算

(4)笛卡兒積(CartesianProduct)。

定義4.7

設(shè)關(guān)系R和關(guān)系S的元數(shù)分別為m和n。定義R和S的笛卡兒積是一個(gè)(m+n)元的元組集合,每個(gè)元組的前m個(gè)分量(屬性值)來(lái)自R的一個(gè)元組,后n個(gè)分量來(lái)自S的一個(gè)元組,記為R?×?S?=?{t|t=(tm,tn)∧tm∈R∧tnS}。

若R有k1個(gè)元組,S有k2個(gè)元組,則R×S有k1×k2個(gè)元組。

需要注意的是,該笛卡兒積是關(guān)系上的,所以也稱為廣義笛卡兒積。

實(shí)例4-22

由學(xué)生關(guān)系S(表4-8)和課程關(guān)系C(表4-9),求出其廣義笛卡兒積(表4-10)。

2.專門的關(guān)系運(yùn)算

(1)選擇(Selection)。

定義4.8

關(guān)系R上的選擇操作是從R中選取符合條件的元組,記為σF(R)={t|t∈R∧F(t)=true},其中F為邏輯表達(dá)式。

實(shí)例4-23

由學(xué)生關(guān)系S,查詢所有女生的信息。

用關(guān)系代數(shù)表達(dá)式表示為

σSEX=‘女’(S)或σ3=‘女’(S)

運(yùn)算結(jié)果如表4-11所示。

(2)投影(Projection)。

定義4.9

關(guān)系R上的投影操作是從R中選取若干屬性列組成的新關(guān)系,記為X(R)={t[X]|t∈R},其中X為R的屬性集。

投影操作是從列的角度進(jìn)行運(yùn)算,即對(duì)關(guān)系消去某些列,并重新安排列的順序。

實(shí)例4-24

由學(xué)生關(guān)系S,查詢所有學(xué)生的姓名、性別信息。

用關(guān)系代數(shù)表達(dá)式表示為

∏SNAME,SEX(S)或∏2,3(S)

運(yùn)算結(jié)果如表4-12所示。

(3)連接(Join)。

連接操作是將兩個(gè)關(guān)系連在一起,形成一個(gè)新的關(guān)系。實(shí)際上,連接操作是廣義笛卡兒積和選擇運(yùn)算的組合。

①?θ連接。

定義4.10

連接是從關(guān)系R和S上的笛卡兒積中選取屬性值滿足某一操作的元組,記為。其中,A、B分別為R、S的屬性;為關(guān)系運(yùn)算符。

②等值連接。

在連接中,當(dāng)為等號(hào)時(shí)稱為等值連接。

③?F連接。定義4.11F連接是從關(guān)系R和S上的笛卡兒積中選取屬性值滿足某一F操作的元組,記為。

顯然,等值連接是θ連接的特例,而θ連接是F連接的特例。

④自然連接。

自然連接是一種特殊的等值連接,它要求兩個(gè)關(guān)系中進(jìn)行比較的分量必須是相同的屬性組,并且要在結(jié)果中消去重復(fù)屬性。自然連接可以記為

(4)除(Division)。

定義4.12

設(shè)關(guān)系R(X,Y)和關(guān)系S(Y,Z),R?÷?S定義為

R(X,Y)÷S(Y,Z)=∏X(R)-∏X((∏X(R)×∏Y(S))-R)

R(X,Y)?÷?S(Y,Z)?=?{tr[X]

|

tr∈R∧∏Y(S)

YX}

其中YX為X在R中的象集,即

YX={t[Y]|t∈R∧X=t[X]}

實(shí)例4-26

由選課關(guān)系SC(表4-13)、課程關(guān)系C(表4-9),求SC?÷?C。

方法一:

按公式R(X,Y)÷S(Y,Z)=∏X((R)-∏X(∏X(R)×∏Y(S))-R)計(jì)算SC(X,Y)?÷?C(Y),即X?=?(SNO),Y?=?(CNO),Z?=?(CNAME,CREDIT)。

3.關(guān)系代數(shù)表達(dá)式

實(shí)例4-27

對(duì)“學(xué)生選課”關(guān)系模型:

S(SNO,SNAME,SEX)、C(CNO,CNAME,CREDIT)、SC(SNO,CNO,SCORE)

用關(guān)系代數(shù)表達(dá)式表示以下查詢,并寫出相應(yīng)的T-SQL語(yǔ)句。

(1)選修了課程編號(hào)為c001的課程的學(xué)生的學(xué)號(hào)。

(2)沒有選修編號(hào)c001的課程的學(xué)生的學(xué)號(hào)。

(3)選修了數(shù)據(jù)庫(kù)應(yīng)用課程的學(xué)生的學(xué)號(hào)。

(4)選修了數(shù)據(jù)庫(kù)應(yīng)用課程的學(xué)生的學(xué)號(hào)、姓名。

(5)選修了所有課程的學(xué)生的學(xué)號(hào)。

(6)至少選修了兩門課程的學(xué)生的學(xué)號(hào)。小結(jié)

本章講述了SQLServer2005表中數(shù)據(jù)的檢索方法,主要包括以下內(nèi)容:

(1)?Transact-SQL運(yùn)算符;

(2)?Transact-SQL函數(shù);

(3)?SELECT語(yǔ)句的基本語(yǔ)法格式;

(4)?SELECT語(yǔ)句的分類匯總、排序、連接查詢、子查詢和新表生成;

(5)?嵌入式Transact-SQL語(yǔ)句;

(6)關(guān)系模型;

(7)關(guān)系代數(shù)。習(xí)題

1.寫出SELECT語(yǔ)句的基本格式。

2.試寫出

溫馨提示

  • 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論