SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件

上傳人:可**** 文檔編號:99181444 上傳時間:2022-05-31 格式:PPTX 頁數(shù):117 大?。?93.38KB
收藏 版權(quán)申訴 舉報 下載
SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件_第1頁
第1頁 / 共117頁
SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件_第2頁
第2頁 / 共117頁
SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件_第3頁
第3頁 / 共117頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件》由會員分享,可在線閱讀,更多相關(guān)《SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件(117頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、4.1 4.1 基本概念基本概念語言的發(fā)展 語言的特點語言功能概述 第1頁/共117頁語言的發(fā)展 1986年10月由美國ANSI 公布最早的SQL標(biāo)準(zhǔn)。 1989年4月,ISO提出了具備完整性特征的SQL,稱為SQL-89 。 1992年11月,ISO又公布了新的SQL標(biāo)準(zhǔn),稱為SQL-92(以上均為關(guān)系形式)。 1999年頒布SQL-99,是SQL92的擴(kuò)展。第2頁/共117頁語言的特點1. 一體化。 2. 高度非過程化。 3. 簡潔。 4. 使用方式多樣。第3頁/共117頁語言功能概述SQL功能功能命令動詞命令動詞數(shù)據(jù)查詢數(shù)據(jù)查詢SELECT數(shù)據(jù)定義數(shù)據(jù)定義CREATE、DROP、ALTE

2、R數(shù)據(jù)操縱數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制數(shù)據(jù)控制GRANT、REVOKE四大功能:數(shù)據(jù)定義功能、數(shù)據(jù)控制功能、數(shù)據(jù)查詢功能和數(shù)據(jù)操縱功能。 第4頁/共117頁4.2 SQL的數(shù)據(jù)類型SQL Server SQL Server 為例為例:數(shù)值型 字符串型日期時間型貨幣型第5頁/共117頁數(shù)值型準(zhǔn)確型準(zhǔn)確型 整數(shù)整數(shù)Bigint: 8字節(jié),字節(jié), Int:4字節(jié)字節(jié)Smallint:2字節(jié),字節(jié), Tinyint:1字節(jié)字節(jié) Bit:1位,存儲位,存儲1或或0小數(shù)小數(shù)Numeric(p,q)或)或 Decimal(p,q),), 其中:其中:p為數(shù)字位長度,為數(shù)字位長度,

3、 q為小數(shù)位長度。為小數(shù)位長度。近似型近似型 Float:8字節(jié)字節(jié) Real:4字節(jié)字節(jié)第6頁/共117頁字符串型普通編碼字符串類型統(tǒng)一字符編碼字符串類型二進(jìn)制字符串類型第7頁/共117頁普通編碼字符串類型Char(n):定長存儲,n=8000 Varchar(n):不定長存儲(按實際長度存儲),長度最大不超過n , n=8000 注:n 為字符個數(shù)Text:存儲大于8000字節(jié)的文本第8頁/共117頁統(tǒng)一字符編碼(統(tǒng)一字符編碼(UnicodeUnicode)字符串類型)字符串類型nchar(n):定長存儲,n=4000 nvarchar(n):不定長存儲,長度最大不超過n , n=4000

4、 ntext:存儲大于8000字節(jié)的文本特點:每個字符占兩個字節(jié)第9頁/共117頁二進(jìn)制字符串類型Binary(n):固定長度,n = 8000。Varbinary(n):可變長度,n 8000 。注:n為二進(jìn)制數(shù)據(jù)的字節(jié)數(shù)image:大容量、可變長二進(jìn)制字符數(shù)據(jù),可用于存儲文件。第10頁/共117頁日期時間型日期時間型Datetime:8字節(jié),年月日時分秒毫秒(例:2001/08/03 10:30:00.000 ) SmallDateTime:4字節(jié),年月日時分 (例: 2001/08/03 10:30:00 ) 日期、時間的輸入格式第11頁/共117頁貨幣類型Money: 8 個字節(jié),精確

5、到貨幣單位的千分之十。Smallmoney: 4 個字節(jié),精確到貨幣單位的千分之十。限制到小數(shù)點后 4 位??梢詭в羞m當(dāng)?shù)呢泿欧?。例如?00 英鎊可表示為 100。第12頁/共117頁4.3 基本表的定義、刪除及修改 基本表的定義與刪除 修改表結(jié)構(gòu) 第13頁/共117頁基本表的定義與刪除1定義基本表 使用SQL語言中的CREATE TABLE語句實現(xiàn),其一般格式為: CREATE TABLE ( 列級完整性約束定義列級完整性約束定義 , , 列級完整性約束定義列級完整性約束定義, , 列級完整性約束定義列級完整性約束定義, , 表級完整性約束定義表級完整性約束定義 ) ; 第14頁/共11

6、7頁在列級完整性約束定義處可以定義的約束在列級完整性約束定義處可以定義的約束 NOT NULL:限制列取值非空。 DEFAULT:給定列的默認(rèn)值。 UNIQUE:限制列取值不重。 CHECK:限制列的取值范圍。 PRIMARY KEY:指定本列為主碼。 FOREIGN KEY:定義本列為引用其他表的外碼。使用形式為:FOREIGN KEY() REFERENCES () 第15頁/共117頁幾點說明 NOT NULLNOT NULL和和DEFAULTDEFAULT只能是列級完整性約束;只能是列級完整性約束; 其他約束均可在表級完整性約束處定義。其他約束均可在表級完整性約束處定義。 注意以下幾點

7、:注意以下幾點: 第一,如果第一,如果CHECKCHECK約束是定義多列之間的取值約束,約束是定義多列之間的取值約束,則只能在表級完整性約束處定義;則只能在表級完整性約束處定義; 第二,如果表的主碼由多個列組成,則也只能在表第二,如果表的主碼由多個列組成,則也只能在表級完整性約束處定義,并將主碼列用括號括起來,級完整性約束處定義,并將主碼列用括號括起來,即:即: PRIMARY KEY PRIMARY KEY(列(列1 1 ,列,列2 2 );); 第三,如果在表級完整性約束處定義外碼,第三,如果在表級完整性約束處定義外碼, 則則“FOREIGN KEY (FOREIGN KEY ()”)”部

8、分不能省。部分不能省。第16頁/共117頁約束定義 列取值非空約束 NOT NULL例:sname char(10) NOT NULL第17頁/共117頁約束定義(續(xù)) 表主碼約束表主碼約束在定義列時定義主碼(僅用于單列主碼)列定義 PRIMARY KEY例: SNO char(7) PRIMARY KEY在定義完列時定義主碼(用于單列或多列主碼)PRIMARY KEY ()例: PRIMARY KEY(SNO) PRIMARY KEY(SNO,CNO)第18頁/共117頁約束定義(續(xù))外碼引用約束外碼引用約束 指明本表外碼列引用的表及表中的主碼列。 FOREIGN KEY ()REFEREN

9、CES ()例: FOREIGN KEY (sno) REFERENCES 學(xué)生表(sno)第19頁/共117頁約束定義(續(xù))默認(rèn)值約束默認(rèn)值約束格式:DEFAULT 默認(rèn)值例:定義系的默認(rèn)值為“計算機系”。 DEFAULT 計算機系第20頁/共117頁約束定義(續(xù))CHECKCHECK約束約束格式:CHECK (約束表達(dá)式)例:定義成績大于等于0。 CHECK ( grade = 0 )第21頁/共117頁約束定義(續(xù))UNIQUEUNIQUE約束約束在列級約束定義(僅用于單列約束)列定義 UNIQUE例: SNAME char(7) UNIQUE在表級約束定義(用于單列或多列組合約束)UN

10、IQUE ()例: UNIQUE (SNO,CNO)第22頁/共117頁創(chuàng)建學(xué)生表創(chuàng)建學(xué)生表CREATE TABLE Student( Sno char(7) PRIMARY KEY, Sname char(10) NOT NULL, Ssex char(2) CHECK(Ssex=男OR Ssex=女), Sage tinyint CHECK(Sage=15 AND Sage0), Semester tinyint CHECK(Semester0), Period int CHECK (Period0), PRIMARY KEY(Cno) ) 第24頁/共117頁創(chuàng)建創(chuàng)建SC表表CREATE

11、 TABLE SC ( Sno char(7) NOT NULL, Cno char(10) NOT NULL, Grade tinyint CHECK(Grade=0 and Grade=100), PRIMARY KEY(Sno, Cno), FOREIGN KEY(Sno) REFERENCES Student(Sno), FOREIGN KEY(Cno) REFERENCES Course(Cno) )第25頁/共117頁刪除表刪除表 當(dāng)確信不再需要某個表時,可以將其刪除 刪除表時會將與表有關(guān)的所有對象一起刪掉,包括表中的數(shù)據(jù)。 刪除表的語句格式為: DROP TABLE , 例:刪除

12、test表的語句為:DROP TABLE test第26頁/共117頁修改表結(jié)構(gòu) 在定義完表之后,如果需求有變化,比如添加列、刪除列或修改列定義,可以使用ALTER TABLE語句實現(xiàn)。ALTER TABLE語句可以對表添加列、刪除列、修改列的定義、定義主碼、外碼,也可以添加和刪除約束。 第27頁/共117頁修改表結(jié)構(gòu)語法ALTER TABLE ALTER COLUMN | ADD COLUMN | DROP COLUMN | ADD PRIMARY KEY(列名 , n ) | ADD FOREIGN KEY(列名) REFERNECES 表名(列名)第28頁/共117頁示例例2為SC表添加

13、“修課類別”列,此列的定義為:XKLB char(4)ALTER TABLE SC ADD XKLB char(4) NULL 第29頁/共117頁示例例3將新添加的XKLB的類型改為 char(6)。ALTER TABLE SC ALTER COLUMN XKLB char(6)第30頁/共117頁示例例4刪除Course表的Period列。 ALTER TABLE Course DROP COLUMN Period 第31頁/共117頁4.4 數(shù)據(jù)查詢功能 查詢語句的基本結(jié)構(gòu)簡單查詢多表連接查詢子查詢 第32頁/共117頁查詢語句基本格式SELECT -需要哪些列 FROM -來自于哪些表

14、 WHERE -根據(jù)什么條件 GROUP BY HAVING ORDER BY 第33頁/共117頁簡單查詢1. 選擇表中若干列 第34頁/共117頁1. 查詢指定的列查詢指定的列 查詢表中用戶感興趣的部分屬性列。 例5:查詢?nèi)w學(xué)生的學(xué)號與姓名。SELECT Sno,Sname FROM Student 例6:查詢?nèi)w學(xué)生的姓名、學(xué)號和所在系。SELECT Sname,Sno,Sdept FROM Student 第35頁/共117頁2. 查詢?nèi)苛胁樵內(nèi)苛?例7查詢?nèi)w學(xué)生的記錄SELECT Sno,Sname,Ssex, Sage, Sdept FROM Student等價于: SEL

15、ECT * FROM Student 第36頁/共117頁3. 查詢經(jīng)過計算的列查詢經(jīng)過計算的列 例8查詢?nèi)w學(xué)生的姓名及其出生年份。SELECT Sname,2006 - Sage FROM Student 例9查詢?nèi)w學(xué)生的姓名和出生年份所在系,并在出生年份列前加入一個列,此列的每行數(shù)據(jù)均為出生年份常量值。SELECT Sname,出生年份, 2006-Sage FROM Student 第37頁/共117頁改變列標(biāo)題改變列標(biāo)題 語法:列名 | 表達(dá)式 AS 列標(biāo)題 或:列標(biāo)題 列名 | 表達(dá)式 例: SELECT Sname 姓名,Year of Birth 出生年份, 2006 - S

16、age 年份, FROM Student 第38頁/共117頁簡單查詢2. 選擇表中若干元組 第39頁/共117頁1. 消除取值相同的記錄消除取值相同的記錄 例10在修課表中查詢有哪些學(xué)生修了課程,要求列出學(xué)生的學(xué)號。 SELECT Sno FROM SC 結(jié)果中有重復(fù)的行。 用DISTINCT關(guān)鍵字可以去掉結(jié)果中的重復(fù)行。 DISTINCT關(guān)鍵字放在SELECT詞的后邊、目標(biāo)列名序列的前邊。SELECT DISTINCT Sno FROM SC第40頁/共117頁2. 查詢滿足條件的元組查詢滿足條件的元組 查詢條件查詢條件謂謂 詞詞比較運算符=, , =, , =, (或!=)NOT+比較運

17、算符 確定范圍BETWEENAND, NOT BETWEENAND確定集合IN, NOT IN字符匹配LIKE, NOT LIKE 空值IS NULL, IS NOT NULL邏輯謂詞)AND, OR第41頁/共117頁比較大小比較大小 例11查詢計算機系全體學(xué)生的姓名。SELECT Sname FROM Student WHERE Sdept = 計算機系 例12查詢年齡在20歲以下的學(xué)生的姓名及年齡。SELECT Sname, Sage FROM Student WHERE Sage 20 例13查詢考試成績有不及格的學(xué)生的學(xué)號 SELECT DISTINCT Sno FROM SC WH

18、ERE Grade 60第42頁/共117頁確定范圍確定范圍 用BETWEENAND和NOT BETWEENAND 是邏輯運算符,可以用來查找屬性值在或不在指定范圍內(nèi)的元組,其中BETWEEN后邊指定范圍的下限,AND后邊指定范圍的上限。 BETWEENAND的格式為: 列名 | 表達(dá)式 NOT BETWEEN 下限值 AND 上限值 如果列或表達(dá)式的值在不在下限值和上限值范圍內(nèi),則結(jié)果為True,表明此記錄符合查詢條件。 第43頁/共117頁示例 例14查詢年齡在2023歲之間的學(xué)生的姓名、所在系和年齡。SELECT Sname, Sdept, Sage FROM Student WHERE

19、 Sage BETWEEN 20 AND 23 例15查詢年齡不在2023之間的學(xué)生姓名、所在系和年齡。SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23第44頁/共117頁確定集合 使用IN運算符。 用來查找屬性值屬于指定集合的元組。 格式為: 列名 NOT IN (常量1, 常量2, 常量n) 當(dāng)列中的值與IN中的某個常量值相等時,則結(jié)果為True,表明此記錄為符合查詢條件的記錄; NOT IN:當(dāng)列中的值與某個常量值相同時,則結(jié)果為False,表明此記錄為不符合查詢條件的記錄 第45頁/共117頁

20、示例 例16查詢信息系、數(shù)學(xué)系和計算機系學(xué)生的姓名和性別。SELECT Sname, Ssex FROM Student WHERE Sdept IN (信息系信息系, 數(shù)學(xué)系數(shù)學(xué)系, 計算機系計算機系) 例17查詢既不是信息系、數(shù)學(xué)系,也不是計算機系學(xué)生的姓名和性別。SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (信息系信息系, 數(shù)學(xué)系數(shù)學(xué)系, 計算機系計算機系)第46頁/共117頁字符匹配 使用LIKE運算符 一般形式為: 列名 NOT LIKE 匹配串中可包含如下四種通配符: _:匹配任意一個字符; %:匹配0個或多個字符; :匹配

21、 中的任意一個字符; :不匹配 中的任意一個字符 第47頁/共117頁示例 例18查詢姓張的學(xué)生的詳細(xì)信息。SELECT * FROM Student WHERE Sname LIKE 張張% 例19查詢學(xué)生表中姓張、李和劉的學(xué)生的情況。SELECT * FROM Student WHERE Sname LIKE 張李劉張李劉% 例20查詢名字中第2個字為小或大的學(xué)生的姓名和學(xué)號 SELECT Sname, Sno FROM Student WHERE Sname LIKE _小大小大%第48頁/共117頁示例(續(xù)) 例21查詢所有不姓“劉”的學(xué)生。SELECT Sname FROM Stud

22、ent WHERE Sname NOT LIKE 劉劉% 例22查詢學(xué)號的最后一位不是2、3、5的學(xué)生情況。SELECT * FROM Student WHERE Sno LIKE %235 第49頁/共117頁涉及空值的查詢涉及空值的查詢 空值(NULL)在數(shù)據(jù)庫中表示不確定的值。 例如,學(xué)生選修課程后還沒有考試時,這些學(xué)生有選課記錄,但沒有考試成績,因此考試成績?yōu)榭罩怠?判斷某個值是否為NULL值,不能使用普通的比較運算符。 判斷取值為空的語句格式為:列名 IS NULL 判斷取值不為空的語句格式為:列名 IS NOT NULL 第50頁/共117頁示例 例23查詢無考試成績的學(xué)生的學(xué)號和

23、相應(yīng)的課程號。SELECT Sno, Cno FROM SC WHERE Grade IS NULL 例24查詢所有有考試成績的學(xué)生的學(xué)號和課程號。SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 第51頁/共117頁多重條件查詢 在WHERE子句中可以使用邏輯運算符AND和OR來組成多條件查詢。 用AND連接的條件表示必須全部滿足所有的條件的結(jié)果才為True; 用OR連接的條件表示只要滿足其中一個條件結(jié)果即為True。 例25查詢計算機系年齡在20歲以下的學(xué)生姓名。SELECT Sname FROM Student WHERE Sdept = C

24、S AND Sage 20 第52頁/共117頁簡單查詢3. 對查詢結(jié)果進(jìn)行排序 第53頁/共117頁對查詢結(jié)果進(jìn)行排序可對查詢結(jié)果進(jìn)行排序。 排序子句為:ORDER BY ASC | DESC , 說明:按進(jìn)行升序(ASC)或降序(DESC)排序。第54頁/共117頁示例 例26將學(xué)生按年齡的升序排序。SELECT * FROM Student ORDER BY Sage 例27查詢選修了c02號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按成績降序排列。SELECT Sno, Grade FROM SCWHERE Cno=c02 ORDER BY Grade DESC 例28查詢?nèi)w學(xué)生的信息,查詢

25、結(jié)果按所在系的系名升序排列,同一系的學(xué)生按年齡降序排列。SELECT * FROM StudentORDER BY Sdept, Sage DESC 第55頁/共117頁簡單查詢4. 使用計算函數(shù)匯總數(shù)據(jù) 第56頁/共117頁使用計算函數(shù)匯總數(shù)據(jù) SQL提供的計算函數(shù)有: COUNT( * ):統(tǒng)計表中元組個數(shù); COUNT(DISTINCT ):統(tǒng)計本列列值個數(shù); SUM(DISTINCT ):計算列值總和; AVG(DISTINCT ):計算列值平均值; MAX(DISTINCT ):求列值最大值; MIN(DISTINCT ):求列值最小值。 上述函數(shù)中除上述函數(shù)中除COUNT(*)外,

26、其他函數(shù)在計算過程中均忽)外,其他函數(shù)在計算過程中均忽略略NULL值。值。第57頁/共117頁示例 例29統(tǒng)計學(xué)生總?cè)藬?shù)。SELECT COUNT(*) FROM Student 例30統(tǒng)計選修了課程的學(xué)生的人數(shù)。SELECT COUNT (DISTINCT Sno) FROM SC 例31 計算9512101號學(xué)生的考試總成績之和。SELECT SUM(Grade) FROM SC WHERE Sno = 9512101 第58頁/共117頁示例(續(xù)) 例32計算C01號課程學(xué)生的考試平均成績。SELECT AVG(Grade) FROM SC WHERE Cno=C01 例33查詢選修了C

27、01號課程的學(xué)生的最高分和最低分。SELECT MAX(Grade) , MIN(Grade) FROM SC WHERE Cno=C01注意:計算函數(shù)不能出現(xiàn)在WHERE子句中 第59頁/共117頁簡單查詢5. 對查詢結(jié)果進(jìn)行分組計算 第60頁/共117頁對查詢結(jié)果進(jìn)行分組計算對查詢結(jié)果進(jìn)行分組計算 作用:可以控制計算的級別:對全表還是對一組。目的:細(xì)化計算函數(shù)的作用對象。分組語句的一般形式: GROUP BY HAVING 第61頁/共117頁1. 使用GROUP BY 例34統(tǒng)計每門課程的選課人數(shù),列出課程號和人數(shù)。 SELECT Cno as 課程號, COUNT(Sno) as 選課

28、人數(shù) FROM SC GROUP BY Cno 對查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后再對每一組使用COUNT計算,求得每組的學(xué)生人數(shù)。第62頁/共117頁SnoCnoGrade951201C0180951201C0278951202C0190952103C0288952103C0185952103C0391952103C0474CnoCount(Sno)C013C022C031C041SnoCnoGrade951201C0180951202C0190952103C0185951201C0278952103C0288952103C0391952103C0474第63

29、頁/共117頁例35查詢每名學(xué)生的選課門數(shù)和平均成績。 SELECT Sno as 學(xué)號, COUNT(*) as 選課門數(shù), AVG(Grade) as 平均成績 FROM SC GROUP BY Sno第64頁/共117頁2. 使用HAVING HAVING用于對分組自身進(jìn)行限制,它有點象WHERE子句,但它用于組而不是對單個記錄。 例36查詢修了3門以上課程的學(xué)生的學(xué)號SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3 第65頁/共117頁示例例37查詢修課門數(shù)等于或大于4門的學(xué)生的平均成績和選課門數(shù)。SELECT Sno, AVG(Gra

30、de) 平均成績, COUNT(*) 修課門數(shù) FROM SC GROUP BY Sno HAVING COUNT(*) = 4 第66頁/共117頁多表連接查詢 若一個查詢同時涉及兩個或兩個以上的表,則稱之為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢連接查詢包括內(nèi)連接、外連接和交叉連接等。第67頁/共117頁連接基礎(chǔ)知識連接基礎(chǔ)知識連接查詢中用于連接兩個表的條件稱為連接條件或連接謂詞。 一般格式為: 必須是可比的必須是可比的第68頁/共117頁內(nèi)連接SQL-92 內(nèi)連接語法如下: SELECT FROM 表名 INNER JOIN 被連接表 ON 連接條件第69頁/共117頁執(zhí)行連接操作的

31、過程:執(zhí)行連接操作的過程: 首先取表首先取表1 1中的第中的第1 1個元組,然后從頭開始掃描表個元組,然后從頭開始掃描表2 2,逐一查找,逐一查找滿足連接條件的元組,滿足連接條件的元組, 找到后就將表找到后就將表1 1中的第中的第1 1個元組與該元組拼接起來,形成結(jié)果個元組與該元組拼接起來,形成結(jié)果表中的一個元組。表中的一個元組。 表表2 2全部查找完畢后,再取表全部查找完畢后,再取表1 1中的第中的第2 2個元組,然后再從頭開個元組,然后再從頭開始掃描表始掃描表2 2, 重復(fù)這個過程,直到表重復(fù)這個過程,直到表1 1中的全部元組都處理完畢為止。中的全部元組都處理完畢為止。 第70頁/共117

32、頁例40.查詢計算機系學(xué)生的修課情況,要求列出學(xué)生的名字、所修課的課程號和成績。SELECT Sname, Cno, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno WHERE Sdept = 計算機系 第71頁/共117頁例41. 查詢信息系修了VB課程的學(xué)生的修課成績,要求列出學(xué)生姓名、課程名和成績。SELECT Sname, Cname, Grade FROM Student s JOIN SC ON s.Sno = SC. Sno JOIN Course c ON c.Cno = SC.Cno WHERE Sdept = 信息系 A

33、ND Cname = VB 第72頁/共117頁自連接為特殊的內(nèi)連接相互連接的表物理上為同一張表。必須為兩個表取別名,使之在邏輯上成為兩個表。第73頁/共117頁例43. 查詢與劉晨在同一個系學(xué)習(xí)的學(xué)生的姓名和所在的系。SELECT S2.Sname, S2.Sdept FROM Student S1 JOIN Student S2 ON S1.Sdept = S2.Sdept WHERE S1.Sname = 劉晨 AND S2.Sname != 劉晨第74頁/共117頁外連接只限制一張表中的數(shù)據(jù)必須滿足連接條件,而另一張表中數(shù)據(jù)可以不滿足連接條件。 ANSI方式的外連接的語法格式為:FRO

34、M 表1 LEFT | RIGHT OUTER JOIN 表2 ON theta方式的外連接的語法格式為: 左外連接: FROM 表1, 表2 WHERE 表1.列名(+) 表2.列名 右外連接: FROM 表1, 表2 WHERE 表1.列名 表2.列名(+) 第75頁/共117頁例44. 查詢學(xué)生的修課情況,包括修了課程的學(xué)生和沒有修課的學(xué)生。SELECT Student.Sno, Sname, Cno, GradeFROM Student LEFT OUTER JOIN SCON Student.Sno = SC.Sno 第76頁/共117頁子查詢 在SQL語言中,一個SELECTFRO

35、MWHERE語句稱為一個查詢塊。子查詢是一個 SELECT 查詢,它嵌套在 SELECT、INSERT、UPDATE、DELETE 語句的 WHERE 或 HAVING 子句內(nèi),或其它子查詢中 子查詢的 SELECT 查詢總是使用圓括號括起來。第77頁/共117頁使用子查詢進(jìn)行基于集合的測試使用子查詢進(jìn)行基于集合的測試的語句的一般格式為:列名 NOT IN (子查詢) 第78頁/共117頁示例例45. 查詢與劉晨在同一個系的學(xué)生。SELECT Sno, Sname, Sdept FROM StudentWHERE Sdept IN ( SELECT Sdept FROM Student WHE

36、RE Sname = 劉晨 ) AND Sname != 劉晨 第79頁/共117頁示例 例46. 查詢成績?yōu)榇笥?0分的學(xué)生的學(xué)號、姓名。SELECT Sno, Sname FROM StudentWHERE Sno IN( SELECT Sno FROM SCWHERE Grade 90 ) 第80頁/共117頁例47. 查詢選修了“數(shù)據(jù)庫基礎(chǔ)”課程的學(xué)生的學(xué)號、姓名。 SELECT Sno, Sname FROM Student WHERE Sno IN( SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM Course WHERE Cname

37、 = 數(shù)據(jù)庫基礎(chǔ)) ) 第81頁/共117頁使用子查詢進(jìn)行比較測試使用子查詢進(jìn)行比較測試 帶比較運算符的子查詢指父查詢與子查詢之間用比較運算符連接,當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時,可用、=、=、運算符。第82頁/共117頁例48. 查詢修了c02課程且成績高于此課程的平均成績的學(xué)生的學(xué)號和成績。SELECT Sno , Grade FROM SC WHERE Cno = c02 and Grade ( SELECT AVG(Grade) from SC WHERE Cno = c02) 第83頁/共117頁使用子查詢進(jìn)行存在性測試使用子查詢進(jìn)行存在性測試 一般使用EXISTS謂詞。帶E

38、XISTS謂詞的子查詢不返回查詢的數(shù)據(jù),只產(chǎn)生邏輯真值(有數(shù)據(jù))和假值(沒有數(shù)據(jù))。 第84頁/共117頁例49.查詢選修了c01號課程的學(xué)生姓名。SELECT Sname FROM Student WHERE EXISTS(SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = c01) 第85頁/共117頁注意注1:處理過程為:先外后內(nèi);由外層的值決定內(nèi)層的結(jié)果;內(nèi)層執(zhí)行次數(shù)由外層結(jié)果數(shù)決定。注2: 由于EXISTS的子查詢只能返回真或假值,因此在這里給出列名無意義。所以在有EXISTS的子查詢中,其目標(biāo)列表達(dá)式通常都用*。第86頁/共117頁

39、上句的處理過程1.找外層表Student表的第一行,根據(jù)其Sno值處理內(nèi)層查詢2.由外層的值與內(nèi)層的結(jié)果比較,由此決定外層條件的真、假3.順序處理外層表Student表中的第2、3、 行。第87頁/共117頁例50.查詢沒有選修c01號課程的學(xué)生姓名和所在系。SELECT Sname, Sdept FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = c01) 第88頁/共117頁4.5 數(shù)據(jù)更改功能 插入數(shù)據(jù) 更新數(shù)據(jù) 刪除數(shù)據(jù)第89頁/共117頁插入數(shù)據(jù) 插入單行記錄的INSERT

40、語句的格式為:INSERT INTO () VALUES (值表)功能:新增一個符合表結(jié)構(gòu)的數(shù)據(jù)行,將值表數(shù)據(jù)按表中列定義順序或列名表順序賦給對應(yīng)列名。第90頁/共117頁注意值列表中的值與列名表中的列按位置順序?qū)?yīng),它們的數(shù)據(jù)類型必須一致。如果后邊沒有指明列名,則新插入記錄的值的順序必須與表中列的定義順序一致,且每一個列均有值(可以為空)。第91頁/共117頁示例例51將新生記錄(95020,陳冬,男,信息系,18歲)插入到Student表中。INSERT INTO Student VALUES (9521105, 陳冬, 男, 18, 信息系)例52在SC表中插入一新記錄,成績暫缺。INS

41、ERT INTO SC(Sno, Cno, XKLB) VALUES(9521105, c01, 必修) 實際插入的值為: (9521105, c01 ,NULL ,必修) 第92頁/共117頁更新數(shù)據(jù) 用UPDATE語句實現(xiàn)。格式: UPDATE SET , n WHERE 第93頁/共117頁無條件更新例53. 將所有學(xué)生的年齡加1。UPDATE Student SET Sage = Sage + 1第94頁/共117頁有條件更新1. 基于本表條件的更新例54. 將9512101學(xué)生的年齡改為21歲UPDATE Student SET Sage = 21WHERE Sno = 951210

42、1 第95頁/共117頁2. 基于其他表條件的更新例55:將計算機系全體學(xué)生的成績加5分。 (1)用子查詢實現(xiàn))用子查詢實現(xiàn)UPDATE SC SET Grade = Grade + 5 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept = 計算機系計算機系 ) (2)用多表連接實現(xiàn))用多表連接實現(xiàn)UPDATE SC SET Grade = Grade + 5 FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Sdept = 計算機系第96頁/共117頁刪除數(shù)據(jù) 用DELETE語句實現(xiàn)格式:DE

43、LETE FROM WHERE 第97頁/共117頁無條件刪除無條件刪除 例56. 刪除所有學(xué)生的選課記錄。DELETE FROM SC 第98頁/共117頁有條件刪除有條件刪除 (1)基于本表條件的刪除。例57刪除所有不及格學(xué)生的修課記錄。 DELETE FROM SC WHERE Grade 60 第99頁/共117頁基于其他表條件的刪除例58刪除計算機系不及格學(xué)生的修課記錄。 (1)用子查詢實現(xiàn)DELETE FROM SC WHERE Grade 60 AND Sno IN ( SELECT Sno FROM Student WHERE Sdept = 計算機系 ) (2)用多表連接實現(xiàn)

44、DELETE FROM SC FROM SC JOIN Student ON SC.Sno = Student.SnoWHERE Sdept = 計算機系A(chǔ)ND Grade 、=、 和 =返回一個范圍值的查詢。 被連續(xù)訪問的列。 返回大型結(jié)果集的查詢。 經(jīng)常被用作聯(lián)接的列,一般來說,這些是外碼列。 對 ORDER BY 或 GROUP BY 子句中指定的列進(jìn)行索引。 第107頁/共117頁聚簇索引不適用于聚簇索引不適用于頻繁更改的列。因為這將導(dǎo)致整行移動。字節(jié)長的列。因為聚簇索引的鍵值將被所有非聚簇索引作為查找鍵使用,并被存儲在每個非聚簇索引的B樹的葉級索引項中。 第108頁/共117頁非聚簇

45、索引非聚簇索引 數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方。 索引帶有指向數(shù)據(jù)的存儲位置的指針。 索引中的索引項按索引鍵值順序存儲,而表中的信息按另一種順序存儲。 與圖書的目錄類似。 第109頁/共117頁非聚簇索引特點非聚簇索引特點數(shù)據(jù)行不按非聚簇索引鍵的順序排序和存儲。非聚簇索引的葉層不包含數(shù)據(jù)頁。非聚簇索引B樹的葉節(jié)點包含索引行。每個索引行包含非聚簇索引鍵值以及一個或多個行定位器,這些行定位器指向該鍵值對應(yīng)的數(shù)據(jù)行。可以在有聚簇索引的表和無聚簇索引的表上定義。 第110頁/共117頁SQL Server非聚簇索引中的行定位器非聚簇索引中的行定位器有兩種形式:如果表沒有聚簇索引,則行定位器就

46、是指向行的指針。該指針用文件標(biāo)識符 (ID)、頁碼和頁上的行數(shù)生成。整個指針稱為行ID。如果表有聚簇索引,則行定位器就是行的聚簇索引鍵值。通過使用聚簇索引鍵搜索聚簇索引來檢索數(shù)據(jù)行,而聚簇索引鍵存儲在非聚簇索引的葉節(jié)點行內(nèi)。 第111頁/共117頁非聚簇索的考慮非聚簇索的考慮可考慮將非聚簇索引用于: 包含大量非重復(fù)值的列。不返回大型結(jié)果集的查詢。經(jīng)常作為查詢條件使用的列。經(jīng)常作為連接和分組條件的列。 第112頁/共117頁唯一索引唯一索引可以確保索引列不包含重復(fù)的值。在多列唯一索引的情況下,該索引可以確保索引列中每個值的組合都是唯一的。聚簇索引和非聚簇索引都可以是唯一的。只要列中的數(shù)據(jù)是唯一的

47、,就可以在同一個表上創(chuàng)建一個唯一的聚簇索引和多個唯一的非聚簇索引。 第113頁/共117頁創(chuàng)建和刪除索引創(chuàng)建索引:CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX ON ( , n ) UNIQUE:創(chuàng)建唯一索引。 CLUSTERED:創(chuàng)建聚簇索引。 NONCLUSTERED:創(chuàng)建聚簇索引。 如果沒有指定索引類型,則默認(rèn)是創(chuàng)建非聚簇索引。 第114頁/共117頁示例 例1為Student表的Sname列創(chuàng)建非聚簇索引。CREATE INDEX Sname_ind ON Stuent ( Sname ) 例2為Student表的Sid列創(chuàng)建惟一的聚簇索引。CREATE UNIQUE CLUSTERED INDEX Sid_ind ON Stuent (Sid ) 第115頁/共117頁刪除索引 刪除索引語句格式:DROP INDEX 例3刪除Student表中的Sname_ind索引。 DROP INDEX Sname_ind 第116頁/共117頁感謝您的觀看。第117頁/共117頁

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!