結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)功能設(shè)計課件_第1頁
結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)功能設(shè)計課件_第2頁
結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)功能設(shè)計課件_第3頁
結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)功能設(shè)計課件_第4頁
結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)功能設(shè)計課件_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五

結(jié)構(gòu)化查詢語言(SQL)

1第五章

結(jié)構(gòu)化查詢語言(SQL)1本章目錄第一節(jié)SQL概述第二節(jié)數(shù)據(jù)定義功能第三節(jié)數(shù)據(jù)操縱功能第四節(jié)數(shù)據(jù)查詢功能

2本章目錄第一節(jié)SQL概述2

SQL全稱是“結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)”,是IBM公司為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)開發(fā)的一種查詢語言。

StructuredQueryLanguage包含4個部分:

數(shù)據(jù)查詢語言DQL-DataQueryLanguage:SELECT

數(shù)據(jù)操縱語言DML-DataManipulationLanguage:INSERT,UPDATE,DELETE

數(shù)據(jù)定義語言DDL-DataDefinitionLanguage:CREATE,ALTER,DROP

數(shù)據(jù)控制語言DCL-DataControlLanguage:GRANT(授權(quán)),ERVOKE

(收回權(quán)限)第一節(jié)SQL概述3SQL全稱是“結(jié)構(gòu)化查詢語言(StructuredQueSQL語言的特點(diǎn)1、SQL語言是一種一體化語言:它集數(shù)據(jù)定義(DDL)、數(shù)據(jù)操縱(DML)、數(shù)據(jù)管理(DCL)的功能于一體,語言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫的全部操作,包括定義關(guān)系模式、錄入數(shù)據(jù)及建立數(shù)據(jù)庫、查詢、更新、維護(hù)數(shù)據(jù)、數(shù)據(jù)庫的重新構(gòu)造、數(shù)據(jù)庫安全性等一系列操作的要求,為數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)者提供了良好的環(huán)境。2.高度非過程化3.以同一種語法結(jié)構(gòu)提供兩種使用方式4.語言簡潔,易學(xué)易用。4SQL語言的特點(diǎn)4數(shù)據(jù)定義語言DDL用于執(zhí)行數(shù)據(jù)定義的操作,如創(chuàng)建或刪除表、索引和視圖之類的對象。由CREATE、DROP、ALTER命令組成,完成數(shù)據(jù)庫對象的建立(CREATE)、刪除(DROP)和修改(ALTER)。一、定義(創(chuàng)建)表【格式】CREATETABLE|DBF<表名1>(<字段名1><類型>[(<寬度>[,<小數(shù)位數(shù)>])][NULL|NOTNULL][CHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][DEFAULT<表達(dá)式>][,<字段名2>…])[PRIMARYKEY|UNIQUE][REFERENCES<表名2>[TAG<標(biāo)識1>]]

【功能】定義(也稱創(chuàng)建)一個表。第二節(jié)

數(shù)據(jù)定義功能5數(shù)據(jù)定義語言DDL用于執(zhí)行數(shù)據(jù)定義的操作,如創(chuàng)建或刪除表、索數(shù)據(jù)類型說明

6數(shù)據(jù)類型說明6【例5-1】創(chuàng)建一個表STUD(學(xué)生信息表),它由以下字段組成:學(xué)號(C,10);姓名(C,8);性別(C,2);班級名(C,10);系別代號(C,2);地址(C,50);出生日期(D);是否團(tuán)員(L);備注(M)。CREATETABLESTUD(學(xué)號C(10),姓名C(10),性別C(2),班級名C(10),系別代號C(2),地址C(50),出生日期D,是否團(tuán)員L,備注M,照片G)LISTSTRUCTURE【例5-2】創(chuàng)建一個表SC(課程成績表),它由以下字段組成:學(xué)號(C,10);課程號(C,2)。CREATETABLESC(學(xué)號C(10),課程號C(2))LISTSTRUCTURE7【例5-1】創(chuàng)建一個表STUD(學(xué)生信息表),它由以下字段組【例5-3】利用SQL命令建立“圖書管理”數(shù)據(jù)庫,其中包含4個表:讀者表、作者表、圖書表、借書表。操作步驟如下:1.創(chuàng)建數(shù)據(jù)庫:CREATEDATABASE圖書管理2.用SQL命令建立“讀者”表:CREATETABLE讀者(讀者編號C(9)NOTNULL;PRIMARYKEY,姓名C(8),性別C(2)CHECK(性別=“;男”O(jiān)R性別=“女”)DEFAULT“男”,出生日期D,少;數(shù)民族否L,籍貫C(10),聯(lián)系電話C(8),照片G)

說明:該命令在當(dāng)前打開的圖書管理數(shù)據(jù)庫中建立讀者表,其中讀者編號為主關(guān)鍵字,用CHECK對性別字段值說明了有效性規(guī)則,并設(shè)定了性別字段默認(rèn)值為“男”。8【例5-3】利用SQL命令建立“圖書管理”數(shù)據(jù)庫,其中包含43.用SQL語句建立“作者”表:CREATETABLE作者(作者編號C(2)PRIMARYKEY,;作者姓名C(10),職稱C(10),聯(lián)系電話C(10),備注M)4.用SQL語句建立“圖書”表:CREATETABLE圖書(書號C(6)NOTNULLPRIMARYKEY,;作者編號C(2)NOTNULL,書名C(14),價格N(8,2),;數(shù)量I,出版社C(18),;FOREIGNKEY作者編號TAG作者編號REFERENCES作者)說明:該命令在當(dāng)前打開的圖書管理數(shù)據(jù)庫中建立圖書表,其中書號為主關(guān)鍵字,“FOREIGNKEY作者編號”表示在該表的“作者編號”字段上建立了一個普通索引,同時說明該字段是聯(lián)接字段,通過引用作者表中的主索引“作者編號”(TAG作者編號REFERENCES作者)與作者表建立聯(lián)系。93.用SQL語句建立“作者”表:95.用SQL語句建立“借書”表:CREATETABLE借書(讀者編號C(6)NOTNULL,讀者姓名

C(10),書號C(6),借書日期DDEFAULTDATE(),還書日期DNULL,;FOREIGNKEY讀者編號TAG讀者編號REFERENCES讀者,;FOREIGNKEY書號TAG書號REFERENCES圖書)

說明:該命令在當(dāng)前打開的圖書管理數(shù)據(jù)庫中建立借書表,其中“FOREIGNKEY讀者編號”在該表的“讀者編號”字段上建立了一個普通索引,同時說明該字段是聯(lián)接字段,通過引用讀者表中的主索引“讀者編號”(TAG讀者編號REFERENCES讀者)與讀者表建立聯(lián)系。這里要注意:“FOREIGNKEY讀者編號TAG讀者編號REFERENCES讀者”語句中前后兩個“讀者編號”的含義不同。

10106.執(zhí)行完以上命令后可以在數(shù)據(jù)庫設(shè)計器中看到如圖5-1所示界面。

圖5-1數(shù)據(jù)庫設(shè)計器—圖書管理

116.執(zhí)行完以上命令后可以在數(shù)據(jù)庫設(shè)計器中看到如圖5-1所示界【格式1】ALTERTABLE<表名>[ADD|ALTER<新字段名><數(shù)據(jù)類型>[(<寬度>[,<小數(shù)位數(shù)>])][NULL|NOTNULL][CHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][DEFUAULT<表達(dá)式1>][PRIMARYKEY|UNIQUE]REFERECES<表名2>[TAG<標(biāo)識1>]]【功能】修改表結(jié)構(gòu)?!菊f明】ADD子句用于增加指定表的字段變量名、數(shù)據(jù)類型、寬度和完整性約束條件;ALTER子句用于修改指定字段的數(shù)據(jù)類型、寬度和完整性約束條件;但不能用于修改字段名,不能刪除字段和規(guī)則?!纠?-4】在課程成績表SC中,增加一個成績字段變量(N,3)。ALTERTABLESCADD成績N(3)LISTSTRUCTURE二、修改表12【格式1】ALTERTABLE<表名>[ADD|A命令格式2:ALTERTABLE<表名>ALTER<字段名>[NULL|NOTNULL][SETCHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][SETDEFUAULT<表達(dá)式1>][DROPCHECK][DROPDEFUAULT]【功能】設(shè)置、修改和刪除字段的有效性規(guī)則及默認(rèn)值。命令格式3:ALTERTABLE<表名>[DROP<字段名>][SETCHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][DROPCHECK][ADDPRIMARYKEY<表達(dá)式>TAG<標(biāo)識名>][DROPPRIMARYKEY][ADDFOREINGKEY<表達(dá)式>TAG<標(biāo)識名>][DROPFOREINGKEY<表達(dá)式>TAG<標(biāo)識名>][SAVE][RENAMECOLUMN<原字段名>TO<新字段名>【功能】刪除字段、修改字段名、包括主索引、普通索引與關(guān)聯(lián)字段、候選索引及有效性規(guī)則的添加與刪除。其中加入SAVE參數(shù)將阻止從結(jié)構(gòu)索引中刪除索引標(biāo)識.13命令格式2:ALTERTABLE<表名>13【例5-5】修改表結(jié)構(gòu)綜合練習(xí)。(1)創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表CREATEDATABASEtempbaseCREATETABLEtemp1(aaC(2),bbN(5,2),ddD)CREATETABLEtemp2(aa1C(2),bb1N(5,2),dd1I)(2)以字段aa為索引表達(dá)式為表temp1增加一個主索引,索引標(biāo)識為aa_keyALTERTABLEtemp1ADDPRIMARYKEYaaTAGaa_key(3)以字段aa1為索引表達(dá)式給表temp2增加一個普通索引,索引標(biāo)識aa1_key;并且將表temp1的索引aa_key作為temp2關(guān)聯(lián)字段。ALTERTABLEtemp2ADDFOREIGNKEYaa1TAGaa1_key;REFERENCEStemp1TAGaa_key

14【例5-5】修改表結(jié)構(gòu)綜合練習(xí)。14(4)將表temp1中“dd”的字段名改為“cc”

ALTERTABLEtemp1RENAMECOLUMNddTOcc

(5)刪除表temp2中字段名為“dd1”的字段

ALTERTABLEtemp2DROPdd1(6)將(3)所建的普通索引的關(guān)聯(lián)字段刪除。

ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key;SAVE(7)將(3)所建的普通索引刪除。

ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key注意:增加普通索引時,必須同時指明與它關(guān)聯(lián)的字段。

15(4)將表temp1中“dd”的字段名改為“cc”15

三、刪除表【格式】DROPTALBE<表名>【功能】刪除指定表的結(jié)構(gòu)和內(nèi)容(包括在此表上建立的索引)?!菊f明】如果只是想刪除一個表中的所有記錄,則應(yīng)使用DELETE語句。16三、刪除表16

數(shù)據(jù)操縱語言是完成數(shù)據(jù)操作的命令,一般分為兩種類型的數(shù)據(jù)操縱,它們統(tǒng)稱為DML:●

數(shù)據(jù)檢索(常稱為查詢):尋找所需的具體數(shù)據(jù)。●數(shù)據(jù)修改:添加、刪除和改變數(shù)據(jù)。數(shù)據(jù)操縱語言一般由INSERT(插入)、DELETE(刪除)、UPDATE(更新),SELETE(檢索,又稱查詢)等組成,由于SELETE比較特殊,所以一般又將它以查詢(檢索)語言單獨(dú)出現(xiàn)。第三節(jié)數(shù)據(jù)操縱功能17數(shù)據(jù)操縱語言是完成數(shù)據(jù)操作的命令,一般分為兩種類型【格式1】INSERTINTO<表名>[<字段名表>]VALUES(<表達(dá)式表>)【格式2】INSERTINTO<表名>FROMARRAY<數(shù)組名>|FROMMEMVAR【功能】在指定的表文件末尾追加一條記錄。格式1用表達(dá)式表中的各表達(dá)式值賦值給<字段名表>中的相應(yīng)的各字段。格式2用數(shù)組或內(nèi)存變量的值賦值給表文件中各字段?!菊f明】如果某些字段名在INTO子句中沒有出現(xiàn),則新記錄在這些字段名上將取空值(或默認(rèn)值)。但必須注意的是,在表定義說明了NOTNULL的字段名不能取空值。一、插入記錄18【格式1】INSERTINTO<表名>[<字段名<字段名表>:指定表文件中的字段,缺省時,按表文件字段的順序依次賦值。<表達(dá)式表>:指定要追加的記錄各個字段的值?!纠?-6】在表文件STUD的末尾追加三條記錄。***用表達(dá)式方式追加第一條記錄***INSERTINTOSTUD(學(xué)號,姓名,性別,班級名,系別代號,地址,出生日期,是否團(tuán)員)VALUES("011110","李建國","男","計0121","01","湖北武漢",{^2009-02-28},.T.)19<字段名表>:指定表文件中的字段,缺省時,按表文件字段的順序DIMENSIONDATA(8)DATA(1)="011103"DATA(2)="李寧"DATA(3)="女"DATA(4)="電0134"DATA(5)="02"DATA(6)="江西九江"DATA(7)={^2005-06-08}DATA(8)=.F.INSERTINTOSTUDFROMARRAYDATA***用數(shù)組方式追加第二條記錄***20DIMENSIONDATA(8)***用數(shù)組方式追加第二學(xué)號="011202"姓名="趙娜"性別="女"班級名="英0112"系別代號="03"地址="廣西南寧"出生日期={^2002-01-12}是否團(tuán)員=.F.INSERTINTOSTUDFROMMEMVARLIST***用內(nèi)存變量方式追加第三條記錄***21學(xué)號="011202"***用內(nèi)存變量方式追加第三條記錄**【格式】UPDATE<表文件名>SET<字段名1>=<表達(dá)式>[,<字段名2>=<表達(dá)式>…][WHERE<條件>]【功能】更新指定表文件中滿足WHERE條件子句的數(shù)據(jù)。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,則表示表中所有行?!菊f明】更新操作又稱為修改操作?!纠?-7】將成績表(SC)中,所有課程號為02的成績各加5分。

UPDATESCSET成績=成績+5;

WHERE課程號="02"二、更新記錄命令22【格式】UPDATE<表文件名>SET<字段名1>=<三、刪除記錄【格式】DELETEFROM<表名>WHERE<表達(dá)式>【功能】從指定的表中刪除滿足WHERE子句條件的所有記錄。如果在DELETE語句中沒有WHERE子句,則該表中的所有記錄都將被刪除。【說明】這里的刪除是邏輯刪除,即在刪除的記錄前加上一個刪除標(biāo)記“*”?!纠?-8】刪除STUD表中所有性別為男的記錄。

DELETEFROMSTUD;WHERE性別=“男”23三、刪除記錄【格式】DELETEFROM<表名>第四節(jié)數(shù)據(jù)查詢功能

數(shù)據(jù)庫中的數(shù)據(jù)很多時侯是為了查詢的,因此,數(shù)據(jù)查詢是數(shù)據(jù)庫的核心操作。而在SQL語言中,查詢語言中有一條查詢命令,即SELECT語句。命令格式:SELECT[ALL|DISTINCT][<別名>.]<選項>[[AS<顯示列名>][,[<別名>.]<選項 >……] FROM<表名>[<別名>][,<表名>[<別名>]……] [WHERE<條件表達(dá)式>][AND<條件表達(dá)式>……] [GROUPBY<分組選項>[,<分組選項>……]] [HAVING<組條件表達(dá)式>] [ORDERBY<排序選項>[ASC|DESC][,<排序選 >[ASC|DESC]……]]功能:查詢滿足條件的記錄數(shù)據(jù)。24第四節(jié)數(shù)據(jù)查詢功能數(shù)據(jù)庫中的數(shù)據(jù)很多時侯是一、基本查詢語句【格式】SELECT[ALL|DISTINCT]<選項>[AS<顯示列名>]

……

FROM<表>

【功能】無條件查詢。【說明】ALL:表示顯示全部查詢記錄,包括重復(fù)記錄。

DISTINCT:表示顯示無重復(fù)結(jié)果的記錄?!纠?-9】顯示STUD(學(xué)生信息數(shù)據(jù)表)中的所有記錄。SELECT*FROMSTUD命令中的*表示輸出顯示所有的字段,數(shù)據(jù)來源是STUD表,表中的內(nèi)容以瀏覽方式顯示。【例5-10】顯示STUD(學(xué)生信息數(shù)據(jù)表)中的所有的學(xué)號及與之對應(yīng)的姓名,同時能去除重名。SELECTDISTINCT學(xué)號,姓名FROMSTUD25一、基本查詢語句25【例5-11】顯示SC(課程成績表)中的所有記錄,并將成績一項乘以0.7。SELECT學(xué)號,課程號,成績*0.7AS成績;FROMSC二、帶條件(WHERE)的查詢語句【格式】SELECT[ALL|DISTINCT]<字段列表>

FROM<表>[WHERE<條件表達(dá)式>]【功能】從一個表中查詢滿足條件的數(shù)據(jù)。【說明】<條件表達(dá)式>由一系列用AND或OR連接的條件表達(dá)式組成,條件表達(dá)式的格式可以是以下幾種:26【例5-11】顯示SC(課程成績表)中的所有記錄,并將成績(1)<字段名1><關(guān)系運(yùn)算符><字段名2>。(2)<字段名><關(guān)系運(yùn)算符><表達(dá)式>。(3)<字段名><關(guān)系運(yùn)算符>ALL(<子查詢>)(4)<字段名><關(guān)系運(yùn)算符>ANY|SOME(<子查詢>)(5)<字段名>[NOT]BETWEEN<起始值>AND<終止值>(6)[NOT]EXISTS(<子查詢>)(7)<字段名>[NOT]IN<值表>(8)<字段名>[NOT]IN(<子查詢>)(9)<字段名>[NOT]LINK<字符表達(dá)式>27(1)<字段名1><關(guān)系運(yùn)算符><字段名2>。27

WHERE子句中的條件運(yùn)算符

28WHERE子句中的條件運(yùn)算符28SQL支持的關(guān)系運(yùn)算符如下:=、<>、!=、#、==、>、>=、<、<=?!纠?-12】顯示STUD表中所有男生記錄的學(xué)號,姓名和性別字段值。

SELECT學(xué)號,姓名,性別;FROMSTUDWHERE性別="男"【例5-13】顯示STUD表中出生日期在85~86年之間的學(xué)生的學(xué)號,姓名,出生日期。SELECT學(xué)號,姓名,出生日期;FROMSTUD;WHERE出生日期BETWEEN{^1985-01-01}AND{^1986-12-31}29SQL支持的關(guān)系運(yùn)算符如下:29【例5-14】顯示STUD表中姓李的學(xué)生的學(xué)號,姓名,出生日期。SELECT學(xué)號,姓名,出生日期;FROMSTUD;WHERE姓名LIKE“李%”30【例5-14】顯示STUD表中姓李的學(xué)生的學(xué)號,姓名,三、SQL的復(fù)雜查詢1.多表查詢

在一個數(shù)據(jù)庫中的多個表之間一般都存在著某些聯(lián)系,在一個查詢語句中同時涉及到兩個或兩個以上的表時,這種查詢稱之為連接查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連接關(guān)系。連接查詢命令的格式一:格式:SELECT[ALL|DISTINCT]<字段列表>

FROM<表1>[,表2…..]

WHERE<聯(lián)接條件>AND<過濾條件>

31三、SQL的復(fù)雜查詢1.多表查詢31連接方式:1)等值連接:在連接條件中使用等于號(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。方法是首先在表1中找到第1個元組,然后從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第1個元組與該元組拼接起來,形成結(jié)果表中一個元組。表2全部查找完后,再找表1中第2個元組,然后再從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第2個元組與該元組拼接起來,形成結(jié)果表中一個元組。重復(fù)上述操作,直到表1中的全部元組都處理完畢為止。

例:

查詢每個學(xué)生及其選修課程的情況。

學(xué)生情況存放在Student表中,學(xué)生選課情況存放在SC表中,所以本查詢實(shí)際上涉及Student與SC兩個表。這兩個表之間的聯(lián)系是通過公共屬性xh實(shí)現(xiàn)的。

SELECTStudent.*,SC.*

FROMStudent,SC

WHEREStudent.xh=SC.xh*將Student與SC中同一學(xué)生的元組連接起來2)非等值連接:在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>、>=、<=、<、!>、!<和<>。

32連接方式:32【例5-15】顯示計算機(jī)系學(xué)生的成績。SELECTa.姓名,a.系別代號,c.課程名,b.成績;FROM學(xué)生a,選課b,課程c;WHEREa.學(xué)號=b.學(xué)號ANDb.課程號=c.課程號ANDa.系別代號="04"【例5-16】顯示成績在80至90之間的學(xué)號,姓名,課程名和成績。SELECTa.姓名,c.課程名,b.成績;FROM學(xué)生a,選課b,課程c;WHEREa.學(xué)號=b.學(xué)號ANDb.課程號=c.課程號ANDb.成績BETWEEN80AND9033【例5-15】顯示計算機(jī)系學(xué)生的成績。332.連接問題在SQL語句中,在FROM子句中提供了一種稱之為連接的子句,連接分為內(nèi)連接和外連接,外連接又可分為左外連接、右外連接和全外連接。(1)內(nèi)連接(INNERJOIN)內(nèi)連接是指包括符合條件的每個表的記錄,也稱之為全記錄操作。而上面兩個例子就是內(nèi)連接?!纠?-17】查詢并顯示各個學(xué)生的學(xué)號,所學(xué)課程及課程成績。

SELECTa.學(xué)號,b.課程名,a.成績;FROM選課aINNERJOIN課程bONa.課程號=b.課程號342.連接問題34(2)外連接外連接是指把兩個表分為左右兩個表。右外連接是指連接滿足條件右側(cè)表的全部記錄。左外連接是指連接滿足條件左側(cè)表的全部記錄。全外連接是指連接滿足條件表的全部記錄。左外連接:左向外聯(lián)接的結(jié)果集包括LEFTOUTER子句中指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。在FROM子句中可由以下關(guān)鍵字指定:

LEFTJOIN或LEFTOUTERJOIN。右外聯(lián)接:RIGHTJOIN或RIGHTOUTERJOIN。

右向外聯(lián)接是左向外聯(lián)接的反向聯(lián)接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。

全外聯(lián)接:FULLJOIN或FULLOUTERJOIN。

全外聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個表中沒有匹配行時,則另一個表的選擇列包含空值。如果表之間有匹配行,則整個結(jié)果集行包含基表的數(shù)據(jù)值。35(2)外連接353.嵌套查詢在SQL語句中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢或子查詢。【例5-18】顯示“張彬”所在班級的學(xué)生名單。SELECT學(xué)號,姓名,班級名;FROM學(xué)生;WHERE班級名=(SELECT班級名FROM學(xué)生;WHERE姓名="張彬")363.嵌套查詢364.排序、分組與統(tǒng)計查詢【格式】SELECT[ALL|DISTINCT]<字段列表>

FROM<表>[WHERE<條件>][GROUPBY<分類字段列表>…][HAVING<過濾條件>][ORDERBY<排序項>[ASC|DESC]]【功能】包括有排序、分組和函數(shù)運(yùn)算的查詢問題。374.排序、分組與統(tǒng)計查詢37【例5-19】按出生日期降序顯示STUD表中的學(xué)號,姓名,出生日期。SELECT學(xué)號,姓名,出生日期;FROM學(xué)生;ORDERBY出生日期DESC【例5-20】按班級分類顯示學(xué)生的姓名,課程名,成績,同一班級按分?jǐn)?shù)排序。SELECTa.姓名,a.班級名,c.課程名,b.成績;FROM學(xué)生a,選課b,課程c;WHEREa.學(xué)號=b.學(xué)號ANDb.課程號=c.課程號;ORDERBYa.班級名,b.成績38【例5-19】按出生日期降序顯示STUD表中的學(xué)號,姓名,出【例5-21】顯示各班總?cè)藬?shù)。SELECT班級名,COUNT(班級名)AS總?cè)藬?shù);FROM學(xué)生;GROUPBY班級名【例5-22】列出平均分80分以上的課程號和該課程的平均成績。SELECT課程號,AVG(成績)AS平均成績

FROM選課GROUPBY課程號;HAVINGAVG(成績)>=8039395.輸出合并

SQL命令的輸出合并功能是由UNION子句實(shí)現(xiàn)的,其含義是將兩個SELECT命令的查詢結(jié)果合并成一個查詢結(jié)果。子句格式:[UNION[ALL]<SELECT命令>]

其中ALL表示結(jié)果全部合并。若沒有ALL,則重復(fù)的記錄將被自動取掉。合并的規(guī)則是:(1)不能合并子查詢的結(jié)果。(2)兩個SELECT命令必須輸出同樣的列數(shù)。(3)兩個表各相應(yīng)列出的數(shù)據(jù)類型必須相同,數(shù)字和字符不能合并。(4)僅最后一個SELECT命令中可以用ORDERBY子句,且排序選項必須用數(shù)字說明。405.輸出合并40【例5-23】對讀者數(shù)據(jù)表中列出籍貫為湖南、湖北的所有讀者編號與姓名。SELECT讀者編號,姓名FROM讀者;WHERE籍貫="湖南"

UNIONSELECT讀者編號,姓名;FROM讀者WHERE籍貫="湖北"【例5-24】顯示選修了英語或數(shù)學(xué)科目的學(xué)生學(xué)號。SELECT學(xué)號,課程號FROM選課;WHERE課程號="01"

UNION;SELECT學(xué)號,課程號;FROM選課;WHERE課程號="02"41【例5-23】對讀者數(shù)據(jù)表中列出籍貫為湖南、湖北的所有讀者編6.重定向輸出默認(rèn)情況下,查詢輸出到一個瀏覽窗口,用戶在“SELECT”語句中可使用[INTO<目標(biāo)>|TOFILE<文件名>|TOSCREEN|TOPRINTER]子句選擇查詢?nèi)ハ颍篒NTOARRAY數(shù)組名:將查詢結(jié)果保存到一個數(shù)組中。CURSOR<臨時表名>:將查詢結(jié)果保存到一個臨時表中。DBF|TABLE<表名>:將查詢結(jié)果保存到一個永久表中。TOFILE<文件名>[ADDITIVE]:將查詢結(jié)果保存到文本文件中。如果帶“ADDITIVE”關(guān)鍵字,查詢結(jié)果以追加方式添加到<文件名>指定的文件,否則,以新建或覆蓋方式添加到<文件名>指定的文件。TOSCREEN:將查詢結(jié)果保在屏幕上顯示。TOPRINTER:將查詢結(jié)果送打印機(jī)打印。426.重定向輸出42【例5-25】顯示選修了01課程而沒有選修02課程學(xué)生的名單。將查詢結(jié)果保存到aaa.txt文本文件中。SELECT學(xué)號;FROM選課;WHERE課程號="01"AND學(xué)號NOTIN;(SELECT學(xué)號FROM選課WHERE課程號="02");TOFILEaaa

43【例5-25】顯示選修了01課程而沒有選修02課程學(xué)生的名單結(jié)束44結(jié)束442-3:452-3:45第五

結(jié)構(gòu)化查詢語言(SQL)

46第五章

結(jié)構(gòu)化查詢語言(SQL)1本章目錄第一節(jié)SQL概述第二節(jié)數(shù)據(jù)定義功能第三節(jié)數(shù)據(jù)操縱功能第四節(jié)數(shù)據(jù)查詢功能

47本章目錄第一節(jié)SQL概述2

SQL全稱是“結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)”,是IBM公司為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)開發(fā)的一種查詢語言。

StructuredQueryLanguage包含4個部分:

數(shù)據(jù)查詢語言DQL-DataQueryLanguage:SELECT

數(shù)據(jù)操縱語言DML-DataManipulationLanguage:INSERT,UPDATE,DELETE

數(shù)據(jù)定義語言DDL-DataDefinitionLanguage:CREATE,ALTER,DROP

數(shù)據(jù)控制語言DCL-DataControlLanguage:GRANT(授權(quán)),ERVOKE

(收回權(quán)限)第一節(jié)SQL概述48SQL全稱是“結(jié)構(gòu)化查詢語言(StructuredQueSQL語言的特點(diǎn)1、SQL語言是一種一體化語言:它集數(shù)據(jù)定義(DDL)、數(shù)據(jù)操縱(DML)、數(shù)據(jù)管理(DCL)的功能于一體,語言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫的全部操作,包括定義關(guān)系模式、錄入數(shù)據(jù)及建立數(shù)據(jù)庫、查詢、更新、維護(hù)數(shù)據(jù)、數(shù)據(jù)庫的重新構(gòu)造、數(shù)據(jù)庫安全性等一系列操作的要求,為數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)者提供了良好的環(huán)境。2.高度非過程化3.以同一種語法結(jié)構(gòu)提供兩種使用方式4.語言簡潔,易學(xué)易用。49SQL語言的特點(diǎn)4數(shù)據(jù)定義語言DDL用于執(zhí)行數(shù)據(jù)定義的操作,如創(chuàng)建或刪除表、索引和視圖之類的對象。由CREATE、DROP、ALTER命令組成,完成數(shù)據(jù)庫對象的建立(CREATE)、刪除(DROP)和修改(ALTER)。一、定義(創(chuàng)建)表【格式】CREATETABLE|DBF<表名1>(<字段名1><類型>[(<寬度>[,<小數(shù)位數(shù)>])][NULL|NOTNULL][CHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][DEFAULT<表達(dá)式>][,<字段名2>…])[PRIMARYKEY|UNIQUE][REFERENCES<表名2>[TAG<標(biāo)識1>]]

【功能】定義(也稱創(chuàng)建)一個表。第二節(jié)

數(shù)據(jù)定義功能50數(shù)據(jù)定義語言DDL用于執(zhí)行數(shù)據(jù)定義的操作,如創(chuàng)建或刪除表、索數(shù)據(jù)類型說明

51數(shù)據(jù)類型說明6【例5-1】創(chuàng)建一個表STUD(學(xué)生信息表),它由以下字段組成:學(xué)號(C,10);姓名(C,8);性別(C,2);班級名(C,10);系別代號(C,2);地址(C,50);出生日期(D);是否團(tuán)員(L);備注(M)。CREATETABLESTUD(學(xué)號C(10),姓名C(10),性別C(2),班級名C(10),系別代號C(2),地址C(50),出生日期D,是否團(tuán)員L,備注M,照片G)LISTSTRUCTURE【例5-2】創(chuàng)建一個表SC(課程成績表),它由以下字段組成:學(xué)號(C,10);課程號(C,2)。CREATETABLESC(學(xué)號C(10),課程號C(2))LISTSTRUCTURE52【例5-1】創(chuàng)建一個表STUD(學(xué)生信息表),它由以下字段組【例5-3】利用SQL命令建立“圖書管理”數(shù)據(jù)庫,其中包含4個表:讀者表、作者表、圖書表、借書表。操作步驟如下:1.創(chuàng)建數(shù)據(jù)庫:CREATEDATABASE圖書管理2.用SQL命令建立“讀者”表:CREATETABLE讀者(讀者編號C(9)NOTNULL;PRIMARYKEY,姓名C(8),性別C(2)CHECK(性別=“;男”O(jiān)R性別=“女”)DEFAULT“男”,出生日期D,少;數(shù)民族否L,籍貫C(10),聯(lián)系電話C(8),照片G)

說明:該命令在當(dāng)前打開的圖書管理數(shù)據(jù)庫中建立讀者表,其中讀者編號為主關(guān)鍵字,用CHECK對性別字段值說明了有效性規(guī)則,并設(shè)定了性別字段默認(rèn)值為“男”。53【例5-3】利用SQL命令建立“圖書管理”數(shù)據(jù)庫,其中包含43.用SQL語句建立“作者”表:CREATETABLE作者(作者編號C(2)PRIMARYKEY,;作者姓名C(10),職稱C(10),聯(lián)系電話C(10),備注M)4.用SQL語句建立“圖書”表:CREATETABLE圖書(書號C(6)NOTNULLPRIMARYKEY,;作者編號C(2)NOTNULL,書名C(14),價格N(8,2),;數(shù)量I,出版社C(18),;FOREIGNKEY作者編號TAG作者編號REFERENCES作者)說明:該命令在當(dāng)前打開的圖書管理數(shù)據(jù)庫中建立圖書表,其中書號為主關(guān)鍵字,“FOREIGNKEY作者編號”表示在該表的“作者編號”字段上建立了一個普通索引,同時說明該字段是聯(lián)接字段,通過引用作者表中的主索引“作者編號”(TAG作者編號REFERENCES作者)與作者表建立聯(lián)系。543.用SQL語句建立“作者”表:95.用SQL語句建立“借書”表:CREATETABLE借書(讀者編號C(6)NOTNULL,讀者姓名

C(10),書號C(6),借書日期DDEFAULTDATE(),還書日期DNULL,;FOREIGNKEY讀者編號TAG讀者編號REFERENCES讀者,;FOREIGNKEY書號TAG書號REFERENCES圖書)

說明:該命令在當(dāng)前打開的圖書管理數(shù)據(jù)庫中建立借書表,其中“FOREIGNKEY讀者編號”在該表的“讀者編號”字段上建立了一個普通索引,同時說明該字段是聯(lián)接字段,通過引用讀者表中的主索引“讀者編號”(TAG讀者編號REFERENCES讀者)與讀者表建立聯(lián)系。這里要注意:“FOREIGNKEY讀者編號TAG讀者編號REFERENCES讀者”語句中前后兩個“讀者編號”的含義不同。

55106.執(zhí)行完以上命令后可以在數(shù)據(jù)庫設(shè)計器中看到如圖5-1所示界面。

圖5-1數(shù)據(jù)庫設(shè)計器—圖書管理

566.執(zhí)行完以上命令后可以在數(shù)據(jù)庫設(shè)計器中看到如圖5-1所示界【格式1】ALTERTABLE<表名>[ADD|ALTER<新字段名><數(shù)據(jù)類型>[(<寬度>[,<小數(shù)位數(shù)>])][NULL|NOTNULL][CHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][DEFUAULT<表達(dá)式1>][PRIMARYKEY|UNIQUE]REFERECES<表名2>[TAG<標(biāo)識1>]]【功能】修改表結(jié)構(gòu)?!菊f明】ADD子句用于增加指定表的字段變量名、數(shù)據(jù)類型、寬度和完整性約束條件;ALTER子句用于修改指定字段的數(shù)據(jù)類型、寬度和完整性約束條件;但不能用于修改字段名,不能刪除字段和規(guī)則?!纠?-4】在課程成績表SC中,增加一個成績字段變量(N,3)。ALTERTABLESCADD成績N(3)LISTSTRUCTURE二、修改表57【格式1】ALTERTABLE<表名>[ADD|A命令格式2:ALTERTABLE<表名>ALTER<字段名>[NULL|NOTNULL][SETCHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][SETDEFUAULT<表達(dá)式1>][DROPCHECK][DROPDEFUAULT]【功能】設(shè)置、修改和刪除字段的有效性規(guī)則及默認(rèn)值。命令格式3:ALTERTABLE<表名>[DROP<字段名>][SETCHECK<條件表達(dá)式>[ERROR<出錯顯示信息>]][DROPCHECK][ADDPRIMARYKEY<表達(dá)式>TAG<標(biāo)識名>][DROPPRIMARYKEY][ADDFOREINGKEY<表達(dá)式>TAG<標(biāo)識名>][DROPFOREINGKEY<表達(dá)式>TAG<標(biāo)識名>][SAVE][RENAMECOLUMN<原字段名>TO<新字段名>【功能】刪除字段、修改字段名、包括主索引、普通索引與關(guān)聯(lián)字段、候選索引及有效性規(guī)則的添加與刪除。其中加入SAVE參數(shù)將阻止從結(jié)構(gòu)索引中刪除索引標(biāo)識.58命令格式2:ALTERTABLE<表名>13【例5-5】修改表結(jié)構(gòu)綜合練習(xí)。(1)創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表CREATEDATABASEtempbaseCREATETABLEtemp1(aaC(2),bbN(5,2),ddD)CREATETABLEtemp2(aa1C(2),bb1N(5,2),dd1I)(2)以字段aa為索引表達(dá)式為表temp1增加一個主索引,索引標(biāo)識為aa_keyALTERTABLEtemp1ADDPRIMARYKEYaaTAGaa_key(3)以字段aa1為索引表達(dá)式給表temp2增加一個普通索引,索引標(biāo)識aa1_key;并且將表temp1的索引aa_key作為temp2關(guān)聯(lián)字段。ALTERTABLEtemp2ADDFOREIGNKEYaa1TAGaa1_key;REFERENCEStemp1TAGaa_key

59【例5-5】修改表結(jié)構(gòu)綜合練習(xí)。14(4)將表temp1中“dd”的字段名改為“cc”

ALTERTABLEtemp1RENAMECOLUMNddTOcc

(5)刪除表temp2中字段名為“dd1”的字段

ALTERTABLEtemp2DROPdd1(6)將(3)所建的普通索引的關(guān)聯(lián)字段刪除。

ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key;SAVE(7)將(3)所建的普通索引刪除。

ALTERTABLEtemp2DROPFOREIGNKEYTAGaa1_key注意:增加普通索引時,必須同時指明與它關(guān)聯(lián)的字段。

60(4)將表temp1中“dd”的字段名改為“cc”15

三、刪除表【格式】DROPTALBE<表名>【功能】刪除指定表的結(jié)構(gòu)和內(nèi)容(包括在此表上建立的索引)。【說明】如果只是想刪除一個表中的所有記錄,則應(yīng)使用DELETE語句。61三、刪除表16

數(shù)據(jù)操縱語言是完成數(shù)據(jù)操作的命令,一般分為兩種類型的數(shù)據(jù)操縱,它們統(tǒng)稱為DML:●

數(shù)據(jù)檢索(常稱為查詢):尋找所需的具體數(shù)據(jù)?!駭?shù)據(jù)修改:添加、刪除和改變數(shù)據(jù)。數(shù)據(jù)操縱語言一般由INSERT(插入)、DELETE(刪除)、UPDATE(更新),SELETE(檢索,又稱查詢)等組成,由于SELETE比較特殊,所以一般又將它以查詢(檢索)語言單獨(dú)出現(xiàn)。第三節(jié)數(shù)據(jù)操縱功能62數(shù)據(jù)操縱語言是完成數(shù)據(jù)操作的命令,一般分為兩種類型【格式1】INSERTINTO<表名>[<字段名表>]VALUES(<表達(dá)式表>)【格式2】INSERTINTO<表名>FROMARRAY<數(shù)組名>|FROMMEMVAR【功能】在指定的表文件末尾追加一條記錄。格式1用表達(dá)式表中的各表達(dá)式值賦值給<字段名表>中的相應(yīng)的各字段。格式2用數(shù)組或內(nèi)存變量的值賦值給表文件中各字段?!菊f明】如果某些字段名在INTO子句中沒有出現(xiàn),則新記錄在這些字段名上將取空值(或默認(rèn)值)。但必須注意的是,在表定義說明了NOTNULL的字段名不能取空值。一、插入記錄63【格式1】INSERTINTO<表名>[<字段名<字段名表>:指定表文件中的字段,缺省時,按表文件字段的順序依次賦值。<表達(dá)式表>:指定要追加的記錄各個字段的值?!纠?-6】在表文件STUD的末尾追加三條記錄。***用表達(dá)式方式追加第一條記錄***INSERTINTOSTUD(學(xué)號,姓名,性別,班級名,系別代號,地址,出生日期,是否團(tuán)員)VALUES("011110","李建國","男","計0121","01","湖北武漢",{^2009-02-28},.T.)64<字段名表>:指定表文件中的字段,缺省時,按表文件字段的順序DIMENSIONDATA(8)DATA(1)="011103"DATA(2)="李寧"DATA(3)="女"DATA(4)="電0134"DATA(5)="02"DATA(6)="江西九江"DATA(7)={^2005-06-08}DATA(8)=.F.INSERTINTOSTUDFROMARRAYDATA***用數(shù)組方式追加第二條記錄***65DIMENSIONDATA(8)***用數(shù)組方式追加第二學(xué)號="011202"姓名="趙娜"性別="女"班級名="英0112"系別代號="03"地址="廣西南寧"出生日期={^2002-01-12}是否團(tuán)員=.F.INSERTINTOSTUDFROMMEMVARLIST***用內(nèi)存變量方式追加第三條記錄***66學(xué)號="011202"***用內(nèi)存變量方式追加第三條記錄**【格式】UPDATE<表文件名>SET<字段名1>=<表達(dá)式>[,<字段名2>=<表達(dá)式>…][WHERE<條件>]【功能】更新指定表文件中滿足WHERE條件子句的數(shù)據(jù)。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,則表示表中所有行?!菊f明】更新操作又稱為修改操作?!纠?-7】將成績表(SC)中,所有課程號為02的成績各加5分。

UPDATESCSET成績=成績+5;

WHERE課程號="02"二、更新記錄命令67【格式】UPDATE<表文件名>SET<字段名1>=<三、刪除記錄【格式】DELETEFROM<表名>WHERE<表達(dá)式>【功能】從指定的表中刪除滿足WHERE子句條件的所有記錄。如果在DELETE語句中沒有WHERE子句,則該表中的所有記錄都將被刪除。【說明】這里的刪除是邏輯刪除,即在刪除的記錄前加上一個刪除標(biāo)記“*”?!纠?-8】刪除STUD表中所有性別為男的記錄。

DELETEFROMSTUD;WHERE性別=“男”68三、刪除記錄【格式】DELETEFROM<表名>第四節(jié)數(shù)據(jù)查詢功能

數(shù)據(jù)庫中的數(shù)據(jù)很多時侯是為了查詢的,因此,數(shù)據(jù)查詢是數(shù)據(jù)庫的核心操作。而在SQL語言中,查詢語言中有一條查詢命令,即SELECT語句。命令格式:SELECT[ALL|DISTINCT][<別名>.]<選項>[[AS<顯示列名>][,[<別名>.]<選項 >……] FROM<表名>[<別名>][,<表名>[<別名>]……] [WHERE<條件表達(dá)式>][AND<條件表達(dá)式>……] [GROUPBY<分組選項>[,<分組選項>……]] [HAVING<組條件表達(dá)式>] [ORDERBY<排序選項>[ASC|DESC][,<排序選 >[ASC|DESC]……]]功能:查詢滿足條件的記錄數(shù)據(jù)。69第四節(jié)數(shù)據(jù)查詢功能數(shù)據(jù)庫中的數(shù)據(jù)很多時侯是一、基本查詢語句【格式】SELECT[ALL|DISTINCT]<選項>[AS<顯示列名>]

……

FROM<表>

【功能】無條件查詢?!菊f明】ALL:表示顯示全部查詢記錄,包括重復(fù)記錄。

DISTINCT:表示顯示無重復(fù)結(jié)果的記錄。【例5-9】顯示STUD(學(xué)生信息數(shù)據(jù)表)中的所有記錄。SELECT*FROMSTUD命令中的*表示輸出顯示所有的字段,數(shù)據(jù)來源是STUD表,表中的內(nèi)容以瀏覽方式顯示?!纠?-10】顯示STUD(學(xué)生信息數(shù)據(jù)表)中的所有的學(xué)號及與之對應(yīng)的姓名,同時能去除重名。SELECTDISTINCT學(xué)號,姓名FROMSTUD70一、基本查詢語句25【例5-11】顯示SC(課程成績表)中的所有記錄,并將成績一項乘以0.7。SELECT學(xué)號,課程號,成績*0.7AS成績;FROMSC二、帶條件(WHERE)的查詢語句【格式】SELECT[ALL|DISTINCT]<字段列表>

FROM<表>[WHERE<條件表達(dá)式>]【功能】從一個表中查詢滿足條件的數(shù)據(jù)?!菊f明】<條件表達(dá)式>由一系列用AND或OR連接的條件表達(dá)式組成,條件表達(dá)式的格式可以是以下幾種:71【例5-11】顯示SC(課程成績表)中的所有記錄,并將成績(1)<字段名1><關(guān)系運(yùn)算符><字段名2>。(2)<字段名><關(guān)系運(yùn)算符><表達(dá)式>。(3)<字段名><關(guān)系運(yùn)算符>ALL(<子查詢>)(4)<字段名><關(guān)系運(yùn)算符>ANY|SOME(<子查詢>)(5)<字段名>[NOT]BETWEEN<起始值>AND<終止值>(6)[NOT]EXISTS(<子查詢>)(7)<字段名>[NOT]IN<值表>(8)<字段名>[NOT]IN(<子查詢>)(9)<字段名>[NOT]LINK<字符表達(dá)式>72(1)<字段名1><關(guān)系運(yùn)算符><字段名2>。27

WHERE子句中的條件運(yùn)算符

73WHERE子句中的條件運(yùn)算符28SQL支持的關(guān)系運(yùn)算符如下:=、<>、?。?、#、==、>、>=、<、<=?!纠?-12】顯示STUD表中所有男生記錄的學(xué)號,姓名和性別字段值。

SELECT學(xué)號,姓名,性別;FROMSTUDWHERE性別="男"【例5-13】顯示STUD表中出生日期在85~86年之間的學(xué)生的學(xué)號,姓名,出生日期。SELECT學(xué)號,姓名,出生日期;FROMSTUD;WHERE出生日期BETWEEN{^1985-01-01}AND{^1986-12-31}74SQL支持的關(guān)系運(yùn)算符如下:29【例5-14】顯示STUD表中姓李的學(xué)生的學(xué)號,姓名,出生日期。SELECT學(xué)號,姓名,出生日期;FROMSTUD;WHERE姓名LIKE“李%”75【例5-14】顯示STUD表中姓李的學(xué)生的學(xué)號,姓名,三、SQL的復(fù)雜查詢1.多表查詢

在一個數(shù)據(jù)庫中的多個表之間一般都存在著某些聯(lián)系,在一個查詢語句中同時涉及到兩個或兩個以上的表時,這種查詢稱之為連接查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連接關(guān)系。連接查詢命令的格式一:格式:SELECT[ALL|DISTINCT]<字段列表>

FROM<表1>[,表2…..]

WHERE<聯(lián)接條件>AND<過濾條件>

76三、SQL的復(fù)雜查詢1.多表查詢31連接方式:1)等值連接:在連接條件中使用等于號(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。方法是首先在表1中找到第1個元組,然后從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第1個元組與該元組拼接起來,形成結(jié)果表中一個元組。表2全部查找完后,再找表1中第2個元組,然后再從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第2個元組與該元組拼接起來,形成結(jié)果表中一個元組。重復(fù)上述操作,直到表1中的全部元組都處理完畢為止。

例:

查詢每個學(xué)生及其選修課程的情況。

學(xué)生情況存放在Student表中,學(xué)生選課情況存放在SC表中,所以本查詢實(shí)際上涉及Student與SC兩個表。這兩個表之間的聯(lián)系是通過公共屬性xh實(shí)現(xiàn)的。

SELECTStudent.*,SC.*

FROMStudent,SC

WHEREStudent.xh=SC.xh*將Student與SC中同一學(xué)生的元組連接起來2)非等值連接:在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>、>=、<=、<、!>、!<和<>。

77連接方式:32【例5-15】顯示計算機(jī)系學(xué)生的成績。SELECTa.姓名,a.系別代號,c.課程名,b.成績;FROM學(xué)生a,選課b,課程c;WHEREa.學(xué)號=b.學(xué)號ANDb.課程號=c.課程號ANDa.系別代號="04"【例5-16】顯示成績在80至90之間的學(xué)號,姓名,課程名和成績。SELECTa.姓名,c.課程名,b.成績;FROM學(xué)生a,選課b,課程c;WHEREa.學(xué)號=b.學(xué)號ANDb.課程號=c.課程號ANDb.成績BETWEEN80AND9078【例5-15】顯示計算機(jī)系學(xué)生的成績。332.連接問題在SQL語句中,在FROM子句中提供了一種稱之為連接的子句,連接分為內(nèi)連接和外連接,外連接又可分為左外連接、右外連接和全外連接。(1)內(nèi)連接(INNERJOIN)內(nèi)連接是指包括符合條件的每個表的記錄,也稱之為全記錄操作。而上面兩個例子就是內(nèi)連接?!纠?-17】查詢并顯示各個學(xué)生的學(xué)號,所學(xué)課程及課程成績。

SELECTa.學(xué)號,b.課程名,a.成績;FROM選課aINNERJOIN課程bONa.課程號=b.課程號792.連接問題34(2)外連接外連接是指把兩個表分為左右兩個表。右外連接是指連接滿足條件右側(cè)表的全部記錄。左外連接是指連接滿足條件左側(cè)表的全部記錄。全外連接是指連接滿足條件表的全部記錄。左外連接:左向外聯(lián)接的結(jié)果集包括LEFTOUTER子句中指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關(guān)聯(lián)

溫馨提示

  • 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

提交評論