第5章關系數據庫語言SQL_第1頁
第5章關系數據庫語言SQL_第2頁
第5章關系數據庫語言SQL_第3頁
第5章關系數據庫語言SQL_第4頁
第5章關系數據庫語言SQL_第5頁
已閱讀5頁,還剩131頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章關系數據庫語言SQL

本章主要內容

.............■?............

"????????...........

'LLLLLLLLLLLLLLL

■?^^—SJQ■-L的Hj■牛一■j要■rj■匕功能^?■...............................................................

■■-■

…I“““,,”.,

................■■....................■??..........

■■■"...........................................

Zx匕.....................................................“…”

OQVHyl-I白RIj々教T土J7J5岸IA生tWT+1:lI—j

nC...................

????......................................................-....?',1?,卜”E?卜,,....................I.,,.“.,,.“.“.“.””..“.“..,,.”...

.........................

?■?■

“”?,,“,“,",”..........................I.I.■■二二二二二二二二二二二二二二:二二二二二二二二■■,........

?SQL的HJ數據〃□操Jzlx^縱T八功J目匕

?,…,:.................

■用戶訪問數據庫必須通過DBMS進行;

■DBMS必須向用戶提供訪問數據庫的語言,用戶使用這

些語言構成相應的命令;

■用戶向DBMS提交命令,DBMS執(zhí)行命令;

■DBMS將執(zhí)行命令后得到的結果返回給用戶。

■現在,所有關系型數據庫管理系統(tǒng)(RDBMS)提供給用戶

訪問數據庫的語言是SQL;

■SQL----StructuredQueryLanguage----結構化查詢

語言

■SQL不僅提供了對數據查詢的語言,而且還提供了數據

定義、數據操作、數據控制等語言。

5.1SQL概述

.:.SQL是最通用的關系數據庫操作語言。在1986年被ANSI確

認為是關系數據庫語言,并發(fā)布了一種SQL86標準,之后

又推出了SQL89、SQL92標準,現正制定SQL3標準。

?市場上所有RDBMS都支持SQL標準,但又根據需要進行了

擴充。

Microsoft公司對標準SQL也進行了擴展,推出了自己的

Transact_SQL,簡稱TSQL。

SQL特點

SQL表達簡潔、功能豐富、容易使用。

SQL有兩種使用方式:交互式和嵌入式。

1.交互式

?用戶輸入SQL語句,馬上就得到結果。

?交互執(zhí)行過程:通過關系數據庫產品提供的一個叫查詢分

析器工具進行交互。該工具提供可視化的界面,包括菜單、

按鈕、命令編輯輸入窗口、結果顯示窗口等等。用戶在命

令輸入窗口中,鍵入SQL語句,然后按下“運行”按鈕,

即將SQL語句送到RDBMS,由RDBMS執(zhí)行SQL語句,并將結果

返回查詢處理器,查詢處理器將從DBMS中得到的結果顯示

在結果窗口中,用戶就能看到結果

交互執(zhí)行特點:不需要進行編譯、連接生成可執(zhí)行文件。

2.嵌入式

主語言+嵌入式SQL

將SQL語句嵌入到高級語言(例

如C語言)的程序中使用,這里,

高級語言通常稱為主語言。

執(zhí)行過程(見右圖)。

?特點:既利用了高級語言強大的

過程處理的特點,又保留了SQL

強大的數據庫操作的功能。

SQL支持數據庫的三級模式、二級映射機制數據庫的三級

模式,即外模式、概念模式、內模式。在SQL中,視圖對

應外模式、基本表對應概念模式、存儲文件對應于內模式,

如下圖所示。

圖3-2SQL支持的數據庫模式

SQL語言分為三種子語言,分別是:

工數據定義語言(DDL)用于定義數據庫、表、視圖等。

主要有CREATE、ALTER、DROP語句。

u數據據也語言(DML)用于插入、修改、刪除和查詢

數據。主要有:INSERT、DELETE、UPDATE、SELECT

語句。

u數據按制語言(DCL)用于管理數據庫用戶對數據庫

中表、視圖等的使用權限。主要有GRANT、REVOKE語

句。

下面將詳述SQL的DDL和DML語句的基本用法。

SQL功能動詞

數據查詢SELECT

數據操縱INSERT,UPDATE,DELETE

數據定義CREATE,DROP,ALTER

數據控制GRANT,REVOKE

5.2數據定義

5.2.1定義數據庫

CREATEDATABASEv數據庫名>[參數1,...參數n]

(1)CREATEDATABASE為關鍵字。

(2)尖括號“〈>”這部分,表示是不可省略的。

(3)中括號“口”這部分,表示是可省略的。如語法中

“[參數1…參數n]”表示這些參數能省略。

【例5.2.1】創(chuàng)建一個學生選課數據庫,取名為

Studentslnfo

CREATEDATABASEStudentslnfo

用CREATEDATABASE命令創(chuàng)不能超過128個字符,

一______系統(tǒng)在其后添加5個字

■CCRREEAATTEEDDATTAABBAASSEE數婁據庫扣—、符的邏輯后綴

■[ON[<數據庫文件說明》]

■[[LOGON{<日志文件說明》]

、其中

若缺省LOG

■<數據庫文件說明》_________________

ON,系統(tǒng)會

.([NAME=邏輯文件名]:以KB、MB、GB和TB

自動產生一個

前綴與數據庫.FILENAME='操祚系藐。1為單位,默認為.

名相同、容量

[,SIZE=字節(jié)數]

為所有數據庫

文件大小1/2[,MAXSIZE={最大字節(jié)數IUNITED}]

的事務日志文[,FILEGROWTH=增容字節(jié)數或]指明文件無[n]

---------------------------容量限制

第6章SQL與T-SQL

例:創(chuàng)建一個數據庫

createdatabasemydb

On

(name=mydb.datal,

fi1ename='d:\sqldata\mydb_datal.mdf',

size=1,

maxsize=uniimited,

filegrowth=10%)

logon

(name=fmydb_logU,

filename='d:\sqldata\mydb_logl.ldf',

size=lmb,

maxsize=25mb,(name='mydb_log2/,

filegrowth=10%),filename='d:\sqldata\mydb_log2.1df',

size=lmb,

maxsize=lOmb,

filegrowth=10%)

第6章SQL與T-SQL

-修改數據庫

ALTERDATABASE數據庫名

ADDFILE〈文件說明》

IADDLOGFILE<文件說明》[,...n]

IREMOVEFILE<邏輯文件名)

IMODIFYFILE<文件說明)

IMODIFYNAME=新數據庫名

■其中

■ADDFILE:要增加的數據庫文件

■〈文件說明》:

.(NAME=邏輯文件名[,NEWNAME=新邏輯文件名]

■[,FILENAME=,操作系統(tǒng)文件名,]

■[,SIZE=字節(jié)數]

■[,MAXSIZE=最大字節(jié)數IUNLIMITED}]

.[,FILEGROWTH=增長比例])

■ADDLOGFILE:要增加的事務日志文件

.REMOVEFILE:刪除文件定義及其物理文件

■MODIFYFILE:修改文件名、容量等屬性

■一次只能修改一個文件的一個屬性

例:修改mydb數據庫

ALTERDATABASEmydb

ADDFILE

(NAME='mydb.datV,

FILENAME='d:\mydb_datl.mdf',

SIZE=2,

MAXSIZE=10,

FILEGROWTH=20%)

刪除數據庫

■DROPDATABASE<數據庫名)[,...n]

■數據庫正在使用、正在被恢復時不能被刪除

■刪除數據庫后,與此數據庫有關聯的數據庫文

件和事務日志文件、存儲在系統(tǒng)數據庫中的關

于該數據庫的所有信息都會被刪除

5.2.2定義表結構

?表結構:定義表由幾個列組成,每個列的列名是什么、該

列中存放什么樣的數據(由數據類型決定)、該列的長度

是多少、列中存放的數據有什么樣的約束、表中各列之間

有什么樣的約束等。

?語法:

CREATETABLE〈表名>(

〈列名〉〈數據類型》[列級完整性約束][,…n]

_,??.n]

[,表級完整性約束[,…n]])

語句說明;

(1)〈表名〉用戶給定的標識符。即所要定義的表名。表名最

好取有意義的名字,如Students,做到見名知意;同一

個數據庫中,表名不允許同名。

(2)〈列名〉用戶給定的列名,最好取有意義的列名,如Sno,

Cno,做到見名知意。

(3)〈數據類型》:指定該列存放數據的數據類型。各RDBMS所

提供的數據類型略有不同

SQLServer的常用數據類型:

定長字符型CHAR(n),n=l-8000

變長字符型VARCHAR(n),n=1-8000

■整數型INT或INTEGER,占4個字節(jié),存放

-2147483648?2147483647的整數。

-浮點型FLOAT,占8個字節(jié),存放

-1.79X1O308—+L79X10308的實數。

日期型Datetime,占8個字節(jié),范圍是1753年1月1

日?9999年12月31日。

(4)[列級完整性約束]:定義該列上數據的約束條件

(5)[表級完整性約束]:定義某一列上的數據或某些列上的

數據的約束條件。

⑹如果約束只用到表中的一列,則可以在[列級完整性約束]

處定義,即在每一列的〈數據類型》之后定義。也可以在

[表級完整性約束]處定義,即在所有列定義完后定義。

(7)如果完整性約束涉及表中多個列,則必須在[表級完整性

約束]處定義。

(8)約束有:

上NULL/NOTNULL(空值約束/非空值約束)

工DEFAULT(默認值約束)

▲UNIQUE(惟一值約束)

工CHECK(檢查約束)

工PRIMARYKEY(主鍵約束)

工FOREIGNKEY(外鍵約束)

(9)上述約束中,NOTNULL和DEFAULT只能是列級約束,也即

只能在列的數據類型之后定義。其他約束既可作為列級約

束,也可作為表級約束。

語句卷例

【例522】要在當前數據庫Studentslnfo中的定義一個表,

表名為Students,表中各列的要求見表3/。

表3-1Students結構

列名說明,數據類型紓束

Sno^學號,字符串,長度為10.主德

Snamep姓名」字符串,長度為8.非空面

Ssexp性別:字符串,長度為2非空值,取F或

Sage^年齡,整數,空值,

SdepU1所在系。字符串,長度為15,默認為'Computer一

工定義該表的SQL語句:

CREATETABLEStudents(

SnoCHAR(10)PRIMARYKEY,

SnameCHAR(8)NOTNULL,

SsexCHAR(1)NOTNULLCHECK(Ssex=FOR

Ssex=

SageINTNULL

SdeptCHAR(20)DEFAULT'Computer'

)

CREATETABLEStudents(

SnoCHAR(10),

SnameCHAR(8)NOTNULL,

SsexCHAR(1)NOTNULL,

SageINT,

SdeptCHAR(20)DEFAULT'Computer\

PRIMARYKEY(Sno),

CHECK(Ssex=FORSsex='M')

)

余空優(yōu)/瘦空值為束外,其他約束都可是又一個為束名,用

CONSTRAINTv的束名>來定又,例如:

CREATETABLEStudents(

SnoCHAR(10),

SnameCHAR(8)NOTNULL,

SsexCHAR(1)NOTNULL,

SageINT,

SdeptCHAR(20)DEFAULTComputer「

CONSTRAINTSPKPRIMARYKEY(Sno),

CONSTRAINTCKCHECK(Ssex=FORSsex=!Mf)

)

【例523】要在當前數據庫Studentslnfo中的加入Courses

表,表中各列的要求見表3-2。

表3-2Courses結構

列名〃說明.數據類型.約束說明、

Cno^課程號字符串,長度為6主鍵,

Cnama課程名.字符串,長度為20.非空值,

PreCnw先修課程號?:字符串,長度為6.允許為空值.

Credits^學分.整數允許為空值,一

上定義該表的SQL語句:

CREATETABLECourses(

CnoCHAR(6)PRIMARYKEY,

CnameCHAR(20)NOTNULL,

PreCnoCHAR(6),

CreditsINT

)

CREATETABLECourses(

CnoCHAR(6)9

CnameCHAR(20)NOTNULL,

PreCnoCHAR(6),

CreditsINT,

CONSTRAINTCPKPRIMARYKEY(Cno))

【例524】要在當前數據庫Studentslnfo中的加入grade

表,表中各列的要求見表3~3。

13-3Enrollment結構

列名說明數據類里約束說那

Sno.字號字符串,長度為10外鍵,參照Students的主鍵

CHOP課程號.字符串,長度為6外鍵,蓼照Courses的主鍵

Grade「成絳整瓢允許為空面

主健為:(S叫Cno)a

工定義該表的SQL語句:

CREATETABLEgrade(

SnoCHAR(IO)NOTNULL,

CnoCHAR(6)NOTNULL,

GradeINT,

CONSTRAINTEPKPRIMARYKEY(Sno,Cno),

CONSTRAINTESlinkFOREIGNKEY(Sno)

REFERENCESStudents(Sno),

CONSTRAINTEClinkFOREIGNKEY(Cno)

REFERENCESCourses(Cno)

)

等價于:

CREATETABLEgrade(

SnoCHAR(IO)NOTNULLFOREIGNKEY(Sno)

REFERENCESStudents(Sno),

CnoCHAR(6)NOTNULLFOREIGNKEY(Cno)

REFERENCESCourses(Cno),

GradeINT,

PRIMARYKEY(Sno,Cno)

)

等價于:

CREATETABLEgrade(

SnoCHAR(IO)NOTNULLREFERENCES

Students(Sno),

CnoCHAR(6)NOTNULLREFERENCES

Courses(Cno),

GradeINT,

PRIMARYKEY(Sno,Cno)

)

工整意:在定義一個表結構時,除定義各列的列名、

數據類型外,也定義了各列的約束條件。列的約束

條件可以防止不合理的數據插入到表中,也能防止

不該刪除的數據被刪除。

'例如,在Students表中,定義了Sno為該表的主鍵約

束,表示該列的值非空且惟一。因此,如果要向表

中插入一行,但沒有給出Sno的值或給出空值,則無

法插入該行。

二又如,假設表中已有一行,該行的Sn。值

為'10010101,,則不能再插入一行,它的Sno值也

為'10010101'。因為主鍵約束要求表中每行的主鍵

值惟一。

工再如,表中外鍵的約束保證了表間參照關系的正確性。

如一個表中某一行的主鍵被另一個表的外鍵參照時,

就不能刪除該表中的行。

二關系模型要求關系實現實體完整性和參照完整性。即

表必須有主鍵約束,并且如果表間有參照關系,則必

須定義外鍵約束。遺憾的是SQLServer2000中允許定

義沒有主鍵約束的表。

5.2.3修改表結構

?:?用于修改不合理的表結構。

?:?語法:

ALTERTABLE〈表名〉

[ALTERCOLUMN〈列名〉(數據類型>]

I:ADD〈列名〉〈數據類型》

[DROPCOLUMN(列名》]

[ADDCONSTRAINT〈約束名〉〈約束定義〉

[DROPCONSTRAINT〈約束名》]

?語句說明:

(1)ALTERTABLE為關鍵字。

(2)〈表名〉指定要修改的表名。

(3)分隔符,表示選其中之一。

(4)〈列名>、〈數據類型〉、〈約束名〉、〈約束定義

>與0^A丁£TABLE語句中的使用方法相同,見上

節(jié)中說明。

【例5.2.5]將Students表的Sage列由原來的INT類型改為

SMALLINT類型。

ALTERTABLEStudents

ALTERCOLUMNSageSMALLINT

【例5.2.6】為grade表添加一列,列的定義為:Room

CHAR(20)o

ALTERTABLEgrade

ADDRoomCHAR(20)

注意:句表中添加一列時,要么指定默認值約束,要么指

定NULL約束。

【例5.2.7]刪除grade表中已添加的Room列

ALTERTABLEgrade

DROPCOLUMNRoom

注意:在刪除一列時,必須先刪除與該列有關的所有約束

,否則該列不能破刪除。原因很簡單,如果還有其他約束

用到該列,而該列允許被刪除的話,則約束顯然會出錯。

【例5.2.8]為grade表的Credits列添加檢查約束,

要求Credits大于0小于20。

ALTERTABLEgrade

ADDCONSTRAINTCK3CHECK(Credits>0AND

Credits<20)

【例5.2.9]刪除grade表中已添加的約束CK3

ALTERTABLEgrade

DROPCONSTRAINTCK3

注意:上例中:CK3為約束名。可見,刪除約束時,必須

給出約束名。所以在定義約束時,最好有約束名。

5.2.4刪除表結構

語法:

DROPTABLE〈表名>

語句說明

(1)DROPTABLE為關鍵字。

(2)〈表名〉為要刪除的表名。

語句舉^例

【例5.2.10】假定當前數據庫中有一個臨時表

OldStudents,刪除該表。

DROPTABLEOldStudents

注意:如果要刪除的表被另一個表的REFERENCES子句參

照,則不允許刪除。

例如,如果在定義grade表時,定義了一個外鍵為:

FOREIGNKEY(Sno)REFERENCESStudents(Sno),則表示

Students表被grade表參照,此時,不能刪除Students表。

若一定要刪除Students表,則必須先刪除grade表,然后

才能刪除Students表。

5.3數據查詢

?:?當定義了表結構后,此時的表只是一個空表。接下來,

最好,先向表中添加若干行,然后進行數據查詢。向

表中添加數據有兩種方法,一種方法是利用數據庫產

品提供的工具,通過它可直接向表中添加、修改、刪

除數據。另一種是用SQL的數據更新(INSERT.

UPDATE>DELETE)語句

假定已建好Students、Courses>grade三個表,并已

向各個表添加了數據(見表3-4、3-5、3-6)o

表3-4Studnets表數據

表3-6Enrollment表數據

Sno+Sname<Ssex。Sage-Sdeptc

2001010,Jone^MP19.Computer.Sno,Cno^Grade-

J,

20010102-、Sue-20Computer2001010LC1P90。

20010103,SmithM.19PMath-20010102。CL8&

2003010LAllensM-,18PAutomation-20010102.C2.94”

20030102。Deepa。FP21PArt-

20010102.C3P62a

表3-5Courses表數據

Cno^CnameProCno.Credits。

ChEnglish去

C2?MathC5.2。

C3PDatabaseC22“

數據表說明

■學生基本信息STUDENT(SNO學號,

SNAME姓名,SSEX性別,SAGE年齡,

SDEPT系)

■課程基本信息COURSE(CNO課程編號,

CNAME課程名稱,CPNO先修課,

CCREDIT學分)

■選修信息SC(SNO學號,CNO課程編號,

GRADE成績)

下面討論數據查詢問題

數據查詢用來描述怎樣從數據庫中獲取所需的數據。

數據查詢用到的語句就是查詢語句,即SELECT語句,

它是數據庫操作中最基本、最重要的語句之一。

SELECT語句的功能就是從一個或多個表或視圖(一種

虛擬表)中查到滿足條件的數據。

它的數據源是表或視圖,而結果是另一個表。

5.3.1查詢語句基本結構

語法:

SELECT〈目標列名表》

FROM〈數據源表》

[WHERE〈查詢條件>]

[GROUPBY〈分組列》]

[HAVING〈組選擇條件>]

[ORDERBY〈排序列〉]

SELECT語句說明

SELECT語句中必須有:SELECT子句、FROM子句

其余子句可選:WHERE子句、GROUPBY子句、

HAVING子句、ORDERBY子句

(1)SELECT〈目標列名表〉,稱為SELECT子句。用于指定整個查詢結果表中

包含的列。假定已經執(zhí)行完FROM、WHERE、GROUPBY.HAVING子句,從

概念上來說得到了一個表,若將該表稱為T,從T表中選擇SELECT子句

指定的目標列組成表就為整個查詢的結果表。

(2)FROM〈數據源表》,稱為FROM子句。用于指定整個查詢語句用到的一

個或多個基本表或視圖,是整個查詢語句的數據來源,通常稱為數據

源表。

(3)WHERE〈查詢條件〉,稱為WHERE子句。用于指定多個數據源

表的連接條件和單個源表中行的篩選條件或選擇條件。如

果只有一個源表,則沒有表間的連接條件,只有行的篩選

條件。

(4)GROUPBY〈分組列〉,稱為GROUPBY子句。假定已經執(zhí)行完

FROM、WHERE子句,則從概念上來說得到了一個表,若將表

稱為T1表,貝UGROUPBY用于指定T1表按哪些列(稱為分組列)

進行分組,對每一個分組進行運算,產生一行。所有這些

行組成一個表,不妨把它稱為T2表,T2表實際上是一個組

表。

(5)HAVING〈組選擇條件>,稱為HAVING子句。與GROUPBY

子句一起使用。用于指定組表T2表的選擇條件,即選擇

T2表中滿足〈組選擇條件》的行,組成一個表就是SELECT

子句中提到的表T

(6)ORDERBY〈排序列》,稱為ORDERBY子句。若有ORDER

BY子句,則用于指定查詢結果表T中按指定列進行升序

或降序排序,得到整個查詢的結果表。

注意:

SELECT語句的結果表不一定滿足關系的性質,也就是

說,它不一定是一個關系,但是本章中仍然稱為表。

SELECT語句包含了關系代數中的選擇、投影、連接、

笛卡兒積等運算。

下面首先說明單表查詢SELECT語句中的各個子句

5.3.2單表查詢?r

單表查詢指的是在一個源表中查找所需的數據。

1.SELECT子句

(1)選擇表中若干列

在SELECT子句的〈目標列名表》中指定整個查詢結果

表中出現的若干個列名,各列名之間用逗號分隔。

【例5,37】全詢全體學金的老號號四名

SELECTSno,SnameFROMStudents

(2)選擇表中所有列

可以用*來代替表的所有列。

【例5,3,2】全詢全體老皮的老號、姓名、植別、年齡、

所在系。

SELECT*FROMStudent

(3)使用表達式

表達式可以是列名、常量、函數、或用列名、常量、函

數等經過+(加)、數減)、*(乘)、/(除)等組成的公式。

【例£33]全詢全體學金的逡僻情況,即老號、僻程號、

鼠債,對鼠債他都加5。,?

結果為…

Sno.'Cno,(無'列?.名),

20010101.Cl95.

20010102.Cl.93.

20010102.C2.99,

20010102」C367.

■ACCESS中的圖形操作界面

右鍵點擊字段列,,生成器

表達式生成看0E

字段學號課程編號表達式1:[成筑]{v

表選課表選課表選課表

排序

顯不000

條件

<

4)設置列的別名

所謂別名,就是給另一個名字,主要是為了方便閱讀。

設置列別名的方法有:

原列名[AS]列別名

■ACCESS中的圖形操作界面

右鍵點擊字段列,,屬性

學號課程編號表達式1:城績]dv杳字段屬性

選課表選課表選課表

卻1

*序:_________________________________________________

靈示:

蝌:掩碼

就標

【例5,3,0左詢全體老皮的老號、勝名,界

,晨耒的美文列名微置中次別名。

SELECTSnoAS,學號,,SnameAS,姓名

'FROMStudents

【例5,5.5】全詢全體學藝的逡僻情況,其鼠債列他都加5,

界,各列微置4次的別名

解:SELECTSno,學號,,Cno,課程號,,Grade+5'

成績'

FROMsc

結果為:

學號Q課程號。成績2

20010101。C195.

20010102aC1293.-

20010102PC2。9%

20010102。C3。674

注意與【例333】的結果進行比較。

(5)使用DISTINCT消除結果表中完全重復的行

【例537】顯示所哧這僻當女的老號,不去掉變復行。

解:

與DISTINCT相反的是ALL,ALL表示保留結果表中的重

復行。

默認情況下是ALL,表示保留重復行。

ACCESS中的圖形操作界面小|

鼻注意

■ACCESS中沒有直接的設置支持DISTINCT

■只有通過SQL視圖自行編寫SQL語句

視圖心|插入?查詢3工具建)窗口世)幫助?

.區(qū)設計視圖@)■閆▼T

u

SQL視圖?)

d

數據表視圖⑤)

,

7數據透視表視圖(Q)

數據透視圖視圖W)

TSELECT

屋性任)Alt+Enter

對象相關性與…FROM學生表;

聯接屬性

工具欄復)

2.FROM子句

單表查詢中,數據源表只有一個,因此,FROM子句為

FROM〈單個數據源表名〉

■例如,要查找學生有關的信息,用到Students表,

則FROM子句為:FROMStudents

■例如,要查找課程有關的信息,用至“Courses表,則

FROM子句為:FROMCourses

■例如,要查找選課有關的信息,用至"grade表,則

FROM子句為:FROMsc

3.WHERE子句

WHERE〈查詢條件〉

■〈查詢條件》是由列名、運算符、常量、函數等構成的一個表達

,式

■〈查詢條件》中常用的運算符:

■算術運算符(+-*/人\mod)

比較運算符(=、>、<、>=、<=、Between...And...、in)

■邏輯運算符

■邏輯運算符主要有:

字符匹配運算符:LIKE,NOTLIKE

空值比較運算符:ISNULL,ISNOTNULL

條件連接運算符:AND,OR,NOT

下面舉例說明

(1)基于比較運算符的查詢

【例5全詢學女迄裸鼠債大于弘今的老女老號、德程

號、虱ft。

解:SELECT*FROMscWHEREGrade>80

(2)基于BETWEEN…AND的查詢

基本格式:列名BETWEEN下限值AND上限值

等價于:列名〉二下限值AND列名〈二上限值

BETWEEN...AND...一般用于數值型范圍的比較。表示當列

值在指定的下限值和上限值范圍內時,條件為TRUE,否則

為FALSE。NOTBETWEEN…AND…與BETWEEN…AND…正好相

反,表示列值不在指定的下限值和上限值范圍內時,條件

為TRUE,否則為FALSE。

注意:列名類型要與下F艮值或上F艮值的類型一致。

【例5.5/0至莉老女逡裸戚債森勿?勿令之間的老2老號、

薛程號、鼠債。

解:SELECT*FROMsc

WHEREGradeBETWEEN80AND90

等價SELECT*FROMsc

WHEREGrade>二80ANDGrade<=90

(3)基于IN的查詢

IN用于測試一個列值是否與常量表中的任何一個值相等。

IN條件表示格式為:列名IN(常量1,常量2,…常量n)

當列值與IN中的任一常量值相等時,則條件為TRUE,否則

為FALSE。

【例5,572】全詢數學系、君賓機系、藝術系當女的老號、放

名O

解:SELECTSno,SnameFROMStudents

WHERESdeptIN('Math','Computer5,'Art')

等價于:

SELECTSno,SnameFROMStudents

WHERESdept='Math'ORSdept='Computer'

ORSdept='Art'

(4)基于LIKE的查詢

-LIKE用于測試一個字符串是否與給定的模式匹配。

所謂模式是一種特殊的字符串,其中可以包含普通字符

,也可以包含特殊意義的字符,通常叫通配符。

工LIKE運算符的一般形式為:列名LIKE〈模式串》

模式串中可包含如下四種通配符:

(1):匹配任意一個字符。注意,在這里一個漢字或一個全角字符也

算一個字符。如'_u_'表示第二個字符為u,第一、第三個字符為

任意字符的字符串I一

(2)%:匹配任意0個或多個字符。如'S%,表示以S開頭的字符串。

注意,access中使用

⑴?匹配任意一個字符

(2)*匹配任意0個或多個字符

可以用LIKE來實現模糊查詢

【例5,5/0本找四名的第二個莊符是U并且H有三個

生符的老金的老號、姓名。

解:SELECTSno,SnameFROMStudents

WHERESnameLIKE'_u_'

【例5,3/5】本我四名。S許靈的所有學成的學號、妝

名O

解:SELECTSno,SnameFROMStudents

WHERESnameLIKE'S%'

(5)基于NULL空值的查詢

空值是尚未確定或不確定的值。判斷某列值是否為NULL值只

能使用專門判斷空值的子句,語句格式如下:

判斷列值為空的語句格式為:列名ISNULL

判斷列值不為空的語句格式為:列名ISNOTNULL

【例5,3次】全詢無考詼鼠債的名女的名號我相應的薛程號。

解:SELECTSno,CnoFROMsc

WHEREGradeISNULL

系等價

SELECTSno,CnoFROMsc

WHEREGrade二0

【例5,彳71】垂詢有考優(yōu)感債(即鼠楂系,變他,的老代的學

號、裸福號。

溫馨提示

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

評論

0/150

提交評論