SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件
《SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《SQL語言基礎(chǔ)基本概念 SQL的數(shù)據(jù)類型基本表的定義刪除及修改數(shù)據(jù)查詢功能數(shù)據(jù)更改功能建立與刪除索引PPT課件(117頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、4.1 4.1 基本概念基本概念語言的發(fā)展 語言的特點(diǎn)語言功能概述 第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頁語言的特點(diǎn)1. 一體化。 2. 高度非過程化。 3. 簡(jiǎn)潔。 4. 使用方式多樣。第3頁/共117頁語言功能概述SQL功能功能命令動(dòng)詞命令動(dòng)詞數(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ù)值型 字符串型日期時(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位,存儲(chǔ)位,存儲(chǔ)1或或0小數(shù)小數(shù)Numeric(p,q)或)或 Decimal(p,q),), 其中:其中:p為數(shù)字位長(zhǎng)度,為數(shù)字位長(zhǎng)度,
3、 q為小數(shù)位長(zhǎng)度。為小數(shù)位長(zhǎng)度。近似型近似型 Float:8字節(jié)字節(jié) Real:4字節(jié)字節(jié)第6頁/共117頁字符串型普通編碼字符串類型統(tǒng)一字符編碼字符串類型二進(jìn)制字符串類型第7頁/共117頁普通編碼字符串類型Char(n):定長(zhǎng)存儲(chǔ),n=8000 Varchar(n):不定長(zhǎng)存儲(chǔ)(按實(shí)際長(zhǎng)度存儲(chǔ)),長(zhǎng)度最大不超過n , n=8000 注:n 為字符個(gè)數(shù)Text:存儲(chǔ)大于8000字節(jié)的文本第8頁/共117頁統(tǒng)一字符編碼(統(tǒng)一字符編碼(UnicodeUnicode)字符串類型)字符串類型nchar(n):定長(zhǎng)存儲(chǔ),n=4000 nvarchar(n):不定長(zhǎng)存儲(chǔ),長(zhǎng)度最大不超過n , n=4000
4、 ntext:存儲(chǔ)大于8000字節(jié)的文本特點(diǎn):每個(gè)字符占兩個(gè)字節(jié)第9頁/共117頁二進(jìn)制字符串類型Binary(n):固定長(zhǎng)度,n = 8000。Varbinary(n):可變長(zhǎng)度,n 8000 。注:n為二進(jìn)制數(shù)據(jù)的字節(jié)數(shù)image:大容量、可變長(zhǎng)二進(jìn)制字符數(shù)據(jù),可用于存儲(chǔ)文件。第10頁/共117頁日期時(shí)間型日期時(shí)間型Datetime:8字節(jié),年月日時(shí)分秒毫秒(例:2001/08/03 10:30:00.000 ) SmallDateTime:4字節(jié),年月日時(shí)分 (例: 2001/08/03 10:30:00 ) 日期、時(shí)間的輸入格式第11頁/共117頁貨幣類型Money: 8 個(gè)字節(jié),精確
5、到貨幣單位的千分之十。Smallmoney: 4 個(gè)字節(jié),精確到貨幣單位的千分之十。限制到小數(shù)點(diǎn)后 4 位??梢詭в羞m當(dāng)?shù)呢泿欧?hào)。例如,100 英鎊可表示為 100。第12頁/共117頁4.3 基本表的定義、刪除及修改 基本表的定義與刪除 修改表結(jié)構(gòu) 第13頁/共117頁基本表的定義與刪除1定義基本表 使用SQL語言中的CREATE TABLE語句實(shí)現(xiàn),其一般格式為: CREATE TABLE ( 列級(jí)完整性約束定義列級(jí)完整性約束定義 , , 列級(jí)完整性約束定義列級(jí)完整性約束定義, , 列級(jí)完整性約束定義列級(jí)完整性約束定義, , 表級(jí)完整性約束定義表級(jí)完整性約束定義 ) ; 第14頁/共11
6、7頁在列級(jí)完整性約束定義處可以定義的約束在列級(jí)完整性約束定義處可以定義的約束 NOT NULL:限制列取值非空。 DEFAULT:給定列的默認(rèn)值。 UNIQUE:限制列取值不重。 CHECK:限制列的取值范圍。 PRIMARY KEY:指定本列為主碼。 FOREIGN KEY:定義本列為引用其他表的外碼。使用形式為:FOREIGN KEY() REFERENCES () 第15頁/共117頁幾點(diǎn)說明 NOT NULLNOT NULL和和DEFAULTDEFAULT只能是列級(jí)完整性約束;只能是列級(jí)完整性約束; 其他約束均可在表級(jí)完整性約束處定義。其他約束均可在表級(jí)完整性約束處定義。 注意以下幾點(diǎn)
7、:注意以下幾點(diǎn): 第一,如果第一,如果CHECKCHECK約束是定義多列之間的取值約束,約束是定義多列之間的取值約束,則只能在表級(jí)完整性約束處定義;則只能在表級(jí)完整性約束處定義; 第二,如果表的主碼由多個(gè)列組成,則也只能在表第二,如果表的主碼由多個(gè)列組成,則也只能在表級(jí)完整性約束處定義,并將主碼列用括號(hào)括起來,級(jí)完整性約束處定義,并將主碼列用括號(hào)括起來,即:即: PRIMARY KEY PRIMARY KEY(列(列1 1 ,列,列2 2 );); 第三,如果在表級(jí)完整性約束處定義外碼,第三,如果在表級(jí)完整性約束處定義外碼, 則則“FOREIGN KEY (FOREIGN KEY ()”)”部
8、分不能省。部分不能省。第16頁/共117頁約束定義 列取值非空約束 NOT NULL例:sname char(10) NOT NULL第17頁/共117頁約束定義(續(xù)) 表主碼約束表主碼約束在定義列時(shí)定義主碼(僅用于單列主碼)列定義 PRIMARY KEY例: SNO char(7) PRIMARY KEY在定義完列時(shí)定義主碼(用于單列或多列主碼)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)值為“計(jì)算機(jī)系”。 DEFAULT 計(jì)算機(jī)系第20頁/共117頁約束定義(續(xù))CHECKCHECK約束約束格式:CHECK (約束表達(dá)式)例:定義成績(jī)大于等于0。 CHECK ( grade = 0 )第21頁/共117頁約束定義(續(xù))UNIQUEUNIQUE約束約束在列級(jí)約束定義(僅用于單列約束)列定義 UNIQUE例: SNAME char(7) UNIQUE在表級(jí)約束定義(用于單列或多列組合約束)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)確信不再需要某個(gè)表時(shí),可以將其刪除 刪除表時(shí)會(huì)將與表有關(guān)的所有對(duì)象一起刪掉,包括表中的數(shù)據(jù)。 刪除表的語句格式為: DROP TABLE , 例:刪除
12、test表的語句為:DROP TABLE test第26頁/共117頁修改表結(jié)構(gòu) 在定義完表之后,如果需求有變化,比如添加列、刪除列或修改列定義,可以使用ALTER TABLE語句實(shí)現(xiàn)。ALTER TABLE語句可以對(duì)表添加列、刪除列、修改列的定義、定義主碼、外碼,也可以添加和刪除約束。 第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)簡(jiǎn)單查詢多表連接查詢子查詢 第32頁/共117頁查詢語句基本格式SELECT -需要哪些列 FROM -來自于哪些表
14、 WHERE -根據(jù)什么條件 GROUP BY HAVING ORDER BY 第33頁/共117頁簡(jiǎn)單查詢1. 選擇表中若干列 第34頁/共117頁1. 查詢指定的列查詢指定的列 查詢表中用戶感興趣的部分屬性列。 例5:查詢?nèi)w學(xué)生的學(xué)號(hào)與姓名。SELECT Sno,Sname FROM Student 例6:查詢?nèi)w學(xué)生的姓名、學(xué)號(hào)和所在系。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等價(jià)于: SEL
15、ECT * FROM Student 第36頁/共117頁3. 查詢經(jīng)過計(jì)算的列查詢經(jīng)過計(jì)算的列 例8查詢?nèi)w學(xué)生的姓名及其出生年份。SELECT Sname,2006 - Sage FROM Student 例9查詢?nèi)w學(xué)生的姓名和出生年份所在系,并在出生年份列前加入一個(gè)列,此列的每行數(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頁簡(jiǎn)單查詢2. 選擇表中若干元組 第39頁/共117頁1. 消除取值相同的記錄消除取值相同的記錄 例10在修課表中查詢有哪些學(xué)生修了課程,要求列出學(xué)生的學(xué)號(hào)。 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. 查詢滿足條件的元組查詢滿足條件的元組 查詢條件查詢條件謂謂 詞詞比較運(yùn)算符=, , =, , =, (或!=)NOT+比較運(yùn)
17、算符 確定范圍BETWEENAND, NOT BETWEENAND確定集合IN, NOT IN字符匹配LIKE, NOT LIKE 空值IS NULL, IS NOT NULL邏輯謂詞)AND, OR第41頁/共117頁比較大小比較大小 例11查詢計(jì)算機(jī)系全體學(xué)生的姓名。SELECT Sname FROM Student WHERE Sdept = 計(jì)算機(jī)系 例12查詢年齡在20歲以下的學(xué)生的姓名及年齡。SELECT Sname, Sage FROM Student WHERE Sage 20 例13查詢考試成績(jī)有不及格的學(xué)生的學(xué)號(hào) SELECT DISTINCT Sno FROM SC WH
18、ERE Grade 60第42頁/共117頁確定范圍確定范圍 用BETWEENAND和NOT BETWEENAND 是邏輯運(yùn)算符,可以用來查找屬性值在或不在指定范圍內(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運(yùn)算符。 用來查找屬性值屬于指定集合的元組。 格式為: 列名 NOT IN (常量1, 常量2, 常量n) 當(dāng)列中的值與IN中的某個(gè)常量值相等時(shí),則結(jié)果為True,表明此記錄為符合查詢條件的記錄; NOT IN:當(dāng)列中的值與某個(gè)常量值相同時(shí),則結(jié)果為False,表明此記錄為不符合查詢條件的記錄 第45頁/共117頁
20、示例 例16查詢信息系、數(shù)學(xué)系和計(jì)算機(jī)系學(xué)生的姓名和性別。SELECT Sname, Ssex FROM Student WHERE Sdept IN (信息系信息系, 數(shù)學(xué)系數(shù)學(xué)系, 計(jì)算機(jī)系計(jì)算機(jī)系) 例17查詢既不是信息系、數(shù)學(xué)系,也不是計(jì)算機(jī)系學(xué)生的姓名和性別。SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (信息系信息系, 數(shù)學(xué)系數(shù)學(xué)系, 計(jì)算機(jī)系計(jì)算機(jī)系)第46頁/共117頁字符匹配 使用LIKE運(yùn)算符 一般形式為: 列名 NOT LIKE 匹配串中可包含如下四種通配符: _:匹配任意一個(gè)字符; %:匹配0個(gè)或多個(gè)字符; :匹配
21、 中的任意一個(gè)字符; :不匹配 中的任意一個(gè)字符 第47頁/共117頁示例 例18查詢姓張的學(xué)生的詳細(xì)信息。SELECT * FROM Student WHERE Sname LIKE 張張% 例19查詢學(xué)生表中姓張、李和劉的學(xué)生的情況。SELECT * FROM Student WHERE Sname LIKE 張李劉張李劉% 例20查詢名字中第2個(gè)字為小或大的學(xué)生的姓名和學(xué)號(hào) 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é)號(hào)的最后一位不是2、3、5的學(xué)生情況。SELECT * FROM Student WHERE Sno LIKE %235 第49頁/共117頁涉及空值的查詢涉及空值的查詢 空值(NULL)在數(shù)據(jù)庫中表示不確定的值。 例如,學(xué)生選修課程后還沒有考試時(shí),這些學(xué)生有選課記錄,但沒有考試成績(jī),因此考試成績(jī)?yōu)榭罩怠?判斷某個(gè)值是否為NULL值,不能使用普通的比較運(yùn)算符。 判斷取值為空的語句格式為:列名 IS NULL 判斷取值不為空的語句格式為:列名 IS NOT NULL 第50頁/共117頁示例 例23查詢無考試成績(jī)的學(xué)生的學(xué)號(hào)和
23、相應(yīng)的課程號(hào)。SELECT Sno, Cno FROM SC WHERE Grade IS NULL 例24查詢所有有考試成績(jī)的學(xué)生的學(xué)號(hào)和課程號(hào)。SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 第51頁/共117頁多重條件查詢 在WHERE子句中可以使用邏輯運(yùn)算符AND和OR來組成多條件查詢。 用AND連接的條件表示必須全部滿足所有的條件的結(jié)果才為True; 用OR連接的條件表示只要滿足其中一個(gè)條件結(jié)果即為True。 例25查詢計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名。SELECT Sname FROM Student WHERE Sdept = C
24、S AND Sage 20 第52頁/共117頁簡(jiǎn)單查詢3. 對(duì)查詢結(jié)果進(jìn)行排序 第53頁/共117頁對(duì)查詢結(jié)果進(jìn)行排序可對(duì)查詢結(jié)果進(jìn)行排序。 排序子句為:ORDER BY ASC | DESC , 說明:按進(jìn)行升序(ASC)或降序(DESC)排序。第54頁/共117頁示例 例26將學(xué)生按年齡的升序排序。SELECT * FROM Student ORDER BY Sage 例27查詢選修了c02號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按成績(jī)降序排列。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頁簡(jiǎn)單查詢4. 使用計(jì)算函數(shù)匯總數(shù)據(jù) 第56頁/共117頁使用計(jì)算函數(shù)匯總數(shù)據(jù) SQL提供的計(jì)算函數(shù)有: COUNT( * ):統(tǒng)計(jì)表中元組個(gè)數(shù); COUNT(DISTINCT ):統(tǒng)計(jì)本列列值個(gè)數(shù); SUM(DISTINCT ):計(jì)算列值總和; AVG(DISTINCT ):計(jì)算列值平均值; MAX(DISTINCT ):求列值最大值; MIN(DISTINCT ):求列值最小值。 上述函數(shù)中除上述函數(shù)中除COUNT(*)外,
26、其他函數(shù)在計(jì)算過程中均忽)外,其他函數(shù)在計(jì)算過程中均忽略略NULL值。值。第57頁/共117頁示例 例29統(tǒng)計(jì)學(xué)生總?cè)藬?shù)。SELECT COUNT(*) FROM Student 例30統(tǒng)計(jì)選修了課程的學(xué)生的人數(shù)。SELECT COUNT (DISTINCT Sno) FROM SC 例31 計(jì)算9512101號(hào)學(xué)生的考試總成績(jī)之和。SELECT SUM(Grade) FROM SC WHERE Sno = 9512101 第58頁/共117頁示例(續(xù)) 例32計(jì)算C01號(hào)課程學(xué)生的考試平均成績(jī)。SELECT AVG(Grade) FROM SC WHERE Cno=C01 例33查詢選修了C
27、01號(hào)課程的學(xué)生的最高分和最低分。SELECT MAX(Grade) , MIN(Grade) FROM SC WHERE Cno=C01注意:計(jì)算函數(shù)不能出現(xiàn)在WHERE子句中 第59頁/共117頁簡(jiǎn)單查詢5. 對(duì)查詢結(jié)果進(jìn)行分組計(jì)算 第60頁/共117頁對(duì)查詢結(jié)果進(jìn)行分組計(jì)算對(duì)查詢結(jié)果進(jìn)行分組計(jì)算 作用:可以控制計(jì)算的級(jí)別:對(duì)全表還是對(duì)一組。目的:細(xì)化計(jì)算函數(shù)的作用對(duì)象。分組語句的一般形式: GROUP BY HAVING 第61頁/共117頁1. 使用GROUP BY 例34統(tǒng)計(jì)每門課程的選課人數(shù),列出課程號(hào)和人數(shù)。 SELECT Cno as 課程號(hào), COUNT(Sno) as 選課
28、人數(shù) FROM SC GROUP BY Cno 對(duì)查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后再對(duì)每一組使用COUNT計(jì)算,求得每組的學(xué)生人數(shù)。第62頁/共117頁SnoCnoGrade951201C0180951201C0278951202C0190952103C0288952103C0185952103C0391952103C0474CnoCount(Sno)C013C022C031C041SnoCnoGrade951201C0180951202C0190952103C0185951201C0278952103C0288952103C0391952103C0474第63
29、頁/共117頁例35查詢每名學(xué)生的選課門數(shù)和平均成績(jī)。 SELECT Sno as 學(xué)號(hào), COUNT(*) as 選課門數(shù), AVG(Grade) as 平均成績(jī) FROM SC GROUP BY Sno第64頁/共117頁2. 使用HAVING HAVING用于對(duì)分組自身進(jìn)行限制,它有點(diǎn)象WHERE子句,但它用于組而不是對(duì)單個(gè)記錄。 例36查詢修了3門以上課程的學(xué)生的學(xué)號(hào)SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3 第65頁/共117頁示例例37查詢修課門數(shù)等于或大于4門的學(xué)生的平均成績(jī)和選課門數(shù)。SELECT Sno, AVG(Gra
30、de) 平均成績(jī), COUNT(*) 修課門數(shù) FROM SC GROUP BY Sno HAVING COUNT(*) = 4 第66頁/共117頁多表連接查詢 若一個(gè)查詢同時(shí)涉及兩個(gè)或兩個(gè)以上的表,則稱之為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢連接查詢包括內(nèi)連接、外連接和交叉連接等。第67頁/共117頁連接基礎(chǔ)知識(shí)連接基礎(chǔ)知識(shí)連接查詢中用于連接兩個(gè)表的條件稱為連接條件或連接謂詞。 一般格式為: 必須是可比的必須是可比的第68頁/共117頁內(nèi)連接SQL-92 內(nèi)連接語法如下: SELECT FROM 表名 INNER JOIN 被連接表 ON 連接條件第69頁/共117頁執(zhí)行連接操作的
31、過程:執(zhí)行連接操作的過程: 首先取表首先取表1 1中的第中的第1 1個(gè)元組,然后從頭開始掃描表個(gè)元組,然后從頭開始掃描表2 2,逐一查找,逐一查找滿足連接條件的元組,滿足連接條件的元組, 找到后就將表找到后就將表1 1中的第中的第1 1個(gè)元組與該元組拼接起來,形成結(jié)果個(gè)元組與該元組拼接起來,形成結(jié)果表中的一個(gè)元組。表中的一個(gè)元組。 表表2 2全部查找完畢后,再取表全部查找完畢后,再取表1 1中的第中的第2 2個(gè)元組,然后再從頭開個(gè)元組,然后再從頭開始掃描表始掃描表2 2, 重復(fù)這個(gè)過程,直到表重復(fù)這個(gè)過程,直到表1 1中的全部元組都處理完畢為止。中的全部元組都處理完畢為止。 第70頁/共117
32、頁例40.查詢計(jì)算機(jī)系學(xué)生的修課情況,要求列出學(xué)生的名字、所修課的課程號(hào)和成績(jī)。SELECT Sname, Cno, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno WHERE Sdept = 計(jì)算機(jī)系 第71頁/共117頁例41. 查詢信息系修了VB課程的學(xué)生的修課成績(jī),要求列出學(xué)生姓名、課程名和成績(jī)。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)連接相互連接的表物理上為同一張表。必須為兩個(gè)表取別名,使之在邏輯上成為兩個(gè)表。第73頁/共117頁例43. 查詢與劉晨在同一個(gè)系學(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語言中,一個(gè)SELECTFRO
35、MWHERE語句稱為一個(gè)查詢塊。子查詢是一個(gè) SELECT 查詢,它嵌套在 SELECT、INSERT、UPDATE、DELETE 語句的 WHERE 或 HAVING 子句內(nèi),或其它子查詢中 子查詢的 SELECT 查詢總是使用圓括號(hào)括起來。第77頁/共117頁使用子查詢進(jìn)行基于集合的測(cè)試使用子查詢進(jìn)行基于集合的測(cè)試的語句的一般格式為:列名 NOT IN (子查詢) 第78頁/共117頁示例例45. 查詢與劉晨在同一個(gè)系的學(xué)生。SELECT Sno, Sname, Sdept FROM StudentWHERE Sdept IN ( SELECT Sdept FROM Student WHE
36、RE Sname = 劉晨 ) AND Sname != 劉晨 第79頁/共117頁示例 例46. 查詢成績(jī)?yōu)榇笥?0分的學(xué)生的學(xué)號(hào)、姓名。SELECT Sno, Sname FROM StudentWHERE Sno IN( SELECT Sno FROM SCWHERE Grade 90 ) 第80頁/共117頁例47. 查詢選修了“數(shù)據(jù)庫基礎(chǔ)”課程的學(xué)生的學(xué)號(hào)、姓名。 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)行比較測(cè)試使用子查詢進(jìn)行比較測(cè)試 帶比較運(yùn)算符的子查詢指父查詢與子查詢之間用比較運(yùn)算符連接,當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),可用、=、=、運(yùn)算符。第82頁/共117頁例48. 查詢修了c02課程且成績(jī)高于此課程的平均成績(jī)的學(xué)生的學(xué)號(hào)和成績(jī)。SELECT Sno , Grade FROM SC WHERE Cno = c02 and Grade ( SELECT AVG(Grade) from SC WHERE Cno = c02) 第83頁/共117頁使用子查詢進(jìn)行存在性測(cè)試使用子查詢進(jìn)行存在性測(cè)試 一般使用EXISTS謂詞。帶E
38、XISTS謂詞的子查詢不返回查詢的數(shù)據(jù),只產(chǎn)生邏輯真值(有數(shù)據(jù))和假值(沒有數(shù)據(jù))。 第84頁/共117頁例49.查詢選修了c01號(hào)課程的學(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號(hào)課程的學(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 (值表)功能:新增一個(gè)符合表結(jié)構(gòu)的數(shù)據(jù)行,將值表數(shù)據(jù)按表中列定義順序或列名表順序賦給對(duì)應(yīng)列名。第90頁/共117頁注意值列表中的值與列名表中的列按位置順序?qū)?yīng),它們的數(shù)據(jù)類型必須一致。如果后邊沒有指明列名,則新插入記錄的值的順序必須與表中列的定義順序一致,且每一個(gè)列均有值(可以為空)。第91頁/共117頁示例例51將新生記錄(95020,陳冬,男,信息系,18歲)插入到Student表中。INSERT INTO Student VALUES (9521105, 陳冬, 男, 18, 信息系)例52在SC表中插入一新記錄,成績(jī)暫缺。INS
41、ERT INTO SC(Sno, Cno, XKLB) VALUES(9521105, c01, 必修) 實(shí)際插入的值為: (9521105, c01 ,NULL ,必修) 第92頁/共117頁更新數(shù)據(jù) 用UPDATE語句實(shí)現(xiàn)。格式: UPDATE SET , n WHERE 第93頁/共117頁無條件更新例53. 將所有學(xué)生的年齡加1。UPDATE Student SET Sage = Sage + 1第94頁/共117頁有條件更新1. 基于本表?xiàng)l件的更新例54. 將9512101學(xué)生的年齡改為21歲UPDATE Student SET Sage = 21WHERE Sno = 951210
42、1 第95頁/共117頁2. 基于其他表?xiàng)l件的更新例55:將計(jì)算機(jī)系全體學(xué)生的成績(jī)加5分。 (1)用子查詢實(shí)現(xiàn))用子查詢實(shí)現(xiàn)UPDATE SC SET Grade = Grade + 5 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept = 計(jì)算機(jī)系計(jì)算機(jī)系 ) (2)用多表連接實(shí)現(xiàn))用多表連接實(shí)現(xiàn)UPDATE SC SET Grade = Grade + 5 FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Sdept = 計(jì)算機(jī)系第96頁/共117頁刪除數(shù)據(jù) 用DELETE語句實(shí)現(xiàn)格式:DE
43、LETE FROM WHERE 第97頁/共117頁無條件刪除無條件刪除 例56. 刪除所有學(xué)生的選課記錄。DELETE FROM SC 第98頁/共117頁有條件刪除有條件刪除 (1)基于本表?xiàng)l件的刪除。例57刪除所有不及格學(xué)生的修課記錄。 DELETE FROM SC WHERE Grade 60 第99頁/共117頁基于其他表?xiàng)l件的刪除例58刪除計(jì)算機(jī)系不及格學(xué)生的修課記錄。 (1)用子查詢實(shí)現(xiàn)DELETE FROM SC WHERE Grade 60 AND Sno IN ( SELECT Sno FROM Student WHERE Sdept = 計(jì)算機(jī)系 ) (2)用多表連接實(shí)現(xiàn)
44、DELETE FROM SC FROM SC JOIN Student ON SC.Sno = Student.SnoWHERE Sdept = 計(jì)算機(jī)系A(chǔ)ND Grade 、=、 和 =返回一個(gè)范圍值的查詢。 被連續(xù)訪問的列。 返回大型結(jié)果集的查詢。 經(jīng)常被用作聯(lián)接的列,一般來說,這些是外碼列。 對(duì) ORDER BY 或 GROUP BY 子句中指定的列進(jìn)行索引。 第107頁/共117頁聚簇索引不適用于聚簇索引不適用于頻繁更改的列。因?yàn)檫@將導(dǎo)致整行移動(dòng)。字節(jié)長(zhǎng)的列。因?yàn)榫鄞厮饕逆I值將被所有非聚簇索引作為查找鍵使用,并被存儲(chǔ)在每個(gè)非聚簇索引的B樹的葉級(jí)索引項(xiàng)中。 第108頁/共117頁非聚簇
45、索引非聚簇索引 數(shù)據(jù)存儲(chǔ)在一個(gè)地方,索引存儲(chǔ)在另一個(gè)地方。 索引帶有指向數(shù)據(jù)的存儲(chǔ)位置的指針。 索引中的索引項(xiàng)按索引鍵值順序存儲(chǔ),而表中的信息按另一種順序存儲(chǔ)。 與圖書的目錄類似。 第109頁/共117頁非聚簇索引特點(diǎn)非聚簇索引特點(diǎn)數(shù)據(jù)行不按非聚簇索引鍵的順序排序和存儲(chǔ)。非聚簇索引的葉層不包含數(shù)據(jù)頁。非聚簇索引B樹的葉節(jié)點(diǎn)包含索引行。每個(gè)索引行包含非聚簇索引鍵值以及一個(gè)或多個(gè)行定位器,這些行定位器指向該鍵值對(duì)應(yīng)的數(shù)據(jù)行。可以在有聚簇索引的表和無聚簇索引的表上定義。 第110頁/共117頁SQL Server非聚簇索引中的行定位器非聚簇索引中的行定位器有兩種形式:如果表沒有聚簇索引,則行定位器就
46、是指向行的指針。該指針用文件標(biāo)識(shí)符 (ID)、頁碼和頁上的行數(shù)生成。整個(gè)指針稱為行ID。如果表有聚簇索引,則行定位器就是行的聚簇索引鍵值。通過使用聚簇索引鍵搜索聚簇索引來檢索數(shù)據(jù)行,而聚簇索引鍵存儲(chǔ)在非聚簇索引的葉節(jié)點(diǎn)行內(nèi)。 第111頁/共117頁非聚簇索的考慮非聚簇索的考慮可考慮將非聚簇索引用于: 包含大量非重復(fù)值的列。不返回大型結(jié)果集的查詢。經(jīng)常作為查詢條件使用的列。經(jīng)常作為連接和分組條件的列。 第112頁/共117頁唯一索引唯一索引可以確保索引列不包含重復(fù)的值。在多列唯一索引的情況下,該索引可以確保索引列中每個(gè)值的組合都是唯一的。聚簇索引和非聚簇索引都可以是唯一的。只要列中的數(shù)據(jù)是唯一的
47、,就可以在同一個(gè)表上創(chuàng)建一個(gè)唯一的聚簇索引和多個(gè)唯一的非聚簇索引。 第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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案