數(shù)據(jù)庫系統(tǒng)-03sql語言4節(jié)_第1頁
數(shù)據(jù)庫系統(tǒng)-03sql語言4節(jié)_第2頁
數(shù)據(jù)庫系統(tǒng)-03sql語言4節(jié)_第3頁
數(shù)據(jù)庫系統(tǒng)-03sql語言4節(jié)_第4頁
數(shù)據(jù)庫系統(tǒng)-03sql語言4節(jié)_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本章概要SQL是結構化查詢語言(Structured

Query

Language)的縮寫,其功能包括數(shù)據(jù)查詢、數(shù)據(jù)

、數(shù)據(jù)定義和數(shù)據(jù)控制四個部分。SQL語言簡潔、方便實用、功能齊全,已成為目前應用最廣的關系數(shù)據(jù)庫語言。本章要求了解SQL語言的特點,掌握SQL語言的四大功能及使用方法,重點掌握其數(shù)據(jù)查詢功能及其使用。返回23.1

SQL語言的基本概念與特點一. SQL語言的發(fā)展及標準化1.

SQL語言發(fā)展史SQL語言是當前最為成功、應用最為廣泛的關系數(shù)據(jù)庫語言,其發(fā)展主要經(jīng)歷了以下幾個階段:1974

年由CHAMBERLIN

和BOYEE

提出,當時稱為SEQUEL(STUCTURED

ENGLISHQUERY

LANGUAGE);IBM公司對其進行了修改,并用于其SYSTEM R關系數(shù)據(jù)庫系統(tǒng)中;1981年IBM推出其關系關系數(shù)據(jù)庫SQL/DS,并將其名字改為SQL,由于SQL語言功能強大,簡潔易用,因此得到了廣泛的使用;今天廣泛應用于各種大型數(shù)據(jù)庫,如SYBASE、INFORMIX、ORACLE、DB2、INGRES等,也用于各種小型數(shù)據(jù)庫,如FOXPRO、ACCESS。返回32. SQL語言標準化隨著關系數(shù)據(jù)庫系統(tǒng)和SQL語言應用的日益廣泛,SQL語言的標準化工作也在緊張革進行著,十多年來已制訂了多個SQL標準;1982年,

化局(AMERICAN

NATIONALSTANDARD

INSTITUTE,簡稱ANSI)開始制定SQL標準;1986年,

了SQL語言的第一個標準SQL86;1987年,國際標準化組織(ISO)通過了SQL86標準;,國際標準化組織(ISO)對SQL86進行了補充,推出了SQL89標準;1992年,ISO又推出了SQL92標準,也稱為SQL2;SQL99(也稱為SQL3),增加了面

象的功能。返回4二. SQL語言的基本概念首先介紹兩個基本概念:基本表和視圖?;颈恚˙ASETABLE):是獨立存在的表,不是由其它的表導出的表。一個關系對應一個基本表,一個或多個基本表對應一個文件。視圖(VIEW):是一個虛擬的表,是從一個或幾個基本表導出的表。它本身不獨立存在于數(shù)據(jù)庫中,數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應的數(shù)據(jù),這些數(shù)據(jù)仍存放在導出視圖的基本表中。當基本表中的數(shù)據(jù)發(fā)生變化時,從視圖中查詢出來的數(shù)據(jù)也隨之改變。返回5例如:學生數(shù)據(jù)庫中有學生基本情況表STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT),此表為基本表,對應一個

文件??梢栽谄浠A上定義一個男生基本情況表(視圖)STUDENT_MALE(SNO,SNAME,SAGE,SDEPT),它是從STUDENT中選擇SSEX=’男’的各個行,然后在SNO,SNAME,SAGE,SDEPT上投影得到的。在數(shù)據(jù)庫中只存有STUDENT_MALE的定義,而STUDENT_MALE的記錄不重復

。在用戶看來,視圖是通過不同路徑去看一個實際表,就象一個窗口一樣,通過窗戶去看外面的高樓,可以看到高樓的不同部分,而透過視圖可以看到數(shù)據(jù)庫中自己感的內容。返回6SQL視圖1視圖2基本表1基本表2基本表3基本表4文件1文件2外模式模式內模式圖3.1

SQL語言支持的關系數(shù)據(jù)庫的三級邏輯結構SQL語言支持數(shù)據(jù)庫的三級模式結構,如圖3.1所示。其中外模式對應于視圖和部分基本表,模式對應本表,內模式對應于

文件。返回7三.

SQL語言的主要特點SQL語言類似于英語的自然語言,簡潔易用。SQL語言是一種非過程語言,即用戶只要提出“干什么”即可,不必管具體操作過程,也不必了解數(shù)據(jù)的存取路徑,只要指明所需的數(shù)據(jù)即可。SQL語言是一種面向集合的語言,每個命令的操作對象是一個或多個關系,結果也是一個關系。SQL語言既是自含式語言,又是

語言??瑟毩⑹褂?,也可嵌入到宿主語言中。自含式語言可以獨立使用交互命令,適用于終端用戶、應用程序員和DBA;

語言使其嵌入在高級語言(VB,VC等)中使用,供應用程序員開發(fā)應用程序。返回8SQL語言具有:數(shù)據(jù)查詢(QUERY)數(shù)據(jù)定義(DEFINITION)數(shù)據(jù)

(MANIPULATION)數(shù)據(jù)控制(CONTROL)四種語言

的功能。返回9返回103.2

SQL數(shù)據(jù)定義SQL語言使用數(shù)據(jù)定義語言(DATA

DEFINITIONLANGUAGE,簡稱DDL)實現(xiàn)其數(shù)據(jù)定義功能,可對數(shù)據(jù)庫用戶、基本表、視圖、索引進行定義和撤消。一.

字段數(shù)據(jù)類型當用SQL語句定義表時,需要為表中的每一個字段設置一個數(shù)據(jù)類型,用來指定字段所存放的數(shù)據(jù)是整數(shù)、字符串、貨幣或是其它類型的數(shù)據(jù)。數(shù)據(jù)類型有很多種,分為以下9類:整數(shù)數(shù)據(jù)類型:依整數(shù)數(shù)值的范圍大小,有BIT,INT,SMALLINT,TINYINT四種。

精確數(shù)值類型:用來定義可帶小數(shù)部分的數(shù)字,有

NUMERIC和DECIMAL兩種。二者相同,但建議使用DECIMAL。如:123.0、8000.56

近似浮點數(shù)值數(shù)據(jù)類型:當數(shù)值的位數(shù)太多時,可用此數(shù)據(jù)類型來取其近似值,用FLOAT和REAL兩種。如:1.23E+10

日期時間數(shù)據(jù)類型:用來表示日期與時間,依時間范圍與精確程度可分為DATETIME

與SMALLDATETIME兩種。如:1998-06-08

15:30:00字符串數(shù)據(jù)類型:用來表示字符串的字段。包括:CHAR,

VARCHAR,

TEXT三種,如:“數(shù)據(jù)庫”

UNICODE字符串數(shù)據(jù)類型:UNICODE是雙字節(jié)文字編碼標準,包括NCHAR,

NVARCHAR與NTEXT三種。與字符串數(shù)據(jù)類型相類似,但UNICODE的一個字符用2字節(jié)

,而一般字符數(shù)據(jù)用一個字節(jié)

。

二進制數(shù)據(jù)類型:用來定義二進制碼的數(shù)據(jù)。有:

BINARY,VARBINARY,IMAGE三種,通常用十六進制表示:如:OX5F3C返回11貨幣數(shù)據(jù)類型:用來定義與貨幣有關的數(shù)據(jù),分為MONEY

與SMALLMONEY兩種,如:123.0000

標記數(shù)據(jù)類型:有UNIQUEIDENTIFIER

,

TIMESTAMP兩種,此數(shù)據(jù)類型通常系統(tǒng)自動產(chǎn)生,而不是用戶輸入的,TIMESTAMP記錄數(shù)據(jù)更新的時間戳印,而UNIQUEIDENTIFIER用來識別每一筆數(shù)據(jù)的唯一性。各種數(shù)據(jù)類型的有關規(guī)定如下表:數(shù)據(jù)類型數(shù)據(jù)內容與范圍占用的字節(jié)BIT0,

1,

NULL實際使用1BIT,但會占用1BYTE,若一個數(shù)據(jù)中有數(shù)個BIT

字段,則可共占1

個BYTE返回12返回13INT-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ù)4BYTESDATETIME1753/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,尾端空白字符刪除返回14NTEXT2^30-1個字符1個字符占2B,最大可2GBBINARY1-8000個字符在時,SQL

SERVER

會另外增加

4B,尾端空白字符會VARBINARY1-8000個字符在保留

時,SQLSERVER

會另外增加

4B,尾端空白字符會IMAGE2^31-1個字符刪最除大可

2GBMONEY-2^63-2^63-18BSMALLMONEY-2^31-2^31-14BTIMESTAMP16進制8BUNIQUEIDENTIFIER全局唯一標識符(GUID)可用NEWID()函數(shù)生成一個該種類型的字段值。返回15返回16二.

定義、修改和撤消數(shù)據(jù)庫的用戶1

建立數(shù)據(jù)庫用戶數(shù)據(jù)庫用戶是指能夠登錄到數(shù)據(jù)庫,并能夠對數(shù)據(jù)庫進行存取操作的用戶,數(shù)據(jù)庫管理員可以通過CREATEUSER語句建立其他數(shù)據(jù)庫用戶。語法格式為:CREATE

USER <用戶名>

IDENTIFIED

BY <口令><用戶名>指定數(shù)據(jù)庫用戶的帳號名字,即用戶標識符,<口令>指用戶登錄到數(shù)據(jù)庫系統(tǒng)時使用的口令,這里的用戶名和口令可以與用戶登錄到操作系統(tǒng)時所使用的用戶名和口令不同。返回17例3.1建立一個新用戶,其名稱為ZHANGSAN,登錄口令為123。CREATE

USER

ZHANGSAN

IDENTIFIED

BY

123更改數(shù)據(jù)庫用戶的口令數(shù)據(jù)庫用戶最初口令是由數(shù)據(jù)庫管理員指定的,數(shù)據(jù)庫用戶可以用ALTER

USER命令來更改它,ALTER

USER語句的基本語法格式為:ALTER

USER

<用戶名>

IDENTIFIED

BY

<口令>例3.2

將用戶ZHANGSAN的口令改為456。ALTER

USER

ZHANGSAN

IDENTIFIED

BY

456返回183

刪除用戶隨著數(shù)據(jù)庫應用的發(fā)展和變化,數(shù)據(jù)庫的用戶也會發(fā)生變化。如果某些數(shù)據(jù)庫用戶不再需要使用數(shù)據(jù)庫,數(shù)據(jù)庫管理員就可以使用DROP

USER把該用戶刪掉,DROP

USER

語句的基本語法格式為:DROP

USER<用戶名>例3.3

刪除用戶ZHANGSANDROP

USER

ZHANGSAN注意:刪除數(shù)據(jù)庫用戶之前應首先刪除該用戶建立的數(shù)據(jù)庫對象,包括基本表、視圖、索引等,否則系統(tǒng)將不允許刪除這個用戶。三.

創(chuàng)建、修改和刪除數(shù)據(jù)表1.

創(chuàng)建數(shù)據(jù)表數(shù)據(jù)表是關系數(shù)據(jù)庫的基本組成單位,它物理地于數(shù)據(jù)庫的

文件中。創(chuàng)建一個數(shù)據(jù)表時主要包括以下幾個組成部分:1字段名(列名):字段名可長達128個字符。字段名可包含中文、英文字母、下劃線、#號、貨幣符號(¥)及AT符號(@)。同一表中不許有重名列;234字段數(shù)據(jù)類型:見表3.2;字段的長度、精度和小數(shù)位數(shù);NULL值與DEFAULT值DEFAULT值表示某一字段的默認值,當沒有輸入數(shù)據(jù)時,則使用此默認的值。返回19返回202.

創(chuàng)建數(shù)據(jù)表的SQL語法格式在SQL語言中,使用語句CREATE TABLE創(chuàng)建數(shù)據(jù)表,其基本語法格式為:CREATE

TABLE<表名>(<列定義>[{,<列定義>|<表約束>}])<表名>是合法標識符,最多可有128個字符,如S,SC,C,不允許重名。<列定義>:<列名><數(shù)據(jù)類型>[DEFAULT]

[{<列約束>}]DEFAULT:若是某字段設置有默認值,當該字段未被輸入數(shù)據(jù)時,則以該默認值自動填入該字段。返回21例3.4

建立一學生表USE

STUDENTCREATE

TABLES(SNO

CHAR(8)

,

SNVARCHAR(20),AGE

INT,SEX

CHAR(2)

DEFAULT'男',

DEPT

VARCHAR(20));執(zhí)行該語句后,便產(chǎn)生了學生基本表的表框架,此表為一個空表。其中,SEX列的缺省值為“男”。定義完整性約束上列為創(chuàng)建基本表的最簡單形式,還可以對表進一步定義,如主鍵、空值的設定,使數(shù)據(jù)庫用戶能夠根據(jù)應用的需要對基本表的定義做出更為精確和詳盡的規(guī)定。在SQL

SERVER中,對本表的約束分為列約束和表約束。列約束是對某一個特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名;表約束與列定義相互獨立,不包括在列定義中,通常用于對多個列一起進行約束,與列定義用’,’分隔,定義表約束時必須要約束的那些列的名稱。完整性約束的基本語法格式為:[CONSTRAINT<約束名>]<約束類型>約束名:約束不指定名稱時,系統(tǒng)會給定一個名稱。返回22返回23約束類型:在定義完整性約束時必須指定完整性約束的類型。在SQL

SERVER中可以定義五種類型的完整性約束,下面分別加以介紹:1NULL/NOT

NULL是否允許該字段的值為NULL。NULL值不是0也不是空白,更不是填入字符串“NULL”,而是表示“不知道”、“不確定”或“沒有數(shù)據(jù)”的意思。當某一字段的值一定要輸入才有意義的時候,則可以設置為NOT

NULL。如主鍵列就不允許出現(xiàn)空值,否則就失去了唯一標識一條記錄的作用只能用于定義列約束,其語法格式如下:[CONSTRAINT<約束名>][NULL|NOT

NULL]返回24例3.5

建立一個S表,對SNO字段進行NOT

NULL約束。USE

STUDENTCREATE

TABLE

S(SNO

CHAR(10)

CONSTRAINT

S_CONS

NOTNULL,SN

VARCHAR(20),AGE

INT,SEX

CHAR(2)

DEFAULT’男’,

DEPT

VARCHAR(20));當SNO為空時,系統(tǒng)給出錯誤信息,無NOT

NULL約束時,系統(tǒng)缺省為NULL。其中S_CONS為指定的約束名稱,當約束名稱省略時,系統(tǒng)自動產(chǎn)生一個名字。返回25(2)UNIQUE約束UNIQUE約束用于指明基本表在某一列或多個列的組合上的取值必須唯一。定義了UNIQUE約束的那些列稱為唯一鍵,系統(tǒng)自動為唯一鍵建立唯一索引,從而保證了唯一鍵的唯一性。唯一鍵允許為空,但系統(tǒng)為保證其唯一性,最多只可以出現(xiàn)一個NULL值。UNIQUE既可用于列約束,也可用于表約束。UNIQUE用于定義列約束時,其語法格式如下:[CONSTRAINT<約束名>]UNIQUE例3.6

建立一個S表,定義SN為唯一鍵。USE

STUDENTCREATE

TABLE

S(SNO

CHAR(6),SN

CHAR(8)

CONSTRAINT

SN_UNIQ

UNIQUE,SEX

CHAR(2),AGE

NUMERIC(2));的學生例3.7

建立一個S表,定義SN+SEX為唯一鍵。USE

STUDENTCREATE

TABLE

S(

SNO

CHAR(5),SN

CHAR(8),SEX

CHAR(2),CONSTRAINT

S_UNIQ

UNIQUE(SN,SEX));系統(tǒng)為SN+SEX建立唯一索引,確保同一沒有重名。(3)PRIMARY

KEY約束PRIMARY

KEY約束用于定義基本表的主鍵,起唯一標識作用,其值不能為NULL,也不能重復,以此來保證實體的完整性。返回26返回27PRIMARY

KEY與UNIQUE約束類似,通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間存在著很大的區(qū)別:①在一個基本表中只能定義一個PRIMARY

KEY約束,但可定義多個UNIQUE約束;②對于指定為PRIMARY

KEY的一個列或多個列的組合,其中任何一個列都不能出現(xiàn)空值,而對于

UNIQUE所約束的唯一鍵,則允許為空。注意:不能為同一個列或一組列既定義UNIQUE約束,又定義PRIMARY

KEY約束。返回28例3.8

建立一個S表,定義SNO為S的主鍵USE

STUDENTCREATE

TABLE

S(SNO

CHAR(5)

NOT

NULLCONSTRAINT

S_PRIMPRIMARY

KEY,SN

CHAR(8),AGE

NUMERIC(2));返回29例3.9

建立一個SC表,定義USE

STUDENTCREATE

TABLE

SC(SNO

CHAR(5)

NOT

NULL,CNO

CHAR(5)

NOT

NULL,SCORE

NUMERIC(3),O為SC的主鍵CONSTRAINT

SC_PRIM

PRIMARY

KEY(O));(4)FOREIGN

KEY約束FOREIGN

KEY約束指定某一個列或一組列作為外部鍵,其中,包含外部鍵的表稱為從表,包含外部鍵所的主鍵或唯一鍵的表稱主表。系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個主鍵值或唯一鍵值,要么取空值。以此保證兩個表之間的連接,確保了實體的參照完整性。FOREIGNKEY既可用于列約束,也可用于表約束,其語法格式為:[CONSTRAINT<約束名>]FOREIGN

KEYREFERENCES<主表名>(<列名>[{<列名>}])返回30返回31例3.10

建立一個SC表,定義USE

STUDENTCREATE

TABLE

SCO為SC的外部鍵。(SNO

CHAR(5)

NOT

NULLCONSTRAINT

S_FOREFOREIGN

KEY

REFERENCES

S(SNO),CNO

CHAR(5)

NOT

NULL

CONSTRAINT

C_FOREFOREIGN

KEY

REFERENCES

C(CNO),SCORE

NUMERIC(3),CONSTRAINT

S_C_PRIM

PRIMARY

KEY(

O));四.修改基本表由于應用環(huán)境和應用需求的變化,經(jīng)常需要修改基本表的結構,比如,增加新列和完整性約束、修改原有的列定義和完整性約束等。

SQL語言使用ALTER

TABLE命令來完成這

能,有如下三種修改方式:1.ADD方式用于增加新列和完整性約束,定義方式同CREATE

TABLE語句中的定義方式相同,其語法格式為:ALTER

TABLE<表名>ADD<列定義>|<完整性約束定義>例3.12

在S表中增加一個班號列和住址列。USE

STUDENTALTER

TABLE

SADDCLASS_NO

CHAR(6),ADDRESS

CHAR(40)返回32返回33注意:使用此方式增加的新列自動填充NULL值,所以不能為增加的新列指定NOT

NULL約束

。例3.13

在SC表中增加完整性約束定義,使SCORE在0-100之間。USE

STUDENTALTER

TABLE

SCADDCONSTRAINT

SCORE_CHK

CHECK(SCOREBETWEEN

0

AND100)返回342.

ALTER

方式用于修改某些列,其語法格式為:ALTER

TABLE<表名>ALTER

COLUMN<列名><數(shù)據(jù)類型>[NULL|NOT

NULL]例3.14

把S表中的SNO列加寬到8位字符寬度USE

STUDENTALTER

TABLE

SALTER

COLUMNSNO

CHAR(8)返回35注意:使用此方式有如下一些限制:①不能改變列名;②不能將含有空值的列的定義修改為NOT

NULL約束;③若列中已有數(shù)據(jù),則不能減少該列的寬度,也不能改變其數(shù)據(jù)類型;④只能修改NULL|NOT

NULL約束,其它類型的約束在修改之前必須先刪除,然后再重新添加修改過的約束定義。DROP方式刪除完整性約束定義,其語法格式為:ALTER

TABLE<表名>DROP

CONSTRAINT<約束名>返回36例3.15

刪除S表中的AGE_CHK約束USE

STUDENTALTER

TABLE

SDROPCONSTRAINT

AGE_CHK4.

改變基本表的名字使用RENAME命令,可以改變基本表的名字,其語法格式為:RENAME<舊表名>TO<新表名>例3.16

將S表的名字更改為STUDENTUSE

STUDENTRENAME

S

TO

STUDENT返回375.

刪除基本表當某個基本表無用時,可將其刪除。刪除后,該表中的數(shù)

據(jù)和在此表上所建的索引都被刪除,而建立在該表上的視圖不會隨之刪除,系統(tǒng)將繼續(xù)保留其定義,但已無法使用。如果重新恢復該表,這些視圖可重新使用。刪除表的語法格式:DROP

TABLE<表名>例3.17

刪除表STUDENTUSE

STUDENTDROP

TABLE

STUDENT注意:只能刪除自己建立的表,不能刪除其他用戶所建的表。五.設計、創(chuàng)建和索引1索引的作用在日常生活中引等。會經(jīng)常遇到索引,例如、詞典索借助索引,人們會很快地找到需要的東西。索引是數(shù)據(jù)庫隨機檢索的常用

,它實際上就是記錄的關鍵字與其相應地址的對應表。例如,當先通過要在本書中查找有關“SQL查詢”的內容時,應該找到“SQL查詢”所對應的頁碼,然后從該頁碼中找出所要的信息。這種方法比直接翻閱書的內容要快。如果把數(shù)據(jù)庫表比作一本書,則表的索引就如書的樣,通過索引可大大提高查詢速度?!送?,在SQL

SERVER中,行的唯一性也是通過建立唯一索引來

的。索引的作用可歸納為:(1).加快查詢速度;(2).保證行的唯一性。返回38392

索引的分類1

按照索引記錄的存放位置可分為

索引與非

索引

索引:按照索引的字段排列記錄,并且依照排好的順序將記錄

在表中。非 索引:按照索引的字段排列記錄,但是排列的結果并不會

在表中,而是另外

。(2)唯一索引的概念唯一索引表示表中每一個索引值只對應唯一的數(shù)據(jù)記錄,這與表的PRIMARY

KEY的特性類似,因此唯一性索引常用于PRIMARY

KEY的字段上,以區(qū)別每一筆記錄。當表中有被設置為UNIQUE的字段時,SQLSERVER會自動建立一個非 的唯一性索引。而當表中有PRIMARY

KEY的字段時,SQL

SERVER會索引。在PRIMARY

KEY字段建立一個(3).復合索引的概念復合索引是將兩個字段或多個字段組合起來建立的索引,而單獨的字段允許有重復返的回值。3.

建立索引建立索引的語句是CREATE

INDEX,其語法格式為:CREATE[UNIQUE][CLUSTER]

INDEX<索引名>ON<表名>(<列名>[次序][{,<列名>}][次序]…)UNIQUE表明建立唯一索引。CLUSTER表示建立

索引。次序用來指定索引值的排列順序,可為ASC(升序)或DESC(降序),缺省值為ASC。例3.18

為表

O上建立唯一索引。USE

STUDENTCREATE

UNIQUE

INDEX

SCI

ON

SC(O)返回40執(zhí)行此命令后,為SC表建立一個索引名為SCI的唯一索引,此索引為

O兩列的復合索引,即對SC表中的行先按SNO的遞增順序索引,對于相同的

SNO,又按CNO的遞增順序索引。由于有UNIQUE的限制,所以該索引在(

O)組合列的排序上具有唯一性,不存在重復值。索例3.19

為教師表T在TN上建立

索引。CREATE

CLUSTER

INDEX

TI

ON

T(TN)執(zhí)行此命令后,為T表建立一個索引名為TI的引,T表中的記錄將按照TN值的升序存放。返回41注意:改變表中的數(shù)據(jù)(如增加或刪除記錄)時,索引將自動更新。索引建立后,在查詢使用該列時,系統(tǒng)將自動使用索引進行查詢。

索引數(shù)目,但索引越多,更新數(shù)據(jù)的速度越慢。對于僅用于查詢的表可多建索引,對于數(shù)據(jù)更新頻繁的表則應少建索引。4.刪除索引建立索引是為了提高查詢速度,但隨著索引的增多,數(shù)據(jù)更新時,系統(tǒng)會花費許多時間來索引。這時,應刪除不必要的索引。刪除索引的語句是DROP

INDEX,其語法格式為:DROP

INDEX

數(shù)據(jù)表名.索引名例3.20

刪除表SC的索引SCI。DROP

INDEX

SC.SCI返回42返回433.3

SQL數(shù)據(jù)查詢一.

SELECT命令的格式與基本使用數(shù)據(jù)查詢是數(shù)據(jù)庫中最常見的操作。SQL語言提供SELECT語句,通過查詢操作可得到所需的信息。SELECT語句的一般格式為:SELECT〈列名〉[{,〈列名〉}]FROM〈表名或視圖名〉[{,〈表名或視圖名〉}][WHERE〈檢索條件〉][GROUP

BY<列名1>[HAVING<條件表達式>]][ORDER

BY<列名2>[ASC|DESC]];返回44SELECT語句查詢的結果是仍是一個表。SELECT語句的執(zhí)行過程為:根據(jù)WHERE子句的檢索條件,從FROM子句指定的基本表或視圖中選取滿足條件的元組,再按照

SELECT子句中指定的列,投影得到結果表。如果有GROUP子句,則將查詢結果按照<列名1>相同的值進行分組。如果GROUP子句后有HAVING短語,則只輸出滿足HAVING條件的元組。如果有ORDER子句,查詢結果還要按照<列名2>的值進行排序。。例3.21

查詢全體學生的學號、

和SELECT

SNO,

SN,

AGE

FROM

S例3.22

查詢學生的全部信息。SELECT

*

FROM

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

查詢選修了課程的學生號。SELECT

DISTINCT

SNO

FROM

SC查詢結果中的重復行被去掉上述查詢均為不使用WHERE子句的無條件查詢,也稱作投影查詢。返回45另外,利用投影查詢可控制列名的順序,并可通過指定別名改變查詢結果的列標題的名字。例3.24

查詢全體學生的

、學號和

。SELECT

SNAME

AS

NAME,

SNO,

AGE

FROM

S其中,NAME為SNAME的別名返回46返回47二.條件查詢當要在表中找出滿足某些條件的行時,則需使用WHERE子句指定查詢條件。WHERE子句中,條件通常通過三部分來描述:列名;比較運算符;3.列名、常數(shù)。

運算符含義=,

>,

<,

>=,

<=,

!=比較大小多重條件AND,ORBETWEEN

AND確定范圍IN確定集合LIKE字符匹配IS

NULL空值表3.8

常用的比較運算符返回481.比較大小例3.25

查詢選修課程號為‘C1’的學生的學號和成績。SELECT

SNO,SCORE

FROM

SC

WHERE

CNO=’C1’例3.26

查詢成績高于85分的學生的學號、課程號和成績。SELECT

O,SCORE

FROM

SC

WHERESCORE>85返回492.多重條件查詢當WHERE子句需要指定一個以上的查詢條件時,則需要使用邏輯運算符AND、OR和NOT將其連結成復合的邏輯表達式。其優(yōu)先級由高到低為:NOT、AND、OR,用戶可以使用括號改變優(yōu)先級。例3.27

查詢選修C1或C2且分數(shù)大于等于85分學生的的學號、課程號和成績。SELECT

SNO,CNO,SCOREFROM

SCWHERE(CNO=’C1’

OR

CNO=’C2’)

ANDSCORE>=853.確定范圍例3.28

查詢工資在1000至1500之間的教師的教師號、姓名及

。SELECT

TNO,TN,PROFFROM

TWHERE

SAL

BETWEEN

1000

AND

1500等價于SELECT

TNO,TN,PROFFROM

TWHERE

SAL>=1000

AND

SAL<=1500返回50例3.29

查詢工資不在1000至1500之間的教師的教師號、及

。SELECT

TNO,TN,PROFFROM

TWHERE

SAL

NOT

BETWEEN

1000

AND

15004.確定集合利用“IN”操作可以查詢屬性值屬于指定集合的元組。例3.30

查詢選修C1或C2的學生的學號、課程號和成績。SELECT

SNO,

CNO,

SCOREFROM

SCWHERE

CNO

IN(‘C1’,

‘C2’)此語句也可以使用邏輯運算符“OR”實現(xiàn)。返回51返回52SELECT

SNO,

CNO,

SCOREFROM

SCWHERE

CNO=‘C1’

OR

CNO=

‘C2’利用“NOT

IN”可以查詢指定集合外的元組。例3.31

查詢沒有選修C1,也沒有選修C2的學生的學號、課程號和成績。SELECT

SNO,

CNO,

SCOREFROM

SCWHERE

CNO

NOT

IN(‘C1’,

‘C2’)等價于:SELECT

SNO,

CNO,

SCOREFROM

SCWHERE

CNO!=‘C1’

AND

CNO!=

‘C2’5.部分匹配查詢上例均屬于完全匹配查詢,當不知道完全精確的値時,用戶還可以使用LIKE或NOTLIKE進行部分匹配查詢(也稱模糊查詢)。LIKE定義的一般格式為:<屬性名>LIKE<字符串常量>屬性名必須為字符型,字符串常量的字符可以包含如下兩個特殊符號:%:表示任意知長度的字符串;_:表示任意單個字符。。例3.32

查詢所有姓張的教師的教師號和SELECT

TNO,

TNFROM

TWHERE

TN

LIKE‘張%’返回53例3.33

查詢

中第二個漢字是“力”的教師號和。SELECT

TNO,

TNFROM

TWHERE

TN

LIKE‘_

_力%’注:一個漢字占兩個字符。6.

空值查詢某個字段沒有值稱之為具有空值(NULL)。通常沒有為一個列輸入值時,該列的值就是空值。空值不同于零和空格,它不占任何

空間。例如,某些學生選課后沒有參加考試,有選課記錄,但沒有考試成績,考試成績?yōu)榭罩担@與參加考試,成績?yōu)榈牟煌?。返?4返回55例3.34

查詢沒有考試成績的學生的學號和相應的課程號。SELECT

SNO,

CNOFROM

SCWHERE

SCORE

IS

NULL注意:

這里的空值條件為

IS

NULL

,

不能寫成SCORE=NULL。返回56三.常用庫函數(shù)及統(tǒng)計匯總查詢SQL提供了許多庫函數(shù),增強了基本檢索能力。常用的庫函數(shù),如表3.2所示函數(shù)名稱功能AVG按列計算平均值SUM按列計算值的總和MAX求一列中的最大值MIN求一列中的最小值COUNT按列值計個數(shù)返回57例3.35

求學號為S1學生的總分和平均分。SELECT

SUM(SCORE)

AS

TotalScore,

AVG(SCORE)AS

AveScoreFROM

SCWHERE

(SNO

=

'S1')注意:函數(shù)SUM和AVG只能對數(shù)值型字段進行計算。例3.38

求學校

有多少個系SELECT

COUNT(DISTINCT

DEPT)

AS

DeptNumFROM

S注意:加入關鍵字DISTINCT后表示消去重復行,可計算字段“DEPT“不同值的數(shù)目。COUNT函數(shù)對空值不計算,但對零進行計算。例3.39

統(tǒng)計有成績同學的人數(shù)SELECT

COUNT

(SCORE)FROM

SC上例中成績?yōu)榱愕耐瑢W計算在內,沒有成績(即為空值)的不計算。返回58返回59例3.40

利用特殊函數(shù)COUNT(*)求計算機系學生的總數(shù)SELECT

COUNT(*)

FROM

SWHERE

DEPT=‘計算機’COUNT(*)用來統(tǒng)計元組的個數(shù)不消除重復行,不允許使用DISTINCT關鍵字。返回60四.

分組查詢GROUPBY子句可以將查詢結果按屬性列或屬性列組合在行的方向上進行分組,每組在屬性列或屬性列組合上具有相同的值。例3.42

查詢各位教師的教師號及其任課的門數(shù)。SELECT

TNO,COUNT(*)

AS

C_NUMFROM

TCGROUP

BY

TNOGROUPBY子句按TNO的值分組,所有具有相同TNO的元組為一組,對每一組使用函數(shù)COUNT進行計算,統(tǒng)計出各位教師任課的門數(shù)。返回61若在分組后還要按照一定的條件進行篩選,則需使用HAVING子句。例3.43

查詢選修兩門以上課程的學生學號和選課門數(shù)SELECT

SNO,COUNT(*)

AS

SC_NUMFROM

SCGROUP

BY

SNOHAVING

COUNT(*)>=2GROUPBY子句按SNO的值分組,所有具有相同SNO的元組為一組,對每一組使用函數(shù)COUNT進行計算,統(tǒng)計出每位學生選課的門數(shù)。HAVING子句去掉不滿足COUNT(*)>=2的組。當在一個SQL查詢中同時使用WHERE子句,GROUPBY

子句和HAVING

子句時,

其順序是WHERE

-GROUP

BY-

HAVING。WHERE與HAVING子句的根本區(qū)別在于作用對象不同。本表或視圖,從中選擇滿足WHERE子句作用條件的元組;HAVING子句作用于組,選擇滿足條件的組,必須用于GROUPBY子句之后,但GROUPBY子句可沒有HAVING子句。返回62返回63五.查詢的排序當需要對查詢結果排序時,應該使用ORDERBY子句ORDER

BY子句必須出現(xiàn)在其他子句之后排序方式可以指定,DESC為降序,ASC為升序,缺省時為升序例3.44

查詢選修C1

的學生學號和成績,并按成績降序排列。SELECT

SNO,

SCOREFROM

SCWHERE

CNO='C1'ORDER

BY

SCORE

DESC六.

數(shù)據(jù)表連接及連接查詢數(shù)據(jù)表之間的聯(lián)系是通過表的字段值來體現(xiàn)的,這種字段稱為連接字段。連接操作的目的就是通過加在連接字段的條件將多個表連接起來,以便從多個表中查詢數(shù)據(jù)。前面的查詢都是針對一個表進行的,當查詢同時涉及兩個以上的表時,稱為連接查詢。表的連接方法有兩種:方法1:表之間滿足一定的條件的行進行連接,此時FROM子句中指明進行連接的表名,WHERE子句指明連接的列名及其連接條件。方法2

利用關鍵字JOIN進行連接,

當將JOIN

放于

FROM子句中時,應有

ON與之相對應,以表明連接的條件。返回641.

等值連接與非等值連接老師所講授的課程。例3.47

查詢方法1:SELECT

T.TNOFROM

T,TCOWHERE

(T.TNO

=

TC.

TNO)

AND

(TN=‘

’)這里,TN=‘

’為查詢條件,而T.TNO

=

TC.TNO

為連接條件,TNO為連接字段。連接條件的一般格式為:[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>其中,比較運算符主要有:=、>、<、>=、<=、!=。當比較運算符為“=“時,稱為等值連接,其他情況為非等值連接。返回65

列名TNO時要加上表名前綴,是因為兩個表中的列名相同,必須用表名前綴來確切說明所指列屬于哪個表,以避免二義性。如果列名是唯一的,比如TN,就不必須加前綴。上面的操作是將T表中的TNO的行連接,同時選取TN為“和TC表中的TNO相等“的行,然后再在TN,CNO列上投影,這是連接、選取和投影的操作組合。方法2:SELECT

OFROM

T

INNER

JOIN

TCON

T.TNO=TC.TNO

AND

T.TN='

'返回66、選課名稱及成績。例3.48

查詢所有選課學生的學號、SELECT

,SCOREFROM

S,C,SCWHERE

S.SNO=SC.SNO

ANDO本例涉及三個表,WHERE子句中有兩個連接條件。當有兩個以上的表進行連接時,稱為多表連接。返回672.

自身連接當一個表與其自已進行連接操作時,稱為表的自身連接。例3.49

查詢所有比

工資高的教師

、工資和

的工資。要查詢的內容均在同一表T中,可以將表T分別取兩個別名,一個是X,一個是Y。將X,

Y

中滿足比

工資高的行連接起來。這實際上是同一表T的自身連接。方法1:SELECT

X.TN,X.SAL

AS

SAL_a,Y.SAL

AS

SAL_bFROM

T

AS

X

,T

AS

YWHERE

X.SAL>Y.SAL

AND

Y.TN='

'返回68方法2:SELECT

X.TN,

X.SAL,Y.SALFROM

T

AS

X

INNER

JOIN

T

AS

YON

X.SAL>Y.SAL

AND

Y.TN='

'返回69返回70七.子查詢在WHERE子句中包含一個形如SELECT-FROM-WHERE的查詢塊,此查詢塊稱為子查詢或嵌套查詢,包含子查詢的語句稱為父查詢或外部查詢。嵌套查詢可以將一系列簡單查詢構成復雜查詢,增強查詢能力。子查詢的嵌套層次最多可達到255層,以層層嵌套的方式構造查詢充分體現(xiàn)了SQL“結構化”的特點。嵌套查詢在執(zhí)行時由里向外處理,每個子查詢是在上一

級外部查詢處理之前完成,父查詢要用到子查詢的結果。返回一個值的子查詢當子查詢的返回值只有一個時,可以使用比較運算符(=,>,<,>=,<=,!=)將父查詢和子查詢連接起來。。例3.52

查詢與

教師

相同的教師號、SELECT

TNO,TNFROM

TWHERE

PROF=(SELECT

PROFFROM

TWHERE

TN='

')此查詢相當于分成兩個查詢塊來執(zhí)行。先執(zhí)行子查詢:SELECT

PROFFROM

TWHERETN=’

’返回71子查詢向主查詢只返回一個值,即

教師的“講師”,然后以此作為父查詢的條件,相當于再執(zhí)行父查為“講師”的教師號、

。詢,查詢所有SELECT

TNO,TNFROM

TWHERE

PROF=’講師’返回722.

返回一組值的子查詢如果子查詢的返回值不止一個,而是一個集合時,則不能直接使用比較運算符,可以在比較運算符和子查詢之間

ANY或ALL。其具體含義詳見以下各例。。例3.53

查詢講授課程號為C5的教師SELECT

TNFROM

TWHERE

TNO=ANY(SELECT

TNOFROM

TCWHERE

CNO='C5')返回73先執(zhí)行子查詢,找到講授課程號為C5的教師號,為一組值構成的集合(T2,T3,T5);再執(zhí)行父查詢,其中ANY的含義為任意一個,查詢教師號為T2、T3、T5的教師的

。該例也可以使用前面所講的連接操作來實現(xiàn):SELECT

TNFROM

T,TCWHERE

T.TNO=TC.TNOAND

O='C5‘可見,對于同一查詢可使用子查詢和連接兩種方法來解決,可根據(jù)

任意選用。返回74使用ALL(ALL的含義為全部)。例3.55

查詢其他系中比計算機系所有教師工資都高的教師的工資。SELECT

TN,SALFROM

TWHERE

SAL>ALL(SELECT

SALFROM

TWHERE

DEPT='計算機')AND

DEPT!=‘計算機’和子查詢找到計算機系中所有教師的工資集合(1500,900);父查詢找到所有不是計算機系且工資高于1500的教師和工資。返回75返回76此查詢也可以寫成:SELECT

TN,SALFROM

TWHERE

SAL>(SELECT

MAX(SAL

)FROM

TWHERE

DEPT='計算機')AND

DEPT!=‘計算機’庫函數(shù)MAX的作用是找到計算機系中所有教師的最高工資1500。3.4

SQL數(shù)據(jù)更新數(shù)據(jù)、修改SQL語言的數(shù)據(jù)更新語句DML主要包括數(shù)據(jù)和刪除數(shù)據(jù)三種語句。一.數(shù)據(jù)記錄數(shù)據(jù)是把新的記錄 到一個存在的表中。數(shù)據(jù)使用語句INSERT

INTO,可分為以下幾種情況。1.一行新記錄語法格式為:INSERT

INTO<表名>[(<列名1>[,<列名2>…])]VALUES(<值>)其中,<表名>是指要

新記錄的表<列名>是可選項,指定待添加數(shù)據(jù)的列VALUES子句指定待添加數(shù)據(jù)的具體值。返回77列名的排列順序不一定要和表定義時的順序一致。但當指定列名表時VALUES子句值的排列順序必須和列名表中的列名排列順序一致,個數(shù)相等,數(shù)據(jù)類型一一對應。例3.60

在S表中一條學生記錄(學號:S7;:21;系別:計算機)。:','女',21,'計算機');

:女;INSERT

INTO

SVALUES

('s7','注意:必須用逗號將各個數(shù)據(jù)分開,字符型數(shù)據(jù)要用單引號括起來。INTO子句中沒有指定列名,則新的記錄必須在每個屬性列上均有值,且VALUES子句中值的排列順序要和表中各屬性列的排列順序一致。返回782.

一行的部分數(shù)據(jù)值例3.61

在SC表中

一條選課記錄(’S7’,’C1’)。INSERT

INTO

SC

(

O)VALUES

('s7',‘c1')將VALUES子句中的值按照INTO子句中指定列名的順序到表中對于INTO子句中沒有出現(xiàn)的列,則新

的記錄在這些列上將取空值,如上例的SCORE即賦空值。但在表定義時有NOT

NULL約束的屬性列不能取空值。返回793.

多行記錄另用于表間的拷貝,將一個表中的數(shù)據(jù)抽取數(shù)行一表中,可以通過子查詢來實現(xiàn)。數(shù)據(jù)

令語法格式為:INSERT

INTO

<表名> [(<列名1>[,<列名2>…])]子查詢例3.62

求出各系教師的平均工資,把結果存放在新表AVGSAL中。首先建立新表AVGSAL,用來存放系名和各系的平均工資CREATE

TABLE

AVGSAL(DEPARTMENTVARCHAR(20),AVGSALSMALLINT)返回80返回81然后利用子查詢求出T表中各系的平均工資,把結果存放在新表AVGSAL中。INSERT

INTO

AVGSALSELECT

DEPT,AVG(SAL)FROM

TGROUP

BY

DEPT返回82二.修改數(shù)據(jù)記錄SQL語言可以使用UPDATE語句對表中的一行或多行記錄的某些列值進行修改,其語法格式為:UPDATE<表名>SET<列名>=<表達式>[,<列名>=<表達式>]…[WHERE<條件>]其中:<表名>是指要修改的表SET子句給出要修改的列及其修改后的值WHERE子句指定待修改的記錄應當滿足的條件,WHERE子句省略時,則修改表中的所有記錄。1.修改一行教師轉到信息系。例3.63

把UPDATE

TSETDEPT='信息'WHERETN='

'增加1歲2.修改多行例3.64

將所有學生UPDATE

SSETAGE=AGE+1返回83返回84例3.65把教師表中工資小于等于5000元的講師的工資提高20%。UPDATE

TSETSAL=1.2*SALWHEREPROF='講師'

AND

SAL

<=5000返回853.用子查詢選擇要修改的行例3.66

把講授C5課程的教師的崗位津貼增加100元。UPDATE

TSETWHERE

TNO

IN(SELECT

T.TNOFROM

T,TCN+100WHERE

T.TNO=TC.TNOAND

O='C5')子查詢的作用是得到講授C5課程的教師號。返回864.用子查詢提供要修改的值例3.67

把所有教師的工資提高到平均工資的1.2倍UPDATE

TSET

SAL

=(SELECT

1.2*AVG(SAL)

FROM

T)子查詢的作用是得到所有教師的平均工資。返回87三.

刪除數(shù)據(jù)記錄使用DELETE語句可以刪除表中的一行或多行記錄,其語法格式為:DELETEFROM<表名>

[WHERE<條件>]其中,<表名>是指要刪除數(shù)據(jù)的表。WHERE子句指定待刪除的記錄應當滿足的條件,

WHERE子句省略時,則刪除表中的所有記錄。1.刪除一行記錄教師的記錄。例3.68

刪除DELETEFROM

TWHERETN=’’刪除多行記錄例3.69

刪除所有教師的授課記錄DELETEFROM

TC執(zhí)行此語句后,TC表即為一個空表,但其定義仍存在數(shù)據(jù)字典中。返回883.利用子查詢選擇要刪除的行教師授課的記錄。例3.70刪除DELETEFROM

TCWHERETNO=(SELECTTNOFROM

TWHERE

TN=’’)返回893.5

視圖視圖是虛表,其數(shù)據(jù)不 ,其記錄來自基本表,只在數(shù)據(jù)庫中

其定義。視圖在概念上與基本表等同,用戶可以在視圖上再定義視圖,可以對視圖進行查詢.刪除.更新等操作。一.

定義和刪除視圖1.定義視圖定義視圖使用語句CREATE

VIEW,其語法格式為:CREATE

VIEW<視圖名>[(<視圖列表>)]AS<子查詢>其中,<視圖列表>為可選項,省略時,視圖的列名由子查詢的結果決定。返回90返回91以下兩種情況下,視圖列名不可省略:(1).視圖由多個表連接得到,在不同的表中存在同名列,則需指定列名;(2).當視圖的列名為表達式或庫函數(shù)的計算結果時,而不是單純的屬性名時,則需指明列名。在子查詢中不許使用ORDER

BY子句和DISTINCT短語,如果需要排序,則可在視圖定義后,對視圖查詢時再進行排序。例3.71

創(chuàng)建一個計算機系教師情況的視圖SUB_T。CREATE

VIEW

SUB_TAS

SELECT

TNO,TN,PROFFROM

T

WHERE

DEPT='計算機'其中:視圖名字為SUB_T,省略了視圖列表。視圖由子查詢中的三列TNO,TN,PROF組成。視圖創(chuàng)建后,對視圖SUB_T的數(shù)據(jù)的 只限制在計算機系內,且只能容,從而達到了數(shù)據(jù)TNO,TN,PROF三列的內的目的。視圖創(chuàng)建后,只在數(shù)據(jù)字典中存放視圖的定義,而其中的子查詢SELECT語句并不執(zhí)行。只有當用戶對視圖進行操作時,才按照視圖的定義將數(shù)據(jù)從基本表中取出。返回92例3.72

創(chuàng)建一學生情況視圖S_SC_C(包括學號、、課程名及成績)。CREATE

VIEW

S_SC_C(SNO,

SN,

CN,

SCORE)AS

SELECT

S.SNO,

SN,

CN,

SCOREFROM

S,

C,SCWHERE

S.SNO

=

SC.SNO

ANDO

=

O此視圖由三個表連接得到,在S表和SC表中均存在SNO列,則需指定視圖列名。返回93返回94例3.73

創(chuàng)建一學生平均成績視圖S_AVGCREATE

VIEW

S_AVG(SNO,AVG)AS

SELECT

SNO,AVG

(SCORE)FROM

SC

GROUP

BY

SNO此視圖的列名之一AVG為庫函數(shù)的計算結果,則在定義時需指明列名。返回952.刪除視圖視圖定義后可隨時刪除,刪除視圖的語法格式為:DROP VIEW<視圖名>例3.74

刪除計算機系教師情況的視圖SUB_T。DROP

VIEWSUB_T視圖刪除后,只會刪除該視圖在數(shù)據(jù)字典中的定義,而與該視圖有關的基本表中的數(shù)據(jù)不會受任何影響,由此視圖導出的其他視圖的定義不會刪除,但已無任何意義。用戶應該把這些視圖刪除。二.查詢視圖視圖定義后,對視圖的查詢操作如同對基本表的查詢操作一樣。為教授的教師號和

。例3.75

查找視圖SUB_T中SELECTTNO,TNFROM

SUB_TWHEREPROF='教授'返回96返回97此查詢的執(zhí)行過程是系統(tǒng)首先從數(shù)據(jù)字典中找到SUB_T的定義,然后把此定義和用戶的查詢結合起來,轉換成等價的對基本表T的查詢,這一轉換過程稱為視圖消解(View

Resolution),相當于執(zhí)行以下查詢:

SELECTTNO,TNFROM

TWHERE

DEPT

=’計算機’

AND

PROF=’教授’由上例可以看出,當對一個基本表進行復雜的查詢

時,可以先對基本表建立一個視圖,然后只需對此視圖進行查詢,這樣就不必再鍵入復雜的查詢語句,而將一個復雜的查詢轉換成一個簡單的查詢,從而簡化了查詢操作。三.更新視圖由于視圖是一張?zhí)摫?,所以對視圖的更新,最終實際上是轉換成對基本表的更新。其更新操作包括、修改和刪除數(shù)據(jù),其語法格式如同對基本表的更新操作一樣。返回981.

(INSERT)例3.76

向計算機系教師視圖SUB_T中:

;一條:副教記錄(教師號:T6;授)。INSERT

INTO

SUB_TVALUES

('T6','

','

')系統(tǒng)在執(zhí)行此語句時,首先從數(shù)據(jù)字典中找到操作結合。相當SUB_T的定義,然后把此定義和

起來,轉換成等價的對基本表T的于執(zhí)行以下操作:INSERT

INTO

TVALUES(‘T6’,’

’,’

’,’計算機’)返回992.修改(UPDATE)的改為例3.77

將計算機系教師視圖SUB_T中“ “。'UPDATE

SUB_TSET

PROF

=

'WHERE TN

=

’轉換成對基本表的修改操作:UPDATE

TSET

PROF=’WHERETN=’’’AND

DEPT=’計算機’返回1003.刪除(DELETE)例3.78

刪除計算機系教師視圖SUB_T中教師的記錄。DELETEFROM

SUB_TWHERETN=’’轉換成對基本表的刪除操作:DELETEFROM

TWHERETN=’

AND

DEPT=’計算機’由于視圖中的數(shù)據(jù)不是存放在視圖中的,即視圖沒有相應的空間,對視圖的一切操作最終都要轉換成對基本表的操作,這樣看來使操作更加復雜,那么為什么還要使用視圖呢?返回101使用視圖有如下幾個優(yōu)點:利于數(shù)據(jù)

,對不同的用戶定義不同的視圖,使用戶只能看到與自己有關的數(shù)據(jù)。例如,對教師表創(chuàng)建了計算機系視圖,本系教師只能使用此視

溫馨提示

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

評論

0/150

提交評論