第6章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言_第1頁
第6章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言_第2頁
第6章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言_第3頁
第6章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言_第4頁
第6章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言——SQL

6.1關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言6.2SQL語句6.1關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言在關(guān)系數(shù)據(jù)庫中普遍使用一種介于關(guān)系代數(shù)和關(guān)系演算之間的數(shù)據(jù)庫操作語言SQL,SQL的含義即結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)。

SQL最早是1974年由Boyce和Chamberlin提出,是StructuredQueryLanguage的縮寫,并作為IBM公司研制的關(guān)系數(shù)據(jù)庫管理系統(tǒng)原型SystemR的一部分付諸實(shí)施。自SQL成為國際標(biāo)準(zhǔn)語言以后,各個(gè)數(shù)據(jù)庫廠家紛紛推出各自的SQL軟件或與SQL能夠通信的的接口軟件

6.1關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL語言之所以能夠?yàn)橛脩艉蜆I(yè)界所接受,成為國際標(biāo)準(zhǔn),是因?yàn)樗且粋€(gè)綜合的、通用的、功能極強(qiáng)的、簡(jiǎn)學(xué)易用的語言。其主要特點(diǎn)包括:綜合統(tǒng)一高度非過程化用同一種語法結(jié)構(gòu)提供兩種使用方式語言簡(jiǎn)潔,易學(xué)易用6.2SQL語句在ACCESS2003中,可以通過查詢對(duì)象的SQL窗口執(zhí)行SQL語句。

6.2.1數(shù)據(jù)定義語言(1)表的創(chuàng)建、修改和刪除表的創(chuàng)建SQL語言使用CREATETABLE語句建立基本表。其一般格式為:CREATETABLE<表名>(<字段名1><數(shù)據(jù)類型>[NOTNULL][索引1],[<字段名2><數(shù)據(jù)類型>[NOTNULL][索引2],﹍,][,CONSTRAINT復(fù)合字段索引][,﹍﹍])

功能:創(chuàng)建一個(gè)名為“表名”的數(shù)據(jù)表,該數(shù)據(jù)表由若干個(gè)字段組成。

6.2.1數(shù)據(jù)定義語言(1)表的創(chuàng)建、修改和刪除表的創(chuàng)建其中,“<>”中的內(nèi)容是必選項(xiàng),“[]”中的內(nèi)容是可選項(xiàng)。本書以下各章節(jié)也遵循這個(gè)約定。<表名>:規(guī)定了所定義的表的名字,在一個(gè)數(shù)據(jù)庫中不允許有兩個(gè)基本表同名。<字段名>:規(guī)定了該字段的名稱。表中可以有若干字段,不能有兩個(gè)字段同名。<數(shù)據(jù)類型>:規(guī)定了該字段的數(shù)據(jù)類型。參見表6-2。NOTNULL,UNIQUE是指對(duì)某一列設(shè)置的約束條件。CONSTRAIN子句用來建立索引?!纠?-1】在“ZHJW”數(shù)據(jù)庫中創(chuàng)建四個(gè)表:解:創(chuàng)建表的語句分別如下。CREATETABLE

學(xué)生表(學(xué)號(hào)CHAR(6),姓名CHAR(8),性別CHAR(2),所屬年級(jí)CHAR(4),專業(yè)CHAR(10))CREATETABLE

課程表(課號(hào)CHAR(3)NOTNULL,課名CHAR(20),開課教師CHAR(8),總學(xué)時(shí)INTEGER,學(xué)分INTEGER)CREATETABLE

必修課表(課號(hào)CHAR(3)NOTNULL,必修專業(yè)CHAR(10))CREATETABLE

必修課成績表(學(xué)號(hào)CHAR(6)NOTNULL,課號(hào)CHAR(3)NOTNULL,成績INTEGER)(1)表的創(chuàng)建、修改和刪除修改表的結(jié)構(gòu)添加字段語句格式:ALTERTABLE<表名>ADDCOLUMN<新字段名><數(shù)據(jù)類型>[長度][NOTNULL]]功能:為“表名”指定的表添加一個(gè)名為“字段名”的字段,字段的數(shù)據(jù)類型由“類型”指定。NOTNULL與長度的含義同CREATETABLE語句?!纠?-2】在已定義的課程表中增加開課學(xué)期字段。解:ALTERTABLE

課程表ADDCOLUMN開課學(xué)期INTEGER(1)表的創(chuàng)建、修改和刪除刪除字段語句格式:ALTERTABLE

表名DROPCOLUMN字段名功能:為“表名”指定的表刪除一個(gè)名為“字段名”的字段?!纠?-3】在已定義的課程表中刪除開課日期字段。解:ALTERTABLE

課程表DROPCOLUMN開課學(xué)期(1)表的創(chuàng)建、修改和刪除刪除表語句格式:DROPTABEL

表名功能:刪除名為“表名”的表?!纠?-4】刪除“ZHJW”數(shù)據(jù)庫中的“課程”表。解:語句如下。DROPTABLE課程表(2)索引的建立與刪除

建立索引創(chuàng)建索引可使用SQL的CREATEINDEX

語句,該語句的格式和功能如下:語句格式:CREATE[UNIQUE]INDEX

索引名ON表名(字段名1[DESC|ASC][,字段名2[DESC|ASC],…])[WITHPRIMARY|DISALLOWNULL|IGNORENULL]功能:為“表名”指定的表創(chuàng)建一個(gè)名為“索引名”的索引?!纠?-5】為“學(xué)生”表創(chuàng)建一個(gè)名為“XH”的索引,該索引按照“學(xué)號(hào)”字段的升序排列,為主鍵。為“課程”表創(chuàng)建一個(gè)名為“KH”的索引,該索引按照“課號(hào)”字段的降序排列,為主鍵。為“必修課”表創(chuàng)建一個(gè)名為“KHZY”的索引,該索引按照“課號(hào)”的升序和“專業(yè)”的降序排列,索引字段中不允許使用空值。為“必修課成績”表創(chuàng)建一個(gè)名為“XHKH”的索引,該索引按照“學(xué)號(hào)”的升序和“課號(hào)”的升序排列。

(2)索引的建立與刪除

刪除索引語句格式:DROPINDEX

索引名ON表名功能:刪除“表名”指定的表中由“索引名”指定的索引?!纠?-6】刪除必修課成績表中的XH索引。解:使用的SQL語句如下。DROPINDEXXHON必修課成績6.2.2數(shù)據(jù)查詢功能(1)SELECT語句格式及功能說明

數(shù)據(jù)查詢是數(shù)據(jù)庫中最常見的操作,SQL中實(shí)現(xiàn)查詢的語句是SELECT語句,該語句有一系列的子句,通過這些子句可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的任何查詢。

該語句的格式和功能如下:SELECT[ALL|DISTINCT|TOPN|TOPNPERCENT]*|列名1或表達(dá)式1[AS列標(biāo)題1][,列名2或表達(dá)式2[AS列標(biāo)題2]…][INTO表名]FROM

表名1[,表名2][WHERE

條件][GROUPBY

列名1[,列名2]…][HAVING

條件][ORDERBY

列名1[ASC|DESC][,列名2[ASC|DESC]…]][說明]ALL|DISTINCE|TOPN|TOPNPERCENT:選“ALL”時(shí)表示值相同的記錄也包含在結(jié)果中,這是默認(rèn)設(shè)置;選“DISTINCT”時(shí)表示對(duì)于相同的記錄只包含第一條記錄;選“TOPN”時(shí)只返回查詢結(jié)果的前N條記錄,“N”為可變參數(shù);選“TOPNPERCENT”時(shí)表示只返回查詢結(jié)果中的前百分之N條記錄,N為可變參數(shù)。*|列名1或表達(dá)式1[AS列標(biāo)題1][,列名2或表達(dá)式2[AS列標(biāo)題2]…]:用于指定查詢結(jié)果中包含的選定項(xiàng),可以是列名或表達(dá)式,AS后面的“列標(biāo)題”用來定義對(duì)應(yīng)列或表達(dá)式的標(biāo)題。在“列名1”、“列名2”等別名的前面可能有包含該列的表名。若選“*”表示輸出列是由FROM子句中指定的表中的所有字段。INTO子句:用于查詢生成新表,<表名>為新表的名稱。[說明]FROM表名1[IN數(shù)據(jù)庫名1]別名1[,表名2[IN數(shù)據(jù)庫名2]別名2…]:用于指定查詢操作從哪些表中獲取數(shù)據(jù),每個(gè)表可以取一個(gè)“別名”,這樣就可以在選定項(xiàng)中用“別名”來引用相應(yīng)表中的字段。WHERE條件:用于設(shè)定查詢條件或多個(gè)表之間的連接條件。GROUPBY

列名1[,<列名2>…]:用于指定按照哪些列進(jìn)行分組,以便進(jìn)行統(tǒng)計(jì)。HAVING條件:只有在指定分組的查詢中才有效,只有滿足條件的組的信息才包含在查詢結(jié)果中。GROUPBY列名1[ASC|DESC][,列名[ASC|DESC]…]:用于指定按照哪些列對(duì)查詢結(jié)果進(jìn)行排序,ASC代表升序,DESC代表降序,默認(rèn)為升序。格式中的所有條件均可以是邏輯表達(dá)式或關(guān)系表達(dá)式,使用的運(yùn)算符有:AND、OR、NOT、=、<、<=、>、>=、<>、BETWEEN、LIKE、IN等。(2)簡(jiǎn)單查詢

【例6-7】列出全部學(xué)生表信息。解:命令如下:SELECT*FROM

學(xué)生表

【例6-8】列出“工商管理”專業(yè)的全部學(xué)生的學(xué)號(hào)、姓名和所屬年級(jí)。解:Select

學(xué)號(hào),姓名,所屬年級(jí)from

學(xué)生Where

專業(yè)=“工商管理”

【例6-9】求“101”號(hào)課成績?cè)?0分以上的學(xué)生的姓名和成績。并按成績由高到低排序。解:Select學(xué)號(hào),成績From

必修課成績表WHERE

課號(hào)="101"and成績>=60ORDERBY

成績DESC

【例6-10】在必修課成績表中找出所有沒有成績的學(xué)號(hào)和課號(hào)。SELECT

學(xué)號(hào),課號(hào)FROM

必修課成績表WHERE

成績ISNULL三個(gè)專用于查詢的謂詞

BETWEEN…AND:當(dāng)要求某個(gè)字段值在某個(gè)區(qū)間內(nèi)時(shí),可使用該謂詞,否定的形式是NOTBETWEEN…AND。IN:當(dāng)要求字段值是幾個(gè)值中的一個(gè)時(shí),可使用該謂詞,否定的形式是NOTIN。LIKE:主要用于在查詢條件中對(duì)字符串進(jìn)行比較。LIKE提供兩種字符串匹配方式,一種是使用“?”匹配任意一個(gè)字符,另一種是使用“*”匹配0個(gè)或多個(gè)字符的字符串。它的否定形式為NOTLIKE。【例6-11】查找成績?cè)?5和95之間的學(xué)生的選課得分情況。SELECT*FROM

必修課成績表WHERE

成績BETWEEN85AND95【例6-12】查找出“2002”和“2003”級(jí)學(xué)生的學(xué)號(hào)和姓名。SELECT學(xué)號(hào),姓名FROM

學(xué)生表WHERE

所屬年級(jí)IN("2002","2003")

【例6-13】查詢“02”和“03”級(jí)學(xué)生的學(xué)習(xí)情況。已知學(xué)號(hào)的前2位是學(xué)生的年級(jí)。SELECT*FROM

必修課成績表WHERE

學(xué)號(hào)Like"02*"Or學(xué)號(hào)Like"03*"(3)聯(lián)接查詢

多個(gè)表之間的聯(lián)接運(yùn)算特別是自然聯(lián)結(jié)運(yùn)算是關(guān)系數(shù)據(jù)庫中經(jīng)常用到的一種操作。SQL語言提供了查詢多個(gè)表中信息的操作,這種多個(gè)表之間的查詢功能稱之為聯(lián)接查詢。若按對(duì)應(yīng)字段相等將一個(gè)表中的行與另一個(gè)表中的行聯(lián)接起來,稱為等值查詢,若兩個(gè)表對(duì)應(yīng)字段同名就相當(dāng)于內(nèi)聯(lián)結(jié)。

【例6-14】查詢出所有學(xué)生的必修課的學(xué)習(xí)情況,查詢結(jié)果中包含學(xué)號(hào)、姓名、課程名稱和成績。解:SELECT

學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,必修課成績表.課號(hào),必修課成績表.成績FROM

學(xué)生,必修課成績表WHERE

學(xué)生表.學(xué)號(hào)=必修課成績表.學(xué)號(hào)AND課程表.課號(hào)=必修課成績表.課號(hào)【例6-14】【例6-15】列出修“101”號(hào)課的學(xué)生姓名及成績。SELECT

學(xué)生表.姓名,必修課成績表.成績FROM

學(xué)生表,必修課成績表WHERE

學(xué)生表.學(xué)號(hào)=必修課成績表.學(xué)號(hào)AND必修課成績表.課號(hào)="101"

(4)嵌套查詢

嵌套查詢是指在一個(gè)外層查詢中包含有另一個(gè)內(nèi)層查詢。其中外層查詢稱為主查詢,內(nèi)層查詢稱為子查詢。SQL允許多層嵌套,由內(nèi)而外地進(jìn)行分析,子查詢的結(jié)果作為主查詢的查詢條件。根據(jù)子查詢嵌套的層數(shù),可以分成單層嵌套查詢和多層嵌套查詢。把僅嵌套一層子查詢的SELECT命令稱為單層嵌套查詢,把嵌套的子查詢多于一層的查詢稱為多層嵌套查詢。

返回單值的子查詢

【例6-16】列出所有選修了“微觀經(jīng)濟(jì)學(xué)”的學(xué)生的學(xué)號(hào)。解:SELECT學(xué)號(hào)FROM必修課成績表WHERE課號(hào)=(SelectDISTINCT課號(hào)FROM課程表WHERE課名="微觀經(jīng)濟(jì)學(xué)")返回一組值的子查詢

當(dāng)子查詢返回的值不止一個(gè),則必須在WHERE子句中說明怎樣使用這些返回值。使用方式有如下三種。字段名|表達(dá)式比較運(yùn)算符ANY|SOME|ALL

(子查詢結(jié)果集);字段名|表達(dá)式[NOT]IN

(子查詢結(jié)果集);字段名|表達(dá)式[NOT]EXISTS

(子查詢結(jié)果集)各謂詞的含義如下。ANY或SOME:這兩個(gè)謂詞的功能完成一樣,只要子查詢結(jié)果集中任一個(gè)值滿足給定的條件,結(jié)果就是真。ALL:只有在子查詢集中的所有值均滿足條件時(shí)結(jié)果才為真。IN:如果表達(dá)式或字段的值包含在子查詢中則表達(dá)式值為真,而NOTIN正相反。EXISTS:若子查詢中有返回記錄,則結(jié)果為真?!纠?-17】ANY和SOME的用法求選修“101”號(hào)課的學(xué)生的學(xué)號(hào)和成績,這些學(xué)生的成績比選修“102”號(hào)課的最低成績要高。解:SELECT

學(xué)號(hào),成績FROM

必修課成績表WHERE課號(hào)="101"and成績>any(select成績FROM必修課成績表WHERE課號(hào)='102')圖6-13例6-17的執(zhí)行結(jié)果【例6-18】ALL的用法求選修了“101”號(hào)課的學(xué)生的學(xué)號(hào)和成績,這些學(xué)生的成績比選修了“102”課的任何學(xué)生的成績都要高。解:SELECT

學(xué)號(hào),成績FROM

必修課成績表WHERE課號(hào)="101"and成績>ALL(SELECT成績FROM必修課成績表WHERE課號(hào)='102')圖6-14例6-18的執(zhí)行結(jié)果【例6-19】IN的用法查找“經(jīng)濟(jì)管理”專業(yè)的所有必修課的設(shè)置情況。解:SELECT*FROM

課程表WHERE

課號(hào)IN

(SELECT課號(hào)FROM必修課表WHERE必修專業(yè)="經(jīng)濟(jì)管理")

【例6-20】EXISTS的用法使用EXISTS謂詞從“必修課成績”表中進(jìn)行查詢,查詢條件是:如果“必修課”表中存在課號(hào)為“101”的課程,則從“必修課成績”表中選出所有選修“101”號(hào)課程的記錄。SELECT*FROM

必修課成績表WHERE

課號(hào)="101"ANDEXISTS(SELECT*FROM必修課表WHERE課號(hào)="101")組函數(shù)查詢

SELECT語句不僅可以通過WHERE子句查找滿足條件的數(shù)據(jù),還可以通過組函數(shù)對(duì)滿足條件的數(shù)據(jù)進(jìn)行示最大值、最小值、平均值、求和、計(jì)數(shù)等統(tǒng)計(jì)運(yùn)算。AVG():求數(shù)值字段的平均值。COUNT():計(jì)算所選數(shù)據(jù)的行數(shù),在分組統(tǒng)計(jì)中,用來計(jì)算每組數(shù)據(jù)的行數(shù);其特殊形式是COUNT(*),用來統(tǒng)計(jì)滿足WHERE子句中邏輯表達(dá)式的元組個(gè)數(shù)。MIN():求字符型、日期型或數(shù)值型字段的最小值。MAX():求字符型、日期型或數(shù)值型字段的最大值。SUM():計(jì)算數(shù)值列的總和。這些組函數(shù)一般從一組值中計(jì)算出一個(gè)匯總信息,可使用GROUPBY子句把字段按照值分為多個(gè)組,對(duì)每個(gè)組進(jìn)行統(tǒng)計(jì)。

【例6-21】列出各門課的平均成績、最高成績、最低成績和選課人數(shù)。解:SELECT

課號(hào),AVG(成績)AS平均成績,MAX(成績)AS最高成績,MIN(成績)AS最低成績,COUNT(學(xué)號(hào))AS人數(shù)

FROM

必修課成績表GROUPBY

課號(hào)【例6-22】列出至少選修了三門課的學(xué)生姓名。

解:SELECT

姓名FROM

學(xué)生表WHERE

學(xué)號(hào)IN

(SELECT學(xué)號(hào)FROM必修課成績表GROUPBY學(xué)號(hào)HAVINGCOUNT(*)>=3)圖6-18例6-22的執(zhí)行結(jié)果6.2.3數(shù)據(jù)操縱功能(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論