數(shù)據(jù)庫(kù)系統(tǒng)課件4第4章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL(4版)_第1頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)課件4第4章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL(4版)_第2頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)課件4第4章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL(4版)_第3頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)課件4第4章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL(4版)_第4頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)課件4第4章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL(4版)_第5頁(yè)
已閱讀5頁(yè),還剩196頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言(StructuredQueryLanguage,簡(jiǎn)稱(chēng)SQL)是一種介于關(guān)系代數(shù)和元組演算之間的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言。

SQL語(yǔ)言從1974年提出以來(lái),先后被確定為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的美國(guó)國(guó)家標(biāo)準(zhǔn)、國(guó)際標(biāo)準(zhǔn)和中國(guó)國(guó)家標(biāo)準(zhǔn)。

隨著SQL語(yǔ)言的進(jìn)一步發(fā)展和完善,全世界絕大多數(shù)的關(guān)系數(shù)據(jù)庫(kù)都采用了SQL語(yǔ)言,極大地推進(jìn)了數(shù)據(jù)庫(kù)技術(shù)的發(fā)展和廣泛應(yīng)用,也凸顯了學(xué)習(xí)SQL語(yǔ)言的重要性。主要內(nèi)容

4.1SQL的功能與特點(diǎn)

4.2表的基本操作

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

4.4SQL的視圖操作

4.5SQL中帶有子查詢(xún)的數(shù)據(jù)更新

4.6嵌入式SQL與游標(biāo)應(yīng)用第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL

4.1SQL的功能與特點(diǎn)

SQL語(yǔ)言有三大功能:

1、數(shù)據(jù)定義功能

2、數(shù)據(jù)操縱功能

3、數(shù)據(jù)控制功能1.數(shù)據(jù)定義功能

用于定義基本表、定義視圖、定義索引等。

一、SQL的功能2.數(shù)據(jù)操縱功能

用于實(shí)施對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢(xún)和數(shù)據(jù)更新。

數(shù)據(jù)查詢(xún)是指按查詢(xún)條件從數(shù)據(jù)庫(kù)中檢索出數(shù)據(jù),并按輸出要求對(duì)其進(jìn)行排序、分組和統(tǒng)計(jì)等。

數(shù)據(jù)更新包括數(shù)據(jù)的插入、刪除、修改等。一、SQL的功能

3.數(shù)據(jù)控制功能

用于實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)對(duì)象的控制。包括:用戶(hù)授權(quán)、基本表和視圖授權(quán)、事務(wù)控制、數(shù)據(jù)完整性控制和安全性控制等。

一、SQL的功能

SQL語(yǔ)言功能的實(shí)現(xiàn):數(shù)據(jù)定義功能由數(shù)據(jù)庫(kù)定義類(lèi)語(yǔ)句實(shí)現(xiàn);

數(shù)據(jù)查詢(xún)功能由數(shù)據(jù)庫(kù)查詢(xún)類(lèi)語(yǔ)句實(shí)現(xiàn);

數(shù)據(jù)更新功能由數(shù)據(jù)庫(kù)更新(插入、刪除、修改)類(lèi)語(yǔ)句實(shí)現(xiàn);

數(shù)據(jù)控制功能由數(shù)據(jù)庫(kù)控制類(lèi)語(yǔ)句實(shí)現(xiàn)。

一、SQL的功能

1.SQL具有交互式命令和嵌入式2種工作方式

在交互式命令工作方式下,用戶(hù)可以聯(lián)機(jī)在系統(tǒng)提供的查詢(xún)編輯器窗口上,通過(guò)直接鍵入SQL命令(語(yǔ)句)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,系統(tǒng)然后會(huì)把處理結(jié)果顯示給用戶(hù)。二、SQL的特點(diǎn)二、SQL的特點(diǎn)交互式命令格式:

查詢(xún)編輯器窗口

消息窗口

1.SQL具有交互式命令和嵌入式2種工作方式在嵌入式工作方式下,SQL語(yǔ)句可以被嵌入到某種高級(jí)語(yǔ)言(比如,C語(yǔ)言)程序中實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,并利用主語(yǔ)言的強(qiáng)大計(jì)算功能、邏輯判斷功能、屏幕控制及輸出功能等,實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理和輸入輸出控制等。二、SQL的特點(diǎn)嵌入式工作方式(應(yīng)用程序):二、SQL的特點(diǎn)

2.SQL支持?jǐn)?shù)據(jù)庫(kù)的三級(jí)模式結(jié)構(gòu)

視圖1視圖2基本表3基本表2基本表1存儲(chǔ)文件1基本表4存儲(chǔ)文件2SQL外模式模式內(nèi)模式二、SQL的特點(diǎn)##第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL

4.2表的基本操作

1.創(chuàng)建表

語(yǔ)句格式:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

一、表的創(chuàng)建、修改與撤消

1.創(chuàng)建表

語(yǔ)句格式:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

,

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

“<>”表示該項(xiàng)是必選項(xiàng)。一、表的創(chuàng)建、修改與撤消

1.創(chuàng)建表

表的定義語(yǔ)句格式為:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

,

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

“[]”表示該項(xiàng)是可選項(xiàng)。一、表的創(chuàng)建、修改與撤消

1.創(chuàng)建表

表的定義語(yǔ)句格式為:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

SQL語(yǔ)言中的語(yǔ)句的結(jié)束符號(hào)“;”。一、表的創(chuàng)建、修改與撤消一、表的創(chuàng)建、修改與撤消

1.創(chuàng)建表

表的定義語(yǔ)句格式為:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

,

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

表名和列名是以字母開(kāi)頭,由字母、數(shù)字和下劃線(xiàn)“_”組成的字符串,長(zhǎng)度不超過(guò)30個(gè)字符。表名不能與SQL語(yǔ)言中的保留字同名,不能與其它表名或視圖名同名。

1.創(chuàng)建表

表的定義語(yǔ)句格式為:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

,

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

一個(gè)表中至少要有一列,且不能重名。一、表的創(chuàng)建、修改與撤消

1.創(chuàng)建表

表的定義語(yǔ)句格式為:

CREATETABLE<表名>

(<列名1><數(shù)據(jù)類(lèi)型>[<列1的完整性約束>][,

<列名2><數(shù)據(jù)類(lèi)型>[<列2的完整性約束>],

,

<列名n><數(shù)據(jù)類(lèi)型>[<列n的完整性約束>],

[<表的完整性約束>]]);

一、表的創(chuàng)建、修改與撤消列名數(shù)據(jù)類(lèi)型完整性約束字段名類(lèi)型寬度小數(shù)位數(shù)主鍵外鍵NULL其它S#char9YYN相對(duì)于學(xué)生關(guān)系C#char7YYN相對(duì)于課程關(guān)系GRADEint0-100示例:教學(xué)管理數(shù)據(jù)庫(kù)系統(tǒng)中的學(xué)習(xí)關(guān)系SC其中:

●典型的<數(shù)據(jù)類(lèi)型>

(a)CHAR(m):長(zhǎng)度為m的字符(串)型數(shù)據(jù),長(zhǎng)度不夠時(shí)用空白字符補(bǔ)充,不超過(guò)240。(b)VARCHAR(m):長(zhǎng)度小于等于m的字符(串)型數(shù)據(jù),長(zhǎng)度不夠時(shí)不補(bǔ)充其它字符。(c)INT/INTEGER:長(zhǎng)整型數(shù)據(jù)。(d)DATE:日期型數(shù)據(jù),形式為YYYY-MM-DD,分別表示年、月、日。一、表的創(chuàng)建、修改與撤消其中:

●典型的<列的完整性約束>

①NULL:指出該列可以為空值。②NOTNULL:指出該列不能為空值。每一個(gè)表中至少應(yīng)有一個(gè)列的可選項(xiàng)為NOTNULL。③

PRIMARYKEY:指出該列名為表的主鍵。一、表的創(chuàng)建、修改與撤消一、表的創(chuàng)建、修改與撤消例4.1圖1.11所示的大學(xué)教學(xué)管理數(shù)據(jù)庫(kù)中的專(zhuān)業(yè)關(guān)系SS,可用如下的表定義語(yǔ)句定義:

CREATETABLESS

(SCODE#CHAR(5)

PRIMARYKEY,SSNAMEVARCHAR(30)

NOTNULL);其中:

●典型的<列的完整性約束>

④DEFAULT:給所在的列設(shè)置一個(gè)缺省值。

DEFAULT(<缺省值>)

CHECK:指出該列的值只能取CHECK約束條件范圍的值。

CHECK(<值的約束條件>)

一、表的創(chuàng)建、修改與撤消例4.2圖1.11所示的大學(xué)教學(xué)管理數(shù)據(jù)庫(kù)中的學(xué)生關(guān)系表S,可用如下的表定義語(yǔ)句定義:

CREATETABLES

(S#

CHAR(9)

PRIMARYKEY,

SNAMECHAR(16)

NOTNULL,

SSEXCHAR(2)

CHECK(SSEXIN(′男′,′女′)),

SBIRTHINDATE

NOTNULL,

PLACEOFBCHAR(16),

SCODE#CHAR(5)

NOTNULL,

CLASSCHAR(5)

NOTNULL);

利用SQLServer2012的查詢(xún)編輯器,實(shí)現(xiàn)創(chuàng)建例4.2的表S的過(guò)程如下:

一、表的創(chuàng)建、修改與撤消

利用SQLServer2012查詢(xún)編輯器創(chuàng)建表S過(guò)程:

(a)啟動(dòng)SQLServerManagementStudio工具,并連接到當(dāng)前服務(wù)器。單擊工具欄中“新建查詢(xún)(N)”按鈕(也可以在“文件”菜單中選擇“新建”->“使用當(dāng)前連接查詢(xún)”),如圖4.2所示。

利用SQLServer2012查詢(xún)編輯器創(chuàng)建表S過(guò)程:

(b)在“可用數(shù)據(jù)庫(kù)”中選擇當(dāng)前操作的數(shù)據(jù)庫(kù)為“JXGL”數(shù)據(jù)庫(kù),如圖4.3所示。

利用SQLServer2012查詢(xún)編輯器創(chuàng)建表S過(guò)程:

(c)在查詢(xún)編輯器中輸入例4.2的創(chuàng)建表S的SQL語(yǔ)句,然后單擊“!執(zhí)行(X)”按鈕(也可以按下F5鍵執(zhí)行,或者在“查詢(xún)”菜單上單擊“執(zhí)行”選項(xiàng)),在“消息”欄中顯示“命令已成功完成”。其中:

●<表的完整性約束>

表的主鍵約束子句,格式為

PRIMARYKEY(<主鍵列名1>[,<主鍵列名2>,

…,<主鍵列名r>])

一、表的創(chuàng)建、修改與撤消例4.3大學(xué)教學(xué)管理數(shù)據(jù)庫(kù)中的學(xué)習(xí)關(guān)系SC,可用如下的表定義語(yǔ)句定義:

CREATETABLESC

(S#CHAR(9),C#CHAR(7),

GRADESMALLINTDEFAULT(0),PRIMARYKEY(S#,C#));一、表的創(chuàng)建、修改與撤消

<表的完整性約束>

②表的外鍵約束

格式為:

FOREIGNKEY(<列名1>)REFERENCE<表名>(<列名2>)

本子句定義了一個(gè)列名為“<列名1>”的外鍵,它與表“<表名>”中的“<列名2>”相對(duì)應(yīng)。

顯然,“<列名2>”在表“<表名>”中是主鍵。一、表的創(chuàng)建、修改與撤消例4.4大學(xué)教學(xué)管理數(shù)據(jù)庫(kù)中的學(xué)習(xí)關(guān)系SC,可重新用如下的表定義語(yǔ)句定義如下:

CREATETABLESC

(S#CHAR(9),C#CHAR(7),

GRADESMALLINTDEFAULT(0),PRIMARYKEY(S#,C#),

FOREIGNKEY(C#)REFERENCESC(C#));

一、表的創(chuàng)建、修改與撤消

<表的完整性約束>

③表檢驗(yàn)CHECK約束

語(yǔ)句格式:

CHECK(<值的約束條件>)

指出該表中某列的值只能取CHECK約束條件范圍的值。與列檢驗(yàn)約束CHECK所不同的是,表檢驗(yàn)約束CHECK子句是一個(gè)獨(dú)立的子句而不是子句中的一部分。表檢驗(yàn)約束CHECK子句中的<值的約束條件>不僅可以是一個(gè)條件表達(dá)式,而且還可以是一個(gè)包含SELECT語(yǔ)句。一、表的創(chuàng)建、修改與撤消例4.5大學(xué)教學(xué)管理數(shù)據(jù)庫(kù)中的學(xué)習(xí)關(guān)系SC,還可用如下的表定義語(yǔ)句定義如下:CREATETABLESC

(S#CHAR(9),C#CHAR(7),

GRADESMALLINTDEFAULT(0),PRIMARYKEY(S#,C#),

FOREIGNKEY(C#)REFERENCESC(C#),CHECK(GRADEBETWEEN0AND100));一、表的創(chuàng)建、修改與撤消2.表的修改

(1)改變表明

語(yǔ)句格式:

SP_RENAME<原表名>,<新表名>例4.6將SS改為SS1。SP_RENAMESS,SS1;一、表的創(chuàng)建、修改與撤消2.表的修改

(2)增加列

在表的最后一列后面增加新的一列。

語(yǔ)句格式:

ALTERTABLE<表名>ADD<增加的列名><數(shù)據(jù)類(lèi)型>;注意:不允許將一個(gè)列插入到原表的中間。一、表的創(chuàng)建、修改與撤消例4.7給專(zhuān)業(yè)表SS增加一個(gè)新屬性NOUSE_COLUMN,設(shè)其數(shù)據(jù)類(lèi)型為NUMERIC(8,1)。

語(yǔ)句應(yīng)為:

ALTERTABLESSADDNOUSE_COLUMNNUMERIC(8,1);一、表的創(chuàng)建、修改與撤消2.表的修改

(8)刪除列

語(yǔ)句格式:

ALTERTABLE<表名>DROP<刪除的列名>[CASCADE|RESTRICT];其中,可選項(xiàng)“[CASCADE|RESTRICT]”是刪除方式。

當(dāng)選擇CASCADE時(shí),表示在刪除名為“<表名>”的表中的列“<刪除的列名>”時(shí),所有引用到該列的視圖或有關(guān)約束也一起被刪除。當(dāng)選擇RESTRICT時(shí),表示當(dāng)沒(méi)有視圖或有關(guān)約束引用列“<刪除的列名>”時(shí),該列才能被刪除,否則拒絕該刪除操作。一、表的創(chuàng)建、修改與撤消例4.8刪除專(zhuān)業(yè)表SS中增加的屬性NOUSE_COLUMN的兩種刪除語(yǔ)句形式分別為:

ALTERTABLESSDROPNOUSE_COLUMNCASCADE;

ALTERTABLESSDROPNOUSE_COLUMNRESTRICT;

一、表的創(chuàng)建、修改與撤消2.表的修改

(4)修改列的定義

語(yǔ)句格式:

ALTERTABLE<表名>MODIFY<列名><新的數(shù)據(jù)類(lèi)型及其長(zhǎng)度>;

注意:對(duì)列定義的修改只適用于修改列的類(lèi)型和長(zhǎng)度,列名不能修改。當(dāng)表中已有數(shù)據(jù)時(shí),只能增加列的長(zhǎng)度,不能縮短列的長(zhǎng)度。一、表的創(chuàng)建、修改與撤消例4.9將專(zhuān)業(yè)表SS中的專(zhuān)業(yè)名稱(chēng)SSNAME(30)修改為SSNAME(40)(即長(zhǎng)度增加10)的列修改語(yǔ)句:

ALTERTABLESSMODIFYSSNAMEVARCHAR(40);

一、表的創(chuàng)建、修改與撤消3.表的撤銷(xiāo)

將不再需要的表或定義有錯(cuò)誤的表刪除掉。

語(yǔ)句格式:

DROPTABLE<表名>[CASCADE|RESTRICT];其中,

CASCADE表示在撤消表“<表名>”時(shí),所有引用這個(gè)表的視圖或有關(guān)約束也一起被撤消;

RESTRICT表示在沒(méi)有視圖或有關(guān)約束引用該表的屬性列時(shí),表“<表名>”才能被撤消,否則拒絕該撤消操作。

一、表的創(chuàng)建、修改與撤消

1.數(shù)據(jù)的插入

插入語(yǔ)句格式為:

INSERTINTO<表名>[(<列名表>)]

VALUES(<值表>);

功能:

向表中插入一行數(shù)據(jù)(一個(gè)數(shù)據(jù)記錄)。二、表中數(shù)據(jù)的插入、修改與刪除INSERTINTO<表名>[(<列名表>)]

VALUES(<值表>);其中:

(1)<列名表>格式為:

<列名1>[,<列名2>,…

…,<列名m>]。

(2)<值表>的格式為:

<常量1>[,<常量2>,…

…,<常量m>]

用于指出要插入列的具體值。

二、表中數(shù)據(jù)的插入、修改與刪除例4.10寫(xiě)出給學(xué)習(xí)關(guān)系SC中插入王麗麗同學(xué)(學(xué)號(hào)為200401003)學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)課(課程號(hào)為C403001)的成績(jī)(89分)的插入語(yǔ)句。

INSERTINTOSC

(S#,C#,GRADE)

VALUES(′201401003′,′C403001′,89);

或:

INSERTINTOSC

VALUES(′201401003′,′C403001′,89);二、表中數(shù)據(jù)的插入、修改與刪除例4.11如果在創(chuàng)建學(xué)習(xí)關(guān)系SC時(shí)已經(jīng)把分?jǐn)?shù)屬性GRADE的值缺省定義成0,那么在學(xué)生的考試成績(jī)出來(lái)之前就可輸入學(xué)生的學(xué)號(hào)S#和課程號(hào)C#信息,等考試成績(jī)出來(lái)后再通過(guò)修改表內(nèi)容來(lái)輸入成績(jī)。

INSERTINTOSC

(S#,C#)

VALUES(′201401003′,′C403001′);

二、表中數(shù)據(jù)的插入、修改與刪除2.數(shù)據(jù)的修改

語(yǔ)句格式為:

UPDATE<表名>SET<列名1>=<表達(dá)式1>[,<列名2>=<表達(dá)式2>,

…,<列名n>=<表達(dá)式n>][WHERE<條件>]其中,“<列名i>=<表達(dá)式i>”指出將列“<列名i>”的值修改成<表達(dá)式i>??蛇x項(xiàng)“[WHERE<條件>]”中的<條件>指定修改有關(guān)列的數(shù)據(jù)時(shí)所應(yīng)滿(mǎn)足的條件。當(dāng)不選擇該選項(xiàng)時(shí),表示修改表中全部元組中相應(yīng)列的數(shù)據(jù)。二、表中數(shù)據(jù)的插入、修改與刪除例4.12寫(xiě)出將學(xué)生關(guān)系S中的學(xué)生名字“王麗麗”(學(xué)號(hào)為201401003)改為“王黎麗”的數(shù)據(jù)修改語(yǔ)句。

UPDATESSETSNAME=′王黎麗′

WHERES#=′201401003′;

二、表中數(shù)據(jù)的插入、修改與刪除例4.13寫(xiě)出將所有女同學(xué)的專(zhuān)業(yè)改為S0404的數(shù)據(jù)修改語(yǔ)句。

UPDATESSETSCODE#=′S0404′

WHERESSEX=′女′;

二、表中數(shù)據(jù)的插入、修改與刪除

3.數(shù)據(jù)的刪除

語(yǔ)句格式:

DELETEFROM<表名>[WHERE<條件>]其中,可選項(xiàng)“[WHERE<條件>]”中的<條件>指定所刪元組應(yīng)滿(mǎn)足的條件。當(dāng)不選該可選項(xiàng)時(shí),表示刪除表中全部數(shù)據(jù)。二、表中數(shù)據(jù)的插入、修改與刪除例4.14從學(xué)生關(guān)系S中刪除學(xué)號(hào)為201403001的學(xué)生的信息。

DELETEFROMSWHERES#=′201403001′;例4.15

刪除專(zhuān)業(yè)關(guān)系中的全部信息。

DELETEFROMSS;

##二、表中數(shù)據(jù)的插入、修改與刪除第4章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL

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

投影查詢(xún)的語(yǔ)句格式為:

SELECT<列名表>FROM<表名表>其中:(1)<列名表>的格式為“<列名1>[,<列名2>,…,<列名n>]”,用于指出查詢(xún)結(jié)果記錄中的各個(gè)列及其排列順序。(2)若設(shè)<列名表>為A1,A2,…,An;<表名>為

,則上述查詢(xún)語(yǔ)句的意義可用關(guān)系代數(shù)表達(dá)式表示為

。一、投影查詢(xún)例4.16

查詢(xún)教學(xué)管理數(shù)據(jù)庫(kù)中全部學(xué)生的基本信息。

SELECT*FROMS;

下面,介紹利用SQLServer2012的“查詢(xún)編輯器”,實(shí)現(xiàn)例4.16查詢(xún)的過(guò)程。

一、投影查詢(xún)

利用“查詢(xún)編輯器”實(shí)現(xiàn)例4.16的查詢(xún)的步驟:

(1)打開(kāi)SQLServer2012的“查詢(xún)編輯器”,選擇“JXGL”數(shù)據(jù)庫(kù),鍵入查詢(xún)語(yǔ)句:

利用“查詢(xún)編輯器”實(shí)現(xiàn)例4.16的查詢(xún)的步驟:

(2)單擊“!執(zhí)行(X)”按鈕,{對(duì)于圖1.8中給出的關(guān)系的當(dāng)前值來(lái)說(shuō),}得到如下圖的查詢(xún)結(jié)果。

例4.17查詢(xún)教學(xué)管理數(shù)據(jù)庫(kù)中全部教師的教職工編號(hào)、姓名、職稱(chēng)和所屬教研室。

SELECTT#,TNAME,TITLEOF,TRSECTIONFROMT;一、投影查詢(xún)例4.18查詢(xún)課程關(guān)系

C

中的記錄數(shù),也即開(kāi)課的總門(mén)數(shù)。

課程關(guān)系模式:C(C#,CNAME,CLASSH)

SELECTCOUNT(*)FROMC;

一、投影查詢(xún)

聚合函數(shù)例4.18查詢(xún)課程關(guān)系C中的記錄數(shù),也即開(kāi)課的總門(mén)數(shù)。一、投影查詢(xún)

SELECTCOUNT(*)SELECTCOUNT(*)AS記錄數(shù)

FROMC;FROMC;

給列名起別名的語(yǔ)句格式為:

<函數(shù)或原列名>AS<函數(shù)或該列的別名>}也即:

<函數(shù)>

AS

<該函數(shù)的別名>

<原列名>AS

<該列的別名>

一、投影查詢(xún)

聚合函數(shù)…

…...

SQL語(yǔ)言中常用的聚合函數(shù)主要有:

(1)COUNT(*)計(jì)算元組的個(gè)數(shù)

(2)COUNT(列名)計(jì)算列名所在列的值的個(gè)數(shù)

(3)COUNTDISTINCT(列名)計(jì)算列名所在列中不同值的個(gè)數(shù)

(4)SUM(列名)計(jì)算該列名所在數(shù)據(jù)列的值的總和

(5)AVG(列名)計(jì)算該列名所在數(shù)據(jù)列的值的平均值

(6)MIN(列名)求該列名所在(字符、日期、屬性)列的最小值(7)MAX(列名)求該列名所在(字符、日期、屬性)列的最大值一、投影查詢(xún)例4.19查詢(xún)所有學(xué)生所學(xué)課程的最高分?jǐn)?shù)、最低分?jǐn)?shù)和平均分?jǐn)?shù)。

SELECTMAX(GRADE)AS最高分?jǐn)?shù),MIN(GRADE)AS最低分?jǐn)?shù),AVG(GRADE)AS平均分?jǐn)?shù)

FROMSC;

學(xué)習(xí)關(guān)系模式:SC(S#,C#,GRADE)

一、投影查詢(xún)

選擇查詢(xún)的語(yǔ)句格式:

SELECT<列名表>FROM<表名表>WHERE<條件>其中:(1)當(dāng)WHERE子句僅由一個(gè)關(guān)系表達(dá)式組成時(shí),稱(chēng)為單條件選擇查詢(xún);當(dāng)WHERE子句由多個(gè)關(guān)系表達(dá)式通過(guò)邏輯運(yùn)算符連接而成時(shí),稱(chēng)為多條件選擇查詢(xún)。(2)若設(shè)F為條件表達(dá)式,則上述查詢(xún)語(yǔ)句的意義為。二、選擇查詢(xún)1.單條件查詢(xún)

例4.20寫(xiě)出查詢(xún)所有學(xué)習(xí)了計(jì)算機(jī)網(wǎng)絡(luò)課(課程號(hào)為

C403001)的學(xué)生的學(xué)號(hào)和成績(jī)的查詢(xún)語(yǔ)句。

學(xué)習(xí)關(guān)系模式:SC(S#,C#,GRADE)

SELECTS#,GRADEFROMSCWHEREC#=′C403001′;

條件表達(dá)式中的關(guān)系比較符二、選擇查詢(xún)

表4.3條件表達(dá)式中的關(guān)系比較符運(yùn)算符含義=!=或<>>>=<<=ISNULLISNOTNULL等于不等于大于大于等于小于小于等于是空值不是空值二、選擇查詢(xún)

2.多條件查詢(xún)例4.21查詢(xún)選修了計(jì)算機(jī)網(wǎng)絡(luò)課(課程號(hào)為C403001)或通信原理課(課程號(hào)為C403002)的學(xué)生的學(xué)號(hào)。

SELECTS#FROMSCWHEREC#=′C403001′ORC#=′C403002′;

條件表達(dá)式中的邏輯運(yùn)算符二、選擇查詢(xún)

表4.4邏輯運(yùn)算符

運(yùn)算符含義NOTANDOR邏輯非邏輯與邏輯或二、選擇查詢(xún)例4.22查詢(xún)年齡在21歲至28歲之間學(xué)生的基本信息。

SELECT*FROMSWHEREYEAR(GETDATE())-YEAR(SBIRTHIN)BETWEEN21AND28;

二、選擇查詢(xún)year()為取時(shí)間的年份函數(shù)

象上例中這一類(lèi):把某數(shù)值型列的值限定在某個(gè)數(shù)值區(qū)間的比較查詢(xún)條件(<、<=、>、>=),均可以用比較運(yùn)算符“BETWEEN…AND”來(lái)表示。

格式為:

<數(shù)值型列名>BETWEEN<數(shù)值區(qū)間下限值>

AND<數(shù)值區(qū)間上限值>二、選擇查詢(xún)

在SQL語(yǔ)言中,把元組按某個(gè)或某些列上相同的值分組,然后再對(duì)各組進(jìn)行相應(yīng)操作的查詢(xún)方式稱(chēng)為分組查詢(xún)。

語(yǔ)句格式:

SELECT<列名表>FROM<表名表>[WHERE<條件>]

[GROUPBY<列名表>[HAVING<分組條件>]];三、分組查詢(xún)

分組查詢(xún)語(yǔ)句:

SELECT<列名表>FROM<表名表>[WHERE<條件>]

[GROUPBY<列名表>[HAVING<分組條件>]];

(1)GROUPBY子句

GROUPBY子句用來(lái)將列的值分成若干組,從而控制查詢(xún)的結(jié)果排序。

三、分組查詢(xún)

例4.23查詢(xún)各個(gè)同學(xué)所學(xué)課程的平均分?jǐn)?shù)。

SELECTS#,AVG(GRADE)AS平均分?jǐn)?shù)

FROMSCGROUPBYS#;

學(xué)習(xí)關(guān)系模式:SC(S#,C#,GRADE)

三、分組查詢(xún)例4.24查詢(xún)每個(gè)專(zhuān)業(yè)男、女生的人數(shù)。

SELECTSCODE#AS專(zhuān)業(yè)代碼,SSEXAS性別,

COUNT(*)AS人數(shù)

FROMSGROUPBYSSEX,SCODE#;

學(xué)生關(guān)系模式:S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)三、分組查詢(xún)

(2)HAVING子句

在數(shù)據(jù)查詢(xún)中,有時(shí)只希望選擇滿(mǎn)足一定條件的分組。一般是利用GROUPBY子句進(jìn)行分組,利用HAVING子句判斷分組應(yīng)滿(mǎn)足的條件。

例4.25查詢(xún)學(xué)生總數(shù)超過(guò)

300

人的專(zhuān)業(yè)及其具體的總?cè)藬?shù)。

SELECTSCODE#,COUNT(*)FROMSGROUPBYSCODE#HAVINGCOUNT(*)>300;

三、分組查詢(xún)

通常,SELECT的查詢(xún)結(jié)果是按元組在數(shù)據(jù)庫(kù)中的存儲(chǔ)順序給出的。有時(shí)用戶(hù)希望按照某種約定的順序給出查詢(xún)結(jié)果,ORDERBY子句用于實(shí)現(xiàn)查詢(xún)結(jié)果的排序顯示。

語(yǔ)句格式為:

SELECT<列名表>FROM<表名表>[WHERE<條件>]

ORDERBY<列名>[ASC/DESC][,<列名>[ASC/DESC]…];

四、結(jié)果的排序查詢(xún)例4.26按學(xué)號(hào)遞增的順序(查詢(xún))顯示學(xué)生的基本信息。

SELECT*FROMSORDERBYS#ASC;

四、結(jié)果的排序查詢(xún)例4.27按學(xué)號(hào)遞增、課程成績(jī)遞減的順序(查詢(xún))顯示學(xué)生的課程成績(jī)。

SELECTS#,C#,GRADEFROMSCORDERBYS#ASC,GRADEDESC;

四、結(jié)果的排序查詢(xún)

在SQL語(yǔ)句中,兩個(gè)字符串的部分字符的相等比較是在WHERE子句的條件表達(dá)式中實(shí)現(xiàn)的。

進(jìn)行字符串匹配的條件表達(dá)式格式為:<列名>LIKE‘[字符串1]通配符

[字符串2]'通配符:(1)下劃線(xiàn)_。在字符串比較時(shí),“_”表示其對(duì)應(yīng)位置的那個(gè)字符可以任意。

比如:

SNAMELIKE‘李__平'五、模糊查詢(xún)(字符串匹配)

兩個(gè)字符表示一個(gè)漢字的位置

在SQL語(yǔ)句中,兩個(gè)字符串的部分字符的相等比較是在WHERE子句的條件表達(dá)式中實(shí)現(xiàn)的。

條件表達(dá)式格式為:

<列名>LIKE‘[字符串1]通配符

[字符串2]'通配符:(2)百分號(hào)%。在字符串比較時(shí),“%”表示從其對(duì)應(yīng)位置的那個(gè)字符開(kāi)始,一個(gè)長(zhǎng)度大于等于零的子字符串可以任意。

五、模糊查詢(xún)(字符串匹配)例4.28查詢(xún)學(xué)生關(guān)系S

中姓李的學(xué)生的學(xué)號(hào)和姓名。

SELECTS#,SNAMEFROMSWHERESNAMELIKE′李%′;五、模糊查詢(xún)(字符串匹配)匯總可有,一個(gè)比較完整的SELECT查詢(xún)語(yǔ)句

SELECT<列名或列表達(dá)式序列>FROM<表名表>[WHERE<條件>]

[GROUPBY<列名表>[HAVING<分組條件>]]

[ORDERBY<列名>[ASC/DESC]

[,<列名>[ASC/DESC]]];五、模糊查詢(xún)(字符串匹配)1.日期和時(shí)間型函數(shù)

日期是SQL語(yǔ)言中的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型(DATE)。

六、SQL語(yǔ)言中的常用函數(shù)

函數(shù)

功能dateadd(datepart,n,date)

datediff(datepart,startdate,enddate)

datename(datepart,date)datepart(datepart,date)

給指定日期date按日期組成部分datepart加上一個(gè)時(shí)間間隔n后的新時(shí)間值

按日期組成部分datepart返回enddate減去startdate的值

返回指定日期date的日期組成部分datepart的字符串

返回指定日期date的日期組成部分datepart的整數(shù)

表4.6常用的日期函數(shù)

六、SQL語(yǔ)言中的常用函數(shù)

函數(shù)

功能day(date)

getdate()

getutcdate()

month(date)year(date)

返回一個(gè)整數(shù),表示指定日期date的“天”部分

返回當(dāng)前系統(tǒng)日期和時(shí)間

返回表示當(dāng)前的UTC時(shí)間(通用協(xié)調(diào)時(shí)間或格林尼治標(biāo)準(zhǔn)時(shí)間)值

返回一個(gè)整數(shù),表示指定日期date的“月”部分返回一個(gè)整數(shù),表示指定日期date的“年”部分表5.6常用的日期函數(shù)

—續(xù)

datepart的取值可以有:year,quarter,month,dayofyear,day,week,weekday,hour,minute,second,millisecond。

六、SQL語(yǔ)言中的常用函數(shù)例4.29查詢(xún)出生日期在1996年1月1日到1996年12月31日之間的所有學(xué)生的學(xué)號(hào)、姓名和出生日期,并按日期的遞增順序排列。

SELECTS#,SNAME,SBIRTHINFROMSWHERESBIRTHINBETWEEN′1996-1-1′AND′1996-12-31′

ORDERBYSBIRTHIN;

六、SQL語(yǔ)言中的常用函數(shù)例4.30查詢(xún)所有學(xué)生當(dāng)前的年齡,并按年齡遞增順序排列。六、SQL語(yǔ)言中的常用函數(shù)SELECTS#,

SNAME,year(getdate())-year(SBIRTHIN)ASAGEFROMSORDERBYAGE;2.字符串函數(shù)表4.7常用的字符串函數(shù)

函數(shù)功能ascii(string)返回字符串string中最左側(cè)字符的ASCII代碼值left(string,n)返回字符串string中從左邊開(kāi)始n個(gè)的字符len(string)返回指定字符串string的字符(而不是字節(jié))數(shù),其中不包含尾隨空格lower(string)將字符串string中的大寫(xiě)字符轉(zhuǎn)換為小寫(xiě)字符ltrim(string)返回刪除了前導(dǎo)空格之后的字符表達(dá)式replace(string1,string2,string3)用第3個(gè)字符串string3替換第1個(gè)字符串string1中出現(xiàn)的所有第2個(gè)字符串string2的匹配項(xiàng)六、SQL語(yǔ)言中的常用函數(shù)2.字符串函數(shù)表4.7常用的字符串函數(shù)——續(xù)

函數(shù)功能replicate(string,n)以指定的次數(shù)n重復(fù)字符表達(dá)式stringright(string,n)返回字符串string中從右邊開(kāi)始n個(gè)的字符space(n)返回由n個(gè)空格組成的字符串str(num[,m,n])將數(shù)值數(shù)據(jù)num按總長(zhǎng)度為m,小數(shù)位數(shù)為n轉(zhuǎn)換為字符串?dāng)?shù)據(jù),參數(shù)m和n可省略substring(string,m,n)返回字符串string的第m個(gè)字符開(kāi)始取出的n個(gè)字符upper(string)將字符串string中的小寫(xiě)字符轉(zhuǎn)換為大寫(xiě)字符六、SQL語(yǔ)言中的常用函數(shù)例4.31:統(tǒng)計(jì)各教研室開(kāi)設(shè)課程的門(mén)數(shù)。

分析課程關(guān)系模式及其當(dāng)前值可知,各門(mén)課程號(hào)的第1位由字符C開(kāi)頭,第2至第4位為教研室編號(hào),第5至第7位是該教研室所開(kāi)課程的序號(hào)。所以?xún)H由課程關(guān)系就可以統(tǒng)計(jì)出各教研室所開(kāi)設(shè)課程的門(mén)數(shù),其查詢(xún)語(yǔ)句如下:

SELECTsubstring(c#,2,3)AS教研室,count(c#)AS開(kāi)課門(mén)數(shù)

FROMCGROUPBYsubstring(c#,2,3);

課程關(guān)系C課程號(hào) 課程名 學(xué)時(shí) C401001 數(shù)據(jù)結(jié)構(gòu) 70 C401002 操作系統(tǒng) 60 C402001 計(jì)算機(jī)原理 60

C402002 通信原理 60 C403001 計(jì)算機(jī)網(wǎng)絡(luò) …3.數(shù)學(xué)函數(shù)表4.8常用的數(shù)學(xué)函數(shù)

函數(shù)功能abs(n)返回?cái)?shù)n的絕對(duì)值ceiling(n)返回大于或等于所給數(shù)值n的最大整數(shù)floor(n)返回小于或等于所給數(shù)值n的最大整數(shù)power(m,n)返回?cái)?shù)值m的n次冪的值round(n,m)對(duì)n的小數(shù)部分進(jìn)行四舍五入,使其具備m的精度sign(n)根據(jù)參數(shù)n是正還是負(fù),返回正號(hào)(+1)、負(fù)號(hào)(-1)和0rand()返回從0到1之間的隨機(jī)float值,sqrt(n)返回指定數(shù)值n的平方根六、SQL語(yǔ)言中的常用函數(shù)3.數(shù)學(xué)函數(shù)表4.8常用的數(shù)學(xué)函數(shù)——續(xù)

函數(shù)功能square(n)返回指定數(shù)值n的平方exp(n)返回指定的float類(lèi)型的數(shù)值n的指數(shù)值pi()返回PI的常量值sin(n)以近似數(shù)值(float型)返回指定角度n(以弧度為單位)的三角正弦值cos(n)返回以弧度表示的指定角度n的三角余弦值tan(n)返回以弧度表示的指定角度n的正切值cot(n)返回以弧度表示的指定角度n的三角余切值六、SQL語(yǔ)言中的常用函數(shù)

SQL語(yǔ)言允許在同一查詢(xún)語(yǔ)句中從二個(gè)或多個(gè)表中查詢(xún)數(shù)據(jù),一般稱(chēng)為二元查詢(xún)或多元查詢(xún)。語(yǔ)句格式為:

SELECT<列名表>FROM<表名表>WHERE<基于多表的連接條件>其中:

(1)<表名表>的格式為:

“<表名1>[,<表名2>,…,<表名m>]”。

(2)若設(shè)<列名表>為A1,A2,…,An;<表名表>為R1,R2,…,Rm,則上述查詢(xún)語(yǔ)句的意義可表示成如下的關(guān)系代數(shù)表達(dá)式:

。七、表的連結(jié)查詢(xún)SELECTS.S#,SNAMEFROMS,SCWHERES.S#=SC.S#ANDC#=′C401001′;

例4.32查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。七、表的連結(jié)查詢(xún)S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)SC(S#,C#,DRADE)例4.33查詢(xún)選修了“通信原理”課程的學(xué)生的學(xué)號(hào)與姓名。

SELECTS.S#,SNAMEFROMS,SC,CWHERES.S#=SC.S#ANDSC.C#=C.C#

ANDCNAME=′通信原理′;

七、表的連結(jié)查詢(xún)S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)SC(S#,C#,DRADE)C(C#,CNAME,CLASSH)上節(jié)課教學(xué)內(nèi)容回顧上節(jié)課教學(xué)內(nèi)容回顧

1、投影查詢(xún)

SELECT<列名表>FROM<表名表(單個(gè)表)>對(duì)應(yīng)于:上節(jié)課教學(xué)內(nèi)容回顧2、選擇查詢(xún)

SELECT<列名表>FROM<表名(單個(gè)表)>WHERE<條件表>對(duì)應(yīng)于:

上節(jié)課教學(xué)內(nèi)容回顧

3、表的連結(jié)查詢(xún)SELECT<列名表>FROM<表名表(多個(gè)表)>WHERE<基于多表的連接條件>對(duì)應(yīng)于:

上節(jié)課教學(xué)內(nèi)容回顧

4、一個(gè)完整的查詢(xún)語(yǔ)句格式

SELECT

<列名或列表達(dá)式序列>

FROM<表名表>

[WHERE<條件>]

[GROUPBY<列名表>

[HAVING<分組條件>]]

[ORDERBY<列名>[ASC/DESC]

[,<列名>[ASC/DESC]]];

##

在SQL語(yǔ)言中,如果在一個(gè)SELECT語(yǔ)句的WHERE子句中嵌入了另一個(gè)SELECT語(yǔ)句,則稱(chēng)為嵌套查詢(xún)。

WHERE子句中的SELECT語(yǔ)句稱(chēng)為子查詢(xún)。八、嵌套查詢(xún)例4.34查詢(xún)張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班的女同學(xué)的基本信息。八、嵌套查詢(xún)例4.34查詢(xún)張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班的女同學(xué)的基本信息。SELECT*FROMSWHERECLASS=′張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班′

ANDSSEX=′女′

八、嵌套查詢(xún)S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)例4.34查詢(xún)張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班的女同學(xué)的基本信息。

′張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班′

SELECTCLASSFROMSWHERES#=′201401001′

八、嵌套查詢(xún)例4.34查詢(xún)張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班的女同學(xué)的基本信息。SELECT*FROMSWHERECLASS=(SELECTCLASSFROMSWHERES#=′201401001′)ANDSSEX=′女′;八、嵌套查詢(xún)CLASS=′張華同學(xué)(學(xué)號(hào)為201401001)的那個(gè)班′ANDSSEX=′女′

查詢(xún)中的表更名:

在嵌套查詢(xún)中,當(dāng)同一個(gè)關(guān)系既出現(xiàn)在父查詢(xún)中,又出現(xiàn)在子查詢(xún)中,且子查詢(xún)的條件涉及到父查詢(xún)的屬性時(shí),為了避免描述上的混淆,一般需要對(duì)該關(guān)系進(jìn)行更名描述。

更名描述的格式為:

舊表名AS新表名

八、嵌套查詢(xún)例4.35檢索考試成績(jī)比該課程平均成績(jī)低的學(xué)生的成績(jī)。八、嵌套查詢(xún)例4.35檢索考試成績(jī)比該課程平均成績(jī)低的學(xué)生的成績(jī)。

SELECTS#,C#,GRADEFROMSC

WHEREGRADE<“該課程平均成績(jī)”八、嵌套查詢(xún)SC(S#,C#,DRADE)例4.35檢索考試成績(jī)比該課程平均成績(jī)低的學(xué)生的成績(jī)。

SELECTS#,C#,GRADEFROMSC

WHEREGRADE<(SELECTAVG(GRADE)

FROMSC

ASXWHEREX.C#=SC.C#);

SC.C#=SC.C#?八、嵌套查詢(xún)“該課程平均成績(jī)”表4.9常用的謂詞操作符

操作符

說(shuō)明betweenAandBnotbetweenAandBlikeinnotinanysomeallexistsnotexists某列的數(shù)值區(qū)間是[A,B]某列的數(shù)值區(qū)間在[A,B]外兩個(gè)字符串的部分字符相等,其余可以任意某列的某個(gè)值屬于集合成員中的一個(gè)成員某列的值不屬于集合成員中的任何一個(gè)成員某列的值滿(mǎn)足一個(gè)條件即可滿(mǎn)足集合中的某些值某列的值滿(mǎn)足子查詢(xún)中所有值的記錄總存在一個(gè)值滿(mǎn)足條件不存在任何值滿(mǎn)足條件

九、謂詞演算查詢(xún)1.IN和NOTIN謂詞

條件表達(dá)式格式為:

<列值>IN<數(shù)據(jù)集合><列值>NOTIN<數(shù)據(jù)集合>

前者的含義:如果列值(數(shù)據(jù)項(xiàng))是該數(shù)據(jù)集合中的成員,那么邏輯值為true,否則為false。

后者的含義:如果列值(數(shù)據(jù)項(xiàng))不是該數(shù)據(jù)集合中的成員,那么邏輯值為true,否則為false。九、謂詞演算查詢(xún)例4.36查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

九、謂詞演算查詢(xún)例4.36查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

SELECTS#,SNAMEFROMSWHERES#IN“學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(C#為C401001)的學(xué)生的學(xué)號(hào)集合”九、謂詞演算查詢(xún)S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)例4.36查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

“學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(C#為C401001)的學(xué)生的學(xué)號(hào)集合”

SELECTS#FROMSCWHEREC#=′C401001′九、謂詞演算查詢(xún)SC(S#,C#,DRADE)例4.36查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

SELECTS#,SNAMEFROMSWHERES#IN(SELECTS#FROMSCWHEREC#=′C401001′);

九、謂詞演算查詢(xún)例4.37利用嵌套查詢(xún)實(shí)現(xiàn)例5.33,也即查詢(xún)選修了“通信原理”課程的學(xué)生的學(xué)號(hào)與姓名。九、謂詞演算查詢(xún)例4.37利用嵌套查詢(xún)實(shí)現(xiàn)例5.33,也即查詢(xún)選修了“通信原理”課程的學(xué)生的學(xué)號(hào)與姓名。思路1:找出選修了“通信原理”課的課程號(hào)

SELECTC#FROMCWHERECNAME=′通信原理′;九、謂詞演算查詢(xún)C(C#,CNAME,CLASSH)例4.37利用嵌套查詢(xún)實(shí)現(xiàn)例5.33,也即查詢(xún)選修了“通信原理”課程的學(xué)生的學(xué)號(hào)與姓名。思路1:找出選修了“通信原理”課的課程號(hào)

SELECTC#FROMCWHERECNAME=′通信原理′;九、謂詞演算查詢(xún)思路2:找出選修了該課程(課程號(hào)為通信原理的課程號(hào))的學(xué)生的學(xué)號(hào)

SELECTS#

FROMSCWHEREC#IN“通信原理課程的課程號(hào)”;例4.37利用嵌套查詢(xún)實(shí)現(xiàn)例5.33,也即查詢(xún)選修了“通信原理”課程的學(xué)生的學(xué)號(hào)與姓名。SELECTS#,SNAMEFROMSWHERES#IN(SELECTS#

FROMSCWHEREC#IN(SELECTC#FROMCWHERECNAME=′通信原理′));思路:選修了“通信原理”課的課程號(hào);選修了該課程(號(hào))的學(xué)生的學(xué)號(hào)九、謂詞演算查詢(xún)4.謂詞演算查詢(xún)

(2)ANY和SOME謂詞

條件表達(dá)式格式為:

<列值>θANY<數(shù)據(jù)集合><數(shù)據(jù)項(xiàng)>θSOME<數(shù)據(jù)集合>

其含義是:比較運(yùn)算符θ(<、<=、>、>=、=、!=

)左邊的列值(數(shù)據(jù)項(xiàng))與右邊數(shù)據(jù)集合中的某個(gè)或某些元素是否滿(mǎn)足θ運(yùn)算,滿(mǎn)足則為真,不滿(mǎn)足則為假。

在SQL語(yǔ)言中,ANY和SOME具有相同的含義,早期的版本用的是ANY,新的版本都改為SOME,有些商用數(shù)據(jù)庫(kù)版本的SQL語(yǔ)言中,同時(shí)保存了ANY和SOME兩個(gè)謂詞。

九、謂詞演算查詢(xún)例4.38查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

SELECTS#,SNAMEFROMS

WHERES#=ANY(SELECTS#

FROMSCWHEREC#=′C401001′);其中,“=ANY”的作用相當(dāng)于IN。九、謂詞演算查詢(xún)4.謂詞演算查詢(xún)

(3)ALL謂詞

條件表達(dá)式格式為:

<列值>θALL<集合>

含義是:比較運(yùn)算符θ左邊的列值(數(shù)據(jù)項(xiàng))與右邊集合中的所有元素是否滿(mǎn)足θ運(yùn)算,若滿(mǎn)足邏輯值為true,若不滿(mǎn)足邏輯值為false。

九、謂詞演算查詢(xún)例4.39查詢(xún)考試成績(jī)大于網(wǎng)絡(luò)工程專(zhuān)業(yè)(專(zhuān)業(yè)代碼為S0403)所有學(xué)生的課程成績(jī)的學(xué)生的基本信息。九、謂詞演算查詢(xún)例4.39查詢(xún)考試成績(jī)大于網(wǎng)絡(luò)工程專(zhuān)業(yè)(專(zhuān)業(yè)代碼為S0403)所有學(xué)生的課程成績(jī)的學(xué)生的基本信息。查詢(xún)所有學(xué)生的基本信息:

SELECTS#,SNAME,SSEX,SBIRTHIN,

PLACEOFB,SCODE#,CLASSFROM

S九、謂詞演算查詢(xún)例4.39查詢(xún)考試成績(jī)大于網(wǎng)絡(luò)工程專(zhuān)業(yè)(專(zhuān)業(yè)代碼為S0403)所有學(xué)生的課程成績(jī)的學(xué)生的基本信息??荚嚦煽?jī)大于網(wǎng)絡(luò)工程專(zhuān)業(yè)所有學(xué)生的成績(jī),說(shuō)明他也學(xué)習(xí)了該課程。進(jìn)而考慮:查詢(xún)所有學(xué)習(xí)了XX課程的信息,就應(yīng)該再加上SC表。

SELECTS.S#,SNAME,SSEX,SBIRTHIN,

PLACEOFB,SCODE#,CLASSFROM

S,SC

WHERES.S#=SC.S#

AND

GRADE>ALL

“網(wǎng)絡(luò)工程專(zhuān)業(yè)學(xué)生的課程成績(jī)”九、謂詞演算查詢(xún)例4.39查詢(xún)考試成績(jī)大于網(wǎng)絡(luò)工程專(zhuān)業(yè)(專(zhuān)業(yè)代碼為S0403)所有學(xué)生的課程成績(jī)的學(xué)生的基本信息?!熬W(wǎng)絡(luò)工程專(zhuān)業(yè)學(xué)生的課程成績(jī)”

SELECTGRADEFROMS,SC

WHERES.S#=SC.S#

ANDSCODE#=′S0403′);

九、謂詞演算查詢(xún)S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)SC(S#,C#,DRADE)例4.39查詢(xún)考試成績(jī)大于網(wǎng)絡(luò)工程專(zhuān)業(yè)(專(zhuān)業(yè)代碼為S0403)所有學(xué)生的課程成績(jī)的學(xué)生的基本信息。SELECTS.S#,SNAME,SSEX,SBIRTHIN,

PLACEOFB,SCODE#,CLASSFROMS,SC

WHERES.S#=SC.S#ANDGRADE>ALL

(SELECTGRADEFROMS,SCWHERES.S#=SC.S#ANDSCODE#=′S0403′);

九、謂詞演算查詢(xún)4.謂詞演算查詢(xún)

(4)EXISTS和NOTEXISTS謂詞

條件表達(dá)式格式為:

EXISTS(<集合>)

NOTEXISTS(<集合>)

前者的含義是:當(dāng)集合中至少存在一個(gè)元素(非空)時(shí),其邏輯值為true,否則為false;

后者的含義是:當(dāng)集合中不存在任何元素(為空)時(shí),其邏輯值為true,否則為false。

通常用于測(cè)試子查詢(xún)是否有返回結(jié)果。九、謂詞演算查詢(xún)例4.40查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

九、謂詞演算查詢(xún)例4.40查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

SELECTS#,SNAMEFROMSWHEREEXISTS(學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課的學(xué)生的成績(jī)′);

直觀(guān)的意義為:

如果存在某個(gè)學(xué)生學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課的成績(jī),說(shuō)明他/她學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課程了。九、謂詞演算查詢(xún)例4.40查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課的學(xué)生的成績(jī):

SELECTGRADEFROMSCWHEREC#=′C401001′;

九、謂詞演算查詢(xún)例4.40查詢(xún)所有學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

SELECTS.S#,SNAMEFROMSWHEREEXISTS(SELECT*FROMSCWHERESC.S#=S.S#ANDC#=′C401001′);

直觀(guān)的意義為:查詢(xún)的是那些,在學(xué)習(xí)關(guān)系中存在所學(xué)課程為數(shù)據(jù)結(jié)構(gòu)的學(xué)生的學(xué)號(hào)和姓名。九、謂詞演算查詢(xún)例4.41查詢(xún)沒(méi)有學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課(課程號(hào)為C401001)的學(xué)生的學(xué)號(hào)和姓名。

SELECTS.S#,SNAMEFROMSWHERENOTEXISTS(SELECT*FROMSCWHERESC.S#=S.S#ANDC#=′C401001′);

九、謂詞演算查詢(xún)1.

并運(yùn)算查詢(xún)

十、并、交、差運(yùn)算查詢(xún)1.

并運(yùn)算查詢(xún)

即,指將兩個(gè)或多個(gè)SELECT語(yǔ)句的查詢(xún)結(jié)果組合在一起作為總的查詢(xún)結(jié)果輸出。語(yǔ)句格式為:

SELECT<列名表>FROM<表名表>[WHERE<條件>][UNION[ALL]{SELECT語(yǔ)句}…];

其中,如果不選擇可選項(xiàng)ALL,則在輸出總查詢(xún)結(jié)果時(shí)重復(fù)的行會(huì)自動(dòng)被取掉。如果選擇可選項(xiàng)ALL,則表示將全部行合并輸出,也即不取掉重復(fù)行。

十、并、交、差運(yùn)算查詢(xún)例4.42合并學(xué)生關(guān)系和專(zhuān)業(yè)關(guān)系中的專(zhuān)業(yè)代碼。

SELECTSCODE

溫馨提示

  • 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)論