版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉環(huán)市國(guó)有企業(yè)招聘筆試真題2024
- 重慶永川區(qū)事業(yè)單位定向招聘考試真題2024
- 2025年白朗輔警招聘真題及答案
- “夢(mèng)工場(chǎng)”招商銀行大連分行2026寒假實(shí)習(xí)生招聘?jìng)淇己诵念}庫(kù)及答案解析
- 2026年石獅市第六實(shí)驗(yàn)小學(xué)招聘編外合同教師筆試重點(diǎn)試題及答案解析
- 2025云南昆明市五華區(qū)人民法院招聘第五批合同制司法輔助人員7人考試核心題庫(kù)及答案解析
- 2025廣西北海市社會(huì)保險(xiǎn)經(jīng)辦中心招募就業(yè)見(jiàn)習(xí)生考試核心題庫(kù)及答案解析
- 2025 九年級(jí)語(yǔ)文下冊(cè)詩(shī)歌煉字煉句賞析課件
- 2025廣西百色工業(yè)投資發(fā)展集團(tuán)有限公司招聘廣西百金資源開(kāi)發(fā)有限公司工作人員備考核心試題附答案解析
- 2025年博思睿招聘(派遣至海寧市硤石街道辦事處)備考題庫(kù)參考答案詳解
- 鉆孔樁安全技術(shù)
- 2025年《社區(qū)警務(wù)工作規(guī)范(試行)》復(fù)習(xí)測(cè)試卷附答案
- 外賣(mài)管理辦法條例
- 部編版五年級(jí)語(yǔ)文上冊(cè)第19課《父愛(ài)之舟》教學(xué)設(shè)計(jì)
- 2025秋初中數(shù)學(xué)九年級(jí)上冊(cè)(滬科版 安徽專(zhuān)用)上課課件 21.4 第3課時(shí) 用二次函數(shù)解決拋物線(xiàn)形運(yùn)動(dòng)問(wèn)題
- 污水運(yùn)維部門(mén)管理制度
- 學(xué)校實(shí)驗(yàn)室建設(shè)項(xiàng)目可行性研究報(bào)告
- 2021年12月大學(xué)英語(yǔ)四級(jí)考試真題及答案(第1套)
- JG/T 387-2012環(huán)氧涂層預(yù)應(yīng)力鋼絞線(xiàn)
- 注塑模具備用件管理制度
- 紹興柯橋年產(chǎn)12萬(wàn)噸PAN基碳纖維原絲項(xiàng)目環(huán)評(píng)報(bào)告
評(píng)論
0/150
提交評(píng)論