版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第四章關(guān)系數(shù)據(jù)庫語言SQL4.1SQL簡介4.2查詢語句4.3數(shù)據(jù)更新4.4數(shù)據(jù)定義小結(jié)4.1SQL簡介SQL是結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)的縮寫,是一種面向關(guān)系數(shù)據(jù)庫的國際標(biāo)準(zhǔn)語言,在當(dāng)前數(shù)據(jù)庫領(lǐng)域中應(yīng)用最為廣泛和成功,美國國家標(biāo)準(zhǔn)局ANSI在1986年將SQL作為關(guān)系數(shù)據(jù)庫系統(tǒng)的標(biāo)準(zhǔn)語言,后被國際標(biāo)準(zhǔn)化組織(ISO)采納為國際標(biāo)準(zhǔn)。現(xiàn)在很多大型數(shù)據(jù)庫都實現(xiàn)了SQL語言。4.1.1SQL語言的發(fā)展SQL的發(fā)展歷程主要有以下幾個階段:(1)1974年由Boyce和Chamberlin提出,當(dāng)時稱為SEQUEL(StructuredEnglishQueryLanguage)。(2)1975~1979年IBM公司對SEQUEL進行了修改,并由SanJoseResearchLaboratory研制了著名的關(guān)系數(shù)據(jù)庫管理系統(tǒng)原型SystemR,實現(xiàn)了這種語言。(3)1981年IBM推出了商用關(guān)系數(shù)據(jù)庫SQL/DS,并將其改名為SQL,由于它功能豐富,語言簡潔,因此倍受用戶及計算機工業(yè)界歡迎,被眾多計算機公司和軟件公司所采用。(4)目前SQL語言不僅用于小型數(shù)據(jù)庫如Foxpro、Access,而且更廣泛用于各種大型數(shù)據(jù)庫,如Sysbase、SQLServer、Oracle、Informix、DB2、Ingres等。SQL在發(fā)展中經(jīng)歷了一系列標(biāo)準(zhǔn)化過程:(1)1982年美國國家標(biāo)準(zhǔn)局(AmericanNationalStandardInstitute,簡稱ANSI)開始制訂SQL標(biāo)準(zhǔn)。(2)1986年10月ANSI的數(shù)據(jù)庫委員會X3H2批準(zhǔn)了SQL作為關(guān)系數(shù)據(jù)庫語言的美國標(biāo)準(zhǔn);同年ANSI公布SQL語言的第一個標(biāo)準(zhǔn)SQL-86,并于次年由國際標(biāo)準(zhǔn)化組織(InternationalStandardizationOrganization,簡稱ISO)通過SQL-86標(biāo)準(zhǔn)。(3)1989年ISO對SQL-86進行補充,推出SQL-89標(biāo)準(zhǔn),也稱SQL1。(4)1992年ISO又推出SQL-92標(biāo)準(zhǔn),亦稱SQL2。(5)1999年起ANSI陸續(xù)公布增加了面向?qū)ο蠊δ艿男聵?biāo)準(zhǔn)SQL-99(亦稱SQL3)的12個標(biāo)準(zhǔn)文本。4.1.2SQL語言的特點(1)非過程化:SQL語言是非過程化語言,在SQL語言中,只要求用戶提出“做什么”,而無需指出“怎樣做”。SQL語句操作的過程由系統(tǒng)自動完成。(2)一體化:SQL可以操作于不同層次模式,集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)為一體。用SQL語言可實現(xiàn)DB生命周期的全部活動,其中包括建立數(shù)據(jù)庫、建立用戶賬號、定義關(guān)系模式、查詢及數(shù)據(jù)維護、數(shù)據(jù)庫安全控制等。(3)兩種使用方式,統(tǒng)一的語法結(jié)構(gòu):兩種使用方式:自含式語言與嵌入式語言自含式方式就是聯(lián)機交互使用方式;嵌入式方式是指SQL語句嵌入某種高級程序設(shè)計語言的程序中,以實現(xiàn)數(shù)據(jù)庫操作。盡管這兩種使用方式不同,但SQL語言的語法結(jié)構(gòu)基本是一致的。4.1.3SQL語言的書寫準(zhǔn)則
遵從某種準(zhǔn)則可以提高語句的可讀性,通常遵循的準(zhǔn)則主要有:SQL語句對大小寫不敏感,但關(guān)鍵字常用大寫
SQL語句可寫在一行上,但為便于理解,增強條理性,常習(xí)慣于每個字句占用一行關(guān)鍵字不能在行與行之間分開,很少采用縮寫形式
SQL中的數(shù)據(jù)項需同時列出時,分隔符用“,”;字符或字符串常量的定界符用單引號“
'”表示4.2查詢語句4.2.1基本查詢4.2.2使用列表達式4.2.3WHERE從句的進一步使用4.2.4數(shù)據(jù)匯總4.2.5連接查詢4.2.6嵌套查詢4.2.7聯(lián)合查詢4.2.8使用系統(tǒng)內(nèi)置函數(shù)的查詢
SQL的核心是數(shù)據(jù)查詢。對于數(shù)據(jù)庫的查詢操作是通過SELECT
查詢命令實現(xiàn)的,它的基本形式由
SELECT-FROM-WHERE
查詢塊組成,多個查詢塊可以嵌套執(zhí)行。總述SQL查詢語句的完整語法描述如下:SELECT
[ALL|DISTINCT]<目標(biāo)列表達式>[,<目標(biāo)列表達式>]…FROM
<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達式>][GROUPBY<列名1>[HAVING<條件表達式>]][ORDERBY<列名2>[ASC|DESC]];
指定要顯示的屬性列指定查詢對象指定查詢條件查詢結(jié)果按指定列的值分組篩選出只有滿足指定條件的組對查詢結(jié)果表按指列值的升序或降序排序
4.2.1基本查詢最基本的查詢就是從指定的表中找出符合條件的記錄。這樣的查詢由SELECT和FROM短語構(gòu)成無條件查詢,或由SELECT、FROM和WHERE或其他短語構(gòu)成條件查詢。
(1)簡單的無條件查詢設(shè)某個數(shù)據(jù)庫中有表stu_info,請把該表中的所有記錄的所有屬性查詢出來:
SELECT*//*表示所有字段,是通配符
FROMstu_info//選定數(shù)據(jù)庫中的表
(2)簡單的條件查詢請查找stu_info表中所有的女生的信息。SELECT*
FROMstu_info
WHERExbm='女'
//設(shè)定條件在SELECT子句中可以決定哪些列出現(xiàn)在結(jié)果關(guān)系中,這相當(dāng)于關(guān)系代數(shù)中的投影運算。具體辦法:在SELECT子句之后不是寫“*”,而是根據(jù)需要列出在FROM子句中聲明的諸關(guān)系的屬性。例:SELECTxh,xm//選定字段FROMstu_info //選定數(shù)據(jù)庫中的表WHERExbm='女'
//設(shè)定條件(3)查詢語句中的投影操作使用SQL的SELECT可以將查詢結(jié)果排序,排序的短語是ORDERBY,具體格式如下:
SELECT列名1,列名2,…FROM表名WHERE條件表達式
ORDERBY
列名1[ASC|DESC][,列名2[ASC|DESC]…]按升序(ASC)或降序(DESC)排序,允許按一列或多列排序。(4)設(shè)定排序條件下面是使查詢結(jié)果排序的例子:SELECT*
//“*”表示所有字段
FROM
stu_info//選定數(shù)據(jù)庫中的表
WHERExbm='女'//設(shè)定條件
ORDERBYxh
//設(shè)定排序字段
在查詢過程中經(jīng)常會出現(xiàn)一些重復(fù)記錄,例如“SELECTbhFROMstu_info”。其查詢結(jié)果將會有多個重復(fù)的班級名,顯然這種結(jié)果不能令人滿意。因此需要去掉重復(fù)值,此時需要指定DISTINCT
短語:
SELECTDISTINCTbhFROMstu_info
這里短語DISTINCT的作用是去掉查詢結(jié)果中的重復(fù)值。執(zhí)行結(jié)果中班級名都不重復(fù)。(5)限定重復(fù)記錄4.2.2使用列表達式在SQL中,指定列的方法我們學(xué)習(xí)了以下兩種:(1)指定列(2)使用通配符*第(3)種是:可用列表達式,來獲取經(jīng)過計算的查詢結(jié)果。列表達式不僅可以是算術(shù)表達式,還可以是字符串常量、函數(shù)等。(6)計算列值SELECT'學(xué)號',xh,'年齡',YEAR(GETDATE())-YEAR(CSRQ),bhFROMstu_info(7)修改查詢結(jié)果的列標(biāo)題(1)SELECTYEAR(GETDATE())-YEAR(CSRQ)
AS年齡,nlFROMstu_info(2)SELECT
學(xué)號=xh,nlFROMstu_info(3)SELECTxh'學(xué)號',nlFROMstu_info查詢工作的關(guān)鍵就在通過分析怎樣把實際問題中的自然語言描述轉(zhuǎn)化為1)從哪個表中查詢。即:from子句2)要查詢哪些列。即:select子句3)要查詢的條件。即:where子句完成查詢工作的三個關(guān)鍵步驟其中第3步最復(fù)雜4.1.3WHERE從句的進一步使用常用的查詢條件查詢條件謂詞比較=><>=<=!=<>!>!<確定范圍between…and,notbetween…and確定集合in,notin字符匹配like,notlike空值isnull,isnotnull多重條件and,or(8)表達式比較如:SELECT*
FROMstu_info
WHEREnl>20(9)確定范圍between…and…和notbetween…and…如:查詢考試成績在60-70之間的學(xué)號、課程號、考試成績:SELECTxh,kch,
kscjFROMxkWHEREkscjBETWEEN60AND70(10)確定集合
IN和NOTIN例:查詢復(fù)材0108、復(fù)材0109班的學(xué)生的信息SELECTxh,xm,xbm,bhFROMstu_infoWHEREbhIN('復(fù)材0108','復(fù)材0109')(11)字符匹配NOTLIKE和LIKE與%和_搭配。%代表任意長度的字符串.如a%b:acb,addgb等都滿足匹配_(下橫線)代表任意單個字符。例:查詢班級名中第1個字為“計”字的學(xué)生信息:
SELECT*
FROMstu_info
WHEREbhlike'計%'例:查詢名字中第2個字為“寧”字的學(xué)生信息:
SELECT*
FROMstu_info
WHERExmlike'_寧%'例:查詢DB_Design課程的課程號和學(xué)分。
SELECTckh,kcxfFROMGCourseWHEREkmLIKE'DB\_Design'ESCAPE'\'例:查詢以"DB_"開頭,且倒數(shù)第3個字符為i的課程的詳細(xì)情況。
SELECT*FROMGCourseWHEREkmLIKE'DB\_%i__'ESCAPE'\'當(dāng)用戶要查詢的字符串本身就含有%或_時,要使用ESCAPE
'換碼字符'
短語對通配符進行轉(zhuǎn)義。(12)涉及空值的查詢SELECT*FROMstu_infoWHEREbhISNULL(13)多重條件查詢用邏輯運算符and和or連接,and的優(yōu)先級高于or。如:查詢應(yīng)什么班,姓劉的學(xué)生。SELECT*FROM
stu_infoWHEREbhlike'應(yīng)%'and
姓名like'劉%'4.2.4數(shù)據(jù)匯總(14)聚合函數(shù)count(*)統(tǒng)計元組(記錄)個數(shù)count([distinct|all]<列名>)統(tǒng)計一列中值的個數(shù)sum([distinct|all]<列名>)求一列值的總和(數(shù)值型)avg([distinct|all]<列名>)求一列值的平均數(shù)max([distinct|all]<列名>)求一列值中的最大值min([distinct|all]<列名>)求一列值中的最小值聚合函數(shù)一覽表例:查詢學(xué)生總數(shù)
SELECT
count(*)
FROMstu_info例:已知數(shù)據(jù)庫表XK中高等數(shù)學(xué)課程的代碼為090101,查詢學(xué)生選修高等數(shù)學(xué)的平均成績:
SELECT
avg(KSCJ)
AS
高等數(shù)學(xué)
FROMXK
WHEREKCH='090101'(15)GROUPBY子句Groupby子句將查詢結(jié)果表按某一列或多列值分組,值相等的分為一組。如:在表xk中查詢各課程編號及相應(yīng)的選課人數(shù)注:GROUPBY子句中不能使用聚合函數(shù),并且必須在GROUPBY子句中列出SELECT列表中所有的非聚合項。例:在表stu_info中查詢每個專業(yè)的男生、女生人數(shù)在groupby子句后面加WITHROLLUP或WITHCUBE如果還要顯示每個專業(yè)的總?cè)藬?shù)及全體學(xué)生總?cè)藬?shù),如何實現(xiàn)?SELECTkch,count(xh)
FROMxk
GROUPBYkchSELECTzyh,xbm,count(*)as'人數(shù)'
FROMstu_info
GROUPBYzyh,xbm例:查詢選修了3門以上課程的學(xué)生及選課數(shù):SELECTXH,COUNT(*)FROMXKGROUPBYXHHAVING(COUNT(*)>3)
HAVING短語指定分組或聚合的條件。只有滿足條件的分組才被選出來,HAVING一般與GROUPBY子句一起使用。(16)HAVING
短語SELECTXH,COUNT(*)FROMXKWHERE(XHLIKE'2001%')GROUPBYXHHAVING(COUNT(*)>3)例:查詢學(xué)號前四位是2001的學(xué)生的學(xué)號及選課數(shù):having短語指定選擇組的條件,只有滿足條件的組才被選出來。一般和groupby子句一起使用where子句從基本表中選擇滿足條件的元組,而不是指定滿足條件的分組,這是二者的根本區(qū)別。若一個查詢同時涉及兩個以上的表,稱為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢,按連接類型可分為:內(nèi)連接、外連接和交叉連接。其中內(nèi)連接又分:等值連接、非等值連接和自然連接;外連接又分:左外連接、右外連接和全外連接等。4.2.5連接查詢
連接查詢中用來連接兩個關(guān)系的條件稱為連接條件或連接謂詞,格式:表名1.列名
比較運算符表名2.列名其中比較運算符主要有:=、>、<、>=、<=、!=當(dāng)連接運算符為=時,叫等值連接。使用其它運算符稱為非等值連接。連接謂詞中的列名稱為連接字段。
例:查詢每個學(xué)生及其選課情況SELECT*FROMstu_info,xkWHERE
stu_info.xh=xk.xh例:查詢應(yīng)化041班每個學(xué)生及其選修課程的情況SELECT
stu_info.xh,stu_info.xm,stu_info.bh,
stu_info.xbm,xk.kch,xk.kscjFROM
stu_info,xkWHERE
stu_info.xh=xk.xh
and
stu_info.bh='應(yīng)化041'
//復(fù)合條件連接多表查詢:涉及兩個表以上的查詢SELECTxmFROMstu_info,xk,gcourseWHEREgcourse.km='數(shù)據(jù)庫原理'
andgcourse.kch=xk.kch
andxk.xh=stu_info.xh為了簡化,表名可以取別名,且別名只在本次查詢有效增加表別名后的結(jié)果:SELECTxmFROMstu_infoa,xkb,gcoursecWHEREc.km='數(shù)據(jù)庫原理'
andc.kch=b.kch
andb.xh=a.xh例如:查詢選修了有機化學(xué)這門課程的學(xué)生的姓名下面討論另一類基于多個關(guān)系的查詢,這類查詢所要求的結(jié)果出自一個關(guān)系,但相關(guān)的條件卻涉及多個關(guān)系。在前面的例子中,WHERE之后是一個相對獨立的條件,這個條件或者為真、或者為假。但是,有時需要用另外的方式來表達檢索要求。比如,當(dāng)檢索關(guān)系X中的記錄時,它的條件依賴于相關(guān)的關(guān)系Y中的記錄屬性值,這時使用SQL的嵌套查詢功能將非常方便。4.2.6嵌套
查詢在SQL語言中,一個select-from-where語句稱為一個查詢塊,將一個查詢塊嵌套在另一個查詢塊的where子句或having短語的條件中的查詢稱為嵌套查詢。等價形式:SELECTxm
FROMstu_info,xk
WHEREstu_info.xh=xk.xh
andkch='05'SELECTxmFROMstu_info例:在stu_info表中查詢選修了05號課程的學(xué)生姓名WHERExhIN(SELECTxhFROMxkWHEREkch='05')例:查詢與劉玉濤在同一個班學(xué)習(xí)的學(xué)生的學(xué)號、姓名、班級。SELECTxh,xm,bhFROMstu_infoWHERE
bhIN(17)帶有in謂詞的子查詢(18)帶有比較運算符的子查詢例:查詢與學(xué)號是20029001的學(xué)生在同一個班學(xué)習(xí)的學(xué)生,按學(xué)號排序。SELECTxh,xm,bhFROMstu_infoWHERE
bh
ORDERBYxh
(SELECTbhFROMstu_infoWHERExm='劉玉濤')
=(SELECTbhFROMstu_infoWHERExh='20029001')(19)帶有any或all謂詞的子查詢比較子查詢通常用到操作符ALL、ANY。其通用格式為:
<列><比較運算符>[ALL|ANY]<內(nèi)部查詢>例:查詢其他班級中比應(yīng)化041班某個學(xué)生年齡小的那些學(xué)生的姓名和年齡。SELECTxm,nl
FROMstu_info
WHEREbh<>'應(yīng)化041'andnl<any(selectnlfromstu_infowherebh='應(yīng)化041')(20)帶有exists謂詞的子查詢EXISTS是測試子查詢是否有數(shù)據(jù)行返回,有則返回TRUE,否則返回FALSE。例:查詢選修了高等數(shù)學(xué)(090101)的學(xué)生姓名、性別和班級。SELECTxm,xbm,bhFROMstu_infoWHEREexists(select*fromxkwherexh=stu_info.xh
andkch='090101')例:查詢沒有選修高等數(shù)學(xué)(090101)的學(xué)生姓名、性別和班級。SELECTxm,xbm,bhFROMstu_infoWHEREnotexists(select*fromxkwherexh=stu_info.xhandkch='090101')4.2.7聯(lián)合(集合)查詢select語句的查詢結(jié)果是元組的集合,所以多個select語句的結(jié)果可進行集合操作。集合操作主要包括:并操作UNION、交操作INTERSECT、差操作MINUS標(biāo)準(zhǔn)SQL只提供UNION,其語法格式如下:
SELECT_1UNION[ALL]SELECT_2…如果要將查詢的結(jié)果保存在當(dāng)前數(shù)據(jù)庫新建的表NEWSTU中,可以使用INTO子句:SELECT*INTONEWSTUFROMaUNIONALLSELECT*FROMb例:查詢編號為01的學(xué)院的學(xué)生及所有學(xué)院的本科生SELECT*FROMstu_infoWHERExsh='01'UNIONSELECT*FROMstu_infoWHEREpyccm='本科'4.2.8使用系統(tǒng)內(nèi)置函數(shù)的查詢(21)數(shù)學(xué)函數(shù)
ABS(數(shù)字型表達式)、RAND(整型表達式)(22)字符串處理函數(shù)
ASCII(字符型):返回表達式最左端字符的ASCII值
CHAR(0-255之間的整數(shù)):將ASCII轉(zhuǎn)換為字符
LEFT(字符型,整型):返回從字符串左邊開始指定個數(shù)的字符LTRIM(字符型):刪除字符串最左邊的空格,并返回字符串REPLACE(字符型1,字符型2,字符型3):用3替換1中包含的2,并返回替換后的表達式SUBSTRING(express,start,length):返回express中指定的部分?jǐn)?shù)據(jù)STR(float_exp[,length[,decimal]]):將數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(23)系統(tǒng)函數(shù)getdate():返回當(dāng)前的系統(tǒng)日期和時間year()、month()、day():分別返回指定日期的年、月、日
cast(表達式AS數(shù)據(jù)類型):將表達式的值轉(zhuǎn)換為數(shù)據(jù)類型參數(shù)所指定的類型。case函數(shù):一種是簡單的CASE函數(shù),另一種是搜索型的CASE函數(shù)。簡單CASE語法格式:CASE輸入表達式
WHEN比較表達式THEN結(jié)果表達式
……ELSE表達式END搜索CASE語法格式:CASE
WHEN條件1THEN表達式1
WHEN條件2THEN表達式2
……ELSE表達式END例:在STU_INFO中查詢03學(xué)院學(xué)生的學(xué)號、姓名、性別,并將性別分別轉(zhuǎn)換成“男生”、“女生”。 SELECTXH,XM,XBM,XBM= CASE'男'
WHENXBMTHEN'男生'
ELSE'女生'
END FROMSTU_INFO WHEREXSH='03'例:查詢成績表CS中選修了“數(shù)據(jù)庫技術(shù)及應(yīng)用”課程的學(xué)生的學(xué)號、姓名、5分制成績 SELECT學(xué)號,姓名,’5分制成績’=
CASE WHEN成績<60THEN‘不及格’
WHEN成績>=60AND成績<70THEN‘及格’
WHEN成績>=70AND成績<80THEN‘中等’ WHEN成績>=80AND成績<90THEN‘良好’
WHEN成績>=90THEN‘優(yōu)秀’
END FROMCS4.3數(shù)據(jù)更新4.3.1插入數(shù)據(jù)4.3.2修改數(shù)據(jù)4.3.3刪除數(shù)據(jù)4.2.1插入數(shù)據(jù)語句格式INSERTINTO<表名>[(<屬性列1>[,<屬性列2>]…)]VALUES(<常量1>[,<常量2>]…)功能將新元組插入指定表中。(1)插入單個元組例:INSERTINTO
stu_info(xh,xm,xbm)
VALUES('2005090209','王東方','男')如果基本表只有上述三個屬性,則該句等價于:
INSERTINTO
stu_info
VALUES
('2005090209','王東方','男')(2)插入子查詢結(jié)果例:在STU_INFO表中查詢出應(yīng)化041班的學(xué)生情況并存放在YINGHUA表中。
INSERTINTOyinghua
SELECTxh,xm,xbm,csrqFROMstu_infoWHEREbh='應(yīng)化041'語句格式
INSERT[INTO]<表名>[(<屬性列1>[,<屬性列2>]…)]
子查詢功能:將子查詢結(jié)果插入指定表中,用以插入批量記錄4.3.2修改數(shù)據(jù)
語句格式UPDATE<表名>SET<列名>=<表達式>[,<列名>=<表達式>,…][WHERE<條件>]
功能修改指定表中滿足WHERE子句條件的元組(3)修改一個元組的值UPDATEstu_infoSETbh='材0169'WHERExh='2005090209'注意:對批量數(shù)據(jù)的修改,一定把將要修改的記錄先查詢出來,確認(rèn)無誤后再修改。(4)修改多個元組的值UPDATEgcourse
SETkcxf=2
(5)帶子查詢的修改語句將選修了高數(shù)的學(xué)生的成績加10分UPDATExkSETkscj=kscj+10WHEREkch=(selectkchfromgcoursewherekm='高等數(shù)學(xué)')4.3.3刪除數(shù)據(jù)語法格式
DELETEFROM<表名>[WHERE<條件>]功能刪除指定表中滿足WHERE子句條件的元組WHERE子句指定要刪除的元組缺省表示要刪除表中的所有元組(6)刪除一個元組的值
DELETEFROMstu_info
WHERExh='2006050010'(7)刪除多個元組的值
DELETEFROMstu_info
WHEREbh='應(yīng)0203'
刪除表中所有數(shù)據(jù)
DELETEFROMstu_info
(8)帶子查詢的刪除語句
將信息學(xué)院學(xué)生的成績?nèi)縿h除DELETEFROMxkWHERE'12'=(SELECTxshFROMstu_info
WHEREstu_info.xh=xk.xh)注意:在日常工作中,操作刪除語句,一定要先查詢要刪除的數(shù)據(jù),確認(rèn)無誤后再刪除。SELECT*
FROMxkWHERE'12'=(selectxshfromstu_infowherestu_info.xh=xk.xh)4.4數(shù)據(jù)定義4.4.1定義基本表4.4.2修改基本表4.4.3刪除基本表4.4.4視圖4.4.5索引4.4數(shù)據(jù)定義
SQL的數(shù)據(jù)定義語句操作對象操作方式創(chuàng)建刪除修改表createtabledroptablealtertable視圖createviewdropview索引createindexdropindex4.4.1定義基本表語句格式:
CREATETABLE<表名>
(<列名><數(shù)據(jù)類型>[<列級完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列級完整性約束條件>]]…[,<表級完整性約束條件>])<表名>:所要定義的基本表的名字<列名>:組成該表的各個屬性(列)<列級完整性約束條件>:涉及相應(yīng)屬性列的完整性約束條件<表級完整性約束條件>:涉及一個或多個屬性列的完整性約束條件例:建立一個學(xué)生表Student,它由學(xué)號Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成。其中學(xué)號不能為空,值是唯一的,并且姓名取值也唯一。
CREATETABLEStudent
(
SnoVARCHAR(5)NOTNULLUNIQUE,SnameVARCHAR(20)UNIQUE,SsexVARCHAR(1),SageINT,SdeptVARCHAR(15))SnoSnameSsexSageSdept字符型長度為5不能為空值取值唯一字符型長度為20字符型長度為1整數(shù)字符型長度為15常用完整性約束主碼約束:PRIMARYKEY唯一性約束:UNIQUE非空值約束:NOTNULL默認(rèn)值約束:DEFAULT檢查約束:
CHECK參照完整性約束:FOREIGNKEY…REFERENCE例:建立一個“學(xué)生選課”表SC,它由學(xué)號Sno、課程號Cno,修課成績Grade組成,其中(Sno,Cno)為主碼。CREATETABLESC(SnoVARCHAR(5),CnoVARCHAR(3),Gradeint,
Primarykey(Sno,Cno)
)例:創(chuàng)建表n_jobsCREATETABLEn_jobs(job_idsmallintIDENTITY(1,1)PRIMARYKEYCLUSTERED,job_descvarchar(50)NOTNULLDEFAULT('新部門'),
min_lvltinyintNOTNULLCHECK(min_lvl>=12),max_lvltinyintNOTNULLCHECK(max_lvl<=250))例:使用表達式((最低分+最高分)/2)生成中等分計算列。CREATETABLE得分(最低分int,
最高分int,
中等分AS(最低分+最高分)/2)4.4.2修改基本表語法格式:ALTERTABLE<表名>[ALTERCOLUMN<列名><新數(shù)據(jù)類型>][ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROP<完整性約束名>]<表名>:要修改的基本表ALTERCOLUMN
子句:要更改的列,要更改的列不能是數(shù)據(jù)類型為text,image,ntext或timestamp等列ADD子句:增加新列和新的完整性約束條件DROP子句:刪除指定的完整性約束條件或列名1、添加列例:向?qū)W生表中添加入學(xué)時間列,其數(shù)據(jù)類型為日期型
ALTERTABLEstu_infoADDrxsjDATETIME可能破壞已有數(shù)據(jù)2、修改列例:將教師表的xb列改為smallint數(shù)據(jù)類型
ALTERTABLEgtechALTERCOLUMNxbsmallint3、刪除列或約束例:將數(shù)據(jù)庫表gtech中的xb列刪除
ALTERTABLEgtechDROPCOLUMNxb例:刪除學(xué)生姓名必須取唯一值的約束
ALTERTABLEstu_infoDROPUNIQUE(xm)4.4.3刪除基本表語法格式:
DROPTABLE<表名>基本表定義一旦刪除,表中的數(shù)據(jù)、表上的索引和視圖都將自動被刪除刪除基本表時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)該基本表及其索引的描述。
例:刪除EDU_D庫中的表stu_info
DROPTABLE
stu_info4.4.4視圖視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機制。視圖是從一個或多個基本表(或視圖)導(dǎo)出的表,是個虛表。數(shù)據(jù)庫只存放視圖的定義,不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來的基本表中。所以,視圖的數(shù)據(jù)跟隨基本表的數(shù)據(jù)而變化。視圖一旦被定義,就可以被查詢、刪除,修改及再定義一個新的視圖等。視圖包含一系列帶有名稱的列和行數(shù)據(jù)。這些數(shù)據(jù)來自定義視圖的查詢所引用的基表中,并且在引用視圖時動態(tài)生成。1、定義視圖(1)用企業(yè)管理器建立視圖請同學(xué)們上機自己學(xué)習(xí)建立視圖的方法。(2)用SQL語句建立視圖
CREATEVIEW視圖名
AS<子查詢>[WITHCHECKOPTION]其中[WITHCHECKOPTION]表示對視圖進行UPDATE、INSERT和DELETE操作時要保證更新、插入或刪除的行滿足視圖定義中的條件表達式A、選擇列定義視圖可定義一個視圖,該視圖由表的部分列組成。下例中,視圖MyView1包含了employees表中的三個列。
CREATEVIEW
MyView1AS
SELECTlname,fname
FROMemployee定義了視圖后,可以和表一樣,使用SELECT語句訪問它。例如:SELECT*FROMMyView1B、基于列的表達式定義視圖在定義視圖時,除了使用基礎(chǔ)表的列外,還可使用基本表的列的表達式,生成自己的列。下例中,視圖MyView2的第四列即由表達式計算而來。
CREATEVIEW
MyView2(xh,xm,xbm,nl)ASSELECTxh,xm,xbm,year(getdate())-year(csrq)
FROMstu_infoC、選擇行定義視圖可定義一個視圖,該視圖由表的部分行組成。下例中,視圖MyView3只包含employee表中姓名包含sh的行。
CREATEVIEW
MyView3ASSELECT*FROMemployeeWHEREfnameLIKE'%sh%'D、選擇行和列可定義一個視圖,該視圖由表的部分行和列聯(lián)合組成。下例中,視圖MyView4只包括三列
CREATEVIEW
MyView4ASSELECTlname,fname,pub_idFROMemployeeWHEREfnameLIKE'%sh%'E、基于多個表定義視圖CREATVIEW
查詢學(xué)生選課情況AS
SELECTstu_info.xh,stu_info.xm,gcourse.kmFROMstu_info,gcourse,xkWHEREstu_info.xh=xk.xh
andxk.kch=gcourse.kch2、更新視圖更新視圖是指通過視圖來插入(INSERT)、刪除(DELETE)、修改(UPDATE)數(shù)據(jù)。由于視圖是不實際存儲數(shù)據(jù)的虛表,因此,對視圖的更新最終要轉(zhuǎn)換為對基本表的更新。例、在stu_info表創(chuàng)建信息學(xué)院學(xué)生的視圖:
CREATEVIEWis_stuASSELECT*FROMstu_infoWHERExsh=’03’
例:現(xiàn)將視圖is_stu中學(xué)號為1998031001的學(xué)生的學(xué)院代號改為“12”:UPDATEis_stuSETxsh=‘12’WHERExh=‘1998031001’WITHCHECKOPTION會使
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司工作計劃六篇
- 2022年小學(xué)教師工作計劃
- 護士長每周工作計劃
- 2024年農(nóng)村廣播電視行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略咨詢報告
- 事故賠償協(xié)議書匯編五篇
- 參觀類實習(xí)報告模板合集九篇
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)思維與行動 課件 第五章 創(chuàng)業(yè)思維概述
- 市場方案策劃模板錦集五篇
- 會計實習(xí)周記格式5篇
- -護士長述職報告
- 北京市東城區(qū)2023-2024學(xué)年八年級上學(xué)期期末生物試題
- ISO28000:2022供應(yīng)鏈安全管理體系
- 生產(chǎn)計劃與排程(英文)課件
- 內(nèi)墻涂料工程監(jiān)理實施辦法
- 如何識別早期休克
- 危險化學(xué)品MSDS(聚乙烯)
- DB32∕T 3216-2017 機動車駕駛員培訓(xùn)機構(gòu)服務(wù)規(guī)范
- DB22∕T 2880-2018 建筑消防設(shè)施維護保養(yǎng)規(guī)程
- 進化生物學(xué)第3版課后習(xí)題答案
- 2022年新媒體編輯實戰(zhàn)教程試題帶答案(題庫)
- 在一日活動中培養(yǎng)幼兒親社會行為的實踐研究報告
評論
0/150
提交評論