SQL結(jié)構(gòu)化查詢語言_第1頁
SQL結(jié)構(gòu)化查詢語言_第2頁
SQL結(jié)構(gòu)化查詢語言_第3頁
SQL結(jié)構(gòu)化查詢語言_第4頁
SQL結(jié)構(gòu)化查詢語言_第5頁
已閱讀5頁,還剩119頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

SQL結(jié)構(gòu)化查詢語言學(xué)習(xí)重點(diǎn):1、SQL語言的特點(diǎn)2、區(qū)別DDL(CREATDROPALTER)

DML(INSERDELETEUPDAESELECT)3、索引(聚簇索引和非聚簇索引的定義及區(qū)別)——與UNIQUE(候選鍵)和PRIMARY(主鍵)約束的關(guān)系。2026年1月15日31、1974年由CHAMBERLIN和BOYCE提出,當(dāng)時稱為SEQUEL(STUCTUREDENGLISHQUERYLANGUAGE)2、IBM公司對其進(jìn)行了修改,并用于其SYSTEMR關(guān)系數(shù)據(jù)庫系統(tǒng)中;3、1981年IBM推出其商用關(guān)系關(guān)系數(shù)據(jù)庫SQL/DS,并將其名字改為SQL,由于SQL語言功能強(qiáng)大,簡潔易用,因此得到了廣泛的使用;4、今天廣泛應(yīng)用于各種大型數(shù)據(jù)庫,如SYBASE、INFORMIX、ORACLE、DB2、INGRES等,也用于各種小型數(shù)據(jù)庫,如FOXPRO、ACCESS。4.1SQL的發(fā)展2026年1月15日4SQL的主要特點(diǎn)1、一體化(集DDL、DML、DCL為一體)2、兩種使用方法,統(tǒng)一的語法結(jié)構(gòu)(可獨(dú)立使用,也可以為嵌入語言)3、高度非過程化(用戶只需提出干什么,無需指出怎么干)4、語言簡潔,易學(xué)易用2026年1月15日5數(shù)據(jù)定義(DDL)定義、刪除、修改關(guān)系模式(基本表)定義、刪除視圖(View)定義、刪除索引(Index)數(shù)據(jù)操縱(DML)數(shù)據(jù)查詢數(shù)據(jù)增、刪、改數(shù)據(jù)控制(DCL)用戶訪問權(quán)限的授予、收回SQL的功能SQL功能動詞數(shù)據(jù)庫查詢SELECT數(shù)據(jù)定義CREAT,DROP,ALTER數(shù)據(jù)操縱INSERT,UPDATE,DELETE數(shù)據(jù)控制GRANT,REVOKE2026年1月15日6SQL數(shù)據(jù)定義當(dāng)用SQL語句定義表時,需要為表中的每一個字段設(shè)置一個數(shù)據(jù)類型,用來指定字段所存放的數(shù)據(jù)是整數(shù)、字符串、貨幣或是其它類型的數(shù)據(jù)。SQLSERVER的數(shù)據(jù)類型有很多種,分為9類:2026年1月15日71.整數(shù)數(shù)據(jù)類型:依整數(shù)數(shù)值的范圍大小,有BIT,INT,SMALLINT,TINYINT四種。2.精確數(shù)值類型:用來定義可帶小數(shù)部分的數(shù)字,有NUMERIC和DECIMAL兩種。二者相同,但建議使用DECIMAL。如:123.0、8000.563.近似浮點(diǎn)數(shù)值數(shù)據(jù)類型:當(dāng)數(shù)值的位數(shù)太多時,可用此數(shù)據(jù)類型來取其近似值,用FLOAT和REAL兩種。如:1.23E+104.日期時間數(shù)據(jù)類型:用來表示日期與時間,依時間范圍與精確程度可分為DATETIME與SMALLDATETIME兩種。如:1998-06-0815:30:002026年1月15日85.字符串?dāng)?shù)據(jù)類型:用來表示字符串的字段。包括:CHAR,VARCHAR,TEXT三種,如:“數(shù)據(jù)庫”6.UNICODE字符串?dāng)?shù)據(jù)類型:UNICODE是雙字節(jié)文字編碼標(biāo)準(zhǔn),包括NCHAR,NVARCHAR與NTEXT三種。與字符串?dāng)?shù)據(jù)類型相類似,但UNICODE的一個字符用2字節(jié)存儲,而一般字符數(shù)據(jù)用一個字節(jié)存儲。7.二進(jìn)制數(shù)據(jù)類型:用來定義二進(jìn)制碼的數(shù)據(jù)。有:BINARY,VARBINARY,IMAGE

三種,通常用十六進(jìn)制表示:如:OX5F3C2026年1月15日9

數(shù)據(jù)類型數(shù)據(jù)內(nèi)容與范圍占用的字節(jié)BIT0,1,NULL實(shí)際使用1BIT,但會占用1BYTE,若一個數(shù)據(jù)中有數(shù)個BIT字段,則可共占1個BYTE8.貨幣數(shù)據(jù)類型:用來定義與貨幣有關(guān)的數(shù)據(jù),分為MONEY與SMALLMONEY兩種,如:123.00009.標(biāo)記數(shù)據(jù)類型:有UNIQUEIDENTIFIER

,TIMESTAMP兩種,此數(shù)據(jù)類型通常系統(tǒng)自動產(chǎn)生,而不是用戶輸入的,TIMESTAMP記錄數(shù)據(jù)更新的時間戳印,而UNIQUEIDENTIFIER用來識別每一筆數(shù)據(jù)的唯一性。2026年1月15日10INT-2^31到2^31-14BYTESSMALLINT-2^15至2^15-12BYTESTINYINT0至2551BYTESNUMERIC-10^38-1至10^38-11-9位數(shù)使用5BYTES10-19位數(shù)使用9BYTES20-28位數(shù)使用13BYTES29-38位數(shù)使用17BYTESDECIMAL-10^38-1至10^38-15-17BYTES因長度而異,與NUMERIC相同F(xiàn)LOAT-1.79E+306至1.79E+308,最多可表示53位數(shù)8BYTESREAL-3.40E+38到3.40E+38,最多可表示24位數(shù)4BYTES2026年1月15日11DATETIME1753/1/1至9999/12/318BYTESSMALLDATETIME1900/1/1至2079/6/64BYTESCHAR1-8000個字符1個字符占1B,尾端空白字符保留VARCHAR1-8000個字符1個字符占1B,尾端空白字符刪除。TEXT2^31-1個字符1個字符占2B,最大可存儲2GBNCHAR1-4000個字符1個字符占2B,尾端空白字符保留NVARCHAR1-4000個字符1個字符占2B,尾端空白字符刪除2026年1月15日12NTEXT2^30-1個字符1個字符占2B,最大可存儲2GBBINARY1-8000個字符在存儲時,SQLSERVER會另外增加4B,尾端空白字符會保留VARBINARY1-8000個字符在存儲時,SQLSERVER會另外增加4B,尾端空白字符會刪除IMAGE2^31-1個字符最大可存儲2GBMONEY-2^63-2^63-18BSMALLMONEY-2^31-2^31-14BTIMESTAMP16進(jìn)制8BUNIQUEIDENTIFIER全局唯一標(biāo)識符(GUID)可用NEWID()函數(shù)生成一個該種類型的字段值。4.2定義子語言DDL回答如下問題:

1.定義子語言的三個命令關(guān)鍵字?

2.數(shù)據(jù)庫定義?

3.表定義?

5.索引定義?

4.視圖定義?一.定義子語言的三個命令關(guān)鍵字說明:

(1)

Create

(2)

Drop

(3)

Alter

各個命令關(guān)鍵字后應(yīng)緊跟所要定義的對象關(guān)鍵字,如數(shù)據(jù)庫為DATABASE、表為TABLE、視圖為VIEW、索引為INDEX。例如:CREATEDATABASE、DROPDATABASE、ALTERDATABASE等等。

SQLSERVER中可用此三命令的數(shù)據(jù)庫對象有:DATABASE、TABLE、VIEW、INDEX、TRIGGER、PROCEDURE、RULE、DEFAULT、FUNCTION。

SQLSERVER中,有幾個數(shù)據(jù)庫對象沒有ALTER命令,如:INDEX、RULE、DEFAULT沒有ALTER。二.定義數(shù)據(jù)庫1.數(shù)據(jù)庫及日志

數(shù)據(jù)庫:在中/大型數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫是一個存儲空間,用于存放數(shù)據(jù)庫中的數(shù)據(jù)庫對象,包括表、視圖、索引、存儲過程、觸發(fā)器、與數(shù)據(jù)庫安全性有關(guān)的控制機(jī)制以及其它對象等。

日志(Log):是數(shù)據(jù)庫故障恢復(fù)的重要手段和方法。用于記錄對數(shù)據(jù)庫的各種操作及所涉及的相關(guān)數(shù)據(jù),實(shí)際上也需要一個存儲空間。為安全起見,一般與數(shù)據(jù)庫分開存放。 CREATEDATABASE數(shù)據(jù)庫名

[ON

[<filespec>[,...n]]

]

[LOGON{<filespec>[,...n]}]CreateDatabase命令語法:2.創(chuàng)建數(shù)據(jù)庫(CREATEDATABASE)

<filespec>::= [PRIMARY]

([NAME=

邏輯名,]

FILENAME=

‘OS文件的路徑及名字’

[,SIZE=

文件初始大小]

[,MAXSIZE={最大值|UNLIMITED}]

[,FILEGROWTH=

文件大小增量值])

[,...n]

CreateDatabaseStuData

OnPrimary

(Name=StuFile1,Filename=`c:\production\data\StuFile1.mdf',Size=10MB,MaxSize=1000MB,FileGrowth=10MB),(Name=StuFile2,Filename=`c:\production\data\StuFile2.ndf',Size=10MB,MaxSize=1000MB,FileGrowth=10%)

LogOn(Name=Stulog,Filename=`c:\production\data\Stulog.ldf',Size=10MB,MaxSize=1000MB,FileGrowth=10MB)

示例:

①主數(shù)據(jù)文件擴(kuò)展名為.mdf;

說明:

②次數(shù)據(jù)文件擴(kuò)展名為.ndf;

③日志文件擴(kuò)展名均為.ldf。ALTERDATABASE數(shù)據(jù)庫名

{ADDFILE<filespec>[,...n]|MODIFYFILE<filespec>

|REMOVEFILE邏輯文件名

|ADDLOGFILE<filespec>[,...n]

|MODIFYNAME=

新數(shù)據(jù)庫名

}

<filespec>::=(NAME=

邏輯文件名

[,NEWNAME=

新邏輯文件名]

[,FILENAME=

‘OS文件的路徑及名字’

]

[,SIZE=文件的初始大小]

[,MAXSIZE=最大的文件尺寸

[,FILEGROWTH=

文件大小增量])

3.修改數(shù)據(jù)庫(ALTERDATABASE)AlterDatabase命令語法:2026年1月15日20示例:ALTERDATABASEStuDataADDFILE (Name=StuFile3, Filename='c:\stufiles.ndf', Size=10MB)ALTERDATABASEStuDataMODIFYFILE (Name=StuFile1, MaxSize=3000MB)2026年1月15日21從數(shù)據(jù)庫中刪除文件

USEmaster

GO

ALTERDATABASEStuData

REMOVEFILEStuFile2

GO

DROPDATABASE數(shù)據(jù)庫名[,...n

]

①sp_helpdb[數(shù)據(jù)庫名]4.刪除數(shù)據(jù)庫(DROPDATABASE)DropDatabase命令語法:5.MSSQLSERVER中與數(shù)據(jù)庫有關(guān)的系統(tǒng)存儲過程

②sp_renamedb數(shù)據(jù)庫舊名,數(shù)據(jù)庫新名三.定義表1.創(chuàng)建表(CREATETABLE)CreateTable命令語法:CREATETABLE<表名>(<列定義>[{,<列定義>|<表約束>}])<表名>是合法標(biāo)識符,最多可有128個字符,如S,SC,C,不允許重名。<列定義>:<列名><數(shù)據(jù)類型>[DEFAULT][{<列約束>}]DEFAULT:若是某字段設(shè)置有默認(rèn)值,當(dāng)該字段未被輸入數(shù)據(jù)時,則以該默認(rèn)值自動填入該字段。2026年1月15日24下例顯示pubs數(shù)據(jù)庫中所創(chuàng)建的三個表(jobs、employee和publishers)的完整表定義,其中包含所有的約束定義。

CREATETABLEjobs(job_id smallintIDENTITY(1,1)

PRIMARYKEYCLUSTERED,job_desc varchar(50) NOTNULLDEFAULT'NewPosition-titlenotformalizedyet',min_lvl tinyint NOTNULLCHECK(min_lvl>=10),max_lvl tinyintNOT NULLCHECK(max_lvl<=250))2.修改表(ALTERTABLE)ALTERTABLEtable

{[ALTERCOLUMN列名{新數(shù)據(jù)類型[NULL|NOTNULL]}]

|ADD{[<列定義>]|

列名AS計算表達(dá)式}[,...]

|[WITHCHECK|WITHNOCHECK]ADD

{<表級約束>}[,...]

|DROP{[CONSTRAINT]約束名

|COLUMN列名}[,...]

|{CHECK|NOCHECK}CONSTRAINT{ALL|約束名[,...]}

|{ENABLE|DISABLE}TRIGGER{ALL|觸發(fā)器名[,...n]}

}AlterTable命令語法:DROPTABLE表名3.刪除表(DROPTABLE)DropTable命令語法:2026年1月15日26視圖是虛表,其數(shù)據(jù)不存儲,其記錄來自基本表,只在數(shù)據(jù)庫中存儲其定義。視圖在概念上與基本表等同,用戶可以在視圖上再定義視圖,可以對視圖進(jìn)行查詢.刪除.更新等操作。四.定義視圖2026年1月15日27使用視圖的幾個優(yōu)點(diǎn):1.利于數(shù)據(jù)保密,對不同的用戶定義不同的視圖,使用戶只能看到與自己有關(guān)的數(shù)據(jù)。例如,對教師表創(chuàng)建了計算機(jī)系視圖,本系教師只能使用此視圖,而無法訪問其他系教師的數(shù)據(jù)。2.簡化查詢操作,為復(fù)雜的查詢建立一個視圖,用戶不必鍵入復(fù)雜的查詢語句,只需針對此視圖做簡單的查詢即可。3.保證數(shù)據(jù)的邏輯獨(dú)立性。對于視圖的操作,比如查詢,只依賴于視圖的定義。當(dāng)構(gòu)成視圖的基本表要修改時,只需修改視圖定義中的子查詢部分。而基于視圖的查詢不用改變。這就是第一章介紹過的外模式與模式之間的獨(dú)立性,即數(shù)據(jù)的邏輯獨(dú)立性1.創(chuàng)建/修改視圖(CREATE/ALTERVIEW)CREATE/ALTERVIEW[[擁有者].|擁有者.]視圖名[(視圖列表)]ASSQL查詢語句

[WITHCHECKOPTION]Create/AlterView命令語法:創(chuàng)建一個計算機(jī)系教師情況的視圖SUB_T。CREATEVIEWSUB_TASSELECTTNO,TN,PROFFROMTWHEREDEPT='計算機(jī)'2026年1月15日29視圖名字為SUB_T,省略了視圖列表。視圖由子查詢中的三列TNO,TN,PROF組成。視圖創(chuàng)建后,對視圖SUB_T的數(shù)據(jù)的訪問只限制在計算機(jī)系內(nèi),且只能訪問TNO,TN,PROF三列的內(nèi)容,從而達(dá)到了數(shù)據(jù)保密的目的。視圖創(chuàng)建后,只在數(shù)據(jù)字典中存放視圖的定義,而其中的子查詢SELECT語句并不執(zhí)行。只有當(dāng)用戶對視圖進(jìn)行操作時,才按照視圖的定義將數(shù)據(jù)從基本表中取出。其中:2026年1月15日30創(chuàng)建一學(xué)生情況視圖S_SC_C(包括學(xué)號、姓名、課程名及成績)。

CREATEVIEWS_SC_C(SNO,SN,CN,SCORE)ASSELECTS.SNO,SN,CN,SCOREFROMS,C,SCWHERES.SNO=SC.SNOANDSC.CNO=C.CNO此視圖由三個表連接得到,在S表和SC表中均存在SNO列,則需指定視圖列名。

2026年1月15日31創(chuàng)建一學(xué)生平均成績視圖S_AVGCREATEVIEWS_AVG(SNO,AVG)ASSELECTSNO,AVG(SCORE)FROMSCGROUPBYSNO此視圖的列名之一AVG為庫函數(shù)的計算結(jié)果,則在定義時需指明列名。2026年1月15日322.刪除視圖(DROPVIEW)DropView命令語法:DROPVIEW視圖名視圖刪除后,只會刪除該視圖在數(shù)據(jù)字典中的定義,而與該視圖有關(guān)的基本表中的數(shù)據(jù)不會受任何影響,由此視圖導(dǎo)出的其他視圖的定義不會刪除,但已無任何意義。用戶應(yīng)該把這些視圖刪除。五.定義索引1.索引

概念:索引是關(guān)于數(shù)據(jù)位置信息的關(guān)鍵字表。

目的:1.加快查詢速度;2.保證行的唯一性。

類型:聚簇(Clustered)索引、非聚簇(Nonclustered)索引和唯一索引。

聚簇索引:表中數(shù)據(jù)與索引存儲在相鄰物理空間,且表中行的物理順序與索引順序保持一致。每張表最多只能建一個聚簇索引。

索引建立原則:

(4)

優(yōu)先建立主鍵列的索引。

(1)

為數(shù)據(jù)量大的表建立索引;

(2)

一張表所建索引個數(shù)應(yīng)適量; (3)

掌握建立索引的時機(jī);

唯一索引:被索引的列不能有相同值出現(xiàn)。CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX<索引名>

ON<表名|視圖名>(列名[ASC|DESC][,...

])UNIQUE表明建立唯一索引。CLUSTER表示建立聚集索引。次序用來指定索引值的排列順序,可為ASC(升序)或DESC(降序),缺省值為ASC。2.創(chuàng)建索引(CREATEINDEX)CreateIndex命令語法:2026年1月15日353.刪除索引(DROPINDEX)DropIndex命令語法:DROPINDEX索引名為表SC在SNO和CNO上建立唯一索引。USESTUDENTCREATEUNIQUEINDEXSCIONSC(SNO,CNO)執(zhí)行此命令后,為SC表建立一個索引名為SCI的唯一索引,此索引為SNO和CNO兩列的復(fù)合索引,即對SC表中的行先按SNO的遞增順序索引,對于相同的SNO,又按CNO的遞增順序索引。由于有UNIQUE的限制,所以該索引在(SNO,CNO)組合列的排序上具有唯一性,不存在重復(fù)值。4.3操縱子語言DML回答如下問題:

1.操縱子語言的四個命令關(guān)鍵字?

2.數(shù)據(jù)插入?

3.數(shù)據(jù)修改?

5.數(shù)據(jù)查詢?

4.數(shù)據(jù)刪除?一.操縱子語言的四個命令關(guān)鍵字說明:

以上四個命令,均是針對數(shù)據(jù)的操作。具體說來,其操縱的對象是:表以及滿足條件的視圖(如:基于一張表的視圖等)。

(4)

Select

(1)

Insert

(2)

Update(3)

Delete

在定義了約束或限制的情況下,數(shù)據(jù)的“增刪改”操作必須遵守相關(guān)的限制條件。二.數(shù)據(jù)插入(INSERT)1.數(shù)據(jù)插入命令基本語法INSERT[INTO]表名或視圖名[(列名表)]<數(shù)據(jù)值>

說明:<數(shù)據(jù)值>的寫法決定具體的插入方式。2.數(shù)據(jù)插入的兩種方式 INSERT[INTO]表名或視圖名[(列名表)]

VALUES(列值表)

(1)插入一行

2026年1月15日39INSERTINTOpubs..authors VALUES('888-88-8888','Tao','Hongcai','028888-8888','589DarwinLn.','Berkeley','CA','94609',1)INSERTINTOpubs..authors VALUES('111-11-111','','Hongcai','028888-8888','589DarwinLn.','Berkeley','CA','94600',1)2026年1月15日40(2)插入一行或多行

INSERT[INTO]表名或視圖名[(列名表)]

SELECT子句CREATETABLEpublishers6

(pub_id char(4) primarykey,

pub_name varchar(40) NULL,

city varchar(20),

state char(2) ,

countryvarchar(30)default'USA',)

INSERTpublishers6

SELECT*FROMpubs..publishers

三.數(shù)據(jù)修改(UPDATE)1.數(shù)據(jù)修改命令的語法

SQL語言可以使用UPDATE語句對表中的一行或多行記錄的某些列值進(jìn)行修改,其語法格式為:UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]…[WHERE<條件>]其中:<表名>是指要修改的表SET子句給出要修改的列及其修改后的值WHERE子句指定待修改的記錄應(yīng)當(dāng)滿足的條件,WHERE子句省略時,則修改表中的所有記錄。2.數(shù)據(jù)修改示例 UPDATEpublishers6 SETcity='Atlanta',state='GA'

示例1:簡單的更新 UPDATEpub..titlesSETprice=price*2

示例2:帶WHERE子句的更新 UPDATEpubs..authors SETstate='PC',city='BayCity' WHEREstate='CA'ANDcity='Oakland'

示例3:帶連接的更新 CREATETABLEs(ColAINT,ColBDECIMAL(10,3)) CREATETABLEt(ColAINTPRIMARYKEY,ColBDECIMAL(10,3)) INSERTINTOsVALUES(1,10.0) INSERTINTOsVALUES(2,20.0) INSERTINTOtVALUES(2,0.0) UPDATEt SETt.ColB=t.ColB+s.ColB FROMtINNERJOINsON(t.ColA=s.ColA)三.數(shù)據(jù)刪除(DELETE)1.數(shù)據(jù)刪除命令的語法使用DELETE語句可以刪除表中的一行或多行記錄,其語法格式為:DELETEFROM<表名>[WHERE<條件>]其中,<表名>是指要刪除數(shù)據(jù)的表。WHERE子句指定待刪除的記錄應(yīng)當(dāng)滿足的條件,WHERE子句省略時,則刪除表中的所有記錄。1刪除一行記錄例

刪除劉偉教師的記錄。DELETEFROMTWHERETN=’劉偉’2刪除多行記錄例

刪除所有教師的授課記錄DELETEFROMTC執(zhí)行此語句后,TC表即為一個空表,但其定義仍存在數(shù)據(jù)字典中。2026年1月15日463利用子查詢選擇要刪除的行例刪除劉偉教師授課的記錄。DELETEFROMTCWHERETNO=(SELECTTNOFROMTWHERETN=’劉偉’)四.數(shù)據(jù)查詢(SELECT)1.查詢命令語法 SELECT查詢列表

[INTO新表名] FROM<源表> [WHERE條件表達(dá)式] [GROUPBY分組表達(dá)式] [HAVING組內(nèi)數(shù)據(jù)條件表達(dá)式] [ORDERBY排序表達(dá)式[ASC|DESC]] [COMPUTE

{{AVG|COUNT|MAX|MIN|SUM}(表達(dá)式)}[,...n]

[BYexpression[,...n]

]

]

說明:查詢主要由一些子句構(gòu)成,如:SELECT子句、INTO子句(Clause)、FROM子句、WHERE子句、GROUPBY子句、HAVING子句、ORDERBY子句、COMPUTE子句等。2.SELECT子句 SELECT[ALL|DISTINCT]<select_list>說明:<select_list>::=

{

*

|{表名|視圖名|表別名}.*

|{列名|表達(dá)式}[[AS]列別名]

|列別名=表達(dá)式

}

[,...n](1)ALL表示重復(fù)行可出現(xiàn)于結(jié)果中,DISTINCT則相反,ALL為缺省情況;

(2)

*表示FROM子句的表、視圖中的所有列均出現(xiàn)于結(jié)果中,其順序遵照表、視圖中的順序。

(3)

表達(dá)式中可用聚集函數(shù)。3.INTO子句

作用:創(chuàng)建一新表并將查詢的結(jié)果數(shù)據(jù)插入其中。

說明:

語法:[INTO新表名](1)SELECT……INTO不能與COMPUTE一起使用;

(2)

可用SELECT……INTO創(chuàng)建一張與FROM子句中的表具有相同結(jié)構(gòu)的、名字不同的新表。如果不需要數(shù)據(jù),可令WHERE子句條件為永假即可。4.FROM子句

作用:指定在SELECT、DELETE及UPDATE語句中所用的表、視圖及表連接等。

算術(shù)比較符:=、<、>、<=或!>、>=或!<、<>或!=

語法:同前面DELETE及UPDATE中的FROM語法。

邏輯比較符:AND、OR、NOT5.WHERE子句

作用:指定限定行的查詢條件。

特殊運(yùn)算符:IN、NOTIN、BETWEEN…AND…、LIKE、NOTLIKE、ISNULL、ISNOTNULL、SOME|ANY、ALL、EXISTS、NOTEXISTS。

②如希望%、_以常規(guī)字符出現(xiàn),則應(yīng)用[]將其括起或用轉(zhuǎn)義符“$”,如:like“70$%”或like“70[%]”===>70%。(1)LIKE:①%(匹配任意一串字符)、_(匹配任意一個字符)、[](取其中任意單個字符)、^(非)。

③^應(yīng)與[]聯(lián)用,如:[^a-f]或[^abcdef]表示a-f這幾個字母不能出現(xiàn)。(2)SOME|ANY:

語法:表達(dá)式{=|<>|!=|>|>=|!>|<|<=|!<}{SOME|ANY}(子查詢)(3)ALL:

語法:表達(dá)式{=|<>|!=|>|>=|!>|<|<=|!<}ALL(子查詢)

含意:檢查子查詢是否有行返回,有則TRUE,否則FALSE;如帶NOT則相反。(4)[NOT]EXISTS:(5)[NOT]IN:

語法:[NOT]

EXISTS(子查詢)

含意:檢查測試表達(dá)式的值是否在子查詢或列表中,是則TRUE,否則FALSE;如帶NOT則相反。

語法:測試表達(dá)式[NOT]IN

(

子查詢

|表達(dá)式[,...n]

)6.聚集函數(shù)

作用:用于對數(shù)據(jù)集合進(jìn)行統(tǒng)計,如求:總和、平均值、最大值、最小值、行數(shù)。

COUNT(DISTINCT|ALL表達(dá)式)返回非空表達(dá)式值的行數(shù)

COUNT(*)返回結(jié)果的行數(shù),含NULL行和重復(fù)行

MAX(DISTINCT|ALL表達(dá)式)非空表達(dá)式值的最大值

MIN(DISTINCT|ALL表達(dá)式)非空表達(dá)式值的最小值

SUM(DISTINCT|ALL表達(dá)式)非空表達(dá)式值的總和

AVG(DISTINCT|ALL表達(dá)式)非空表達(dá)式值的平均值

用法:一般用于SELECT子句、HAVING子句和ORDERBY子句中。

函數(shù)形式及功能:7.GROUPBY子句與HAVING子句GROUPBY子句作用:用于對查詢的結(jié)果數(shù)據(jù)集合進(jìn)行“分組”或“分組統(tǒng)計”,如對各個分組求:總和、平均值、最大值、最小值、行數(shù)。GROUPBY子句用法:一般與“聚集函數(shù)”聯(lián)用。說明:HAVING子句作用:用于對分組數(shù)據(jù)集合的再篩選。HAVING子句用法:須與GROUPBY聯(lián)用,不能單獨(dú)使用。

(1)要求SELECT子句的列表中,除了使用聚集函數(shù)的列之外,其余各列都必須出現(xiàn)在GroupBy子句的列表中;

(2)注意WHERE、GROUPBY及HAVING三個子句的執(zhí)行順序及含意。WHERE用于對FROM子句結(jié)果設(shè)置過濾條件;GROUPBY用于對WHERE子句的結(jié)果分組;HAVING則對GROUPBY分組的結(jié)果再過濾。8.ORDERBY子句

作用:用于對結(jié)果集進(jìn)行排序。

說明:ORDERBY中的列一般應(yīng)在SELECT子句中。

語法:ORDERBY{排序表達(dá)式[ASC|DESC]}

[,...n]9.COMPUTE子句與COMPUTEBY子句

概念:COMPUTE用于對查詢的結(jié)果數(shù)據(jù)集合最后進(jìn)行“總計”,如果帶有BY,則還可進(jìn)行“小計”。COMPUTEBY可以與COMPUTE聯(lián)用。

說明:COMPUTEBY應(yīng)與ORDERBY聯(lián)用,且COMPUTEBY后的表達(dá)式應(yīng)與ORDERBY后的表達(dá)式(或其子集)內(nèi)容與順序一致。

示例:如有ORDERBYa,b,c則可用如下任一COMPUTEBY形式: COMPUTEBYa,b,c COMPUTEBYa,b COMPUTEBYa

10.嵌套子查詢(NestedSub-Query)

概念:一個查詢語句的查詢結(jié)果作為另一個查詢語句的條件,這樣的SELECT語句為“子查詢”,亦稱“嵌套查詢”。

SELECT<查詢列表> [INTO<新表名>] FROM<基表名|視圖名>[別名]…… WHERE<列名或列表達(dá)式><比較運(yùn)算符>

SELECT<查詢列> FROM<基表名|視圖名>[別名]…… WHERE<條件表達(dá)式> [GROUPBY<分組內(nèi)容>] [HAVING<組內(nèi)條件>]

[GROUPBY<分組內(nèi)容>] [HAVING<組內(nèi)條件>] [ORDERBY<排序列名>[ASC|DESC]]說明:(1)子查詢之中允許嵌套另一個子查詢,但最多嵌套255層,并且總是從嵌套層次最深的一層開始執(zhí)行,然后再執(zhí)行它的直接上一層,直至完成整個查詢。

(2)

子查詢返回為單值時,可用“算術(shù)比較符”;返回多列或多行值,則用IN、ANY、ALL、EXISTS等運(yùn)算符。

相關(guān)子查詢:子查詢與來自主查詢(或稱外查詢)的列有關(guān)。意味著子查詢是重復(fù)執(zhí)行的,每一次處理外查詢結(jié)果的一行。11.UNION查詢

概念:將兩個或多個查詢的結(jié)果合并成一個結(jié)果返回。

語法:<SELECT語句>UNION[ALL]<SELECT語句>說明:(1)

用UNION合并的結(jié)果集應(yīng)有相同的結(jié)構(gòu),即列數(shù)相同、對應(yīng)列數(shù)據(jù)類型兼容。

(2)

最后結(jié)果的列名取與第一個SELECT語句返回的列名。

(3)

默認(rèn)情況下,最后結(jié)果會去掉重復(fù)行;但如有ALL選項(xiàng),則保留重復(fù)行。

(4)

一般,UNION個數(shù)不限,且按從左至右順序執(zhí)行。

(5)

當(dāng)用UNION時,各個SELECT語句不能有ORDERBY和COMPUTE子句,而只能在最后一個SELECT語句后帶一個ORDERBY和COMPUTE子句,它們是針對最后結(jié)果的。不過,各個SELECT語句可用GROUPBY和HAVING子句。2026年1月15日59例1

查詢?nèi)w學(xué)生的學(xué)號、姓名和年齡。

SELECTSNO,SN,AGEFROMS例2

查詢學(xué)生的全部信息。

SELECT*FROMS用‘*’表示S表的全部列名,而不必逐一列出。例3

查詢選修了課程的學(xué)生號。

SELECT

DISTINCTSNOFROMSC查詢結(jié)果中的重復(fù)行被去掉上述查詢均為不使用WHERE子句的無條件查詢,也稱作投影查詢。2026年1月15日60另外,利用投影查詢可控制列名的順序,并可通過指定別名改變查詢結(jié)果的列標(biāo)題的名字。例4

查詢?nèi)w學(xué)生的姓名、學(xué)號和年齡。

SELECTSNAMENAME,SNO,AGEFROMS其中,NAME為SNAME的別名

2026年1月15日612條件查詢當(dāng)要在表中找出滿足某些條件的行時,則需使用WHERE子句指定查詢條件。WHERE子句中,條件通常通過三部分來描述:1.

列名;2.

比較運(yùn)算符;3.

列名、常數(shù)。

運(yùn)算符含義=,>,<,>=,<=,!=比較大小AND,ORBETWEENAND確定范圍IN確定集合LIKE字符匹配ISNULL空值表3.8常用的比較運(yùn)算符多重條件2026年1月15日621比較大小例5

查詢選修課程號為‘C1’的學(xué)生的學(xué)號和成績。SELECTSNO,SCOREFROMSCWHERECNO=’C1’例6查詢成績高于85分的學(xué)生的學(xué)號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERESCORE>852026年1月15日632多重條件查詢當(dāng)WHERE子句需要指定一個以上的查詢條件時,則需要使用邏輯運(yùn)算符AND、OR和NOT將其連結(jié)成復(fù)合的邏輯表達(dá)式。其優(yōu)先級由高到低為:NOT、AND、OR,用戶可以使用括號改變優(yōu)先級。例7查詢選修C1或C2且分?jǐn)?shù)大于等于85分學(xué)生的的學(xué)號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERE(CNO=’C1’ORCNO=’C2’)ANDSCORE>=852026年1月15日643確定范圍例8

查詢工資在1000至1500之間的教師的教師號、姓名及職稱。SELECTTNO,TN,PROFFROMTWHERESALBETWEEN1000AND1500等價于SELECTTNO,TN,PROFFROMTWHERESAL>=1000ANDSAL<=15002026年1月15日65例9

查詢工資不在1000至1500之間的教師的教師號、姓名及職稱。SELECTTNO,TN,PROFFROMTWHERESALNOTBETWEEN1000AND15002026年1月15日664確定集合

利用“IN”可以查詢屬性值屬于指定集合的元組。

例10

查詢選修C1或C2的學(xué)生的學(xué)號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN(‘C1’,‘C2’)此語句也可以使用邏輯運(yùn)算符“OR”實(shí)現(xiàn)。SELECTSNO,CNO,SCOREFROMSCWHERECNO=‘C1’ORCNO=‘C2’2026年1月15日67利用“NOTIN”可以查詢指定集合外的元組。例3.31查詢沒有選修C1,也沒有選修C2的學(xué)生的學(xué)號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERECNONOTIN(‘C1’,‘C2’)等價于:SELECTSNO,CNO,SCOREFROMSCWHERECNO!=‘C1’ANDCNO!=‘C2’2026年1月15日685部分匹配查詢上例均屬于完全匹配查詢,當(dāng)不知道完全精確的値時,用戶還可以使用LIKE或NOTLIKE進(jìn)行部分匹配查詢(也稱模糊查詢)。LIKE定義的一般格式為:

<屬性名>LIKE<字符串常量>屬性名必須為字符型,字符串常量的字符可以包含如下兩個特殊符號:%:表示任意知長度的字符串;_:表示任意單個字符。例3.32查詢所有姓張的教師的教師號和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘張%’2026年1月15日69例13查詢姓名中第二個漢字是“力”的教師號和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘__力%’注:一個漢字占兩個字符。6

空值查詢某個字段沒有值稱之為具有空值(NULL)。通常沒有為一個列輸入值時,該列的值就是空值。空值不同于零和空格,它不占任何存儲空間。例如,某些學(xué)生選課后沒有參加考試,有選課記錄,但沒有考試成績,考試成績?yōu)榭罩?,這與參加考試,成績?yōu)榱惴值牟煌?/p>

2026年1月15日70例14查詢沒有考試成績的學(xué)生的學(xué)號和相應(yīng)的課程號。SELECTSNO,CNOFROMSCWHERESCOREISNULL注意:這里的空值條件為ISNULL,不能寫成SCORE=NULL。2026年1月15日712

常用庫函數(shù)及統(tǒng)計匯總查詢SQL提供了許多庫函數(shù),增強(qiáng)了基本檢索能力。常用的庫函數(shù),如下表所示函數(shù)名稱功能AVG按列計算平均值SUM按列計算值的總和MAX求一列中的最大值MIN求一列中的最小值COUNT按列值計個數(shù)2026年1月15日72例15求學(xué)號為S1學(xué)生的總分和平均分。SELECTSUM(SCORE)ASTotalScore,AVG(SCORE)ASAveScoreFROMSCWHERE(SNO='S1')注意:函數(shù)SUM和AVG只能對數(shù)值型字段進(jìn)行計算。

2026年1月15日73例16求選修C1號課程的最高分、最低分及之間相差的分?jǐn)?shù)SELECTMAX(SCORE)ASMaxScore,MIN(SCORE)ASMinScore,MAX(SCORE)-MIN(SCORE)ASDiffFROMSCWHERE(CNO='C1')例17求計算機(jī)系學(xué)生的總數(shù)SELECTCOUNT(SNO)FROMSWHEREDEPT='計算機(jī)'2026年1月15日74例18求學(xué)校中共有多少個系SELECTCOUNT(DISTINCTDEPT)ASDeptNumFROMS注意:加入關(guān)鍵字DISTINCT后表示消去重復(fù)行,可計算字段“DEPT“不同值的數(shù)目。COUNT函數(shù)對空值不計算,但對零進(jìn)行計算。例19統(tǒng)計有成績同學(xué)的人數(shù)SELECTCOUNT(SCORE)FROMSC上例中成績?yōu)榱愕耐瑢W(xué)計算在內(nèi),沒有成績(即為空值)的不計算。2026年1月15日75例20利用特殊函數(shù)COUNT(*)求計算機(jī)系學(xué)生的總數(shù)SELECTCOUNT(*)FROMSWHEREDEPT=‘計算機(jī)’COUNT(*)用來統(tǒng)計元組的個數(shù)不消除重復(fù)行,不允許使用DISTINCT關(guān)鍵字。2026年1月15日763

分組查詢GROUPBY子句可以將查詢結(jié)果按屬性列或?qū)傩粤薪M合在行的方向上進(jìn)行分組,每組在屬性列或?qū)傩粤薪M合上具有相同的值。例22查詢各位教師的教師號及其任課的門數(shù)。SELECTTNO,COUNT(*)ASC_NUMFROMTCGROUPBYTNOGROUPBY子句按TNO的值分組,所有具有相同TNO的元組為一組,對每一組使用函數(shù)COUNT進(jìn)行計算,統(tǒng)計出各位教師任課的門數(shù)。2026年1月15日77若在分組后還要按照一定的條件進(jìn)行篩選,則需使用HAVING子句。例23

查詢選修兩門以上課程的學(xué)生學(xué)號和選課門數(shù)SELECTSNO,COUNT(*)ASSC_NUMFROMSCGROUPBYSNOHAVINGCOUNT(*)>=2GROUPBY子句按SNO的值分組,所有具有相同SNO的元組為一組,對每一組使用函數(shù)COUNT進(jìn)行計算,統(tǒng)計出每位學(xué)生選課的門數(shù)。HAVING子句去掉不滿足COUNT(*)>=2的組。2026年1月15日78當(dāng)在一個SQL查詢中同時使用WHERE子句,GROUPBY

子句和HAVING子句時,其順序是WHERE-GROUPBY-HAVING。WHERE與HAVING子句的根本區(qū)別在于作用對象不同。WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組;HAVING子句作用于組,選擇滿足條件的組,必須用于GROUPBY子句之后,但GROUPBY子句可沒有HAVING子句。2026年1月15日795查詢的排序當(dāng)需要對查詢結(jié)果排序時,應(yīng)該使用ORDERBY子句ORDERBY子句必須出現(xiàn)在其他子句之后排序方式可以指定,DESC為降序,ASC為升序,缺省時為升序例24查詢選修C1的學(xué)生學(xué)號和成績,并按成績降序排列。SELECTSNO,SCOREFROMSCWHERECNO='C1'ORDERBYSCOREDESC2026年1月15日80例25

查詢選修C2、C3、C4或C5課程的學(xué)號、課程號和成績,查詢結(jié)果按學(xué)號升序排列,學(xué)號相同再按成績降序排列。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN('C2','C3','C4','C5')ORDERBYSNO,SCOREDESC2026年1月15日81例26

求選課在三門以上且各門課程均及格的學(xué)生的學(xué)號及其總成績,查詢結(jié)果按總成績降序列出。SELECTSNO,SUM(SCORE)ASTotalScoreFROMSCWHERESCORE>=60GROUPBYSNOHAVINGCOUNT(*)>=3ORDERBYSUM(SCORE)DESC2026年1月15日82此語句為分組排序,執(zhí)行過程如下:1.(FROM)取出整個SC2.(WHERE)篩選SCORE>=60的元組3.(GROUPBY)將選出的元組按SNO分組4.(HAVING)篩選選課三門以上的分組5.(SELECT)以剩下的組中提取學(xué)號和總成績6.(ORDERBY)將選取結(jié)果排序ORDERBYSUM(SCORE)DESC可以改寫成

ORDERBY2DESC

2代表查詢結(jié)果的第二列。2026年1月15日836數(shù)據(jù)表連接及連接查詢數(shù)據(jù)表之間的聯(lián)系是通過表的字段值來體現(xiàn)的,這種字段稱為連接字段。連接操作的目的就是通過加在連接字段的條件將多個表連接起來,以便從多個表中查詢數(shù)據(jù)。前面的查詢都是針對一個表進(jìn)行的,當(dāng)查詢同時涉及兩個以上的表時,稱為連接查詢。表的連接方法有兩種:方法1:表之間滿足一定的條件的行進(jìn)行連接,此時FROM子句中指明進(jìn)行連接的表名,WHERE子句指明連接的列名及其連接條件。方法2:利用關(guān)鍵字JOIN進(jìn)行連接。2026年1月15日84具體分為以下幾種:INNERJOIN

:顯示符合條件的記錄,此為默認(rèn)值;LEFT(OUTER)JOIN:顯示符合條件的數(shù)據(jù)行以及左邊表中不符合條件的數(shù)據(jù)行,此時右邊數(shù)據(jù)行會以NULL來顯示,此稱為左連接;RIGHT(OUTER)JOIN:顯示符合條件的數(shù)據(jù)行以及右邊表中不符合條件的數(shù)據(jù)行,此時左邊數(shù)據(jù)行會以NULL來顯示,此稱為右連接;2026年1月15日85FULL(OUTER)JOIN:顯示符合條件的數(shù)據(jù)行以及左邊表和右邊表中不符合條件的數(shù)據(jù)行,此時缺乏數(shù)據(jù)的數(shù)據(jù)行會以NULL來顯示;CROSSJOIN:會將一個表的每一筆數(shù)據(jù)和另一表的每筆數(shù)據(jù)匹配成新的數(shù)據(jù)行。當(dāng)將JOIN關(guān)鍵詞放于FROM子句中時,應(yīng)有關(guān)鍵詞ON與之相對應(yīng),以表明連接的條件。2026年1月15日866.1等值連接與非等值連接例27

查詢劉偉老師所講授的課程。方法1:SELECTT.TNO,TN,CNOFROMT,TCWHERE(T.TNO=TC.TNO)AND(TN=‘劉偉’)這里,TN=‘劉偉’為查詢條件,而T.TNO=TC.TNO為連接條件,TNO為連接字段。連接條件的一般格式為:

[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>

其中,比較運(yùn)算符主要有:=、>、<、>=、<=、?。?。當(dāng)比較運(yùn)算符為“=“時,稱為等值連接,其他情況為非等值連接。2026年1月15日87引用列名TNO時要加上表名前綴,是因?yàn)閮蓚€表中的列名相同,必須用表名前綴來確切說明所指列屬于哪個表,以避免二義性。如果列名是唯一的,比如TN,就不必須加前綴。上面的操作是將T表中的TNO和TC表中的TNO相等的行連接,同時選取TN為“劉偉“的行,然后再在TN,CNO列上投影,這是連接、選取和投影的操作組合。方法2:SELECTT.TNO,TN,CNOFROMTINNERJOINTCONT.TNO=TC.TNOANDT.TN='劉偉'2026年1月15日88方法3:SELECTR2.TNO,R2.TN,R1.CNOFROM(SELECTTNO,CNOFROMTC)ASR1INNERJOIN

(SELECTTNO,TNFROMTWHERETN='劉偉')ASR2ONR1.TNO=R2.TNO2026年1月15日89例2查詢所有選課學(xué)生的學(xué)號、姓名、選課名稱及成績。SELECTS.SNO,SN,CN,SCOREFROMS,C,SCWHERES.SNO=SC.SNOANDSC.CNO=C.CNO本例涉及三個表,WHERE子句中有兩個連接條件。當(dāng)有兩個以上的表進(jìn)行連接時,稱為多表連接。2026年1月15日906.2

自身連接當(dāng)一個表與其自已進(jìn)行連接操作時,稱為表的自身連接。例29

查詢所有比劉偉工資高的教師姓名、性別、工資和劉偉的工資。要查詢的內(nèi)容均在同一表T中,可以將表T分別取兩個別名,一個是X,一個是Y。將X,Y中滿足比劉偉工資高的行連接起來。這實(shí)際上是同一表T的自身連接。方法1:SELECTX.TN,X.SALASSAL_a,Y.SALASSAL_bFROMTASX,TASYWHEREX.SAL>Y.SALANDY.TN='劉偉'2026年1月15日91方法2:SELECTX.TN,X.SAL,Y.SALFROMTASXINNERJOINTASYONX.SAL>Y.SALANDY.TN='劉偉'方法3:SELECTR1.TN,R1.SAL,R2.SALFROM(SELECTTN,SALFROMT)ASR1INNERJOIN(SELECTSALFROMTWHERETN='劉偉')ASR2ONR1.SAL>R2.SAL2026年1月15日92例30檢索所有學(xué)生姓名,年齡和選課名稱。方法1:SELECTSN,AGE,CNFROMS,C,SCWHERES.SNO=SC.SNOANDSC.CNO=C.CNO2026年1月15日936.3外連接在上面的連接操作中,不滿足連接條件的元組不能作為查詢結(jié)果輸出。如例28的查詢結(jié)果只包括有選課記錄的學(xué)生,而不會有吳麗同學(xué)的信息。若將例28改成:例31

查詢所有學(xué)生的學(xué)號、姓名、選課名稱及成績。(沒有選課的同學(xué)的選課信息顯示為空)則應(yīng)寫成如下的SQL語句。

SELECTS.SNO,SN,CN,SCOREFROMSLEFTOUTERJOINSCONS.SNO=SC.SNOLEFTOUTERJOINCONC.CNO=SC.CNO則查詢結(jié)果只包括所有的學(xué)生,沒有選課的吳麗同學(xué)的選課信息顯示為空。2026年1月15日947子查詢在WHERE子句中包含一個形如SELECT-FROM-WHERE的查詢塊,此查詢塊稱為子查詢或嵌套查詢,包含子查詢的語句稱為父查詢或外部查詢。嵌套查詢可以將一系列簡單查詢構(gòu)成復(fù)雜查詢,增強(qiáng)查詢能力。子查詢的嵌套層次最多可達(dá)到255層,以層層嵌套的方式構(gòu)造查詢充分體現(xiàn)了SQL“結(jié)構(gòu)化”的特點(diǎn)。嵌套查詢在執(zhí)行時由里向外處理,每個子查詢是在上一級外部查詢處理之前完成,父查詢要用到子查詢的結(jié)果。2026年1月15日957.1

返回一個值的子查詢當(dāng)子查詢的返回值只有一個時,可以使用比較運(yùn)算符(=,>,<,>=,<=,!=)將父查詢和子查詢連接起來。例32

查詢與劉偉教師職稱相同的教師號、姓名。SELECTTNO,TNFROMTWHEREPROF=(SELECTPROFFROMTWHERETN='劉偉')此查詢相當(dāng)于分成兩個查詢塊來執(zhí)行。先執(zhí)行子查詢:SELECTPROFFROMTWHERETN=’劉偉’2026年1月15日96子查詢向主查詢只返回一個值,即劉偉教師的職稱“講師”,然后以此作為父查詢的條件,相當(dāng)于再執(zhí)行父查詢,查詢所有職稱為“講師”的教師號、姓名。SELECTTNO,TNFROMTWHEREPROF=’講師’2026年1月15日977.2返回一組值的子查詢?nèi)绻硬樵兊姆祷刂挡恢挂粋€,而是一個集合時,則不能直接使用比較運(yùn)算符,可以在比較運(yùn)算符和子查詢之間插入ANY或ALL。其具體含義詳見以下各例。1.使用ANY例33

查詢講授課程號為C5的教師姓名。SELECTTNFROMTWHERETNO=ANY(SELECTTNOFROMTCWHERECNO='C5')2026年1月15日98先執(zhí)行子查詢,找到講授課程號為C5的教師號,為一組值構(gòu)成的集合(T2,T3,T5);再執(zhí)行父查詢,其中ANY的含義為任意一個,查詢教師號為T2、T3、T5的教師的姓名。

該例也可以使用前面所講的連接操作來實(shí)現(xiàn):SELECTTNFROMT,TCWHERET.TNO=TC.TNOANDTC.CNO='C5‘可見,對于同一查詢可使用子查詢和連接兩種方法來解決,可根據(jù)習(xí)慣任意選用。

2026年1月15日99例34

查詢其他系中比計算機(jī)系某一教師工資高的教師的姓名和工資。SELECTTN,SALFROMTWHERESAL>ANY(SELECTSALFROMTWHEREDEPT='計算機(jī)')ANDDEPT!='計算機(jī)' /*注意:此行是父查詢中的條件*/先執(zhí)行子查詢,找到計算機(jī)系中所有教師的工資集合(1500,900);再執(zhí)行父查詢,查詢所有不是計算機(jī)系且工資高于1500或900的教師姓名和工資。

2026年1月15日100此查詢也可以寫成:SELECTTN,SALFROMTWHERESAL>(SELECTMIN(SAL)FROMTWHEREDEPT='計算機(jī)')ANDDEPT!=‘計算機(jī)’先執(zhí)行子查詢,利用庫函數(shù)MIN找到計算機(jī)系中所有教師的最低工資——900;再執(zhí)行父查詢,查詢所有不是計算機(jī)系且工資高于900的教師。2026年1月15日1012.使用IN可以使用IN代替“=ANY”。例35(題目同33)SELECTTNFROMTWHERETNOIN(SELECTTNOFROMTCWHERECNO='C5')2026年1月15日1023.使用ALLALL的含義為全部。例36

查詢其他系中比計算機(jī)系所有教師工資都高的教師的姓名和工資。SELECTTN,SALFROMTWHERESAL>ALL(SELECTSALFROMTWHEREDEPT='計算機(jī)')ANDDEPT!=‘計算機(jī)’子查詢找到計算機(jī)系中所有教師的工資集合(1500,900);父查詢找到所有不是計算機(jī)系且工資高于1500的教師姓名和工資。2026年1月15日103此查詢也可以寫成:SELECTTN,SALFROMTWHERESAL>(SELECTMAX(SAL)FROMTWHEREDEPT='計算機(jī)')

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論