第7章 結(jié)構(gòu)化查詢語言 SQL_第1頁
第7章 結(jié)構(gòu)化查詢語言 SQL_第2頁
第7章 結(jié)構(gòu)化查詢語言 SQL_第3頁
第7章 結(jié)構(gòu)化查詢語言 SQL_第4頁
第7章 結(jié)構(gòu)化查詢語言 SQL_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

內(nèi)容提要:7.1SQL概述

7.2SQL數(shù)據(jù)查詢

7.3SQL數(shù)據(jù)定義功能7.4SQL的數(shù)據(jù)更新功能7.5用查詢設(shè)計器建立查詢

7.1.1SQL語言的主要功能7.1

SQL概述

1.數(shù)據(jù)定義(DataDefinition)

數(shù)據(jù)定義語言由CREATE(創(chuàng)建)、ALTER(修改)、DROP(刪除)三個命令組成,可以完成數(shù)據(jù)庫對象的創(chuàng)建、修改和刪除。

2.數(shù)據(jù)查詢(DataQuery) 數(shù)據(jù)查詢只有一條命令,即SELECT,它是一個SELECT命令集合,具有豐富的選項,并且可以嵌套使用。數(shù)據(jù)查詢是SQL語言中使用最頻繁的功能,本章將重點介紹這條命令。3.數(shù)據(jù)操縱(DataManipulation)

數(shù)據(jù)操縱語言有INSERT(插入)、DELETE(刪除)、UPDATE(更新)等命令,實現(xiàn)對數(shù)據(jù)的操作。

4.數(shù)據(jù)控制(DataControl)

用于控制用戶對數(shù)據(jù)庫的訪問權(quán)限,由GRANT(授權(quán))、REVOKE(回收)命令組成。VisualFoxPro沒有權(quán)限管理,因此也就沒有相關(guān)的功能。缺乏必要的保護,誰都可以瀏覽和修改,但另一方面,使用起來十分方便。7.1.2SQL語言的主要特點1.SQL是非過程化語言2.SQL是綜合通用的語言3.SQL是簡潔易用的結(jié)構(gòu)化語言4.面向集合的操作方式5.兩種使用方式7.2

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

數(shù)據(jù)定義語言由CREATE(創(chuàng)建)、ALTER(修改)、DROP(刪除)三個命令組成,可以完成數(shù)據(jù)庫對象的創(chuàng)建、修改和刪除。數(shù)據(jù)查詢是數(shù)據(jù)庫最重要、使用最頻繁的操作。SQL的數(shù)據(jù)查詢只有一條SELECT語句,但是該語句卻是用途最廣泛的一條語句,具有靈活的使用方法和豐富的功能。

SELECT命令由若干個子句構(gòu)成,其強大的功能正是通過豐富的子句提供的,要掌握SELECT命令,就必須了解和掌握它的各個子句的功能和用法。最基本的SELECT命令格式為:

SELECT<輸出列列表> FROM<數(shù)據(jù)源列表>常用子句有: 條件子句:WHERE……

排序子句ORDERBY……

分組子句GROUPBY……

輸出去向子句TO/INTO……7.2.1無條件的簡單查詢

一般地,將只查找一個表就可以得到答案的查詢稱為簡單查詢。按是否指定記錄篩選條件,簡單查詢又可以分為無條件查詢和條件查詢兩種。本節(jié)介紹無條件的簡單查詢。1.無投影的無條件簡單查詢

對于無條件的簡單查詢,當不進行字段投影操作時,其基本格式如下:【命令】SELECT*FROM<表>【功能】從一個基本表或視圖中選取所有字段的所有記錄?!菊f明】“*”號是通配符,代表所有的字段。2.投影查詢

對指定基本表的字段進行投影操作,查詢指定字段的數(shù)據(jù)。格式如下:【命令】SELECT[<別名>.]<列表達式>[,[<別名.>]<列表達式>…]; FROM<表名>【功能】實現(xiàn)簡單投影查詢。從一個基本表或視圖中選取指定列的元組?!菊f明】[<別名>.]<列表達式>:SELECT命令查詢的列數(shù)據(jù)。<表名>列出從中檢索數(shù)據(jù)的表3.輸出結(jié)果的排序

若要指定查詢的結(jié)果中記錄按照一個或多個列的值排序,應(yīng)使用ORDERBY子句

【命令】SELECT<輸出列列表>; FROM<表名>; ORDERBY<列名>[ASC/DESC][,<列名; >[ASC/DESC]…]] 【功能】簡單投影查詢。結(jié)果按ORDERBY子句指定 的列排序。

【說明】(1)<列名>[ASC/DESC],按指定列名排序,選項ASC為升序(這是默認值,可以不寫),選項DESC為降序。(2)當排序依據(jù)指定多個列時,首先按第一列排序,第一列的值相同時,再按第二列的值排序,若第一、第二列的值都相同時,再按第三列排序,……,以此類推。4.篩選前若干條記錄

當SELECT命令中使用了排序子句ORDERBY以后,可以用關(guān)鍵字TOP<表達式>[PERCENT]指定顯示結(jié)果集中前若干記錄。

【命令】SELECT[TOP<表達式>[PERCENT]]; <輸出列列表>FROM<表名>; ORDERBY<排序子句> 【功能】指定在查詢結(jié)果中,只選取前面指定個數(shù)或指定百分比的記錄數(shù)。

【說明】(1)必須有ORDERBY子句。(2)不帶[PERCENT]關(guān)鍵字,顯示前<表達式>條記錄,帶[PERCENT]關(guān)鍵字,顯示前<表達式>%的記錄。5.設(shè)置顯示列標題

查詢結(jié)果列可以是字段,可以是表達式,可以指定各列的顯示標題。

【命令】SELECT<列表達式>[AS<標題>]; [,<列表達式>[AS<標題>],…]; FROM<表名> 【功能】重新指定在查詢結(jié)果中各列的顯示標題。

【說明】AS<標題>指定結(jié)果集輸出時的列標題,可以與字段名不同,當<列表達式>是一個表達式或函數(shù)時,可以用AS子句給該列起一個有意義的名字。6.取消重復記錄

當查詢結(jié)果中存在大量重復記錄時,為了得到正確的結(jié)果,應(yīng)使用DISTINCT關(guān)鍵字,消除重復記錄。

【命令】SELECTDISTINCT<輸出列列表>; FROM<表名> 【功能】去除結(jié)果列中完全相同的記錄。

【例6】從教師授課表中提取開設(shè)的課程的課程號。

SELECTDISTINCT教師授課.課程號; FROM教師授課7.2.2條件查詢

對條件查詢,SELECT命令可以分解為三個部分:查找什么數(shù)據(jù),從哪里查找。應(yīng)滿足什么條件。其基本格式如下:

【命令】SELECT<輸出列列表>; FROM<表>; WHERE<條件表達式>[AND|OR; <條件表達式>……] 【功能】實現(xiàn)簡單查詢。從一個基本表或視圖中選取滿足條件的指定列的記錄。

【說明】條件表達式的構(gòu)成可以是:關(guān)系表達式、邏輯表達式;在條件表達式中,還可以使用基于集合的謂詞IN、BETWEEN……AND、ANY、ALL、EXISTS、LIKE等進行復雜的條件篩選。 下面分別進行詳細介紹。 1.單條件-關(guān)系表達式

條件表達式可以使用的比較運算符是:

>(大于)、>=(大于等于)、=(等于)、==(精確等于)、<>、#、!=(不等于)、<(小于)、<=(小于等于)

【例7】查詢84年1月1日以后出生的學生的基本情況: SELECT學生注冊.學號,學生注冊.姓名,;

學生注冊.性別,學生注冊.出生年月; FROM學生注冊; WHERE學生注冊.出生年月>={^1984-01-01}2.復合條件

當篩選條件或者是對單個條件求反,或者是多個條件的組合時,應(yīng)使用邏輯表達式。 可以使用的邏輯運算符是:

AND(且)OR(或)NOT、!(非)

3.判斷范圍:BETWEEN…AND

【格式】SELECT<輸出列子句>; FROM<表>; WHERE<列>BETWEEN<范圍初值>; AND<范圍終值> 【功能】指定列的值落在<范圍初值>與<范圍終值>之間的那些記錄進入結(jié)果集。 此處的BETWEEN……AND語句,等價于如下邏輯表達式: 列值>=<范圍初值>AND列值<=<范圍終值>4.集合判斷:IN、ANY,ALL,EXISTS

其中,ANY,ALL,EXISTS用于嵌套查詢中判斷子查詢的結(jié)果集,具體格式和用法將在嵌套查詢一節(jié)講述。 使用IN的WHERE子句的格式如下:

【格式】SELECT<輸出列子句>; FROM<表>; WHERE<列>IN(<值1>,<值2>,……) 【功能】指定列的值落在指定集合(<值1>,<值2>,……)中的那些記錄進入結(jié)果集。5.判斷匹配:LIKE——模糊查詢

LIKE關(guān)鍵字用于查詢與指定值相匹配的字符型記錄,查詢中可以使用通配符進行部分匹配查詢,因此,LIKE往往用于模糊查詢。

【格式】SELECT<輸出列列表>; FROM<表>; WHERE<字符型列>LIKE<字符串常量> 【功能】指定字符型列的值與<字符串常量>匹配的那些記錄進入結(jié)果集

【說明】字符串常量中可以使用兩種通配符:

%:表示任意知長度的字符串,類似于DOS命令中的“*”號;

_:表示任意一個字符,類似于DOS命令中的“?”號,但又有所不同。DOS命令中的“?”嚴格地只匹配一個西文字符,必須用兩個問號:“??”來表示一個中文漢字,而在此處,“_”可表示任意一個西文字符,當用于表示中文漢字時,情況因具體系統(tǒng)而異。在有的DBMS系統(tǒng)中,表示一個漢字需要兩個下劃線,而另一些系統(tǒng)則只需一個下劃線。

VisualFoxPro6.0中,表示一個漢字只用了一個下劃線。7.2.3計算查詢

SQL語言提供了若干用于統(tǒng)計匯總及計算的函數(shù),這些函數(shù)用在SELECT語句中,對查詢結(jié)果進行各種數(shù)值計算,增強了檢索的功能。主要函數(shù)如下:SQL數(shù)值函數(shù)及其功能函數(shù)名稱功能AVG按列計算字段值的平均值SUM按列計算字段值的總和COUNT按列統(tǒng)計記錄個數(shù)MAX求一列中的最大值MIN求一列中的最小值7.2.4分組與統(tǒng)計查詢

在SELECT命令中,GROUPBY子句可以實現(xiàn)分組功能,即按指定列的值進行分組,列值相等的記錄為一組,同時,GROUPBY子句可以與任何數(shù)值計算函數(shù)(求和、求平均、統(tǒng)計等)一起使用,從而實現(xiàn)遠比TOTALON命令強大的功能。

【格式】SELECT<輸出列列表>; FROM<表>; GROUPBY<列名>[,<列名>…]; [HAVING<篩選條件>]

【功能】GROUPBY<列名>[,<列名>…]把查詢結(jié)果中的記錄按一個或多個列的值分組;[HAVING<篩選條件>]用于指定對各個分組再次篩選,并將滿足條件的分組送入結(jié)果集。

【說明】HAVING必須與GROUPBY一起使用。1.分組統(tǒng)計

【例】統(tǒng)計各位教師的教師號及其任課的門數(shù)。

SELECT教師授課.教師號,COUNT(*)AS任課門數(shù); FROM教師授課; GROUPBY教師授課.教師號 說明:GROUPBY子句按教師號的值分組,所有具有相同教師號的元組為一組(對應(yīng)一位教師),對每一組(每位教師)使用函數(shù)COUNT(*)進行計算,此時的COUNT(*)函數(shù)分別對每一組分別進行,從而統(tǒng)計出各位教師任課的門數(shù)。

【例16】計算每門課程的平均分。

SELECT成績.課程號,AVG(成績.成績)AS平均分; FROM成績; GROUPBY成績.課程號 說明:本例中,GROUPBY子句按課程號的值分組,所有具有相同課程號的元組為一組(對應(yīng)每一門課),對每一組(每門課)使用函數(shù)AVG()函數(shù)進行計算,此時的AVG()函數(shù)同樣只對每一組分別進行,從而計算出每門課的平均成績。2.分組篩選

若在分組后還要按照一定的條件對分組進行篩選,只把滿足條件的分組送入結(jié)果集,則需使用HAVING子句。3.WHERE子句與HAVING子句的區(qū)別

當在一個SQL查詢中同時使用WHERE子句,GROUPBY子句和HAVING子句時,其順序是WHERE,GROUPBY,HAVING。

WHERE與HAVING子句的根本區(qū)別在于作用對象不同。

WHERE作用對象:對基本表或視圖中記錄進行篩選;

HAVING作用對象:GROUPBY子句指定的分組,在分組中篩選。HAVING子句必須在GROUPBY子句之后。

7.2.5連接查詢

當一個查詢同時涉及多個表,也就是需要從多個表中查詢相關(guān)數(shù)據(jù)時,需要使用連接查詢,連接接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢。 連接查詢實際上是通過各個表之間共同屬性列的連接,將多個相關(guān)表連接起來,從而從多個表中查詢相關(guān)數(shù)據(jù)。

SQL可以通過兩種方法實現(xiàn)表的連接查詢: 方法1:使用條件子句WHERE建立連接; 方法2:使用連接關(guān)鍵字JOIN進行連接。1.使用WHERE建立連接

【格式】SELECT<輸出列列表>; FROM[數(shù)據(jù)庫!]<表1>,<表2>[……];; WHERE<連接條件>[AND<篩選條件>] 【功能】多表連接查詢。

【說明】

(1)FROM子句中指明進行連接的表名,多個表之間用逗號分隔。 (2)WHERE子句指明連接的列名及其連接條件,如果還有對記錄的篩選條件。則連接條件與篩選條件之間必須用AND相連。2.使用連接關(guān)鍵字JOIN建立連接

WHERE子句雖然能夠?qū)崿F(xiàn)連接查詢,但有其局限性。為了解決這類問題,可以使用SQL的專用連接關(guān)鍵字JOIN來建立連接。

【格式】SELECT<輸出列列表>; FROM[<數(shù)據(jù)庫名!>]<表名>; INNER/LEFT/RIGHT/FULLJOIN[<數(shù)據(jù)庫名!>];

<表名>; ON<連接條件>… 【功能】進行多表連接查詢。

【說明】

(1)[<數(shù)據(jù)庫名!>]<表名>用于指定非當前數(shù)據(jù)庫的表,注意數(shù)據(jù)庫名稱后的“!”,它代表從屬關(guān)系。 (2)JOIN連接具體分為以下幾種:

INNERJOIN:內(nèi)連接,只包含滿足連接條件的記錄,換言之,必須是兩個表中都有的關(guān)鍵字值,其記錄才會進入結(jié)果集,此為默認值;其功能類似于WHERE連接。

LEFT[OUTER]JOIN:左(外)連接,包含左表中全部和右表中與之匹配的記錄,左表中不滿足條件的那一部分記錄對應(yīng)部分為NULL。

RIGHT[OUTER]JOIN:右(外)連接,包含右表中全部和左表中與之匹配的記錄,右表中不滿足條件的那一部分記錄對應(yīng)部分為NULL。

FULL[OUTER]JOIN:全連接,兩側(cè)表中不管是否滿足連接條件都全部進入結(jié)果集,此時不滿足連接條件而缺乏數(shù)據(jù)的記錄對應(yīng)部分為NULL; 連接類型在FROM子句中指定,連接條件用ON選項指定,[OUTER]可以省略。3.特殊的連接查詢——自連接

有時,一些特殊的應(yīng)用需要一個表與其自已進行連接操作,這種情況稱為表的自連接。此時,可以用AS子句,將同一個表指定為兩個不同的別名,于是一個表在邏輯上變成了兩個表,這個問題就轉(zhuǎn)化成了普通的兩表連接問題。表的自連接主要用于同一個表中數(shù)據(jù)的比較。

7.2.6嵌套查詢 嵌套查詢就是SQLSELECT語句的WHERE子句中包含SQLSELECT語句,嵌套查詢時,查詢結(jié)果只能來自一個表,但查詢條件往往來自多個表。 此時,稱外層SELECT語句為父查詢,內(nèi)部嵌套SELECT語句為子查詢。 嵌套查詢可以將一系列簡單查詢構(gòu)成復雜查詢,增強查詢能力。子查詢的嵌套層次最多可達到255層,以層層嵌套的方式構(gòu)造查詢充分體現(xiàn)了SQL“結(jié)構(gòu)化”的特點。嵌套查詢在執(zhí)行時由里向外處理,即先執(zhí)行子查詢再執(zhí)行父查詢,父查詢要用到子查詢的結(jié)果。1.返回一個值的子查詢

當子查詢的返回值只有一個時,可以使用比較運算符(=,>,<,>=,<=,!=)將父查詢和子查詢連接起來。2.返回一組值的子查詢

如果子查詢的返回值不止一個,而是一個集合時,則不能直接使用比較運算符,可以在比較運算符和子查詢之間插入用于集合判斷的謂詞IN、ANY、ALL、EXISTS。7.2.7查詢結(jié)果輸出

【格式】SELECT<輸出列列表>; FROM<數(shù)據(jù)源列表> [INTO<新表名>|CURSOR; <臨時表名>|ARRAY<數(shù)組名>]; /[TOFILE<文件名>/TOPRINTER/; TOSCREEN] 【功能】指定查詢結(jié)果的去向,可以是數(shù)據(jù)表、系統(tǒng)臨時表、數(shù)組、文本文件、打印機或屏幕。

【說明】使用INTO子句,可以將查詢結(jié)果重定輸出方向。輸出到一個新建的數(shù)據(jù)表或一個臨時表。否則,默認為窗口瀏覽。

INTOTABLE<表名>:表示輸出到磁盤數(shù)據(jù)表文件;

INTOCURSOR<系統(tǒng)臨時表名>:表示輸出到系統(tǒng)臨時表,臨時表存儲在內(nèi)存中,退出VisualFoxPro系統(tǒng)時自動消失;當使用此項時,在最小號可用工作區(qū)中將打開臨時表,同時屏幕上不會出現(xiàn)瀏覽窗口。

INTOARRAY<數(shù)組名>:輸出到一個數(shù)組,該數(shù)組的維數(shù)及數(shù)組元素個數(shù)自動由SELECT命令結(jié)果集的行列數(shù)決定。

TOFILE<文件名>:將查詢結(jié)果輸出到文本文件;

TOPRINT:將查詢結(jié)果輸出打印機;

TOSCREEN:將查詢結(jié)果輸出VisualFoxPro主窗口。7.2.8SELECT命令的完整格式

最后,給出SELECT命令的完整格式。

SELECT語句的一般格式為:

【命令】SELECT[ALL/DISTINCT] [TOP<表達式>[PERCENT]] [<別名>.]<列表達式>[AS<欄名>][,[<別名.>]<列表達式>[AS<欄名>]…] FROM[<數(shù)據(jù)庫名!>]<表名>[,[<數(shù)據(jù)庫名!>]<表名>…]

[INNER/LEFT/RIGHT/FULLJOIN[<數(shù)據(jù)庫名!>]<表名> [ON<連接條件>…]] [[INTO<新表名>|CURSOR<臨時表名>|ARRAY<數(shù)組名>] /[TOFILE<文件名>/TOPRINTER/TOSCREEN]] [WHERE<連接條件>[AND<連接條件>…] [AND/OR<篩選條件>[AND/OR<篩選條件>…]]] [GROUPBY<列名>[,<列名>…]][HAVING<篩選條件>] [ORDERBY<列名>[ASC/DESC][,<列名> [ASC/DESC]…]];

【功能】實現(xiàn)數(shù)據(jù)查詢。從一個或多個基本表或視圖中選取滿足條件的元組。

【說明】SELECT命令可以對關(guān)閉的表,也可以對打開的表進行操作,當操作的表當前未打開時,該表將會被打開,且SELECT命令執(zhí)行完畢后,也不會自動關(guān)閉。 下面是SELECT命令各參數(shù)、子句的功能描述。1.SELECT參數(shù)及其選項

(1)[ALL/DISTINCT]:ALL表示從所有元組中查詢,DISTINCT則表示選出的記錄中要刪除掉重復的記錄。 (2)TOP<表達式>[PERCENT]:指定在查詢結(jié)果中,只選取前面指定個數(shù)或指定百分比的記錄數(shù)。TOP子句必須與排序子句ORDERBY同時使用。ORDERBY子句指定按哪個字段排序,TOP子句根據(jù)此排序選定開始的<表達式>個或<表達式>%的記錄。 (3)[<別名>.]<列表達式>[AS<欄名>]:<列表達式>可以是字段名,也可以是表達式,還可以是系統(tǒng)函數(shù)以及用戶自定義函數(shù),這就是SELECT命令查詢的列數(shù)據(jù)。AS<欄名>指定結(jié)果集輸出時的列標題,可以與字段名不同,當<列表達式>是一個表達式或函數(shù)時,可以用AS子句給該列起一個有意義的名字。2.FROM參數(shù)及其選項

用于指定查詢的表與連接類型。其中: (1)[<數(shù)據(jù)庫名!>]<表名>:<表名>列出所有從中檢索數(shù)據(jù)的表,非當前數(shù)據(jù)庫表用<數(shù)據(jù)庫名!><表名>指定。數(shù)據(jù)庫名稱后的“!”代表從屬關(guān)系。 (2)INNER/LEFT/RIGHT/FULLJOIN[<數(shù)據(jù)庫名!>]<表名>[ON<連接條件>…]:指定多表查詢時,多個表之間的連接條件及連接關(guān)鍵字。 INNER/LEFT/RIGHT/FULLJOIN及ON關(guān)鍵字的意義及用法見連接查詢一節(jié)的說明。3.查詢?nèi)ハ蜃泳?/p>

[INTO<新表名>|CURSOR<臨時表名>|ARRAY<數(shù)組名>] /[TOFILE<文件名>/TOPRINTER/TOSCREEN]:指定查詢結(jié)果的去向,可以是數(shù)據(jù)表、系統(tǒng)臨時表、數(shù)組、文本文件、打印機或屏幕。

4.條件子句

WHERE<連接條件>[AND<連接條件>…][AND/OR<篩選條件>[AND/OR<篩選條件>…]]:其中,WHERE<篩選條件>指定在查詢結(jié)果中的記錄必須滿足的條件。在多表查詢時,WHERE<連接條件>用于指定數(shù)據(jù)表之間聯(lián)結(jié)的條件。5.分組子句

GROUPBY<列名>[,<列名>…][HAVING<篩選條件>]:其中,GROUPBY<列名>[,<列名>…]把查詢結(jié)果中的記錄按一個或多個列的值分組;[HAVING<篩選條件>]用于指定對各個分組再次篩選,并將滿足條件的分組送入結(jié)果集。HAVING必須與GROUPBY一起使用。

6.排序子句

ORDERBY<列名/數(shù)字序號>[ASC/DESC][,<列名/數(shù)字序號>[ASC/DESC]…]:用于指定查詢結(jié)果中的記錄排序輸出,當按<列名>排序時,以一個或多個字段數(shù)據(jù)作為排序依據(jù);當按<數(shù)字序號>排序時,以結(jié)果集中該序號指定的列位置的數(shù)據(jù)作為排序的基準,選項ASC表示升序;DESC表示降序,默認為升序。

7.3

SQL數(shù)據(jù)定義功能

SQL語言使用數(shù)據(jù)定義語言(DateDefinitionLanguage,簡稱DDL)實現(xiàn)其數(shù)據(jù)定義功能,數(shù)據(jù)定義語言由CREATE(創(chuàng)建)、ALTER(修改)、DROP(刪除)三個命令組成,可以完成數(shù)據(jù)庫對象的創(chuàng)建、修改和刪除。每個數(shù)據(jù)庫對象分別對應(yīng)這三條命令。在VisualFoxPro中,數(shù)據(jù)庫對象有數(shù)據(jù)庫容器、數(shù)據(jù)庫、表、視圖、連接、索引、關(guān)系等對象,則對應(yīng)每個對象有3個相應(yīng)的命令。 例如,對表的操作有如下三條:

CREATETABLE:創(chuàng)建數(shù)據(jù)表;

ALTERTABLE:修改數(shù)據(jù)表;

DROPTABLE:刪除數(shù)據(jù)表; 下面分別予以介紹。

7.3.1定義數(shù)據(jù)表 數(shù)據(jù)表是關(guān)系數(shù)據(jù)庫的基本組成單位,它以文件形式物理地存儲于磁盤中。 使用SQL語言的CREATETABLE命令可以創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)?!久睢?CREATETABLE<表名>[FREE] (<列名1>類型[(寬度[,小數(shù)位])

[NULL|NOTNULL][CHECK<邏輯表達式1>[ERROR<提示字符串>]][DEFAULT<值表達式1>] [PRIMARYKEY|UNIQUE] [,<列名2>……] [,F(xiàn)OREIGNKEY<外關(guān)鍵字段名>TAG<外關(guān)鍵字索引標識名> REFERENCES<外關(guān)鍵字所在表名>])

【功能】創(chuàng)建數(shù)據(jù)表。

【說明】

(1)<表名>是合法標識符,最多128個字符,可以帶盤符、路徑、文件名,不允許重名; (2)FREE選項指定新建表不加入當前數(shù)據(jù)庫,若當前沒有打開的數(shù)據(jù)庫,該選項無效; 以下3)到7)屬于列約束: (3)NULL|NOTNULL指明該字段允許或不允許為空值; (4)CHECK……ERROR用于控制域完整性,ERROR可給出錯誤信息; (5)DEFAULT定義默認值; (6)PRIMARYKEY定義主關(guān)鍵字,創(chuàng)建主索引; (7)UNIQUE定義候選關(guān)鍵字,創(chuàng)建候選索引; 最后是表約束: (8)FOREIGNKEY與REFERENCES子句用于建立表之間的參照關(guān)系。7.3.2修改數(shù)據(jù)表

SQL語言使用ALTERTABLE命令來修改表的結(jié)構(gòu)。要求該表必須以獨占方式打開。1.添加字段

【命令】ALTERTABLE<表名> [ADD<新列名>類型[(寬度[,小數(shù)位]); [NULL|NOTNULL]; [CHECK<邏輯表達式1>[ERROR<提示字符串>]]; [DEFAULT<值表達式1>]; [PRIMARYKEY|UNIQUE] 【功能】在表中新增列。

2.修改表中字段屬性

【命令】ALTERTABLE<表名> [ALTER<列名>類型[(寬度[,小數(shù)位])

[NULL|NOTNULL] [SETCHECK<邏輯表達式1>[ERROR<提示字符串>]] [SETDEFAULT<值表達式1>] [DROPCHECK] [DROPDEFAULT] 【功能】修改表中列的定義。

【說明】SETCHECK、SETDEFAULT的功能參見7.3.1相關(guān)解釋;DROPCHECK、DROPDEFAULT分別用于刪除域完整性檢查和刪除默認值。

3.刪除數(shù)據(jù)表

當某個數(shù)據(jù)表無用時,可將其刪除。刪除后,該表中的數(shù)據(jù)和在此表上所建的索引都被刪除。

【命令】DROPTABLE<表名> 【功能】從磁盤上物理刪除<表名>對應(yīng)的數(shù)據(jù)表文件。7.4

SQL的數(shù)據(jù)更新功能

SQL語言的數(shù)據(jù)操縱也稱為數(shù)據(jù)更新,通過INSERT(插入)、DELETE(刪除)、UPDATE(更新)三種命令,實現(xiàn)對數(shù)據(jù)的操作7.4.1插入數(shù)據(jù)記錄INSERT_SQL

插入數(shù)據(jù)是把新的記錄插入到一個存在的表中。插入數(shù)據(jù)使用語句INSERTINTO,可插入一條記錄,也可插入多條記錄。

【命令】INSERTINTO<表名> [(<列名1>[,<列名2>…])] VALUES(<值1>[,<值2>…])

【功能】在指定的表中插入一條新記錄,并分別用值1、值2等為列1、列2等賦值。

【說明】列名的排列順序不一定要和表定義時的順序一致。但當指定列名時,VALUES子句值的排列順序必須和指定列名的排列順序一致,個數(shù)相等,數(shù)據(jù)類型一一對應(yīng)。INTO語句中沒有出現(xiàn)的列名,新記錄在這些列上將取空值。7.4.2修改數(shù)據(jù)記錄UPDATE_SQL

SQL語言可以使用UPDATE語句對表中的一行或多行記錄的某些列值進行修改。

【命令】UPDATE<表名> SET<列名>=<表達式>[,<列名>=<表達式>]… [WHERE<刪除條件>] 【功能】對表中的一行或多行記錄的某些列值進行修改。

【說明】<表名>是指要修改的表;SET子句給出要修改的列及其修改后的值;WHERE子句指定待修改的記錄應(yīng)當滿足的條件,WHERE子句省略時,則修改表中的所有記錄。

7.4.3刪除數(shù)據(jù)記錄DELETE_SQL 使用DELETE語句可以刪除表中的一行或多行記錄。

【命令】DELETEFROM<表名> [WHERE<條件>] 【功能】刪除表中的一行或多行記錄。

【說明】<表名>指定要刪除數(shù)據(jù)的表。WHERE子句指定待刪除的記錄應(yīng)當滿足的條件,WHERE子句省略時,則刪除表中的所有記錄。

7.5

用查詢設(shè)計器建立查詢

除了使用SELECT-SQL語言進行數(shù)據(jù)查詢外,VFP還提供了更直觀的數(shù)據(jù)查詢工具——查詢設(shè)計器。查詢設(shè)計器產(chǎn)生的查詢結(jié)果除了當場可以瀏覽外,還可以有多種輸出方式。特別適用于初學者。7.5.1查詢設(shè)計器界面

可以使用菜單方式或命令方式進入查詢設(shè)計器。 菜單方式:“文件”菜單→“新建”項→“新建”對話框→選擇查詢文件類型;

【命令】CREATEQUERY[<查詢文件名>] 【功能】新建查詢,并打開查詢設(shè)計器。

查詢設(shè)計器如下圖所示。

在設(shè)計器的上部顯示的是在查詢中用到的數(shù)據(jù)表。在設(shè)計器的下部,有6個選項卡,可以分別對查詢的字段、連接、篩選、排序依據(jù)、分組依據(jù)、雜項進行設(shè)置。打開查詢設(shè)計器后,系統(tǒng)菜單中將添加一個“查詢”菜單項,顯示查詢工具欄,同時“顯示”菜單的選項有所改變。1.上部窗格

上部窗格顯示已打開的表,如果數(shù)據(jù)表間存在關(guān)聯(lián)關(guān)系,將顯示關(guān)聯(lián)的直線。 (1)添加表或視圖 將表添加入上部窗格的方法是: .選定“查詢”菜單中的“添加表”命令; .選定“查詢設(shè)計器工具欄”上的“添加表”按鈕; .在查詢設(shè)計器界面中單擊右鍵,在右鍵快捷菜單中選擇“添加表”。 將出現(xiàn)添加表或視圖對話框,即可在對話框中選定表或數(shù)據(jù)庫中的視圖。 (1)添加表或視圖 將表添加入上部窗格的方法是: .選定“查詢”菜單中的“添加表”命令; .選定“查詢設(shè)計器工具欄”上的“添加表”按鈕; .在查詢設(shè)計器界面中單擊右鍵,在右鍵快捷菜單中選擇“添加表”。 將出現(xiàn)添加表或視圖對話框,即可在對話框中選定表或數(shù)據(jù)庫中的視圖。 (2)表間關(guān)系 當窗格中已有表,添加新表時,如果該兩表之間已存在數(shù)據(jù)庫中的永久關(guān)系,此時在表之間有直線相連,表示表之間已建立好聯(lián)系,可以在下面介紹的“連接”選項卡中看到表間連接的條件。 如果表之間事先沒有建立連接,將會出現(xiàn)“連接條件”對話框,如下圖所示。 可以在此指定兩個表的連接類型以及等值連接的關(guān)聯(lián)關(guān)鍵字,具體參見下面關(guān)于“連接”選項卡的介紹,也可以直接選擇取消,然后,稍后在“連接”選項卡中設(shè)置。 另一種方法是,用鼠標拖動的方法直接在表間建立連接。例如:A表與B表具有相同的關(guān)聯(lián)關(guān)鍵字ZH,要建立兩者聯(lián)系,只需在上部窗格中,鼠標左鍵拖動A表的ZH字段到B表的ZH字段,即可建立兩表間以ZH為關(guān)聯(lián)關(guān)鍵字的內(nèi)連接(INNERJOIN)。從B表拖動

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論