|
導(dǎo)讀數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應(yīng)... 數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。 SQL功能與特性 其實(shí),在前面的文章中,已經(jīng)提及SQL命令的一些基本功能,然而,通過SQL命令,程序設(shè)計師或數(shù)據(jù)庫管理員(DBA)可以: (一)建立數(shù)據(jù)庫的表格。(包括設(shè)置表格所可以使用之空間) (二)改變數(shù)據(jù)庫系統(tǒng)環(huán)境設(shè)置。 (三)針對某個數(shù)據(jù)庫或表格,授予用戶存取權(quán)限。 (四)對數(shù)據(jù)庫表格建立索引值。 (五)修改數(shù)據(jù)庫表格結(jié)構(gòu)。(新建、刪除或是修改表格字段) (六)對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的新建。 (七)對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的刪除。 (八)對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的修改。 (九)對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的查詢。 這幾項(xiàng)便是通過SQL命令可以完成的事情,看起來是不是比起“查詢”兩個字所代表的功能要多的多了呢? SQL語法的分類 其實(shí)SQL命令并不是非常多,可是要把SQL用到出神入化,卻也只需要短短幾個命令便夠,因?yàn)镾QL命令是針對關(guān)系型數(shù)據(jù)庫所建立出來的語法敘述,所以SQL在這類數(shù)據(jù)庫中所發(fā)揮的功能非常的強(qiáng),以下將針對在VB中常用的SQL語法基本命令加以分類介紹。在說明SQL的命令以及使用語法之前,以下將SQL做了的分類,在致上SQL語法所使用到的類型,可以說都已包含在這些類別當(dāng)中。 第一類、屬性詞(Predicates) 在SQL命令中用來指明所要選擇的記錄的方式。如ALL、TOP與DISTINCT等等。 第二類、聲明(Declaration) 針對SQL Parameter或Parameter Query 的名稱與數(shù)據(jù)類型做聲明,如PARAMETERS的聲明等等。 第三類、條件子句(Clause) 在SQL的查詢中,利用一些表達(dá)式定義出查詢的條件,以縮小尋找的范圍,如WHERE。 第四類、運(yùn)算符(Operator)與操作數(shù)(Operation) 在SQL的查詢中,與Operation共同組成表達(dá)式(Expression),如BETWEEN....AND 運(yùn)算符與INNER JOIN操作數(shù)。 第五類、函數(shù)(Function) 一些SQL常見的函數(shù),像是AVG()是求算數(shù)平均數(shù)的函數(shù)。 第六類、SQL語句(Statement) SQL的語句,可以說是SQL語法的主體,用來對某一個特定的數(shù)據(jù)庫發(fā)出指示,并返回相關(guān)的數(shù)據(jù),而SQL的語法結(jié)構(gòu),基本上可以利用下面 的式子來表示:命令+條件子句 例如: SELECT*FROM TAB WHERE TAB.NAME=’A’ 其中的“FROM....WHERE”便是一個條件子句,其實(shí)SQL的語法并不難,您只需記住這樣的一個規(guī)則,相信可以很快的了解SQL用法。 SQL語法與命令 SELECT 語句 SELECT[predicate]{*|table.*|[table.]field [,[table.]field2[,...]]} [AS alias1 [,alias2[,...]]] FROM tableexpression [,...][IN externaldatabase] [WHERE...] [GROUP BY...] [HAVING...] [ORDER BY...] [WITH OWNERACCESS OPTION] SELECT 語句包括下面幾個部分 predicate 如前面所述,包括了ALL,DISTINCT,DISTINCTROW,與TOP 我們可以利用這樣的語句去限制查詢后所得的結(jié)果。 * 從指定表格中指定所有的字段。 table 針對被選擇出的記錄的字段,所指定表格的名稱。 field1,field2 想要讀取數(shù)據(jù)的字段名稱,如果包含了一個以上的字段,會依照列出的順序來讀取數(shù)據(jù)。 alias1,alias2 用來替代在表格實(shí)際字段名稱的化名。 tableexpression 表格名稱或包含我們所想要的數(shù)據(jù)的表格。 externaldatabase 若使用到不是目前的數(shù)據(jù)庫則將其名字定義在externaldatabase當(dāng)中。 ALL,DISTINCT,DISTINCTROW,TOP屬性詞用法 SELECT [ALL|DISTINCT|DISTINCTROW|[TOP n[PERCENT]]] FROM table ALL 若是您不指定任何的字段數(shù)據(jù),則Microsoft Jet數(shù)據(jù)庫引擎(database engine)將會選擇所有的字段,并依據(jù)所定的條件查詢出需求數(shù)據(jù)集。 [page_break]例如下面這兩個例子將會具有相同的效果,都會從職員表格中返回所有字段的數(shù)據(jù)。 例如: 若是我們要查詢出職員表格中的所有記錄,可以通過下面的語句來完成。 SELECT ALL* FROM 職員表格; DISTINCT 對某個表格所選擇的字段數(shù)據(jù),略過重復(fù)的情況,也就是說,針對某個字段查詢出來的記錄結(jié)果是唯一的。例如有許多存放在職員表格的職員 數(shù)據(jù),也許會具有相同的姓名,所以若是我們用SQL語句中的SELECT DISTINCT,則查詢出來的結(jié)果將會針對不一樣的姓名加以篩選。若是您把 DISTINCT 加以省略,則這樣的查詢會顯示所有的記錄。 DISTINCTROW 將整條記錄重復(fù)的記錄忽略掉,而不是只有針對某一個字段的數(shù)據(jù)。 table 指定查詢記錄所需要的表格。 例如: SELECT DISTINCTROW 公司名稱 FROM 顧客表格 INNER JOIN 訂單表格 ON 顧客表格.顧客ID=訂單表格.顧客ID ORDER BY 公司名稱; 如果您忽略 DISTINCTROW 則會對每個公司產(chǎn)生一行以下的訂單數(shù)據(jù)。此外,若是DISTINCTROW只有用在一個表格當(dāng)中,則會被省略掉。 TOP 從第一條或最后一條開始(利用ORDER BY條件子句),返回特定條數(shù)的數(shù)據(jù)。 例如: 當(dāng)您想要知道在2000年,班上前25名的學(xué)生姓名數(shù)據(jù)時,您可以輸入這樣的語句: SELECT TOP 25 學(xué)生姓名 FORM 學(xué)生表格 WHERE 畢業(yè)年份=1994 ORDER BY 畢業(yè)成績平均分?jǐn)?shù) DESC; 如果您沒有加上ORDER BY 這行條件的話,您所得到的數(shù)據(jù),將會隨機(jī)的數(shù)據(jù)。此外,在TOP語句之后,除了可以加上數(shù)字以外,還可以利用保留 字PERCENT來查詢。 例如: SELECT TOP 10 PERCENT學(xué)生姓名 FROM學(xué)生表格 WHERE畢業(yè)年份=1994 ORDER BY畢業(yè)成績平均DESC; PARAMETERS(參數(shù))聲明的用法 對于參數(shù)型的查詢語法中,對參數(shù)的名稱以及數(shù)據(jù)類型作 聲明的操作。 PARAMETERS name datatype[,name datatype[,...]] name PARAMETERS的名稱。您可以把參數(shù)名稱當(dāng)作字符串來使用,若是名稱中包含了空字符串,可以利用中括號來處理,例如:“VBeden”。 datatype 輸入?yún)?shù)的數(shù)據(jù)類型。 例如: 若是您在查詢時,需要機(jī)動的輸入姓名 ,可以利用下列的方式完成: PARAMETERS “輸入姓名” Text; SELECT* FROM 職員表格 WHERE姓名=“輸入姓名:”; [page_break]ORDER BY條件語句 此條件子句,通常與SELECT語句合并使用目的是將查詢的結(jié)果,依照指定字段加以排序。 SELECT fieldlist FROM table WHERE selectcriteria ORDER BY field[ASC|DESC][,field2[ASC|DESC][,...]] fieldlist 欲查詢的字段名稱。其中可以與ALL,DISTINCT,DISINCTROW,或TOP一起來使用。 table 欲查詢的表格名稱。 selectcriteria 查詢的標(biāo)準(zhǔn)設(shè)置。 field1 指定要依照那個字段作為排序的依據(jù),若是你沒有加上ORDER BY查詢出的數(shù)據(jù)集將不會作排序的操作。 ASC 遞增順序類別。(默認(rèn)值) DESC 遞減順序類別。 例如: 或是我們要將輸出數(shù)據(jù)依據(jù)出生的先后次序排列,可以利用下面的命令。 SELECT 姓名,生日 FROM 職員表格 ORDER BY 生日 SELECT LastName,FirstName FROM Employees ORDER BY LastName ASC; IN 條件子句 指定要速勝哪一個外部數(shù)據(jù)庫的表格。(必須是Microsoft Jet數(shù)據(jù)庫引擎所可以連接的數(shù)據(jù)庫,如dBase,Paradox等等) SELECT|INSERT]INTO destination IN {path|["path" "type"]|[""[type;DATABASE=path]]} FROM tableexpression IN {path|["path" "type"]|[""[type;DATABASE=path]]} destination 欲插入數(shù)據(jù)的外部表格名稱。 tableexpression 表格名稱或是被讀取數(shù)據(jù)的表格名稱。這個參數(shù)可以是一個單一的表格名稱,或是一段已經(jīng)被存儲的SQL查詢等。 path 包含該表格的完整路徑名稱。 type 數(shù)據(jù)庫的類型名稱, 通常是當(dāng)數(shù)據(jù)庫部屬于Jet database時才會使用。(例如:dBASE III,dBASE IV,Paradox 3.x,Paradox 4.x,或 Btrieve) 例如:下面這兩段的意義相同 PartA....FROM Table IN ""[dBASE IV;DATABASE=C:\DBASE\DATA\SALES;]; PartB....FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;" 例如:Microsoft Jet database SELECT 顧客編號 FROM 顧客表格 IN CUSTOMER.MDB WHERE 顧客編號 Like "A*"; 其中CUSTOMER.MDBO 為Jet database 的數(shù)據(jù)庫名稱,其中包含了顧客表格。 例如:dBASE III or IV SELECT 顧客編號 FROM 顧客表格 IN "C:\DBASE\DATA\SALES" "dBASE IV;" WHERE 顧客編號 Like "A*"; 所以當(dāng)我們使用不同于ACCESS 的數(shù)據(jù)庫時,必須指明該數(shù)據(jù)庫的類型名稱。 [page_break]HAVING 條件子句 指定一特定的分組記錄,并滿足HAVING 所指定的條件或狀態(tài),但條件是針對分組的條件設(shè)置。 SELECT fieldlist FROM table WHERE selectcriteria GROUP BY groupfieldlist HAVING groupcriteria fieldlist 顯示被查詢的字段名稱。(可與ALL,DISTINCT,DISTINCTROW,或TOP相結(jié)合) table 欲查詢數(shù)據(jù)的表格名稱。 selectcriteria 選取標(biāo)準(zhǔn)。 groupfieldlist 分組記錄的字段名稱,到多10個字段。而這些字段的順序決定最高到最低的分組階層。 groupcriteria 決定什么樣的分組記錄要被顯示。 HAVING跟WHERE 的用法相當(dāng)類似,不同之處在于HAVING必須用于GROUP之后的分組數(shù)據(jù)上。 例如: SELECT 分類編,Sum(庫存數(shù)量) FROM 產(chǎn)品表格 GROUP BY 分類編號 HAVING Sum(庫存數(shù)量)> 100 AND 產(chǎn)品名稱 LIKE "*紙"; GROUP BY 條件子句 依據(jù)指定的字段,將具有相同數(shù)值的記錄合并成一條。 SELECT fieldlist FROM table WHERE criteria GROUP BY groupfieldlist fieldlist 欲讀取的字段名稱。(可與ALL,DISTINCT,DISTINCTROW,或TOP合并使用) table 被查詢的表格名稱。 groupfieldlist 分組記錄的字段名稱,到多10個字段,而這些字段的順序決定最高到最低的分組層次。 例如: SELECT 姓名,Count(姓名)AS 職員姓名 FROM 職員表格 WHERE 部門名稱=’業(yè)務(wù)部’ GROUP BY 姓名 FROM 條件子句 指定表格名稱或是查詢,其中包含列在SELECT語句的字段數(shù)據(jù)。 SELECT fieldlist FROM tableexpression[IN externaldatabase] fieldlist 表格中的字段名稱。(可與ALL,DISTINCT,DISTINCTROW,或TOP相結(jié)合) tableexpression 表格名稱,或多個表格的算式。 externaldatabase 若該表格參考到外部的數(shù)據(jù)庫時,將其完整的路徑名稱記下。 例如: 從職員表格下,查詢出所有姓名字段的數(shù)據(jù)(只有姓名字段被查詢,其他則不顯示)。 SELECT 姓名 FROM 職員表格; WHERE 條件子句 指定查詢的條件與限制。 SELECT fieldlist FROM tableexpression WHERE criteria fieldlist 字段名稱。(可與ALL,DISTINCT,DISTINCTROW,或TOP相結(jié)合) tableexpression 表格名稱,或多個表格的算式。 criteria 查詢的結(jié)果,必須依照這一限制標(biāo)準(zhǔn)。 例如: 要查詢出職員表格中,所有姓氏是李的數(shù)據(jù),可以用下面的語句。 SELECT 姓名 FROM 職員表格 WHERE 姓氏=’李’; 全新的路由器不僅讓你更穩(wěn)定快速地連接無線網(wǎng)絡(luò),更可以讓家中的智能設(shè)備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!