數據庫系統概論(第五)演示文稿_第1頁
數據庫系統概論(第五)演示文稿_第2頁
數據庫系統概論(第五)演示文稿_第3頁
數據庫系統概論(第五)演示文稿_第4頁
數據庫系統概論(第五)演示文稿_第5頁
已閱讀5頁,還剩90頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據庫系統概論(第五版)()演示文稿現在是1頁\一共有95頁\編輯于星期五數據庫系統概論(第五版)第章()現在是2頁\一共有95頁\編輯于星期五第三章

關系數據庫標準語言SQL3.1SQL概述3.2學生-課程數據庫3.3數據定義3.4數據查詢3.5數據更新3.6空值的處理3.7視圖3.8小結現在是3頁\一共有95頁\編輯于星期五3.1SQL概述SQL(StructuredQueryLanguage)結構化查詢語言,是關系數據庫的標準語言SQL是一個通用的、功能極強的關系數據庫語言現在是4頁\一共有95頁\編輯于星期五SQL概述(續)3.1.1SQL的產生與發展3.1.2SQL的特點3.1.3SQL的基本概念現在是5頁\一共有95頁\編輯于星期五SQL標準的進展過程標準大致頁數發布日期SQL/861986.10SQL/89(FIPS127-1)120頁1989年SQL/92622頁1992年SQL99(SQL3)1700頁1999年SQL20033600頁

2003年SQL20083777頁2006年SQL20112010年目前,沒有一個數據庫系統能夠支持SQL標準的所有概念和特性現在是6頁\一共有95頁\編輯于星期五3.1SQL概述3.1.1SQL的產生與發展3.1.2SQL的特點3.1.3SQL的基本概念現在是7頁\一共有95頁\編輯于星期五3.1.2SQL的特點綜合統一集數據定義語言(DDL),數據操縱語言(DML),數據控制語言(DCL)功能于一體??梢元毩⑼瓿蓴祿焐芷谥械娜炕顒樱憾x和修改、刪除關系模式,定義和刪除視圖,插入數據,建立數據庫;對數據庫中的數據進行查詢和更新;數據庫重構和維護數據庫安全性、完整性控制,以及事務控制嵌入式SQL和動態SQL定義用戶數據庫投入運行后,可根據需要隨時逐步修改模式,不影響數據庫的運行。數據操作符統一現在是8頁\一共有95頁\編輯于星期五2.高度非過程化非關系數據模型的數據操縱語言“面向過程”,必須指定存取路徑。SQL只要提出“做什么”,無須了解存取路徑。存取路徑的選擇以及SQL的操作過程由系統自動完成?,F在是9頁\一共有95頁\編輯于星期五3.面向集合的操作方式非關系數據模型采用面向記錄的操作方式,操作對象是一條記錄SQL采用集合操作方式操作對象、查找結果可以是元組的集合一次插入、刪除、更新操作的對象可以是元組的集合現在是10頁\一共有95頁\編輯于星期五4.以同一種語法結構提供多種使用方式SQL是獨立的語言能夠獨立地用于聯機交互的使用方式SQL又是嵌入式語言

SQL能夠嵌入到高級語言(例如C,C++,Java)程序中,供程序員設計程序時使用現在是11頁\一共有95頁\編輯于星期五5.語言簡潔,易學易用SQL功能極強,完成核心功能只用了9個動詞?,F在是12頁\一共有95頁\編輯于星期五3.1SQL概述3.1.1SQL的產生與發展3.1.2SQL的特點3.1.3SQL的基本概念現在是13頁\一共有95頁\編輯于星期五SQL的基本概念(續)SQL視圖2視圖1基本表2基本表1基本表3基本表4存儲文件2存儲文件1外模式模式內模式SQL支持關系數據庫三級模式結構現在是14頁\一共有95頁\編輯于星期五SQL的基本概念(續)基本表本身獨立存在的表SQL中一個關系就對應一個基本表一個(或多個)基本表對應一個存儲文件一個表可以帶若干索引現在是15頁\一共有95頁\編輯于星期五SQL的基本概念(續)存儲文件邏輯結構組成了關系數據庫的內模式物理結構對用戶是隱蔽的現在是16頁\一共有95頁\編輯于星期五SQL的基本概念(續)視圖從一個或幾個基本表導出的表數據庫中只存放視圖的定義而不存放視圖對應的數據視圖是一個虛表用戶可以在視圖上再定義視圖現在是17頁\一共有95頁\編輯于星期五第三章

關系數據庫標準語言SQL3.1SQL概述3.2學生-課程數據庫3.3數據定義3.4數據查詢3.5數據更新3.6空值的處理3.7視圖3.8小結現在是18頁\一共有95頁\編輯于星期五3.2學生-課程數據庫學生-課程模式S-T: 學生表:Student(Sno,Sname,Ssex,Sage,Sdept)

課程表:Course(Cno,Cname,Cpno,Ccredit)

學生選課表:SC(Sno,Cno,Grade)

現在是19頁\一共有95頁\編輯于星期五Student表學號Sno姓名Sname性別

Ssex年齡

Sage所在系

Sdept201215121李勇男20CS201215122劉晨女19CS201215123王敏女18MA201215125張立男19IS現在是20頁\一共有95頁\編輯于星期五Course表課程號Cno課程名Cname先行課Cpno學分Ccredit1數據庫542數學23信息系統144操作系統635數據結構746數據處理27PASCAL語言64現在是21頁\一共有95頁\編輯于星期五SC表學號Sno

課程號

Cno

成績

Grade201215121192201215121285201215121388201215122290201215122380現在是22頁\一共有95頁\編輯于星期五第三章

關系數據庫標準語言SQL3.1SQL概述3.2學生-課程數據庫3.3數據定義3.4數據查詢3.5數據更新3.6空值的處理3.7視圖3.8小結現在是23頁\一共有95頁\編輯于星期五3.3數據定義SQL的數據定義功能:模式定義表定義視圖和索引的定義現在是24頁\一共有95頁\編輯于星期五模式現代關系數據庫管理系統提供了一個層次化的數據庫對象命名機制一個關系數據庫管理系統的實例(Instance)中可以建立多個數據庫一個數據庫中可以建立多個模式一個模式下通常包括多個表、視圖和索引等數據庫對象數據庫(有的系統稱為目錄)模式表以及視圖、索引等現在是25頁\一共有95頁\編輯于星期五3.3數據定義3.3.1模式的定義與刪除3.3.2基本表的定義、刪除與修改3.3.3索引的建立與刪除現在是26頁\一共有95頁\編輯于星期五1.定義模式[例3.1]為用戶WANG定義一個學生-課程模式S-T

CREATESCHEMA“S-T”AUTHORIZATIONWANG;

[例3.2]CREATESCHEMAAUTHORIZATIONWANG;該語句沒有指定<模式名>,<模式名>隱含為<用戶名>現在是27頁\一共有95頁\編輯于星期五定義模式(續)定義模式實際上定義了一個命名空間。在這個空間中可以定義該模式包含的數據庫對象,例如基本表、視圖、索引等。在CREATESCHEMA中可以接受CREATETABLE,CREATEVIEW和GRANT子句。

CREATESCHEMA<模式名>AUTHORIZATION<用戶名>[<表定義子句>|<視圖定義子句>|<授權定義子句>]現在是28頁\一共有95頁\編輯于星期五定義模式(續)[例3.3]為用戶ZHANG創建了一個模式TEST,并且在其中定義一個表TAB1CREATESCHEMATESTAUTHORIZATIONZHANGCREATETABLETAB1(COL1SMALLINT,

COL2INT,

COL3CHAR(20),

COL4NUMERIC(10,3),

COL5DECIMAL(5,2)

);

現在是29頁\一共有95頁\編輯于星期五2.刪除模式DROPSCHEMA<模式名><CASCADE|RESTRICT>CASCADE(級聯)刪除模式的同時把該模式中所有的數據庫對象全部刪除RESTRICT(限制)如果該模式中定義了下屬的數據庫對象(如表、視圖等),則拒絕該刪除語句的執行。僅當該模式中沒有任何下屬的對象時才能執行?,F在是30頁\一共有95頁\編輯于星期五刪除模式(續)[例3.4]DROPSCHEMAZHANGCASCADE;刪除模式ZHANG

同時該模式中定義的表TAB1也被刪除現在是31頁\一共有95頁\編輯于星期五3.3數據定義3.3.1模式的定義與刪除3.3.2基本表的定義、刪除與修改3.3.3索引的建立與刪除現在是32頁\一共有95頁\編輯于星期五3.3.2基本表的定義、刪除與修改定義基本表

CREATETABLE<表名>

(<列名><數據類型>[<列級完整性約束條件>]

[,<列名><數據類型>[<列級完整性約束條件>]]

[,<表級完整性約束條件>]);<表名>:所要定義的基本表的名字<列名>:組成該表的各個屬性(列)<列級完整性約束條件>:涉及相應屬性列的完整性約束條件<表級完整性約束條件>:涉及一個或多個屬性列的完整性約束條件如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級?,F在是33頁\一共有95頁\編輯于星期五學生表Student[例3.5]建立“學生”表Student。學號是主碼,姓名取值唯一。

CREATETABLEStudent

(SnoCHAR(9)

PRIMARYKEY,

/*列級完整性約束條件,Sno是主碼*/

SnameCHAR(20)

UNIQUE,

/*Sname取唯一值*/

SsexCHAR(2),

SageSMALLINT,

SdeptCHAR(20)

);主碼UNIQUE約束現在是34頁\一共有95頁\編輯于星期五課程表Course

[例3.6]

建立一個“課程”表Course

CREATETABLECourse

(CnoCHAR(4)PRIMARYKEY,

CnameCHAR(40),

CpnoCHAR(4),

CcreditSMALLINT,

FOREIGNKEY(Cpno)REFERENCESCourse(Cno)

);先修課

Cpno是外碼被參照表是Course被參照列是Cno現在是35頁\一共有95頁\編輯于星期五學生選課表SC[例3.7]建立一個學生選課表SC

CREATETABLESC

(SnoCHAR(9),

CnoCHAR(4),

GradeSMALLINT,

PRIMARYKEY(Sno,Cno),

/*主碼由兩個屬性構成,必須作為表級完整性進行定義*/

FOREIGNKEY(Sno)REFERENCESStudent(Sno),

/*表級完整性約束條件,Sno是外碼,被參照表是Student*/

FOREIGNKEY(Cno)REFERENCESCourse(Cno)/*表級完整性約束條件,Cno是外碼,被參照表是Course*/);現在是36頁\一共有95頁\編輯于星期五2.數據類型SQL中域的概念用數據類型來實現定義表的屬性時需要指明其數據類型及長度選用哪種數據類型取值范圍要做哪些運算現在是37頁\一共有95頁\編輯于星期五數據類型(續)數據類型含義CHAR(n),CHARACTER(n)長度為n的定長字符串VARCHAR(n),CHARACTERVARYING(n)最大長度為n的變長字符串CLOB字符串大對象BLOB二進制大對象INT,INTEGER長整數(4字節)SMALLINT短整數(2字節)BIGINT大整數(8字節)NUMERIC(p,d)定點數,由p位數字(不包括符號、小數點)組成,小數后面有d位數字DECIMAL(p,d),DEC(p,d)同NUMERICREAL取決于機器精度的單精度浮點數DOUBLEPRECISION取決于機器精度的雙精度浮點數FLOAT(n)可選精度的浮點數,精度至少為n位數字BOOLEAN邏輯布爾量DATE日期,包含年、月、日,格式為YYYY-MM-DDTIME時間,包含一日的時、分、秒,格式為HH:MM:SSTIMESTAMP時間戳類型INTERVAL時間間隔類型現在是38頁\一共有95頁\編輯于星期五3.模式與表每一個基本表都屬于某一個模式一個模式包含多個基本表定義基本表所屬模式方法一:在表名中明顯地給出模式名Createtable"S-T".Student(......);/*模式名為S-T*/Createtable"S-T".Cource(......);Createtable"S-T".SC(......);方法二:在創建模式語句中同時創建表方法三:設置所屬的模式現在是39頁\一共有95頁\編輯于星期五模式與表(續)創建基本表(其他數據庫對象也一樣)時,若沒有指定模式,系統根據搜索路徑來確定該對象所屬的模式關系數據庫管理系統會使用模式列表中第一個存在的模式作為數據庫對象的模式名若搜索路徑中的模式名都不存在,系統將給出錯誤顯示當前的搜索路徑:SHOWsearch_path;搜索路徑的當前默認值是:$user,PUBLIC

現在是40頁\一共有95頁\編輯于星期五模式與表(續)數據庫管理員用戶可以設置搜索路徑,然后定義基本表

SETsearch_pathTO"S-T",PUBLIC;

CreatetableStudent(......);結果建立了S-T.Student基本表。關系數據庫管理系統發現搜索路徑中第一個模式名S-T,就把該模式作為基本表Student所屬的模式。現在是41頁\一共有95頁\編輯于星期五4.修改基本表ALTERTABLE<表名>[ADD[COLUMN]<新列名><數據類型>[完整性約束]][ADD<表級完整性約束>][DROP[COLUMN]<列名>[CASCADE|RESTRICT]][DROPCONSTRAINT<完整性約束名>[RESTRICT|CASCADE]][ALTERCOLUMN<列名><數據類型>];現在是42頁\一共有95頁\編輯于星期五修改基本表(續)<表名>是要修改的基本表ADD子句用于增加新列、新的列級完整性約束條件和新的表級完整性約束條件DROPCOLUMN子句用于刪除表中的列如果指定了CASCADE短語,則自動刪除引用了該列的其他對象如果指定了RESTRICT短語,則如果該列被其他對象引用,關系數據庫管理系統將拒絕刪除該列DROPCONSTRAINT子句用于刪除指定的完整性約束條件ALTERCOLUMN子句用于修改原有的列定義,包括修改列名和數據類型現在是43頁\一共有95頁\編輯于星期五修改基本表(續)[例3.8]向Student表增加“入學時間”列,其數據類型為日期型

ALTERTABLEStudentADDS_entranceDATE;不管基本表中原來是否已有數據,新增加的列一律為空值

現在是44頁\一共有95頁\編輯于星期五修改基本表(續)[例3.9]將年齡的數據類型由字符型(假設原來的數據類型是字符型)改為整數。

ALTERTABLEStudentALTERCOLUMNSageINT;[例3.10]增加課程名稱必須取唯一值的約束條件。

ALTERTABLECourseADDUNIQUE(Cname);現在是45頁\一共有95頁\編輯于星期五5.刪除基本表

DROPTABLE<表名>[RESTRICT|CASCADE];RESTRICT:刪除表是有限制的。欲刪除的基本表不能被其他表的約束所引用如果存在依賴該表的對象,則此表不能被刪除CASCADE:刪除該表沒有限制。在刪除基本表的同時,相關的依賴對象一起刪除現在是46頁\一共有95頁\編輯于星期五刪除基本表(續)[例3.11]刪除Student表

DROPTABLEStudentCASCADE;基本表定義被刪除,數據被刪除表上建立的索引、視圖、觸發器等一般也將被刪除現在是47頁\一共有95頁\編輯于星期五刪除基本表(續)

[例3.12]若表上建有視圖,選擇RESTRICT時表不能刪除;選擇CASCADE時可以刪除表,視圖也自動刪除。

CREATEVIEWIS_Student

AS SELECTSno,Sname,Sage FROMStudent WHERESdept='IS';

DROPTABLEStudentRESTRICT;--ERROR:cannotdroptableStudentbecauseotherobjectsdependonit

現在是48頁\一共有95頁\編輯于星期五刪除基本表(續)[例3.12續]如果選擇CASCADE時可以刪除表,視圖也自動被刪除DROPTABLEStudentCASCADE; --NOTICE:dropcascadestoviewIS_StudentSELECT*FROMIS_Student;--ERROR:relation"IS_Student"doesnotexist現在是49頁\一共有95頁\編輯于星期五刪除基本表(續)序號

標準及主流數據庫

的處理方式依賴基本表的對象SQL2011KingbaseESOracle12cMSSQLServer2012RCRCC1索引無規定√√√√√2視圖×√×√√保留√保留√保留3DEFAULT,PRIMARYKEY,CHECK(只含該表的列)NOTNULL等約束√√√√√√√4外碼FOREIGNKEY×√×√×√×5觸發器TRIGGER×√×√√√√6函數或存儲過程×√√保留√保留√保留√保留√保留DROPTABLE時,SQL2011與3個RDBMS的處理策略比較R表示RESTRICT,C表示CASCADE

'×'表示不能刪除基本表,'√'表示能刪除基本表,‘保留’表示刪除基本表后,還保留依賴對象現在是50頁\一共有95頁\編輯于星期五3.3數據定義3.3.1模式的定義與刪除3.3.2基本表的定義、刪除與修改3.3.3索引的建立與刪除3.3.4數據字典現在是51頁\一共有95頁\編輯于星期五3.3.3索引的建立與刪除建立索引的目的:加快查詢速度關系數據庫管理系統中常見索引:順序文件上的索引B+樹索引(參見愛課程網3.2節動畫《B+樹的增刪改》)散列(hash)索引位圖索引特點:B+樹索引具有動態平衡的優點HASH索引具有查找速度快的特點現在是52頁\一共有95頁\編輯于星期五索引誰可以建立索引數據庫管理員

或表的屬主(即建立表的人)誰維護索引關系數據庫管理系統自動完成

使用索引關系數據庫管理系統自動選擇合適的索引作為存取路徑,用戶不必也不能顯式地選擇索引現在是53頁\一共有95頁\編輯于星期五1.建立索引語句格式CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);<表名>:要建索引的基本表的名字索引:可以建立在該表的一列或多列上,各列名之間用逗號分隔<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE:此索引的每一個索引值只對應唯一的數據記錄CLUSTER:表示要建立的索引是聚簇索引現在是54頁\一共有95頁\編輯于星期五建立索引(續)[例3.13]為學生-課程數據庫中的Student,Course,SC三個表建立索引。Student表按學號升序建唯一索引,Course表按課程號升序建唯一索引,SC表按學號升序和課程號降序建唯一索引

CREATEUNIQUEINDEXStusnoONStudent(Sno);

CREATEUNIQUEINDEXCoucnoONCourse(Cno);

CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);

現在是55頁\一共有95頁\編輯于星期五2.修改索引ALTERINDEX<舊索引名>RENAMETO<新索引名>[例3.14]將SC表的SCno索引名改為SCSno ALTERINDEXSCnoRENAMETOSCSno;現在是56頁\一共有95頁\編輯于星期五3.刪除索引DROPINDEX<索引名>;刪除索引時,系統會從數據字典中刪去有關該索引的描述。[例3.15]刪除Student表的Stusname索引

DROPINDEXStusname;現在是57頁\一共有95頁\編輯于星期五3.3數據定義3.3.1模式的定義與刪除3.3.2基本表的定義、刪除與修改3.3.3索引的建立與刪除3.3.4數據字典現在是58頁\一共有95頁\編輯于星期五數據字典數據字典是關系數據庫管理系統內部的一組系統表,它記錄了數據庫中所有定義信息:關系模式定義視圖定義索引定義完整性約束定義各類用戶對數據庫的操作權限統計信息等關系數據庫管理系統在執行SQL的數據定義語句時,實際上就是在更新數據字典表中的相應信息。現在是59頁\一共有95頁\編輯于星期五第三章

關系數據庫標準語言SQL3.1SQL概述3.2學生-課程數據庫3.3數據定義3.4數據查詢3.5數據更新3.6空值的處理3.7視圖3.8小結現在是60頁\一共有95頁\編輯于星期五數據查詢語句格式

SELECT[ALL|DISTINCT]<目標列表達式>[,<目標列表達式>]…

FROM<表名或視圖名>[,<表名或視圖名>]…|(SELECT語句)

[AS]<別名>[WHERE<條件表達式>][GROUPBY<列名1>[HAVING<條件表達式>]][ORDERBY<列名2>[ASC|DESC]];

現在是61頁\一共有95頁\編輯于星期五數據查詢SELECT子句:指定要顯示的屬性列FROM子句:指定查詢對象(基本表或視圖)WHERE子句:指定查詢條件GROUPBY子句:對查詢結果按指定列的值分組,該屬性列值相等的元組為一個組。通常會在每組中作用聚集函數。HAVING短語:只有滿足指定條件的組才予以輸出ORDERBY子句:對查詢結果表按指定列值的升序或降序排序現在是62頁\一共有95頁\編輯于星期五3.4數據查詢3.4.1單表查詢3.4.2連接查詢3.4.3嵌套查詢3.4.4集合查詢基于派生表的查詢3.4.6Select語句的一般形式

現在是63頁\一共有95頁\編輯于星期五3.4.1單表查詢查詢僅涉及一個表1.選擇表中的若干列2.選擇表中的若干元組3.ORDERBY子句4.聚集函數5.GROUPBY子句現在是64頁\一共有95頁\編輯于星期五1.選擇表中的若干列查詢指定列

[例3.16]查詢全體學生的學號與姓名。

SELECTSno,Sname FROMStudent;

[例3.17]查詢全體學生的姓名、學號、所在系。

SELECTSname,Sno,Sdept FROMStudent;現在是65頁\一共有95頁\編輯于星期五選擇表中的若干列(續)查詢全部列選出所有屬性列:在SELECT關鍵字后面列出所有列名將<目標列表達式>指定為*[例3.18]查詢全體學生的詳細記錄SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent;或SELECT*FROMStudent;現在是66頁\一共有95頁\編輯于星期五查詢經過計算的值SELECT子句的<目標列表達式>不僅可以為表中的屬性列,也可以是表達式[例3.19]查全體學生的姓名及其出生年份。SELECTSname,2014-Sage/*假設當時為2014年*/FROMStudent;輸出結果:

Sname2014-Sage

李勇1994

劉晨1995

王敏1996

張立1995查詢經過計算的值(續)現在是67頁\一共有95頁\編輯于星期五[例3.20]查詢全體學生的姓名、出生年份和所在的院系,要求用小寫字母表示系名。SELECTSname,'YearofBirth:',2014-Sage,LOWER(Sdept)FROMStudent;輸出結果:

Sname'YearofBirth:'2014-SageLOWER(Sdept)

李勇YearofBirth:1994 cs

劉晨YearofBirth:1995 cs

王敏YearofBirth:1996 ma

張立YearofBirth:1995 is查詢經過計算的值(續)現在是68頁\一共有95頁\編輯于星期五使用列別名改變查詢結果的列標題:

SELECTSnameNAME,'YearofBirth:'

BIRTH,

2014-Sage

BIRTHDAY,LOWER(Sdept)

DEPARTMENT FROMStudent;輸出結果:

NAMEBIRTHBIRTHDAYDEPARTMENT

李勇YearofBirth:1994cs

劉晨YearofBirth:1995cs

王敏YearofBirth:1996ma

張立YearofBirth:1995is查詢經過計算的值(續)現在是69頁\一共有95頁\編輯于星期五3.4.1單表查詢查詢僅涉及一個表:1.選擇表中的若干列2.選擇表中的若干元組3.ORDERBY子句4.聚集函數5.GROUPBY子句現在是70頁\一共有95頁\編輯于星期五消除取值重復的行 如果沒有指定DISTINCT關鍵詞,則缺省為ALL[例3.21]查詢選修了課程的學生學號。

SELECTSnoFROMSC; 等價于:

SELECTALLSnoFROMSC; 執行上面的SELECT語句后,結果為:

Sno 201215121 201215121 201215121 201215122 2012151222.選擇表中的若干元組現在是71頁\一共有95頁\編輯于星期五消除取值重復的行(續)指定DISTINCT關鍵詞,去掉表中重復的行

SELECTDISTINCTSnoFROMSC;執行結果:

Sno 201215121 201215122現在是72頁\一共有95頁\編輯于星期五(2)查詢滿足條件的元組查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運算符確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重條件(邏輯運算)AND,OR,NOT表3.6常用的查詢條件現在是73頁\一共有95頁\編輯于星期五①

比較大小[例3.22]查詢計算機科學系全體學生的名單。

SELECTSnameFROMStudentWHERESdept=‘CS’;[例3.23]查詢所有年齡在20歲以下的學生姓名及其年齡。

SELECTSname,SageFROMStudentWHERESage<20;[例3.24]查詢考試成績有不及格的學生的學號。SELECTDISTINCTSnFROMSCWHEREGrade<60;現在是74頁\一共有95頁\編輯于星期五②確定范圍謂詞:

BETWEEN…AND…NOTBETWEEN…AND…[例3.25]

查詢年齡在20~23歲(包括20歲和23歲)之間的學生的姓名、系別和年齡

SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;[例3.26]查詢年齡不在20~23歲之間的學生姓名、系別和年齡

SELECTSname,Sdept,Sage FROMStudent WHERESageNOTBETWEEN20AND23;現在是75頁\一共有95頁\編輯于星期五③

確定集合謂詞:IN<值表>,NOTIN<值表>

[例3.27]查詢計算機科學系(CS)、數學系(MA)和信息系(IS)學生的姓名和性別。

SELECTSname,Ssex FROMStudent WHERESdeptIN('CS','MA’,'IS');[例3.28]查詢既不是計算機科學系、數學系,也不是信息系的學生的姓名和性別。

SELECTSname,Ssex

FROMStudent

WHERESdeptNOTIN('IS','MA’,'CS');現在是76頁\一共有95頁\編輯于星期五④字符匹配謂詞:[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]<匹配串>可以是一個完整的字符串,也可以含有通配符%和

_%(百分號)代表任意長度(長度可以為0)的字符串例如a%b表示以a開頭,以b結尾的任意長度的字符串_(下橫線)代表任意單個字符。例如a_b表示以a開頭,以b結尾的長度為3的任意字符串現在是77頁\一共有95頁\編輯于星期五字符匹配(續)匹配串為固定字符串[例3.29]查詢學號為201215121的學生的詳細情況。

SELECT*FROMStudentWHERESnoLIKE‘201215121';等價于:

SELECT*

FROMStudent

WHERESno='201215121';現在是78頁\一共有95頁\編輯于星期五字符匹配(續)匹配串為含通配符的字符串[例3.30]查詢所有姓劉學生的姓名、學號和性別。

SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE'劉%';[例3.31]查詢姓"歐陽"且全名為三個漢字的學生的姓名。

SELECTSnameFROMStudentWHERESnameLIKE'歐陽__';現在是79頁\一共有95頁\編輯于星期五字符匹配(續)[例3.32]查詢名字中第2個字為"陽"字的學生的姓名和學號。

SELECTSname,Sno

FROMStudent

WHERESnameLIKE'__陽%';[例3.33]查詢所有不姓劉的學生姓名、學號和性別。

SELECTSname,Sno,SsexFROMStudentWHERESnameNOTLIKE'劉%';現在是80頁\一共有95頁\編輯于星期五字符匹配(續)

使用換碼字符將通配符轉義為普通字符

[例3.34]

查詢DB_Design課程的課程號和學分。

SELECTCno,CcreditFROMCourseWHERECnameLIKE'DB\_Design'ESCAPE'\';[例3.35]查詢以"DB_"開頭,且倒數第3個字符為i的課程的詳細情況。

SELECT*FROMCourseWHERECnameLIKE'DB\_%i__'

ESCAPE'\';

ESCAPE'\'表示“\”為換碼字符

現在是81頁\一共有95頁\編輯于星期五⑤

涉及空值的查詢謂詞:ISNULL或ISNOTNULL“IS”不能用“=”代替

[例3.36]某些學生選修課程后沒有參加考試,所以有選課記錄,但沒有考試成績。查詢缺少成績的學生的學號和相應的課程號。

SELECTSno,CnoFROMSCWHEREGradeISNULL[例3.37]查所有有成績的學生學號和課程號。

SELECTSno,CnoFROMSCWHEREGradeISNOTNULL;現在是82頁\一共有95頁\編輯于星期五⑥多重條件查詢邏輯運算符:AND和OR來連接多個查詢條件

AND的優先級高于OR

可以用括號改變優先級[例3.38]查詢計算機系年齡在20歲以下的學生姓名。

SELECTSnameFROMStudentWHERESdept='CS'ANDSage<20;現在是83頁\一共有95頁\編輯于星期五多重條件查詢(續)改寫[例3.27][例3.27]查詢計算機科學系(CS)、數學系(MA)和信息系(IS)學生的姓名和性別。SELECTSname,SsexFROMStudentWHERESdeptIN('CS','MA','IS')可改寫為:SELECTSname,SsexFROMStudentWHERESdept='CS'ORSdept='MA'ORSdept='IS';現在是84頁\一共有95頁\編輯于星期五3.4.1單表查詢查詢僅涉及一個表:1.選擇表中的若干列2.選擇表中的若干元組3.ORDERBY子句4.聚集函數5.GROUPBY子句現在是85頁\一共有95頁\編輯于星期五3.ORDERBY子句ORDERBY子句可以按一個或多個屬性列排序升序:ASC;降序:DESC;缺省值為升序對于空值,排序時顯示的次序由具體系統實現來決定現在是86頁\一共有95頁\編輯于星期五ORDERBY子句(續)[例3.39]查詢選修了3號課程的學生的學號及

溫馨提示

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

評論

0/150

提交評論