數(shù)據(jù)庫(kù)系統(tǒng)概論:chp3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL_第1頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論:chp3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL_第2頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論:chp3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL_第3頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論:chp3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL_第4頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論:chp3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL_第5頁(yè)
已閱讀5頁(yè),還剩234頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)系統(tǒng)概論An Introduction to Database System第三章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL(Structured Query Language)1本章是整個(gè)課程的重點(diǎn)之一,內(nèi)容比較多。SQL是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,是介于關(guān)系代數(shù)與關(guān)系演算之間的查詢語(yǔ)言。本章主要介紹SQL的四個(gè)功能: 數(shù)據(jù)定義; 數(shù)據(jù)操縱; 數(shù)據(jù)控制; 嵌入式SQL。要結(jié)合實(shí)驗(yàn)教材學(xué)習(xí)本章,學(xué)習(xí)并應(yīng)用SQL Server 2000的SQL語(yǔ)言。2 要求掌握SQL的概念及使用掌握SQL數(shù)據(jù)定義語(yǔ)句: 會(huì)定義、修改和撤消基本表、索引和視圖嵌入式SQL語(yǔ)句的應(yīng)用: 知道嵌入式SQL怎么用熟練掌握SQL數(shù)據(jù)查詢

2、語(yǔ)句: 熟練的運(yùn)用SELECT語(yǔ)句表達(dá)各種查詢SQL視圖的應(yīng)用: 會(huì)定義、查詢、更新和刪除視圖SQL數(shù)據(jù)更新語(yǔ)句的應(yīng)用: 熟練地運(yùn)用插入語(yǔ)句、修改語(yǔ)句和刪除語(yǔ)句更新數(shù)據(jù)3第三章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL3.1 SQL概述3.2 學(xué)生-課程數(shù)據(jù)庫(kù)3.3 數(shù)據(jù)定義3.4 數(shù)據(jù)查詢3.5 數(shù)據(jù)更新3.6 視圖3.7 小結(jié)4SQL概述3.1.1 SQL 的產(chǎn)生與發(fā)展3.1.2 SQL的特點(diǎn)3.1.3 SQL的基本概念5SQL標(biāo)準(zhǔn)的進(jìn)展過(guò)程1974年,由Boyce和Chamber提出;1975-1979年,在System R上實(shí)現(xiàn),由IBM的San Jose研究室研制,稱為Sequel;以后進(jìn)一步修改完

3、善擴(kuò)充為SQL。SQL是關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的國(guó)際標(biāo)準(zhǔn) 標(biāo)準(zhǔn) 大致頁(yè)數(shù) 發(fā)布日期SQL/86 1986.10SQL/89 (FIPS 127-1) 120頁(yè) 1989年SQL/92 (SQL2) 622頁(yè) 1992年SQL99 (SQL3) 1700頁(yè) 1999年SQL2003 2003年6本章將針對(duì)SQL/2作一總體介紹,不是SQL的全部,并且為了突出基本概念和基本功能,略去了許多語(yǔ)法細(xì)節(jié)。應(yīng)該注意到:許多具體的RDBMS實(shí)現(xiàn)的SQL與標(biāo)準(zhǔn)有一定區(qū)別有些標(biāo)準(zhǔn)在具體系統(tǒng)中還未實(shí)現(xiàn)而具體系統(tǒng)對(duì)SQL都有一定的擴(kuò)充我們實(shí)驗(yàn)使用SQL Server 2000系統(tǒng),因此在學(xué)習(xí)教材上的SQL語(yǔ)言有關(guān)內(nèi)容時(shí),要

4、結(jié)合SQL Server 2000的SQL語(yǔ)言,進(jìn)行對(duì)照理解應(yīng)用。73.1.2 SQL的特點(diǎn)1.綜合統(tǒng)一集數(shù)據(jù)定義語(yǔ)言(DDL),數(shù)據(jù)操縱語(yǔ)言(DML),數(shù)據(jù)控制語(yǔ)言(DCL)??梢元?dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng): 定義關(guān)系模式,插入數(shù)據(jù),建立數(shù)據(jù)庫(kù); 對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行查詢和更新; 數(shù)據(jù)庫(kù)重構(gòu)和維護(hù) 數(shù)據(jù)庫(kù)安全性、完整性控制等用戶數(shù)據(jù)庫(kù)投入運(yùn)行后,可根據(jù)需要隨時(shí)逐步修改模式,不影響數(shù)據(jù)的運(yùn)行。數(shù)據(jù)操作符統(tǒng)一82.高度非過(guò)程化非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語(yǔ)言“面向過(guò)程”,必須制定存取路徑SQL只要提出“做什么”,無(wú)須了解存取路徑。 存取路徑的選擇,以及SQL的操作過(guò)程,由系統(tǒng)自動(dòng)完成。93.

5、面向集合的操作方式非關(guān)系數(shù)據(jù)模型,采用面向記錄的操作方式,操作對(duì)象是一條記錄SQL采用集合操作方式 操作對(duì)象、查找結(jié)果可以是元組的集合 一次插入、刪除、更新操作的對(duì)象,可以是元組的集合104.以同一種語(yǔ)法結(jié)構(gòu)提供多種使用方式SQL是獨(dú)立的語(yǔ)言 能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式SQL又是嵌入式語(yǔ)言 SQL能夠嵌入到高級(jí)語(yǔ)言(例如C,C+,Java)程序中,供程序員設(shè)計(jì)程序時(shí)使用115.語(yǔ)言簡(jiǎn)潔,易學(xué)易用SQL功能極強(qiáng),接近英語(yǔ)口語(yǔ),完成核心功能只用了9個(gè)動(dòng)詞。12SQL的基本概念(續(xù))SQL視圖2視圖1基本表2基本表1基本表3基本表4存儲(chǔ)文件2存儲(chǔ)文件1外模式模 式內(nèi)模式SQL支持關(guān)系數(shù)據(jù)庫(kù)三級(jí)

6、模式結(jié)構(gòu)基本表本身獨(dú)立存在的表一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)基本表一個(gè)表可以帶若干索引一個(gè)(或多個(gè))基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件13SQL的基本概念(續(xù))SQL視圖2視圖1基本表2基本表1基本表3基本表4存儲(chǔ)文件2存儲(chǔ)文件1外模式模 式內(nèi)模式SQL支持關(guān)系數(shù)據(jù)庫(kù)三級(jí)模式結(jié)構(gòu)存儲(chǔ)文件邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫(kù)的內(nèi)模式物理結(jié)構(gòu)是任意的,對(duì)用戶透明14SQL的基本概念(續(xù))SQL支持關(guān)系數(shù)據(jù)庫(kù)三級(jí)模式結(jié)構(gòu)視圖從一個(gè)或幾個(gè)基本表導(dǎo)出的表數(shù)據(jù)庫(kù)中只存放視圖的定義,而不存放視圖對(duì)應(yīng)的數(shù)據(jù)視圖是一個(gè)虛表用戶可以在視圖上再定義視圖SQL視圖2視圖1基本表1基本表2基本表3基本表4外模式模式內(nèi)模式存儲(chǔ)文件1存儲(chǔ)文件215第三章 關(guān)

7、系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL3.1 SQL概述3.2 學(xué)生-課程數(shù)據(jù)庫(kù)3.3 數(shù)據(jù)定義3.4 數(shù)據(jù)查詢3.5 數(shù)據(jù)更新3.6 視圖3.7 小結(jié)163.2 本章用例:學(xué)生-課程 數(shù)據(jù)庫(kù)學(xué)生表: Student( Sno,Sname,Ssex,Sage,Sdept ) 課程表:Course(Cno,Cname,Cpno,Ccredit)學(xué)生選課表:SC(Sno,Cno,Grade) 17課程號(hào)Cno課程Cname先行課Cpno學(xué)分Ccredit1234567數(shù)據(jù)庫(kù)數(shù)學(xué)信息系統(tǒng)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)處理PASCAL語(yǔ)言516764243424學(xué) 號(hào) Sno姓名Sname性 別Ssex年齡Sage所在系Sde

8、pt200215121200215122200215123200515125李勇劉晨王敏張立男女女男20191819CSCSMAIS學(xué) 號(hào) Sno 課程號(hào) Cno 成績(jī) Grade 200215121 200215121 200215121 200215122 200215122 1 2 3 2 3 92 85 88 90 80183.3 數(shù)據(jù)定義 SQL的數(shù)據(jù)定義功能: 模式定義、表定義、視圖和索引的定義 193.3 數(shù)據(jù)定義3.3.1 模式的定義與刪除3.3.2 基本表的定義、刪除與修改3.3.3 索引的建立與刪除203.3.1 模式的定義與刪除SQL模式定義為基本表的集合。定義模式實(shí)際上

9、定義了一個(gè)命名空間,在這個(gè)空間中可以定義該模式包含的數(shù)據(jù)庫(kù)對(duì)象,例如基本表、視圖、索引等。模式由模式名和模式擁有者的用戶名或賬號(hào)來(lái)確定。由于“SQL模式”這個(gè)名詞學(xué)術(shù)味太重, 因此大多數(shù)RDBMS中不愿采用這個(gè)名詞,而是采用“數(shù)據(jù)庫(kù)”(Database)這個(gè)名詞。大多數(shù)系統(tǒng)中把“創(chuàng)建SQL模式”稱為“創(chuàng)建數(shù)據(jù)庫(kù)”。另外有的系統(tǒng)允許使用多庫(kù)。213.3.1 模式的定義與刪除SQL模式的創(chuàng)建: CREATE SCHEMA 模式名 AUTHORIZATION 用戶名; 如果沒(méi)有指定,那么隱含為 例1 定義一個(gè)學(xué)生-課程模式S-T CREATE SCHEMA “S-T” AUTHORIZATION W

10、ANG; 為用戶WANG定義了一個(gè)模式S-T 例2 CREATE SCHEMA AUTHORIZATION WANG; 隱含為用戶名WANG22 CREATE SCHEMA AUTHORIZATION |例3CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1 ( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) ); 為用戶ZHANG創(chuàng)建了一個(gè)模式TEST,并在其中定義了一個(gè)表TAB1。23刪除模式DROP SCHEMA CAS

11、CADE(級(jí)聯(lián)) 刪除模式的同時(shí),把該模式中所有的數(shù)據(jù)庫(kù)對(duì)象全部刪除RESTRICT(限制) 如果該模式中定義了下屬的數(shù)據(jù)庫(kù)對(duì)象(如表、視圖等),則拒絕該刪除語(yǔ)句的執(zhí)行。 當(dāng)該模式中沒(méi)有任何下屬的對(duì)象時(shí)才能執(zhí)行。 例4 DROP SCHEMA ZHANG CASCADE;24SQL Server數(shù)據(jù)庫(kù)的管理創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE 數(shù)據(jù)庫(kù)名;修改數(shù)據(jù)庫(kù) ALTER DATABASE 數(shù)據(jù)庫(kù)名;打開(kāi)、選擇要操作的數(shù)據(jù)庫(kù) USE DATABASE 數(shù)據(jù)庫(kù)名;刪除數(shù)據(jù)庫(kù) DROP DATABASE 數(shù)據(jù)庫(kù)名;253.3 數(shù)據(jù)定義3.3.1 模式的定義與刪除3.3.2 基本表的定義、

12、刪除與修改CREATE TABLEDROP TABLEALTER TABLE3.3.3 索引的建立與刪除263.3.2 基本表的定義 一、基本表定義語(yǔ)句格式 參見(jiàn)P88. CREATE TABLE 表名 ( 列名 數(shù)據(jù)類型 default 缺省值 not null ,列名 數(shù)據(jù)類型 default 缺省值 not null ,primary key (列名 ,列名 ) ,foreign key (列名 ,列名 ) references 表名 (列名 ,列名 ) ,check(條件) ) ;列級(jí)完整性約束條件表級(jí)完整性約束條件外鍵約束主鍵約束外鍵引用的表,列檢查約束27學(xué)生表Student例5

13、建立“學(xué)生”表Student,學(xué)號(hào)是主碼,姓名取值唯一。 CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, /* 列級(jí)完整性約束條件*/ Sname CHAR(20) UNIQUE, /* Sname取唯一值*/ Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) CHECK ( Ssex=男 OR Ssex=女) ) 如果完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)上,否則既可以定義在列級(jí)也可以定義在表級(jí)。 28課程表Course 例6 建立一個(gè)“課程”表Course CREATE TABLE Cou

14、rse ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) , Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Cno) , CHECK ( Ccredit0 AND Ccredit=10) ); Cpno是外碼 被參照表是Course被參照列是Cno29學(xué)生選課表SC例7 建立一個(gè)“學(xué)生選課”表SCCREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno), /* 主碼由

15、兩個(gè)屬性構(gòu)成,必須作為表級(jí)完整性進(jìn)行定義*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /* 表級(jí)完整性約束條件,Sno是外碼,被參照表是Student */ FOREIGN KEY (Cno) REFERENCES Course(Cno) /* 表級(jí)完整性約束條件, Cno是外碼,被參照表是Course*/); 30二、數(shù)據(jù)類型SQL中域的概念用數(shù)據(jù)類型來(lái)實(shí)現(xiàn)定義表的屬性時(shí),需要指明其數(shù)據(jù)類型及長(zhǎng)度 選用哪種數(shù)據(jù)類型 取值范圍 要做哪些運(yùn)算 31二、數(shù)據(jù)類型數(shù)據(jù)類型含義CHAR(n)長(zhǎng)度為n的定長(zhǎng)字符串VARCHAR(n)最大長(zhǎng)度為n的變長(zhǎng)字符串I

16、NT長(zhǎng)整數(shù)(也可以寫作INTEGER)SMALLINT短整數(shù)NUMERIC(p,d)定點(diǎn)數(shù),由p位數(shù)字(不包括符號(hào)、小數(shù)點(diǎn))組成,小數(shù)后面有d位數(shù)字REAL取決于機(jī)器精度的浮點(diǎn)數(shù)Double Precision取決于機(jī)器精度的雙精度浮點(diǎn)數(shù)FLOAT(n)浮點(diǎn)數(shù),精度至少為n位數(shù)字DATE日期,包含年、月、日,格式為YYYY-MM-DDTIME時(shí)間,包含一日的時(shí)、分、秒,格式為HH:MM:SS32基本表的修改:格式修改基本表定義(ALTER ) 命令格式:ALTER table 表名add 新列名 數(shù)據(jù)類型 完整性約束 drop 完整性約束名 drop 列名 modify 列名 數(shù)據(jù)類型;增加新

17、列刪除完整性約束刪除列修改列定義33四、修改基本表ALTER TABLE ADD 完整性約束 DROP DROP ALTER COLUMN ;增加新列刪除完整性約束刪除列修改列定義34例8向Student表增加“入學(xué)時(shí)間”列,日期型。 ALTER TABLE Student ADD S_entrance DATE;不論基本表中原來(lái)是否已有數(shù)據(jù),新增加的列一律為空值。例9將年齡的數(shù)據(jù)類型由字符型(假設(shè)原來(lái)的數(shù)據(jù)類型是字符型)改為整數(shù)。 ALTER TABLE Student ALTER COLUMN Sage INT;例10增加課程名稱必須取唯一值的約束條件。 ALTER TABLE Cours

18、e ADD UNIQUE(Cname); 35五、刪除基本表 DROP TABLE RESTRICT|CASCADE;RESTRICT:刪除表是有限制的。欲刪除的基本表,不能被其他表的約束所引用如果存在依賴該表的對(duì)象,則此表不能被刪除CASCADE:刪除該表沒(méi)有限制。在刪除基本表的同時(shí),相關(guān)的依賴對(duì)象一起刪除 36刪除基本表 例11 刪除Student表 DROP TABLE Student CASCADE ;基本表定義被刪除,數(shù)據(jù)被刪除表上建立的索引、視圖、觸發(fā)器等一般也將被刪除 37若表上建有視圖, CREATE VIEW IS_Student AS SELECT Sno,Sname,Sa

19、ge FROM Student WHERE Sdept=IS;選擇RESTRICT時(shí)表不能刪除DROP TABLE Student RESTRICT; -ERROR: cannot drop table Student because other objects depend on it選擇CASCADE時(shí)可以刪除表,視圖也自動(dòng)被刪除 DROP TABLE Student CASCADE; -NOTICE: drop cascades to view IS_StudentSELECT * FROM IS_Student; -ERROR: relation IS_Student does not

20、 exist 383.3 數(shù)據(jù)定義3.3.1 模式的定義與刪除3.3.2 基本表的定義、刪除與修改CREATE TABLEDROP TABLEALTER TABLE3.3.3 索引的建立與刪除39索引作用建立索引可有效提高查詢的速度。如果把一個(gè)基本庫(kù)表比作一本書,索引就好像書的目錄,通過(guò)查詢目錄,可找到相關(guān)章節(jié)的頁(yè)號(hào),從而可迅速地找到那一節(jié)內(nèi)容。不同的是,基本表可建立不止一個(gè)索引,它可按不同的屬性或表達(dá)式建立多個(gè)索引。 40索引RDBMS中索引一般采用B+樹(shù)、HASH索引來(lái)實(shí)現(xiàn)B+樹(shù)索引具有動(dòng)態(tài)平衡的優(yōu)點(diǎn) HASH索引具有查找速度快的特點(diǎn)索引是關(guān)系數(shù)據(jù)庫(kù)的內(nèi)部實(shí)現(xiàn)技術(shù),屬于內(nèi)模式的范疇,索引屬

21、于物理存儲(chǔ)的路徑概念,而不是邏輯的概念。索引規(guī)定了基本表記錄的一種邏輯順序。 索引和基本表的關(guān)系類似與書的目錄與正文的關(guān)系,索引是依附于基本表的,隨表數(shù)據(jù)的更新而變化。41索引創(chuàng)建索引的原則: (1)對(duì)較大的表才建立索引(約5000條記錄以上),并檢索的數(shù)據(jù)少于總行數(shù)的2%到4% (2)一個(gè)表可建立任意多個(gè)索引,但不能太多,索引過(guò)多則耗費(fèi)空間,且降低了插入、刪除、更新的效率,會(huì)增加系統(tǒng)維護(hù)的開(kāi)銷。索引建立后由系統(tǒng)維護(hù), (3)經(jīng)常出現(xiàn)在WHERE子句,或出現(xiàn)在聯(lián)接條件中的列,作為索引關(guān)鍵字 (4)索引關(guān)鍵字可以是一個(gè)列,也可以是多個(gè)列組合成的復(fù)合索引。如果是復(fù)合索引,則查詢條件中含有主關(guān)鍵字時(shí)

22、,系統(tǒng)使用索引,加快查詢速度。如果查詢條件中只含有次關(guān)鍵字,則系統(tǒng)不使用索引。 (5)索引信息會(huì)存儲(chǔ)到數(shù)據(jù)字典中。42索引誰(shuí)可以建立索引DBA 或 表的屬主(即建立表的人)DBMS一般會(huì)自動(dòng)建立以下列上的索引 PRIMARY KEY UNIQUE誰(shuí)維護(hù)索引(如:基本表數(shù)據(jù)變動(dòng)時(shí)) DBMS自動(dòng)完成使用索引 DBMS自動(dòng)選擇是否使用索引以及使用哪些索引43一、建立索引 語(yǔ)句格式CREATE UNIQUE CLUSTER INDEX ON (, );UNIQUE 唯一索引,每個(gè)索引值對(duì)應(yīng)唯一的記錄CLUSTER 聚簇索引,索引項(xiàng)的順序與表中記錄的物理順序一致。銀行客戶表的賬號(hào)余額列適合建立聚簇索引

23、嗎?44建立聚簇索引例13 CREATE CLUSTER INDEX Stusname ON Student (Sname);在Student表的Sname(姓名)列上建立一個(gè)聚簇索引在最經(jīng)常查詢的列上建立聚簇索引,以提高查詢效率 一個(gè)基本表上最多只能建立一個(gè)聚簇索引 經(jīng)常更新的列不宜建立聚簇索引 45建立唯一索引 例14為學(xué)生-課程數(shù)據(jù)庫(kù)中的Student,Course,SC三個(gè)表建 立索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE I

24、NDEX SCno ON SC(Sno ASC,Cno DESC); Student表按學(xué)號(hào)升序建唯一索引 Course表按課程號(hào)升序建唯一索引 SC表按學(xué)號(hào)升序和課程號(hào)降序建唯一索引46二、刪除索引 建立索引是為了加快查詢操作,但是如果數(shù)據(jù)增加刪除修改頻繁,系統(tǒng)會(huì)花費(fèi)許多時(shí)間來(lái)維護(hù)索引,這時(shí),可以刪除一些不必要的索引。DROP INDEX ;刪除索引時(shí),系統(tǒng)會(huì)從數(shù)據(jù)字典中刪去有關(guān)該索引的描述。例15 刪除Student表的Stusname索引 DROP INDEX Stusname;47小結(jié):數(shù)據(jù)定義 SQL的數(shù)據(jù)定義功能: 模式定義、表定義、視圖和索引的定義 48第三章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言

25、SQL3.1 SQL概述3.2 學(xué)生-課程數(shù)據(jù)庫(kù)3.3 數(shù)據(jù)定義3.4 數(shù)據(jù)查詢3.5 數(shù)據(jù)更新3.6 視圖3.7 小結(jié)493.4 SQL數(shù)據(jù)查詢功能3.4.3 嵌套查詢IN謂詞比較算符ANY 或ALL謂詞EXISTS謂詞3.4.4 集合查詢3.4.5 SELECT語(yǔ)句的一般形式3.4.1 單表查詢選擇列選擇元組排序集函數(shù)分組3.4.2 連接查詢等值與非等值連接自身連接外連接復(fù)合條件連接50SQL數(shù)據(jù)查詢語(yǔ)句與關(guān)系代數(shù) 數(shù)據(jù)查詢是關(guān)系運(yùn)算理論在SQL中的主要體現(xiàn)。數(shù)據(jù)查詢語(yǔ)句既有關(guān)系代數(shù)的特點(diǎn),又有關(guān)系演算的特點(diǎn)SELECT語(yǔ)句句型是從關(guān)系代數(shù)表達(dá)式演變來(lái)的,它能表達(dá)所有的關(guān)系代數(shù)運(yùn)算,且更靈

26、活:select A1 , A2 , , Anfrom R1 , R2 , , Rmwhere F ; A1 , A2 , , An(F(R1 R2 Rm)51SQL中Select語(yǔ)句格式 SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;SELECT 語(yǔ)句的執(zhí)行過(guò)程是:從FROM子句后的表或視圖中,取出由SELECT子句指定的列;如有WHERE子句,則只在滿足條件的元組中取數(shù);如有GROUP BY子句,則對(duì)前面的結(jié)果按列名1分組,每組輸出一行, HAVING 控制選滿足條件表達(dá)式1的組輸出;如有ORDE

27、R BY子句,則按列名2來(lái)升或降序排列輸出。523.4.1 單表查詢 單表查詢是指僅涉及一個(gè)表的查詢一、選擇表中的若干列: SELECT子句查詢指定列;查詢?nèi)苛?;查詢?jīng)過(guò)計(jì)算的值;列更名二、選擇表中的若干元組: WHERE子句消除取值重復(fù)的行;查詢滿足條件的元組 常用的查詢謂詞:BETWEEN, IN, LIKE, NULL, AND, OR三、對(duì)查詢結(jié)果排序:ORDER BY子句四、使用集函數(shù):COUNT, SUM, AVG, MAX, MIN五、對(duì)查詢結(jié)果分組: GROUP BY HAVING 子句53一、 選擇表中的若干列查詢指定列例1 查詢?nèi)w學(xué)生的學(xué)號(hào)與姓名。Sno,Sname(S

28、tudent) 或 1,2(Student)SELECT Sno,SnameFROM Student;例2 查詢?nèi)w學(xué)生的姓名、學(xué)號(hào)、所在系。SELECT Sname,Sno,SdeptFROM Student 542. 查詢?nèi)苛羞x出所有屬性列:在SELECT關(guān)鍵字后面列出所有列名 將指定為 *例3 查詢?nèi)w學(xué)生的詳細(xì)記錄。SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或SELECT *FROM Student; 553. 查詢經(jīng)過(guò)計(jì)算的值 SELECT子句的可以為:算術(shù)表達(dá)式字符串常量函數(shù)列別名 56例4 查全體學(xué)生的姓名及其出生年份。SEL

29、ECT Sname,2004-Sage /*假定當(dāng)年的年份為2004年*/FROM Student;輸出結(jié)果: 李勇 1984 劉晨 1985 王敏 1986 張立 1985 查詢經(jīng)過(guò)計(jì)算的值(續(xù))57查詢經(jīng)過(guò)計(jì)算的值(續(xù))例5 查詢?nèi)w學(xué)生的姓名、出生年份和所有系,要求用小寫字母表示所有系名SELECT Sname,Year of Birth: ,2004-Sage, LOWER(Sdept)FROM Student;輸出結(jié)果: 李勇 Year of Birth: 1984 cs 劉晨 Year of Birth: 1985 is 王敏 Year of Birth: 1986 ma 張立 Y

30、ear of Birth: 1985 is 58查詢經(jīng)過(guò)計(jì)算的值(續(xù))使用列別名改變查詢結(jié)果的列標(biāo)題: SELECT Sname NAME,Year of Birth: BIRTH, 2004-Sage BIRTHDAY, LOWER(Sdept) DEPARTMENTFROM Student輸出結(jié)果: NAME BIRTH BIRTHDAY DEPARTMENT 李勇 Year of Birth: 1984 cs 劉晨 Year of Birth: 1985 is 王敏 Year of Birth: 1986 ma 張立 Year of Birth: 1985 is593.4.1 單表查詢

31、單表查詢是指僅涉及一個(gè)表的查詢一、選擇表中的若干列: SELECT子句查詢指定列;查詢?nèi)苛?;查詢?jīng)過(guò)計(jì)算的值;列更名二、選擇表中的若干元組: WHERE子句消除取值重復(fù)的行;查詢滿足條件的元組 常用的查詢謂詞:BETWEEN, IN, LIKE, NULL, AND, OR三、對(duì)查詢結(jié)果排序:ORDER BY子句四、使用集函數(shù):COUNT, SUM, AVG, MAX, MIN五、對(duì)查詢結(jié)果分組: GROUP BY HAVING 子句60二、選擇表中的若干元組1. 消除取值重復(fù)的行 如果沒(méi)有指定DISTINCT關(guān)鍵詞,則缺省為ALL 例6 查詢選修了課程的學(xué)生學(xué)號(hào)。 SELECT Sno F

32、ROM SC;等價(jià)于:SELECT ALL Sno FROM SC;執(zhí)行上面的SELECT語(yǔ)句后,結(jié)果為: Sno20021512120021512120021512120021512220021512261消除取值重復(fù)的行(續(xù))指定DISTINCT關(guān)鍵詞,去掉表中重復(fù)的行 SELECT DISTINCT Sno FROM SC; 執(zhí)行結(jié)果: Sno200215121200215122622.查詢滿足條件的元組查 詢 條 件謂 詞比 較=,=,=,!=,!,!;NOT+上述比較運(yùn)算符確定范圍BETWEEN AND,NOT BETWEEN AND確定集合IN,NOT IN字符匹配LIKE,NOT

33、 LIKE空 值IS NULL,IS NOT NULL多重條件(邏輯運(yùn)算)AND,OR,NOT表3.4 常用的查詢條件事物之間的關(guān)系63 概念復(fù)習(xí):謂詞與量詞謂詞邏輯:分析命題邏輯中原子命題的內(nèi)在聯(lián)系。謂詞邏輯中,原子命題分解成個(gè)體詞和謂詞。個(gè)體詞是可以獨(dú)立存在的客體,它可以是具體事物或抽象的概念,如小張,房子,大米,思想,實(shí)數(shù)2等等。謂詞,是用來(lái)刻劃個(gè)體詞的性質(zhì)或事物之間的關(guān)系的詞。量詞,是在命題中表示數(shù)量的詞,兩類:全稱量詞,表示“所有的”或“每一個(gè)”; 存在量詞,表示“存在某個(gè)”或“至少有一個(gè)”。 64 概念復(fù)習(xí):謂詞與量詞例如三個(gè)簡(jiǎn)單命題: (1) ln5是無(wú)理數(shù); (2) 張三比李四

34、高4cm; (3) 鄭州位于北京和廣州之間。ln5,張三,李四 ,鄭州,北京,廣州等都是個(gè)體詞,“是無(wú)理數(shù)”,“比高4cm”,“位于和之間”等都是謂詞。注意,單獨(dú)的個(gè)體詞和謂詞不能構(gòu)成命題, 將個(gè)體詞和謂詞分開(kāi)也不是命題。 65(1) 比較大小例7 查詢計(jì)算機(jī)科學(xué)系全體學(xué)生的名單。 Sname(Cdept=CS(Student) SELECT Sname FROM Student WHERE Sdept=CS 盡量避免全表掃描例8 查詢所有年齡在20歲以下的學(xué)生姓名及其年齡。 SELECT Sname,Sage FROM Student WHERE Sage 20;例9 查詢考試成績(jī)有不及格的

35、學(xué)生的學(xué)號(hào)。 SELECT DISTINCT Sno FROM SC WHERE Grade60; 66(2)確定范圍謂詞: BETWEEN AND NOT BETWEEN AND 例10 查詢年齡在2023歲(包括20歲和23歲)之間的學(xué)生的 姓名、系別和年齡SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23 例11 查詢年齡不在2023歲之間的學(xué)生姓名、系別和年齡 SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23; 67(3)

36、 確定集合謂詞:IN , NOT IN 例12查詢信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)科學(xué)系(CS)學(xué)生的姓名和性別。SELECT Sname,SsexFROM StudentWHERE Sdept IN ( IS,MA,CS );例13查詢既不是信息系、數(shù)學(xué)系,也不是計(jì)算機(jī)科學(xué)系的學(xué)生的姓名和性別。SELECT Sname,SsexFROM Student WHERE Sdept NOT IN ( IS,MA,CS );68(4)字符匹配謂詞: NOT LIKE ESCAPE 可是固定字符串或通配符 % 或 _。%(百分號(hào))代表任意長(zhǎng)度(長(zhǎng)度可為0)的字符串,_(下橫線)代表任意單個(gè)字符。

37、(一個(gè)漢字占兩個(gè)ASCII字符)匹配串為固定字符串例14 查詢學(xué)號(hào)為200215121的學(xué)生的詳細(xì)情況。 SELECT * FROM Student WHERE Sno LIKE 200215121等價(jià)于: SELECT * FROM Student WHERE Sno = 200215121;69(4)字符匹配(續(xù)) 2) 匹配串為含通配符的字符串例15 查詢所有姓劉學(xué)生的姓名、學(xué)號(hào)和性別。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 劉%;例16 查詢姓歐陽(yáng)且全名為三個(gè)漢字的學(xué)生的姓名。 SELECT Sname FROM Stu

38、dent WHERE Sname LIKE 歐陽(yáng)_;70(4)字符匹配(續(xù))例17 查詢名字中第2個(gè)字為陽(yáng)字的學(xué)生的姓名和學(xué)號(hào)。 SELECT Sname,Sno FROM Student WHERE Sname LIKE _陽(yáng)% 例18 查詢所有不姓劉的學(xué)生姓名。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 劉% 71(4)字符匹配(續(xù))3) 使用換碼字符將通配符轉(zhuǎn)義為普通字符 例19 查詢DB_Design課程的課程號(hào)和學(xué)分。 SELECT Cno,Ccredit FROM Course WHERE Cname LIKE

39、DB_Design ESCAPE 例20 查詢以DB_開(kāi)頭,且倒數(shù)第3個(gè)字符為 i的課程的詳細(xì)情況。 SELECT * FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ; ESCAPE 表示“ ” 為換碼字符 72(5) 涉及空值的查詢謂詞: IS NULL 或 IS NOT NULL “IS” 不能用 “=” 代替 例21 某些學(xué)生選修課程后沒(méi)有參加考試,所以有選課記錄,但沒(méi)有考試成績(jī)。查詢?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL例22 查所有有成績(jī)的學(xué)生學(xué)號(hào)和課程號(hào)。

40、 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;73(6) 多重條件查詢邏輯運(yùn)算符:AND和 OR來(lái)聯(lián)結(jié)多個(gè)查詢條件 AND的優(yōu)先級(jí)高于OR 可以用括號(hào)改變優(yōu)先級(jí)可用來(lái)實(shí)現(xiàn)多種其他謂詞 NOT IN NOT BETWEEN AND 74(6) 多重條件查詢(續(xù))例23 查詢計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名。 SELECT Sname FROM Student WHERE Sdept= CS AND Sage20;75(6) 多重條件查詢(續(xù))改寫例12例12 查詢信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)科學(xué)系(CS)學(xué)生的姓名和性別。SELECT

41、 Sname,SsexFROM StudentWHERE Sdept IN ( IS,MA,CS )可改寫為:SELECT Sname,SsexFROM StudentWHERE Sdept= IS OR Sdept= MA OR Sdept= CS ;763.4.1 單表查詢 單表查詢是指僅涉及一個(gè)表的查詢一、選擇表中的若干列: SELECT子句查詢指定列;查詢?nèi)苛?;查詢?jīng)過(guò)計(jì)算的值;列更名二、選擇表中的若干元組: WHERE子句消除取值重復(fù)的行;查詢滿足條件的元組 常用的查詢謂詞:BETWEEN, IN, LIKE, NULL, AND, OR三、對(duì)查詢結(jié)果排序:ORDER BY子句四、

42、使用集函數(shù):COUNT, SUM, AVG, MAX, MIN五、對(duì)查詢結(jié)果分組: GROUP BY HAVING 子句77三、ORDER BY子句 ORDER BY子句可以按一個(gè)或多個(gè)屬性列排序升序:ASC;降序:DESC;缺省值為升序當(dāng)排序列含空值時(shí)(空值的ASCII碼值最大)ASC:排序列為空值的元組最后顯示DESC:排序列為空值的元組最先顯示 78ORDER BY子句 (續(xù)) 例24 查詢選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按分?jǐn)?shù)降序排列。 SELECT Sno, Grade FROM SC WHERE Cno= 3 ORDER BY Grade DESC 例25 查詢?nèi)w學(xué)生

43、情況,查詢結(jié)果按所在系的系號(hào)升序排列,同一系中的學(xué)生按年齡降序排列。 SELECT * FROM Student ORDER BY Sdept, Sage DESC 793.4.1 單表查詢 單表查詢是指僅涉及一個(gè)表的查詢一、選擇表中的若干列: SELECT子句查詢指定列;查詢?nèi)苛?;查詢?jīng)過(guò)計(jì)算的值;列更名二、選擇表中的若干元組: WHERE子句消除取值重復(fù)的行;查詢滿足條件的元組 常用的查詢謂詞:BETWEEN, IN, LIKE, NULL, AND, OR三、對(duì)查詢結(jié)果排序:ORDER BY子句四、使用聚集函數(shù):COUNT, SUM, AVG, MAX, MIN五、對(duì)查詢結(jié)果分組: G

44、ROUP BY HAVING 子句80四、聚集函數(shù) 聚合函數(shù)對(duì)一組值執(zhí)行計(jì)算并返回單一的值。除 COUNT 函數(shù)之外,聚合函數(shù)忽略空值。聚合函數(shù)經(jīng)常與 SELECT 語(yǔ)句的 GROUP BY 子句一同使用。 AVGMAXBINARY_CHECKSUMMINCHECKSUMSUMCHECKSUM_AGGSTDEVCOUNTSTDEVPCOUNT_BIGVARGROUPINGVARP81四、聚集函數(shù) 計(jì)數(shù)COUNT(DISTINCT|ALL *) 統(tǒng)計(jì)元組個(gè)數(shù)與列名無(wú)關(guān)COUNT(DISTINCT|ALL ) 按列名統(tǒng)計(jì)元組個(gè)數(shù)計(jì)算總和SUM(DISTINCT|ALL ) 計(jì)算平均值A(chǔ)VG(DIS

45、TINCT|ALL )最大最小值 MAX(DISTINCT|ALL ) MIN(DISTINCT|ALL )82聚集函數(shù) (續(xù)) 例26 查詢學(xué)生總?cè)藬?shù)。 SELECT COUNT(*) FROM Student; 例27 查詢選修了課程的學(xué)生人數(shù)。 SELECT COUNT(DISTINCT Sno) FROM SC; /* 不管選幾門課,每學(xué)號(hào)取一行計(jì)數(shù) */ 例28 計(jì)算1號(hào)課程的學(xué)生平均成績(jī)。 SELECT AVG(Grade) FROM SC WHERE Cno= 183聚集函數(shù) (續(xù)) 例29 查詢選修1號(hào)課程的學(xué)生最高分?jǐn)?shù)。 SELECT MAX(Grade) FROM SC W

46、HER Cno= 1 例30查詢學(xué)生200215012選修課程的總學(xué)分?jǐn)?shù)。 SELECT SUM(Ccredit) FROM SC WHER Sno=200215012 and Ccredit IS NOT NULL; 843.4.1 單表查詢 單表查詢是指僅涉及一個(gè)表的查詢一、選擇表中的若干列: SELECT子句查詢指定列;查詢?nèi)苛?;查詢?jīng)過(guò)計(jì)算的值;列更名二、選擇表中的若干元組: WHERE子句消除取值重復(fù)的行;查詢滿足條件的元組 常用的查詢謂詞:BETWEEN, IN, LIKE, NULL, AND, OR三、對(duì)查詢結(jié)果排序:ORDER BY子句四、使用集函數(shù):COUNT, SUM,

47、 AVG, MAX, MIN五、對(duì)查詢結(jié)果分組: GROUP BY HAVING 子句85五、GROUP BY子句 GROUP BY子句分組: 細(xì)化聚集函數(shù)的作用對(duì)象 未對(duì)查詢結(jié)果分組,聚集函數(shù)將作用于整個(gè)查詢結(jié)果 對(duì)查詢結(jié)果分組后,聚集函數(shù)將分別作用于每個(gè)組 作用對(duì)象是查詢的中間結(jié)果表按指定的一列或多列值分組,一列或多列值相等的為一組86GROUP BY子句(續(xù))例31 求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno 查詢結(jié)果: Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48SELECT

48、子句 中包含聚合函數(shù),則計(jì)算每組的匯總值。指定 GROUP BY 時(shí),選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在 GROUP BY 列表中,或者 GROUP BY 表達(dá)式必須與選擇列表表達(dá)式完全匹配。87HAVING子句(續(xù))指定組或聚合的搜索條件 例32 查詢選修了3門以上課程的學(xué)生學(xué)號(hào)。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; 按學(xué)號(hào)分組,每組中記錄數(shù)3的組才被顯示。 88GROUP BY子句(續(xù))HAVING短語(yǔ)與WHERE子句的區(qū)別:作用對(duì)象不同WHERE子句作用于基表或視圖,從中選擇滿足條件的元組HAVING短語(yǔ)作用于

49、組,從中選擇滿足條件的組。 893.4 SQL數(shù)據(jù)查詢功能3.4.3 嵌套查詢IN謂詞比較算符ANY 或ALL謂詞EXISTS謂詞3.4.4 集合查詢3.4.5 SELECT語(yǔ)句的一般形式3.4.1 單表查詢選擇列選擇元組排序集函數(shù)分組3.4.2 連接查詢等值與非等值連接自身連接外連接復(fù)合條件連接903.4.2 連接查詢連接的概念連接操作的執(zhí)行過(guò)程一、等值與非等值連接查詢 二、自身連接三、外連接四、復(fù)合條件連接913.4.2 連接查詢 連接查詢:同時(shí)涉及多個(gè)表的查詢組合兩個(gè)或多個(gè)表的內(nèi)容,并生成合并了每個(gè)表的行和列的結(jié)果集。通常使用各個(gè)表共有的數(shù)據(jù)聯(lián)接這些表。連接條件或連接謂詞:用來(lái)連接兩個(gè)表

50、的條件 一般格式:. . BETWEEN . AND .連接字段:連接謂詞中的列名稱連接條件中的各連接字段類型必須是可比的,但名字不必是相同的92連接操作的執(zhí)行過(guò)程嵌套循環(huán)法(NESTED-LOOP)首先在表1中找到第一個(gè)元組,然后從頭開(kāi)始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第一個(gè)元組與該元組拼接起來(lái),形成結(jié)果表中一個(gè)元組。表2全部查找完后,再找表1中第二個(gè)元組,然后再?gòu)念^開(kāi)始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第二個(gè)元組與該元組拼接起來(lái),形成結(jié)果表中一個(gè)元組。重復(fù)上述操作,直到表1中的全部元組都處理完畢 。93連接操作的執(zhí)行過(guò)程(續(xù)) 排序合并法(SO

51、RT-MERGE) (有的DBMS不提供,如:ORACLE) 常用于等值連接首先按連接屬性對(duì)表1和表2排序?qū)Ρ?的第一個(gè)元組,從頭開(kāi)始掃描表2,順序查找滿足連接條件的元組,找到后就將表1中的第一個(gè)元組與該元組拼接起來(lái),形成結(jié)果表中一個(gè)元組。當(dāng)遇到表2中第一條大于表1連接字段值的元組時(shí),對(duì)表2的查詢不再繼續(xù)重復(fù)上述操作,直到表1中的全部元組都處理完畢 。94連接操作的執(zhí)行過(guò)程(續(xù)) 索引連接(INDEX-JOIN)對(duì)表2按連接字段建立索引 (這樣在表2中查詢速度快)對(duì)表1中的每個(gè)元組,依次根據(jù)其連接字段值查詢表2的索引,從中找到滿足條件的元組,找到后就將表1中的第一個(gè)元組與該元組拼接起來(lái),形成結(jié)

52、果表中一個(gè)元組 。953.4.2 連接查詢聯(lián)接條件可在 FROM 或 WHERE 子句中指定,WHERE 子句中指定的內(nèi)聯(lián)接稱為舊式內(nèi)聯(lián)接。 WHERE 和 HAVING 子句也可以包含搜索條件,以進(jìn)一步篩選聯(lián)接條件所選的行。聯(lián)接可分為以下幾類: 內(nèi)聯(lián)接inner join(典型的聯(lián)接運(yùn)算,使用像 = 或 之類的比較運(yùn)算符)。包括相等聯(lián)接和自然聯(lián)接。 內(nèi)聯(lián)接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行。外聯(lián)接outer join。外聯(lián)接可以是左向外聯(lián)接、右向外聯(lián)接或完整外部聯(lián)接。 交叉聯(lián)接cross join。 交叉聯(lián)接也稱作笛卡爾積。如果添加一個(gè) WHERE 子句,則交叉聯(lián)接的作用將

53、同內(nèi)聯(lián)接一樣。 963.4.2 連接查詢連接的概念連接操作的執(zhí)行過(guò)程一、等值與非等值連接查詢 二、自身連接三、外連接四、復(fù)合條件連接97一、等值與非等值連接查詢 等值連接:連接運(yùn)算符為=例33 查詢每個(gè)學(xué)生及其選修課程的情況 SELECT Student.*, SC.* FROM Student, SC WHERE Student.Sno = SC.Sno 98等值與非等值連接查詢(續(xù))Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade200215121李勇男20CS200215121192200215121李勇男20CS200215121285200215

54、121李勇男20CS200215121388200215122劉晨女19CS200215122290200215122劉晨女19CS200215122380查詢結(jié)果:99等值與非等值連接查詢(續(xù))自然連接:由于重復(fù)相同的信息沒(méi)有意義,因此可以通過(guò)更改選擇列表消除兩個(gè)相同列中的一個(gè)。例34 對(duì)例33用自然連接完成。 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno;等價(jià)于:Select Student.Sno,Sname,Ssex,Sage,Sdept,Cno

55、,Grade FROM Student JOIN SC ON Student.Sno = SC.Sno100二、自身連接 自身連接:一個(gè)表與其自己進(jìn)行連接需要給表起別名以示區(qū)別由于所有屬性名都是同名屬性,因此必須使用別名前綴例35查詢每一門課的間接先修課(即先修課的先修課) SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno;101自身連接(續(xù))WHERE FIRST.Cpno = SECOND.Cno FIRST表(Course表) SECOND表(Course表

56、) Cno CnameCpnoCcredit 1數(shù)據(jù)庫(kù) 5 4 2數(shù)學(xué) 2 3信息系統(tǒng) 1 4 4操作系統(tǒng) 6 3 5數(shù)據(jù)結(jié)構(gòu) 7 4 6數(shù)據(jù)處理 2 7PASCAL語(yǔ)言 6 4Cno CnameCpnoCcredit 1數(shù)據(jù)庫(kù) 5 4 2數(shù)學(xué) 2 3信息系統(tǒng) 1 4 4操作系統(tǒng) 6 3 5數(shù)據(jù)結(jié)構(gòu) 7 4 6數(shù)據(jù)處理 2 7PASCAL語(yǔ)言 6 4102三、外連接外連接與普通連接的區(qū)別 普通連接操作只輸出滿足連接條件的元組外連接操作以指定表為連接主體,將主體表中不滿足連接條件的元組一并輸出,無(wú)值的列填 NULL左外連接與右外連接例 36 改寫例33 SELECT Student.Sno, S

57、name, Ssex, Sage, Sdept, Cno, Grade FROM Student LEFT JOIN SC ON (Student.Sno=SC.Sno) 103三、外連接在 FROM 子句中指定外聯(lián)接時(shí),可以由下列幾組關(guān)鍵字中的一組指定:LEFT JOIN 或 LEFT OUTER JOIN。 左向外聯(lián)接的結(jié)果集包括 LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒(méi)有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。RIGHT JOIN 或 RIGHT OUTER JOIN。 右向外聯(lián)接是左向外聯(lián)接的反向聯(lián)接。將返

58、回右表的所有行。如果右表的某行在左表中沒(méi)有匹配行,則將為左表返回空值。FULL JOIN 或 FULL OUTER JOIN。 完整外部聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒(méi)有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。104外連接(續(xù)) 執(zhí)行結(jié)果: Student.SnoSnameSsexSageSdeptCnoGrade200215121李勇男20CS192200215121李勇男20CS285200215121李勇男20CS388200215122劉晨女19CS290200215122劉晨女19CS380200215123王敏

59、女18MANULLNULL200215125張立男19ISNULLNULL105連接查詢(續(xù))一、等值與非等值連接查詢 二、自身連接三、外連接四、復(fù)合條件連接106四、復(fù)合條件連接復(fù)合條件連接:WHERE子句中含多個(gè)連接條件例37查詢選修2號(hào)課程且成績(jī)?cè)?0分以上的所有學(xué)生SELECT Student.Sno, SnameFROM Student, SCWHERE Student.Sno = SC.Sno AND /* 連接謂詞*/ SC.Cno= 2 AND SC.Grade 90; /* 其他限定條件 */107復(fù)合條件連接(續(xù))例38查詢每個(gè)學(xué)生的學(xué)號(hào)、姓名、選修的課程名及成績(jī) SELE

60、CT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course /*多表連接*/ WHERE Student.Sno = SC.Sno and SC.Cno = Course.Cno;1083.4 SQL數(shù)據(jù)查詢功能3.4.3 嵌套查詢IN謂詞比較算符ANY 或ALL謂詞EXISTS謂詞3.4.4 集合查詢3.4.5 SELECT語(yǔ)句的一般形式3.4.1 單表查詢選擇列選擇元組排序集函數(shù)分組3.4.2 連接查詢等值與非等值連接自身連接外連接復(fù)合條件連接1093.4.3 嵌套查詢 概述 一、帶有IN謂詞的子查詢 二、 帶有比較運(yùn)算符的子查詢 三、

溫馨提示

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

評(píng)論

0/150

提交評(píng)論