數(shù)據(jù)庫原理-SQL語言基礎(chǔ)_第1頁
數(shù)據(jù)庫原理-SQL語言基礎(chǔ)_第2頁
數(shù)據(jù)庫原理-SQL語言基礎(chǔ)_第3頁
數(shù)據(jù)庫原理-SQL語言基礎(chǔ)_第4頁
數(shù)據(jù)庫原理-SQL語言基礎(chǔ)_第5頁
已閱讀5頁,還剩393頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫系統(tǒng)原理計算機科學(xué)與技術(shù)學(xué)院

第三章SQL語言學(xué)習(xí)要求

掌握關(guān)系數(shù)據(jù)庫標(biāo)準語言SQL的數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)查詢和數(shù)據(jù)控制語句;掌握視圖的基本概念及定義、查詢和更新。第三章SQL語言

3.1SQL概述3.2數(shù)據(jù)定義

3.3數(shù)據(jù)查詢3.4數(shù)據(jù)操縱3.5視圖3.6數(shù)據(jù)控制3.7嵌入式SQL

第一節(jié)SQL概述SQL語言的產(chǎn)生與發(fā)展SQL語言的基本概念SQL語言的特點

一、SQL的產(chǎn)生與發(fā)展SQL語言(StructuredQueryLanguage)1975年由Boyce和Chamberlin提出1975年~1979年IBM公司在SystemR原型系統(tǒng)上實現(xiàn)是關(guān)系數(shù)據(jù)庫的標(biāo)準語言,是數(shù)據(jù)庫領(lǐng)域中一個主流語言

SQL的產(chǎn)生與發(fā)展(續(xù))SQL標(biāo)準SQL-86第一個SQL標(biāo)準由美國國家標(biāo)準局的數(shù)據(jù)庫委員會(AmericanNationalStandardInstitute,簡稱ANSI)公布1987年國際標(biāo)準化組織(InternationalOrganizationforStandardization,簡稱ISO)通過SQL的產(chǎn)生與發(fā)展(續(xù))標(biāo)準大致頁數(shù)發(fā)布日期SQL/861986年10月SQL/89120頁1989年SQL/92622頁1992年SQL/991700頁1999年SQL/20033600頁2003年二、SQL語言的基本概念圖3.1SQL對關(guān)系數(shù)據(jù)庫模式的支持SQL語言支持關(guān)系數(shù)據(jù)庫三級模式結(jié)構(gòu)

SQL視圖1視圖2基本表1基本表2基本表4基本表3存儲文件1存儲文件2外模式模

式內(nèi)模式SQL語言的基本概念(續(xù))用戶用SQL語言對基本表和視圖進行操作?;颈肀旧愍毩⒋嬖诘谋?一個關(guān)系對應(yīng)一個表一個(或多個)基本表對應(yīng)一個存儲文件一個表可以帶若干索引,索引也存放在存儲文件中存儲文件存儲文件的邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式存儲文件的物理結(jié)構(gòu)是任意的,對用戶是透明的視圖從一個或幾個基本表或視圖導(dǎo)出的表是虛表,只存放視圖的定義而不存放對應(yīng)數(shù)據(jù)三、

SQL語言的特點⒈綜合統(tǒng)一

2.高度非過程化

3.面向集合的操作方式

4.同一種語法結(jié)構(gòu)提供兩種使用方式

5.語言簡捷,易學(xué)易用⒈綜合統(tǒng)一SQL語言集數(shù)據(jù)定義語言DDL、數(shù)據(jù)查詢語言DQL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL的功能于一體。數(shù)據(jù)定義語言DDL:創(chuàng)建數(shù)據(jù)庫中的各種對象;數(shù)據(jù)查詢語言DQL:提供對數(shù)據(jù)庫數(shù)據(jù)查詢;數(shù)據(jù)操縱語言DML:對數(shù)據(jù)庫數(shù)據(jù)插入、修改和刪除等基本操作;數(shù)據(jù)控制語言DCL:用來授予或回收訪問數(shù)據(jù)庫的某種特權(quán),并控制數(shù)據(jù)庫操縱事務(wù)發(fā)生的時間及效果,對數(shù)據(jù)庫進行監(jiān)視等。2.高度非過程化用戶只提出“做什么”,而不必指明“怎么做”存取路徑的選擇以及SQL語句的操作過程由系統(tǒng)自動完成,大大減輕了用戶負擔(dān),而且有利于提高數(shù)據(jù)獨立性。3.面向集合的操作方式SQL語言采用集合操作方式 操作對象、查找結(jié)果可以是元組的集合 一次插入、刪除、更新操作的對象可以是元組的集合。非關(guān)系數(shù)據(jù)模型采用的是面向記錄的操作方式,操作對象是一條記錄。4.同一種語法結(jié)構(gòu)提供兩種使用方式自含式語言能夠獨立地用于聯(lián)機交互的使用方式。嵌入式語言能夠嵌入到高級語言(例如C,C++,Java)程序中,供程序員設(shè)計程序時使用。

兩種不同使用方式下,

SQL語言的語法結(jié)構(gòu)基本一致。5.語言簡捷,易學(xué)易用SQL語言功能很強,但語言簡練,核心功能只用9個動詞。SQL語言接近英語口語,易學(xué)、易用。第三章SQL語言

3.1SQL概述

3.2數(shù)據(jù)定義

3.3數(shù)據(jù)查詢3.4數(shù)據(jù)操縱3.5視圖3.6數(shù)據(jù)控制3.7嵌入式SQL

第二節(jié)數(shù)據(jù)定義概述數(shù)據(jù)類型數(shù)據(jù)庫的創(chuàng)建與管理表的定義、修改與刪除索引的建立與刪除一、概述

SQL的數(shù)據(jù)定義功能定義數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫刪除數(shù)據(jù)庫管理數(shù)據(jù)庫定義表

創(chuàng)建表刪除表修改表定義定義視圖

創(chuàng)建視圖刪除視圖修改視圖(刪除+創(chuàng)建)定義索引

創(chuàng)建索引

刪除索引

修改索引(刪除+創(chuàng)建)

SQL

的數(shù)據(jù)定義語句操作對象操作方式創(chuàng)建刪除修改數(shù)據(jù)庫CREATEDATABASEDROPDATABASE表CREATETABLEDROPTABLEALTERTABLE視圖CREATEVIEWDROPVIEW索引CREATEINDEXDROPINDEX

二、數(shù)據(jù)類型在SQL中域的概念用數(shù)據(jù)類型來實現(xiàn)。屬性選用哪種數(shù)據(jù)類型從兩個方面來考慮:取值范圍做哪些運算數(shù)據(jù)類型含義CHAR(n)長度為n的定長字符串VARCHAR(n)最大長度為n的變長字符串INT長整數(shù)SMALLINT短整數(shù)NUMERIC定點數(shù),由p位數(shù)字組成,小數(shù)后面有d位數(shù)字DOUBLEPRECISION取決于機器精度的雙精度浮點數(shù)FLOAT(n)浮點數(shù),精度至少為n位數(shù)字DATE日期,包含年、月、日,格式為YYYY-MM-DDTIME時間,包含一日的時、分、秒,格式為HH:MM:SS數(shù)據(jù)類型不同的數(shù)據(jù)庫系統(tǒng)支持的數(shù)據(jù)類型不完全相同。IBMDB2SQL支持的數(shù)據(jù)類型SMALLINT 半字長二進制整數(shù).INTEGER或INT 全字長二進制整數(shù).DECIMAL(p[,q])或DEC(p[,q])

壓縮十進制數(shù),共p位,其中小數(shù)點后有q位.0≤q≤p≤15,q=0時可以省略不寫.FLOAT 雙字長浮點數(shù).三、數(shù)據(jù)庫的創(chuàng)建與管理以SQLServer2005為例SQLServerManagementStudioSQLServer管理控制臺是SQLServer2005提供的一種新的集成環(huán)境,用于訪問、配置、控制、管理和維護SQLServer的所有組件和工具。

單擊“開始”→“所有程序”→MicrosoftSQLServer2005→SQLServerManagementStudio→在“連接到服務(wù)器”對話框中,選擇要登錄的服務(wù)器類型和名稱以及身份驗證方式→單擊“連接”,啟動SQLServer管理控制臺。啟動SQLServer管理控制臺SQLServer管理控制臺顯示有“已注冊的服務(wù)器”組件窗口、“對象資源管理器”組件窗口、“文檔”組件窗口。

對象資源管理器組件是一種集成工具,可以查看和管理所有服務(wù)器類型的對象。用戶可以通過該組件操作數(shù)據(jù)庫,包括新建、修改、刪除數(shù)據(jù)庫、表、視圖等數(shù)據(jù)庫對象,新建查詢、設(shè)置關(guān)系圖、設(shè)置系統(tǒng)安全、數(shù)據(jù)庫復(fù)制、數(shù)據(jù)備份、恢復(fù)等操作,是最常用也是最重要的一個組件,類似于SQLServer2000中的企業(yè)管理器。管理控制臺常用功能MIcrosoftSQLServerManagementStudio1、用SQL語句創(chuàng)建用戶數(shù)據(jù)庫在標(biāo)準工具欄上單擊“新建查詢”,出現(xiàn)SQL編輯器窗口,在光標(biāo)處開始輸入T-SQL語句。使用T-SQL語句創(chuàng)建用戶數(shù)據(jù)庫的語法格式:CREATEDATABASEdatabase_nameON{[PRIMARY](NAME=logical_file_name,FILENAME=’os_file_name’,[,SIZE=size][,MAXSIZE={max_size|UNLIMTED}][,FILEGROWTH=grow_increment])}[,…n]LOGON{(NAME=logical_file_name,FILENAME=’os_file_name’[,SIZE=size][,MAXSIZE={max_size|UNLIMTED}][,FILEGROWTH=grow_increment])}[,…n]用SQL語句創(chuàng)建用戶數(shù)據(jù)庫(續(xù))參數(shù)說明參數(shù)說明database_name要建立的數(shù)據(jù)庫名稱PRIMARY在主文件組中指定文件。ON指定存儲數(shù)據(jù)庫數(shù)據(jù)部分的磁盤文件(數(shù)據(jù)文件)。LOGON指定建立數(shù)據(jù)庫的日志文件。NAME指定數(shù)據(jù)或日志文件的文件名稱FILENAME指定文件的操作系統(tǒng)文件名和路徑。os_file_name中的路徑必須指定為SQLServer所安裝服務(wù)器上的某個文件夾。SIZE指定數(shù)據(jù)或日志文件的大小。用戶可以以MB為單位指定大小,也可以使用默認單位KB來指定大小。當(dāng)添加數(shù)據(jù)文件或日志文件時,其默認大小是1MB。MAXSIZE指定文件能夠增長到的最大長度。默認單位為KB,用戶也可以以MB來指定該長度。如果沒有指定長度的話,文件將一直增長直到磁盤滿為止。要建立的數(shù)據(jù)庫大小單位為MB。FILEGROWTH指定文件的增長增量。該參數(shù)設(shè)置不能超過MAXSIZE參數(shù)。指定值的默認單位為MB,用戶也可以以KB為單位進行指定,此外還可以使用百分比(%)。如果該參數(shù)沒有指定的話,默認值為10%,最小值為64KB?!纠?

】創(chuàng)建一個名為Student的用戶數(shù)據(jù)庫,其數(shù)據(jù)文件初始大小為3MB,最大大小為50MB,文件大小增長量為1MB,日志文件初始大小為1MB,最大大小為12MB,文件增長量為10%。用SQL語句創(chuàng)建用戶數(shù)據(jù)庫(續(xù))創(chuàng)建數(shù)據(jù)庫的SQL語句CreatedatabasestudentOnprimary(Name=student_data,Filename=‘C:\programfiles\microsoftsqlserver\mssql.1\mssql\data\student.mdf’,Size=3,Maxsize=50,Filegrowth=1)Logon(Name=student_log,Filename=‘C:\programfiles\microsoftsqlserver\mssql.1\mssql\data\student_log.ldf’,Size=1,Maxsize=12,Filegrowth=10%)使用SQL語句創(chuàng)建用戶數(shù)據(jù)庫(續(xù))2、用SQL查看修改數(shù)據(jù)庫屬性使用ALTERDATABASE語句修改數(shù)據(jù)庫語法形式如下:ALTERDATABASEdatabasename{ADDfile<filespec>[,…n][TOfilegroupfilegroupname]|ADDlogfile<filespec>[,…n]|REMOVEfilelogical_file_name[withdelete]|MODIFYfile<filespec>|MODIFYname=new_databasename|ADDfilegroupfilegroup_name|REMOVEfilegroupfilegroup_name|MODIFYfilegroupfilegroup_name{filegroup_property|name=new_filegroup_name}}

【例2】

將兩個數(shù)據(jù)文件和一個事務(wù)日志文件添加到student數(shù)據(jù)庫中。(1)用戶數(shù)據(jù)庫的增縮

當(dāng)用戶數(shù)據(jù)庫的數(shù)據(jù)增長到要超過它的使用空間時,必須增加用戶數(shù)據(jù)庫的容量。增加用戶數(shù)據(jù)庫容量就是給它提供額外的設(shè)備空間。如果指派給用戶數(shù)據(jù)庫過多的存儲空間,可以通過縮減數(shù)據(jù)庫容量來減少存儲空間的浪費。使用對象資源管理器自動或手動增縮數(shù)據(jù)庫使用SQL語句增縮數(shù)據(jù)庫

3、管理用戶數(shù)據(jù)庫

增加用戶數(shù)據(jù)庫容量的SQL語句ALTERDATABASEdatabase_nameMODIFYFILE(NAME=file_name,SIZE=newsize)其中:database_name:欲增加容量的用戶數(shù)據(jù)庫名稱file_name:需要增加容量的用戶數(shù)據(jù)庫文件newsize:為用戶數(shù)據(jù)庫指定新的容量大小,該容量必須大于現(xiàn)有用戶數(shù)據(jù)庫的空間。使用T-SQL語句增縮數(shù)據(jù)庫【例3】

數(shù)據(jù)庫student的數(shù)據(jù)庫文件的初始分配空間為10MB,現(xiàn)在將其擴大到20MB。(2)數(shù)據(jù)庫的分離與附加當(dāng)用戶數(shù)據(jù)庫需要更改到同一計算機的不同SQLServer2005實例時,或者需要移動用戶數(shù)據(jù)庫時,將數(shù)據(jù)庫從實例中分離出來再附加上去是很有必要。分離數(shù)據(jù)庫分離數(shù)據(jù)庫是指將數(shù)據(jù)庫從SQLServer服務(wù)器實例中刪除,但是該數(shù)據(jù)庫的數(shù)據(jù)文件和事務(wù)日志文件依然保持不變。這樣可以將該數(shù)據(jù)庫附加到任何SQLserver實例中。在對象資源管理器中選擇要分離的用戶數(shù)據(jù)庫,右擊數(shù)據(jù)庫,選擇快捷菜單“任務(wù)”—“分離”,彈出“要分離的數(shù)據(jù)庫”界面,進行選擇即可。附加數(shù)據(jù)庫分離后的數(shù)據(jù)庫的數(shù)據(jù)文件與日志文件,可以附加到同一個或其他SQLserver實例上。在對象資源管理器中右擊數(shù)據(jù)庫,選擇快捷菜單“任務(wù)”—“附加”,彈出“要附加的數(shù)據(jù)庫”對話框,單擊“添加”,出現(xiàn)“定位數(shù)據(jù)庫文件”界面,選擇預(yù)附加的數(shù)據(jù)庫磁盤文件,然后“確定”即可將數(shù)據(jù)庫的數(shù)據(jù)文件和日志文件添加進來。

4、數(shù)據(jù)庫更名與刪除(1)數(shù)據(jù)庫更名在SQLserver中如果要更名的數(shù)據(jù)庫可能正在被其他用戶使用,所以要變更數(shù)據(jù)庫名稱的操作必須在脫機模式下方可進行,可以使用對象資源管理器或系統(tǒng)存儲過程sp_renamedb來更改數(shù)據(jù)庫的名稱。將數(shù)據(jù)庫設(shè)置為脫機模式給數(shù)據(jù)庫更名將數(shù)據(jù)庫設(shè)置為聯(lián)機模式(2)刪除用戶數(shù)據(jù)庫

在對象資源管理器上右擊欲刪除的數(shù)據(jù)庫名,在快捷菜單中選擇“刪除”,在出現(xiàn)的對話框中單擊“確認”即可刪除用戶數(shù)據(jù)庫。也可使用DROPDATABASE語句來刪除數(shù)據(jù)庫。如:

DROPDATABASEstudent單擊“執(zhí)行”后,將返回用戶數(shù)據(jù)庫的數(shù)據(jù)文件和日志文件均被刪除的信息。

注意:如果刪除某個正在使用的用戶數(shù)據(jù)庫,系統(tǒng)會提示“無法對該數(shù)據(jù)庫進行刪除”。另外,數(shù)據(jù)庫一旦被刪除,將是永久性的、不可恢復(fù)的,數(shù)據(jù)庫相應(yīng)的文件和數(shù)據(jù)將從服務(wù)器的硬盤中被物理刪除。四、基本表的定義、刪除與修改1、定義基本表語句格式CREATETABLE

<表名>(<列名><數(shù)據(jù)類型>[<列級完整性約束條件>]

[,<列名><數(shù)據(jù)類型>[<列級完整性約束條件>]]

[,<表級完整性約束條件>]);<表名>:所要定義的基本表的名字<列名>:組成該表的各個屬性(列)<列級完整性約束條件>:涉及相應(yīng)屬性列的完整性約束條件<表級完整性約束條件>:涉及一個或多個屬性列的完整性約束條件定義基本表(續(xù))常用完整性約束主碼約束:PRIMARYKEY唯一性約束:UNIQUE非空值約束:NOTNULL參照完整性約束SQLServer2005中的約束:CHECK約束限制輸入到一列或多列的值的范圍,即一個列的輸入內(nèi)容必須滿足CHECK約束的條件,否則數(shù)據(jù)無法輸入。DEFAULT約束如果沒有為列指定數(shù)據(jù),系統(tǒng)將默認值賦給列。例題【例4】建立一個“學(xué)生”表Student,它由學(xué)號Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成。其中學(xué)號為主碼,并且姓名取值也唯一。CREATETABLEStudent1(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20)UNIQUE,

SsexCHAR(1),SageSMALLINT,SdeptCHAR(15));SnoSnameSsexSageSdept↑

↑字符型字符型字符型

短整數(shù)

字符型長度為9長度為20不能為空長度為1只能取男或女

長度為15為主碼↑↑SQLServer2005中的SQL語句操作例題(續(xù))【例5】建立一個“課程”表Course。CREATETABLECourse

(CnoCHAR(4)PRIMARYKEY,

CnameCHAR(40),

CpnoCHAR(4),

CcreditSMALLINT

DEFAULT2,

FOREIGNKEY(Cpno)REFERENCESCourse(Cno)

/*表級完整性約束條件,Cpno是外鍵,被參照表是Course,被參照列是Cno*/);例題(續(xù))

例題(續(xù))【例6】建立一個“學(xué)生選課”表SC,它由學(xué)號Sno、課程號Cno,選修課成績Grade組成,其中(Sno,Cno)為主碼CREATETABLESC(SnoCHAR(9),CnoCHAR(4),Gradesmallint,

Primarykey(Sno,Cno),

ForeignKey(Sno)ReferencesStudent(Sno),

ForeignKey(Cno)ReferencesCourse(Cno)

);建立一個Employees表,由EmployeeId、LastName、FirstName、BirthDate、Address五個屬性組成,其中EmployeeId不能為空,并且值是唯一的。建立一個Customers表,由CustomerID、CompanyName、PostalCode、Country屬性組成,其中CustomerID是主鍵。建立一個Orders表,由OrderID、CustomerID、EmployeeID、Freight四個屬性組成,其中OrderID為主鍵,CustomerID、EmployeeID分別為外鍵。

練習(xí)2、修改基本表語句格式ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROPCOLUMN<列名>][DROP<完整性約束名>][ALTERCOLUMN<列名><數(shù)據(jù)類型>];<表名>:要修改的基本表ADD子句:增加新列和新的完整性約束條件DROP子句:刪除指定的列或完整性約束條件ALTERCOLUMN子句:用于修改列名和數(shù)據(jù)類型例題【例7】向Student表增加“入學(xué)時間”列,其數(shù)據(jù)類型為日期型。ALTER

TABLE

StudentADDS-entranceDATE;不論基本表中原來是否已有數(shù)據(jù),新增加的列一律為空值。

如果基本表中原來已有數(shù)據(jù),新增列不可有NOTNULL約束。例題【例8】將年齡的數(shù)據(jù)類型改為短整數(shù)。ALTERTABLEStudentALTERCOLUMN

SageSMALLINT;注:修改原有的列定義有可能會破壞已有數(shù)據(jù)

?!纠?】刪除學(xué)生姓名必須取唯一值的約束.

ALTERTABLEStudent

DROPUNIQUE(Sname);3、刪除基本表語句格式

DROPTABLE<表名>

;

基本表刪除:表中數(shù)據(jù)、表上的索引都刪除,表上的視圖往往仍然保留,但無法引用 刪除基本表時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)該基本表及其索引的描述。【例10】刪除Student表。

DROPTABLE

Student;SQLServer2005中的SQL語句操作練習(xí)題1、創(chuàng)建學(xué)生表s,條件如下所示。列名數(shù)據(jù)類型約束snoChar(10)主鍵snameChar(10)默認為‘unknow’ssexChar(1)只能是’f’或’m’saddrChar(20)無4、向s中增加系屬性sdept,類型為char(20),必須在(‘CS’,’IS’,’MA’)中。5、向s中增加出生日期sbirth,該日期不能在錄入當(dāng)天的日期之后。6、向s中增加進校日期sjxrq,默認值為錄入當(dāng)天的日期。7、向s中添加班長屬性sbz,外鍵,被參照的屬性是s中的sno。2、向s中增加籍貫屬性sjiguan,類型為char(20)3、刪除s中的saddr列。四、

索引的建立與刪除索引的概念類似于圖書中使用的目錄索引。索引文件的每項內(nèi)容包括:索引項和對應(yīng)記錄的物理地址。001002003…學(xué)號姓名性別年齡002李明男20003王輝男19…………001周敏女22索引文件數(shù)據(jù)文件003

索引的建立與刪除(續(xù))建立索引是加快查詢速度的有效手段。用戶可以在基本表上建立一個或多個索引,以提供多種存取路徑,加快查找速度。DBMS自動建立

PRIMARYKEYUNIQUEDBA或表的屬主(即建立表的人)根據(jù)需要建立

維護索引

DBMS自動完成

使用索引DBMS自動選擇是否使用索引以及使用哪些索引1、建立索引語句格式CREATE[UNIQUE][CLUSTERED]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);

用<表名>指定要建索引的基本表名字索引可以建立在該表的一列或多列上,各列名之間用逗號分隔用<次序>指定索引值的排列次序,升序:ASC,降序:DESC.缺省值:ASCUNIQUE表明此索引的每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄CLUSTERED表示要建立的索引是聚簇索引,索引項的順序與表中記錄的物理順序一致。

建立索引(續(xù))唯一值索引對于已含重復(fù)值的屬性列不能建UNIQUE索引對某個列建立UNIQUE索引后,插入新記錄時DBMS會自動檢查新記錄在該列上是否取了重復(fù)值,這相當(dāng)于增加了一個UNIQUE約束。在多列唯一索引的情況下,可以確保每個值的組合都是唯一的。聚簇索引建立聚簇索引后,基表中數(shù)據(jù)也需要按指定的聚簇屬性值的升序或降序存放。也即聚簇索引的索引項順序與表中記錄的物理順序一致。

類別商品名稱商品編號單價服裝西服X-002700家電洗衣機X-1001500家電冰箱B-3013500家電彩電C-0256000酒類白酒B-200450書籍教材J-10650鞋類皮鞋P-025420鞋類運動鞋Y-158660煙紙煙Z-002120服裝家電酒類書籍鞋類煙聚簇索引查找碼:類別主碼類別商品名稱商品編號單價服裝西服X-002700家電洗衣機X-1001500家電冰箱B-3013500家電彩電C-0256000酒類白酒B-200450書籍教材J-10650鞋類皮鞋P-025420鞋類運動鞋Y-158660煙紙煙Z-002120B-200B-301C-025J-106P-025X-002X-100Y-158Z-002非聚簇索引查找碼:商品編號主碼例題【例11】在Student表的Sname(姓名)列上建立一個聚簇索引,而且Student表中的記錄將按照Sname值的升序存放

CREATECLUSTEREDINDEXStusnameON

Student(Sname)【例12】為學(xué)生-課程數(shù)據(jù)庫中的Student,Course,SC三個表建立索引。其中Student表按學(xué)號升序建唯一索引,Course表按課程號升序建唯一索引,SC表按學(xué)號升序和課程號降序建唯一索引。CREATEUNIQUEINDEXStusno

ONStudent(Sno);CREATEUNIQUEINDEXCoucnoONCourse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);2、刪除索引語句格式

DROPINDEX<索引名>;刪除索引時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)該索引的描述.【例13】刪除Student表的Stusname索引。

DROPINDEXStusname;第三章SQL語言

3.1SQL概述3.2數(shù)據(jù)定義

3.3數(shù)據(jù)查詢3.4數(shù)據(jù)操縱3.5視圖3.6數(shù)據(jù)控制3.7嵌入式SQL

第三節(jié)數(shù)據(jù)查詢概述單表查詢連接查詢嵌套查詢集合查詢查詢語句的一般格式一、概述語句格式SELECT[ALL|DISTINCT]<目標(biāo)列表達式>

[,<目標(biāo)列表達式>]…FROM

<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達式>][GROUPBY<列名1>[HAVING<條件表達式>]][ORDERBY<列名2>[ASC|DESC]];含義:根據(jù)WHERE子句的條件表達式,從FROM子句指定的基本表或視圖中找出滿足條件的元組,再按SELECT子句中的目標(biāo)列表達式,選出元組中的屬性值形成結(jié)果表。語句格式SELECT子句:指定要顯示的屬性列FROM子句:指定查詢對象(基本表或視圖)WHERE子句:指定查詢條件

GROUPBY子句:對查詢結(jié)果按指定列的值分組,該屬性列值相等的元組為一個組。通常會在每組中作用集函數(shù)。HAVING短語:篩選出只有滿足指定條件的組。ORDERBY子句:對查詢結(jié)果表按指定列值的升序或降序排序

示例數(shù)據(jù)庫學(xué)生-課程數(shù)據(jù)庫學(xué)生表:

Student(Sno,Sname,Ssex,Sage,Sdept)課程表:

Course(Cno,Cname,Cpno,Ccredit)

學(xué)生選課表:

SC(Sno,Cno,Grade)

二、

單表查詢單表查詢

查詢僅涉及一個表,是一種最簡單的查詢操作選擇表中的若干列選擇表中的若干元組對查詢結(jié)果排序使用集函數(shù)對查詢結(jié)果分組

1、選擇表中的若干列屬投影運算不消除重復(fù)行變化方式主要表現(xiàn)在SELECT子句的<目標(biāo)列表達式>上 查詢指定列 查詢?nèi)苛?查詢經(jīng)過計算的值(1)查詢指定列方法在SELECT子句的<目標(biāo)列表達式>中指定要查詢的屬性。

<目標(biāo)列表達式>中各個列的先后順序可以與表中的邏輯順序不一致,即用戶可以根據(jù)應(yīng)用的需要改變列的顯示順序。[例1]查詢?nèi)w學(xué)生的學(xué)號與姓名。SELECTSno,SnameFROMStudent;

[例2]查詢?nèi)w學(xué)生的姓名、學(xué)號、所在系。SELECTSname,Sno,SdeptFROMStudent;(2)查詢?nèi)苛蟹椒ㄔ赟ELECT關(guān)鍵字后面列出所有列名。當(dāng)列的顯示順序與其在基表中的順序相同時,也可以簡單地將<目標(biāo)列表達式>指定為

*。[例3]查詢?nèi)w學(xué)生的詳細記錄。SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent;或SELECT*FROMStudent;(3)查詢經(jīng)過計算的值方法SELECT子句的<目標(biāo)列表達式>為表達式算術(shù)表達式字符串常量函數(shù)列別名[例4]查詢?nèi)w學(xué)生的姓名及其出生年份。SELECTSname,2013-SageFROMStudent;

輸出結(jié)果:Sname2013-Sage李勇劉晨王敏張立1992199319941993用戶可以通過指定別名來改變查詢結(jié)果的列標(biāo)題,這對于含算數(shù)表達式、常量、函數(shù)名的目標(biāo)列表達式尤為有用。

查詢經(jīng)過計算的值(續(xù))

查詢經(jīng)過計算的值(續(xù))[例5]查詢?nèi)w學(xué)生的姓名、出生年月和所在的院系,要求用小寫字母表示所有系名。SELECTSname,2013-SageAsBirthday,LOWER(Sdept)AsDEPTFORMstudent結(jié)果為:SnameBirthdayDEPT李勇1992cs劉晨1993cs王敏1994ma張立1993is

2、選擇表中的若干元組(1)消除取值重復(fù)的行方法:在SELECT子句中使用DISTINCT短語(2)查詢滿足條件的元組方法:使用WHERE子句(1)消除取值重復(fù)的行兩個本來并不完全相同的元組,投影到指定的某些列上后可能變成相同的行。[例6]查詢選修了課程的學(xué)生學(xué)號。(1)SELECTSno 或 SELECTALLSno

FROMSC; FROMSC;SnoCnoGrade9500195001950019500295002123239285889080Sno9500195001950019500295002設(shè)SC表中有下列數(shù)據(jù): 查詢結(jié)果如下:(2)如果想去掉重復(fù)行,需要使用DISTINCT短語

SELECTDISTINCTSnoFROMSC;

查詢的結(jié)果如下:Sno9500195002消除取值重復(fù)的行(續(xù))注意DISTINCT短語的作用范圍是所有目標(biāo)列例:查詢選修課程的各種成績錯誤的寫法SELECTDISTINCTCno,DISTINCTGradeFROMSC;正確的寫法

SELECTDISTINCTCno,Grade FROMSC;

消除取值重復(fù)的行(續(xù))(2)查詢滿足條件的元組屬于選擇運算通過WHERE子句實現(xiàn)比較大小確定范圍確定集合字符串匹配涉及空值的查詢多重條件查詢查詢滿足條件的元組(續(xù))表3.3常用的查詢條件查

件謂

詞比

較=,>,<,>=,<=,!=,<>,!>,!<;NOT

+

上述比較運算符確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空

值ISNULL,ISNOTNULL多重條件AND,OR

WHERE子句常用的查詢條件,NOT(1)比較大小方法在WHERE子句的<比較條件>中使用比較運算符=,>,<,>=,<=,!=或<>,!>,!<,邏輯運算符NOT+比較運算符[例7]查詢計算機系全體學(xué)生的姓名.SELECTSnameFROMStudentWHERESdept='CS';例題(續(xù))[例8]查詢所有年齡在20歲以下的學(xué)生姓名及其年齡。

SELECTSname,Sage

FROMStudent

WHERESage<20;或

SELECTSname,Sage

FROMStudent

WHERENOTSage>=20;例題(續(xù))[例9]查詢考試成績有不及格的學(xué)生的學(xué)號。SELECTDISTINCTSnoFROMSCWHEREGrade<60; 這里使用了DISTINCT,當(dāng)某個學(xué)生有多門課不及格時,他的學(xué)號只顯示一次(2)確定范圍方法使用謂詞BETWEEN…AND…

NOTBETWEEN…AND…

BETWEEN后:范圍的下限(即低值)

AND后:范圍的上限(即高值)用多重條件查詢實現(xiàn)例題[例10]查詢年齡在20~23歲(包括20歲和23歲)之間的學(xué)生的姓名、系別和年齡SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;[例11]查詢年齡不在20~23歲之間的學(xué)生姓名、系別和年齡.SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;(3)

確定集合謂詞IN可以用來查找屬性值屬于指定集合的元組。[例12]查詢信息系(IS)、數(shù)學(xué)系(MA)和計算機科學(xué)系(CS)學(xué)生的姓名和性別。SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS');[例13]查詢既不是信息系、數(shù)學(xué)系,也不是計算機科學(xué)系的學(xué)生的姓名和性別。SELECTSname,SsexFROMStudent

WHERESdeptNOTIN('IS','MA','CS');(4)字符串匹配方法使用謂詞LIKE或NOTLIKE

[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]含義:查找指定的屬性列值與<匹配串>相匹配的元組。<匹配串>:指定匹配模板匹配模板:固定字符串或含通配符的字符串當(dāng)匹配模板為固定字符串時,可以用=運算符取代LIKE謂詞,用!=或<>運算符取代NOTLIKE謂詞字符串匹配(續(xù))通配符%(百分號)代表任意長度(可以為0)的字符串。例:a%b表示以a開頭,以b結(jié)尾的任意長度的字符串。如acb,addgb,ab等都滿足該匹配串。_(下橫線)代表任意單個字符例:a_b表示以a開頭,以b結(jié)尾的長度為3的任意字符串。

如acb,afb等都滿足該匹配串。ESCAPE短語:當(dāng)用戶要查詢的字符串本身就含有%或_時,要使用ESCAPE'<換碼字符>'短語對通配符進行轉(zhuǎn)義.

例題1)匹配模板為固定字符串[例14]查詢學(xué)號為95001的學(xué)生的詳細情況。

SELECT*

FROMStudent

WHERESnoLIKE'95001';等價于:

SELECT*

FROMStudent

WHERESno='95001';例題(續(xù))2)匹配模板為含通配符的字符串[例15]查詢所有姓劉學(xué)生的姓名、學(xué)號和性別.

SELECTSname,Sno,Ssex

FROMStudent

WHERESnameLIKE‘劉%’;[例16]查詢姓"歐陽"且全名為三個漢字的學(xué)生的姓名.

SELECTSname

FROMStudent

WHERESnameLIKE‘歐陽

_';匹配模板為含通配符的字符串(續(xù))[例17]查詢名字中第2個字為"陽"字的學(xué)生的姓名和學(xué)號.

SELECTSname,SnoFROMStudentWHERESnameLIKE‘_陽%’;[例18]查詢所有不姓劉的學(xué)生姓名.

SELECTSname,Sno,Ssex

FROMStudent

WHERESnameNOTLIKE'劉%';例題(續(xù))3)使用換碼字符將通配符轉(zhuǎn)義為普通字符

[例19]查詢DB_Design課程的課程號和學(xué)分。

SELECTCno,Ccredit

FROMCourse

WHERECnameLIKE'DB\_Design'

ESCAPE‘\’

ESCAPE‘\’定義\為轉(zhuǎn)義字符,它使其后的_不再具有通配符含義,而作為通常字符。例題(續(xù))使用換碼字符將通配符轉(zhuǎn)義為普通字符(續(xù))[例20]查詢以“DB_”開頭,且倒數(shù)第3個字符為i的課程的詳細情況。

SELECT*

FROMCourse

WHERECnameLIKE'DB\_%i__'ESCAPE'\';(5)涉及空值的查詢方法使用謂詞ISNULL或ISNOTNULL

“ISNULL”不能用“=NULL”代替[例21]查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號和相應(yīng)的課程號。

SELECTSno,Cno

FROMSC

WHEREGradeISNULL;例題(續(xù))[例22]查所有有成績的學(xué)生學(xué)號和課程號。

SELECTSno,Cno

FROMSC

WHEREGradeISNOTNULL;(6)多重條件查詢

方法用邏輯運算符AND和OR來聯(lián)結(jié)多個查詢條件

AND的優(yōu)先級高于OR

可以用括號改變優(yōu)先級可用來實現(xiàn)多種其他謂詞

[NOT]IN

[NOT]BETWEEN…AND…[例23]查詢計算機系年齡在20歲以下的學(xué)生姓名。

SELECTSname

FROMStudent

WHERESdept='CS'ANDSage<20;例題(續(xù))改寫[例12][例12]查詢信息系(IS)、數(shù)學(xué)系(MA)和計算機科學(xué)系(CS)學(xué)生的姓名和性別

SELECTSname,Ssex FROMStudent WHERESdeptIN('IS','MA','CS')

可改寫為:

SELECTSname,Ssex

FROMStudent

WHERESdept='IS'ORSdept='MA'

ORSdept='CS';例題(續(xù))改寫[例10][例10]查詢年齡在20~23歲(包括20歲和23歲)之間的學(xué)生的姓名、系別和年齡.

SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;可改寫為:

SELECTSname,Sdept,SageFROMStudent

WHERESage>=20ANDSage<=23;3、對查詢結(jié)果排序方法

使用ORDERBY子句可以按一個或多個屬性列排序升序:ASC;降序:DESC;缺省值為升序 當(dāng)排序列含空值時ASC:排序列為空值的元組最后顯示DESC:排序列為空值的元組最先顯示

對查詢結(jié)果排序(續(xù))[例24]查詢選修了3號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按分數(shù)降序排列。

SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;查詢結(jié)果如右表所示SnoGrade9501095024950079500395010950099501495002928282756155

對查詢結(jié)果排序(續(xù))[例25]查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號升序排列,同一系中的學(xué)生按年齡降序排列。

SELECT*

FROMStudent

ORDERBYSdept,SageDESC;4、使用集函數(shù)(聚集函數(shù))5類主要集函數(shù)計數(shù)COUNT(*)

統(tǒng)計元組個數(shù)COUNT([DISTINCT|ALL]<列名>)統(tǒng)計一列中值的個數(shù)計算總和SUM([DISTINCT|ALL]<列名>)計算一列值的總和

計算平均值A(chǔ)VG([DISTINCT|ALL]<列名>)計算一列值的平均值求最大值

MAX([DISTINCT|ALL]<列名>)求一列值中的最大值

求最小值

MIN([DISTINCT|ALL]<列名>)求一列值中的最小值

使用集函數(shù)(續(xù))[例26]查詢學(xué)生總?cè)藬?shù)。

SELECTCOUNT(*)

FROMStudent;

[例27]查詢選修了課程的學(xué)生人數(shù)。

SELECTCOUNT(DISTINCTSno)FROMSC;注:用DISTINCT以避免重復(fù)計算學(xué)生人數(shù)使用集函數(shù)(續(xù))[例28]計算1號課程的學(xué)生平均成績。

SELECTAVG(Grade)

FROMSC

WHERECno='1';

[例29]查詢選修1號課程的學(xué)生最高分數(shù)。

SELECTMAX(Grade)

FROMSC

WHERCno='1';問題:若要查詢各門課程的學(xué)生平均分怎么查?方法:按課程號進行分組,然后統(tǒng)計每組成績的平均分

5、對查詢結(jié)果分組用途

細化集函數(shù)的作用對象未對查詢結(jié)果分組,集函數(shù)將作用于整個查詢結(jié)果對查詢結(jié)果分組后,集函數(shù)將分別作用于每個組方法使用GROUPBY子句分組

例GROUPBY子句的作用對象是查詢的中間結(jié)果表分組方法:按指定的一列或多列值分組,值相等的為一組使用GROUPBY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù)。

對查詢結(jié)果分組(續(xù))使用HAVING短語篩選最終輸出結(jié)果只有滿足HAVING短語指定條件的組才輸出例HAVING短語與WHERE子句的區(qū)別:作用對象不同WHERE子句作用于基表或視圖,從中選擇滿足條件的元組.HAVING短語作用于組,從中選擇滿足條件的組。例例題[例30]求各個課程號及相應(yīng)的選課人數(shù).

SELECTCno,COUNT(Sno) FROMSC GROUPBYCno;

結(jié)果CnoCOUNT(Sno)123452234443348

對查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后對每一組作用聚集函數(shù)COUNT計算,以求得該組的學(xué)生人數(shù)。問題:查詢選課人數(shù)超過30人的課程號如何查?[例31]查詢選課人數(shù)超過30人的課程號.

SELECTCno FROMSC GROUPBYCnoHAVINGCOUNT(Sno)>30從表中選出滿足COUNT(Sno)>30的元組。CnoCOUNT(Sno)123452234443348CnoCOUNT(Sno)234534443348例題例題[例32]查詢選修了3門以上課程的學(xué)生學(xué)號。

SELECTSno

FROMSC

GROUPBYSno

HAVINGCOUNT(*)>3;

[例33]查詢有3門以上課程在90分以上的學(xué)生的學(xué)號及90分以上的課程數(shù)。

SELECTSno,COUNT(*)

FROMSC

WHEREGrade>=90

GROUPBYSno

HAVINGCOUNT(*)>=3;先用GROUPBY子句按Sno進行分組,再用聚集函數(shù)COUNT對每一組計數(shù)。HAVING短語給出選擇組的條件,只有滿足條件的組才被選出來。練習(xí)題Employees(EmployeeID,FirstName,LastName,Title,Address)Customers(CustomerID,CompanyName,PostalCode,Country)Orders(OrderID,CustomerID,EmployeeID,Freight)1、查詢雇員總?cè)藬?shù)。2、查詢處理了用戶訂單的雇員人數(shù)。3、計算2號雇員處理的訂單的平均運費。4、計算所有訂單中運費的最高額。5、求每個雇員的雇員編號和處理的訂單數(shù)。6、查詢處理的訂單數(shù)超過3的雇員的雇員編號。7、查詢處理的訂單數(shù)超過3且每筆訂單運費都超過30的雇員的雇員編號。

三、

連接查詢同時涉及多個表的查詢稱為連接查詢。連接條件Where子句中用來連接兩個表的條件稱為連接條件或連接謂詞。常用格式[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>

比較運算符:=、>、<、>=、<=、!=[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>

連接查詢(續(xù))連接字段連接謂詞中的列名稱為連接字段連接條件中的各連接字段類型必須是可比的,但名字不必是相同的一個列名若在多個表中出現(xiàn),則必須帶前綴<表名>.,否則可以省略前綴。連接查詢(續(xù))SQL中連接查詢的主要類型 等值連接(含自然連接)查詢

非等值連接查詢 自身連接查詢 外連接查詢 復(fù)合條件連接查詢1、等值與非等值連接查詢等值連接連接運算符為=的連接操作

[<表名1>.]<列名1>=[<表名2>.]<列名2>任何子句中引用表1和表2中同名屬性時,都必須加表名前綴。引用唯一屬性名時可以加也可以省略表名前綴。等值與非等值連接查詢(續(xù))[例34]查詢每個學(xué)生及其選修課程的情況。

SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;等值與非等值連接查詢(續(xù))假設(shè)Student表、SC表分別有下列數(shù)據(jù):

Student表SnoSnameSsexSageSdept95001950029500395004李勇劉晨王敏張立男女女男20191819CSISMAISSnoCnoGrade9500195001950019500295002123239285889080SC表等值與非等值連接查詢(續(xù))結(jié)果表Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade9500195001950019500295002李勇李勇李勇劉晨劉晨男男男女女2020201919CSCSCSISIS9500195001950019500295002123239285889080等值與非等值連接查詢(續(xù))自然連接等值連接的一種特殊情況,把目標(biāo)列中重復(fù)的屬性列去掉。

<表名1>.<列名1>=<表名2>.<列名2>實踐中比等值連接更常用[例35]對[例34]用自然連接完成。

SELECTStudent.Sno,Sname,Ssex,Sage,

Sdept,Cno,Grade

FROMStudent,SC

WHEREStudent.Sno=SC.Sno;自然連接(續(xù))結(jié)果Student.SnoSnameSsexSageSdeptCnoGrade9500195001950019500295002李勇李勇李勇劉晨劉晨男男男女女2020201919CSCSCSISIS123239285889080

等值與非等值連接查詢(續(xù))非等值連接 連接運算符不為=的連接操作實踐中很少使用

[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>比較運算符:>、<、>=、<=、!=

[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>

2、自身連接一個表與其自己進行連接,稱為表的自身連接。表示方法需要給表起別名以示區(qū)別。由于所有屬性名都是同名屬性,因此必須使用別名前綴[例36]查詢每一門課的間接先修課(即先修課的先修課).

SELECTC1.Cno,C2.Cpno

FROMCourseC1,CourseC2

WHEREC1.Cpno=C2.Cno;自身連接(續(xù))C1表(Course表) C2表(Course表)CnoCnamecpnoCcredit1234567數(shù)據(jù)庫數(shù)學(xué)信息系統(tǒng)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)處理PASCAL語言516764243424CnoCnamecpnoCcredit1234567數(shù)據(jù)庫數(shù)學(xué)信息系統(tǒng)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)處理PASCAL語言516764243424結(jié)果Cnocpno135756連接條件:C1.Cpno=C2.Cno練習(xí)題Employees(EmployeeID,FirstName,LastName,Title,Address)Customers(CustomerID,CompanyName,PostalCode,Country)Orders(OrderID,CustomerID,EmployeeID,Freight)1、查詢2號雇員及其銷售訂單的所有信息。2、查詢與名字叫Robert的雇員在同一個職位的雇員的編號、姓氏、名字和職位。3、查詢與顧客編號為AROUT的顧客所在國家相同的顧客編號、公司名稱及國家。補充:SQLServer2005中實現(xiàn)連接的另一種方法:SELECTtable1.column,table2.column,……

FROMtable1INNERJOINtable2ONjoin_condition

WHEREsearch_condition例35:SELECTStudent.*,SC.*

FROMStudent,SC

WHEREStudent.Sno=SC.Sno;可寫為:SELECTStudent.*,SC.*

FROMStudent

INNERJOIN

SCON

(Student.Sno=SC.Sno)

3、外連接(OuterJoin)外連接與普通連接的區(qū)別普通連接操作只輸出滿足連接條件的元組外連接操作以指定表為連接主體,

將主體表中不滿足連接條件的元組一并輸出外連接是對標(biāo)準SQL的擴充,不同的DBMS對外連接的規(guī)定存在差異外連接操作的種類 左外連接:列出左邊關(guān)系中的所有元組 右外連接:列出右邊關(guān)系中的所有元組[例37]:用外連接操作改寫[例34]。SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudentLEFTOUTERJOINSCON(Student.Sno=SC.Sno);外連接(續(xù))DB2的外連接外連接操作在表名后面加外連接操作符(*)或(+)指定非主體表非主體表有一“萬能”的虛行,該行全部由空值組成虛行可以和主體表中所有不滿足連接條件的元組進行連接由于虛行各列全部是空值,因此與虛行連接的結(jié)果中來自非主體表的屬性值全部是空值SYBASE的外連接SYBASE使用*=

表示左外連接,左部為主體表,連接的結(jié)果包含左部表的所有行。=*表示右外連接,右部為主體表,連接的結(jié)果包含右部表的所有行。外連接(續(xù))[例38]:用外連接操作改寫[例35]。DB2的寫法:SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno(*);

SYBASE的寫法:SELECTStudent.Sno,Sname,Sse,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno*=SC.Sno;外連接(續(xù))假設(shè)Student表、SC表分別有下列數(shù)據(jù):

Student表SnoSnameSsexSageSdept95001950029500395004李勇劉晨王敏張立男女女男20191819CSCSMAISSnoCnoGrade9500195001950019500295002123239285889080SC表外連接(續(xù))結(jié)果:Student.SnoSnameSsexSageSdeptCnoGrade95001950019500195002950029500395004李勇李勇李勇劉晨劉晨王敏張立男男男女女女男20202019191819CSCSCSISISMAIS12323NullNull9285889080NullNull

4、復(fù)合條件連接WHERE子句中含多個連接條件時,稱為復(fù)合條件連接。復(fù)合條件連接的類型 兩表按多個屬性連接 自身按多個屬性連接 多表連接復(fù)合條件連接(續(xù))[例39]查詢選修2號課程且成績在90分以上的所有學(xué)生的學(xué)號,姓名。

SELECTStudent.Sno,SnameFROMStudent,SCWHEREStudent.Sno=SC.Sno/*連接謂詞*/

ANDSC.Cno='2'/*其他限定條件*/

ANDGrade>90;/*其他限定條件*/(該例只有一個連接條件)兩表連接復(fù)合條件連接(續(xù))[例39]查詢每個學(xué)生的學(xué)號、姓名、選修的課程名及成績.

SELECTStudent.Sno,Sname,Cname,Grade

FROMStudent,SC,Course

WHEREStudent.Sno=SC.SnoandSC.Cno=Course.Cno;

結(jié)果:Student.SnoSnameCnameGrade9500195001950019500295002李勇李勇李勇劉晨劉晨數(shù)據(jù)庫數(shù)學(xué)信息系統(tǒng)數(shù)學(xué)信息系統(tǒng)9285889080練習(xí)Employees(EmployeeID,FirstName,LastName,Title,Address)Customers(CustomerID,CompanyName,PostalCode,Country)Orders(OrderID,CustomerID,EmployeeID,Freight)1、查詢名字為Robert的雇員處理的訂單的公司名稱和運費。2、查詢

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論