|
導(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ù)集合。 BETWEEN...AND 運(yùn)算符 決定某一人數(shù)值是否介于特定的范圍之內(nèi),此運(yùn)算符只可以用在SQL的語句中。 expr[Not]BETWEEN value1 AND value2 expr 指定要加以計算的字段與表達(dá)式的組合。 value1,value2 所指明的數(shù)值范圍。 例如: 若是要從職員表格查詢出所有年齡介于25-30歲的員工,可以利用下面的程序來做。 SELECT 姓名,年齡 BETWEEN 25 AND 30 FROM 職員表格; LIKE 操作數(shù) 用來將一字符串與另一特定字符串樣式(pattern)比較,并將符合該字符串樣式的記錄過濾出來。 expression LIKE "pattern" expression 使用在WHERE條件子句,SQL表達(dá)式。 pattern 用以比較的字符串樣式。 例如: 若是你要查詢出所有以“李”為首的姓氏,可以利用下面的式子。 Like "李*" LIKE操作數(shù)的多種范例: 1、多個字符: (1)"a*a" 可篩選:"aa","aBa","aBBBa",不能篩選:"aBC" (2)"*ab*" 可篩選:"abc","AABB","Xab",不能篩選:"aZb","bac" 2、特殊字符: "a“*”a" 可篩選:"a*a",不能篩選:"aaa" 3、單一字符: "a?a" 可篩選:"aaa","a3a","aBa",不能篩選:"aBBBa" 4、單一數(shù)字: "a#a" 可篩選:"a0a","a1a","a2a",不能篩選:"aaa","a10a" 5、字符范圍: "“a-z”" 可篩選:"f","p","j",不能篩選:"2","&" 6、指定字符以外部范圍: "“!a-z”" 7、指定非數(shù)字: "“!0-9”" 可篩選:"A","a","&","~",不能篩選:"0","1","9" 8、組合式結(jié)構(gòu): "a“!b-m”#" 可篩選:"An9","az0","a99",不能篩選:"abc","aj0" SQL數(shù)字函數(shù) 1、AVG:算數(shù)平均數(shù) AVG(expr) expr 字段名稱或表達(dá)式。 例如: 若要計算職員身高超過165厘米的職員平均身高,可以利用下面的SQL語句來完成。 SELECT Avg(身高) AS 平均身高 FROM 職員表格 WHERE 身高> 165; 2、COUNT:計算記錄條數(shù) COUNT(expr) expr 字段名稱或表達(dá)式。 例如: 若是要統(tǒng)計出業(yè)務(wù)部門的職員人數(shù),并查詢出職員的姓名,可以利用下面的程序。 SELECT Count(姓名) AS 職員姓名 FROM 職員表格 WHERE 部門名稱=’業(yè)務(wù)部’; 3、FIRST與LAST:返回某字段的第一條數(shù)據(jù)與最后一條數(shù)據(jù)。 FIRST(expr) LAST(expr) expr 字段名稱或表達(dá)式。 例如: 若是要找出貨品數(shù)量字段的第一條數(shù)據(jù)與貨品價格字段的最后一條數(shù)據(jù)時,可以利用下面的查詢方式。 SELECT FIRST(貨品數(shù)量),LAST(貨品價格) FROM 訂單表格 4、MAX,與MIN:返回某字段的最大值與最小值。 用法同F(xiàn)IRST與LAST。 5、SUM:返回某特定字段或是運(yùn)算的總和數(shù)值。 SUM(expr) expr 字段名稱或表達(dá)式。 例如: 要計算出貨品總價,可使用下面的程序。 SELECT Sum(單位價格*貨品數(shù)量) AS 貨品總價 FROM 訂單表格 多層SQL查詢 顧名思義,多層的SQL查詢的便在于:“在一個SQL語句中可以包含另一個SQL查詢語句,形成內(nèi)部嵌套的查詢類型! comparison[ANY|ALL|SOME](sqlstatement) expression[NOT]IN (sqlstatement) [NOT]EXISTS(sqlstatement) comparison 將表達(dá)式與內(nèi)層查詢的結(jié)果比較的操作。 expression 對內(nèi)層查詢的結(jié)果作搜索的表達(dá)式。 sqlstatement 為SELECT語句構(gòu)成的SQL查詢,必須用()將該語句括起來。 例如: 我們先從訂單表格當(dāng)中,查詢出所有的單位,再將產(chǎn)品表格中的單位與的一一對比,查詢出所有高于訂單表格的單位價格的記錄。 SELECT * FROM 產(chǎn)品表格 WHERE 單位價格> ANY (SELECT 單位價格 FROM 訂單表格 WHERE 折扣> =.25); [page_break]SQL與數(shù)據(jù)庫的維護(hù) 表格的建立 將SQL中的基本語法作了一番介紹以后,但大多是偏向于數(shù)據(jù)庫數(shù)據(jù)的查詢與過濾,但實(shí)際上,我們通過SQL命令所可以做的事還有很多,接下來要介紹的便是如何利用SQL的語法命令來建立一個數(shù)據(jù)庫中的表格。 CREATE TABLE語句 我們可以利用這個命令,來建立一個全新的表格,但前提則是:數(shù)據(jù)庫必須已經(jīng)存在。 CREATE TABLE table(field1 type[(size)][index1][,field2 type[(size)][index2][,...]][,nultifieldindex[,...]]) table 欲建立的新的表格名稱。 field1,field2 在新表格中的新的字段名稱,到少要一個字段以上。 type 字段的數(shù)據(jù)類型。 size 字段的大小。 index1,index2 利用CONSTRAINT條件子句定義一個單一字段的索引名稱。 multifieldindex 利用CONSTRAINT條件子句定義一個多重字段的索引名稱。 例如: 建立一個擁有職員姓名與部門字段的表格。 CREATE TABLE 職員表格 (姓名TEST,部門TEST,職員編號 INTEGER CONSTRAINT職員字段索引PRIMARY KEY) 在這一個范例中,我們建立了一個表格名稱為“職員表格”的表格,并且定義了該表格的主鍵值,以限制數(shù)據(jù)不能重復(fù)輸入。 表格索引的建立 CREATE INDEX語句 這個命令主要是對一個已存在的表格建立索引,其用法如下: CREATE[UNIQUE]INDEX index ON table(field[ASC|DESC][,field[ASC|DESC],...]) [WITH {PRIMARY|DISALLOWNULL|IGNORENULL}] index 欲被建立的索引名稱。 table 欲建立索引的表格名稱。 field 欲被建立的索引的字段名稱。并可通過DESC保留字,來決定索引的順序。 例如: 在職員表格中建立一個索引。 CREATE INDEX 新索引名稱 ON 職員表格(姓名部門); 表格的字段更新 CONSTRAINT條件子句 CONSTRAINT 的功能是類似索引(INDEX)的,雖然CONSTRAINT 也可以建立表格之間的關(guān)聯(lián)性。 單一字段索引: CONSTRAINT name{PRIMARY KEY|UNIQUE|REFERENCES foreigntable[(foreignfield1,foreignfield2)]} 多字段索引: CONSTRAINT name {PRIMARY KEY(primary1[,primary2[,...]]) |UNIQUE(unique1[,unique2[,...]]) |FOREIGN KEY (ref1[,ref2[,...]]) |REFERENCES foreigntable[(foreignfield1[,foreignfield2[,...]])]} name 要被建立的CONSTRAINT名稱。 primary1,primary2 被用來設(shè)計成主鍵值的字段名稱(可一個以上)。 unique1,unique2 被用來設(shè)計成唯一鍵值的字段名稱(可一個以上)。 foreign key 字段名稱,或是參考到別的表格中字段的字段名稱。 foreigntable 如前所述,被參考到的表格。 foreignfield1,foreignfield2 在參考到的表格當(dāng)中,被ref1,ref2字段所指定的字段。如果被參考的字段是參考表格中的主鍵值,你也可以省略這個條件子句。 例如: 當(dāng)我們要建立一個新的職員數(shù)據(jù)表格,表格包含姓名、部門名稱與生日三個字段,且由這三個字段建立一個唯一的索引時,可以使用下面這段SQL的語句。 CREATE TABLE 職員數(shù)據(jù)表格 (姓名 TEST,部門名稱 TEST,生日 DATETIME,CONSTRAINT 職員數(shù)據(jù)表格限制 UNIQUE(姓名,部門名稱,生日)); 以上是SQL中,與數(shù)據(jù)庫表格建立相關(guān)的命令,你可以利用這些命令,通過SQL的語句,將數(shù)據(jù)庫表格完整的建立出來,接下來的章節(jié),將針對數(shù)據(jù)庫建立之后的維護(hù)與增刪所要使用的SQL語句作一介紹。 [page_break]表的刪除 DELETE語句 我們可以利用DELETE語句,將表格中的記錄刪除。(注意:記錄被刪除后,無法再復(fù)原,所以條件設(shè)置要正確) DELETE[table.*] FROM tableexpression WHERE criteria table 欲刪除記錄的表格名稱,也可以用*來取代。 tableexpression 一個或一個以上表格的名稱。此一參數(shù)可以為單一的表格名稱或是從INNER JOIN,LEFT JOIN,或RIGHTJOIN 等運(yùn)算所得到的結(jié)果。 criteria 決定表格中記錄要被刪除的標(biāo)準(zhǔn)。 例如: 若是我們要將職員表格中姓名姓名叫做’李名’的記錄刪除,我們可以利用下面的SQL語句來完成。 DELETE * FROM 職員表格 WHERE 姓名=’李名’; 數(shù)據(jù)庫表格相關(guān)的操作命令 SQL除了可以作為查詢與數(shù)據(jù)庫表格的建立的工具外,對于數(shù)據(jù)庫與表格的新建、刪修、與維護(hù),與具有相當(dāng)不錯的功能,若是讀者使用SQL命令得宜,對于整個效率的提高有著很大的幫助,所以對于SQL語句所帶來的優(yōu)勢,常常會遇到一個情況,就是:“當(dāng)我們對多個表格作復(fù)雜與多步驟的處理時,或許SQL只要一個語句就可以完成所有的需求與目標(biāo)”,乍看一下,或許覺得有些玄妙,但是接下來的章節(jié),會讓你了解其中的妙處。 SELECT...INTO語句 我們可以通過這個命令,利用既存表格查詢,來建立一個新表格的查詢語句。 SELECT field1[,field2[,...]]INTO newtable[IN externaldatabase] FROM source field1,field2 欲拷貝到新表格的字段名稱。 newtable 欲建立之新表格的名稱,不可是已經(jīng)存在的表格。 externaldatabase 若是該表格在另外的外部數(shù)據(jù)庫時,該數(shù)據(jù)庫的名稱。 source 記錄數(shù)據(jù)拷貝的來源表格名稱,可以是單一的表格或是一段SQL查詢之語句。 例如: 你可以通過下面的SQL語句,來建立一個新的“訓(xùn)練名冊”表格。 SELECT 職員表格.姓名,職員表格.部門 INTO 訓(xùn)練名冊 FROM 職員表格 WHERE 職稱=’新進(jìn)人員’; INNER JOIN操作數(shù) 當(dāng)某一個共同的字段數(shù)據(jù)相等時,將兩個表格的記錄加以組合。 SELECT fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2 table1,table2 欲進(jìn)行記錄組合的表格名稱。 field1,field2 欲組合的字段名稱。(必須具有相同的數(shù)據(jù)類型) compopr 比較關(guān)系運(yùn)算符如下:“=”,“ <”,“> ”,“ <=”,“ <> ”等。 例如: 若是你要把分類表格與產(chǎn)品表格作組合,可參考下面的SQL語句。 SELECT 分類名稱,產(chǎn)品名稱 FROM 分類表格 INNER JOIN 產(chǎn)品表格 ON 分類表格.分類編號=產(chǎn)品表格.分類編號; UNION操作數(shù) 我們可以通過UNION操作數(shù)來建立連接的查詢條件,UNION操作數(shù)可以將兩個以上的表格或是查詢的結(jié)果組合起來。 [TABLE]query1 UNION [ALL][TABLE]query2 [UNION [ALL] [TABLE]queryn [...]] query1,query2,queryn 為一個SELECT的語句,或是一個已存在的查詢名稱,或是一個已存在的表格名稱。 例如: 你可以利用下面的SQL語句,將訂單數(shù)量超過1000的顧客表格記錄,與新客戶表格作UNION的操作。 TABLE 新客戶表格 UNION ALL SELECT * FROM 顧客表格 WHERE 訂單數(shù)量> 1000; ALTER語句 在一個表格被建立之后,利用ALTER語句,我們可以去修改表格的字段設(shè)計。 ALTER TABLE table {ADD {COLUMN field type[(size)][CONSTRAINT index] |CONSTRAINT multifieldindex} |DROP {COLUMN field|CONSTRAINT indexname}} table 欲被ALTER的表格名稱。 field 要被增加或刪除的字段名稱。 type 字段數(shù)據(jù)類型。 size 字段大小。 index 對此字段的索引。 例如: 在職員表格中新建一個“薪水”的字段。 ALTER TABLE 職員表格 ADD COLUMN 薪水 CURRENCY; 例如: 在職員表格中刪除一個“薪水”的字段。 ALTER TABLE 職員表格 DROP COLUMN 薪水; DROP語句 針對所指定的表格或字段加以刪除,或是把索引刪除。 DROP {TABLE table|INDEX index ON table} table 欲刪除之表格或索引依附之表格名稱。 index 欲從表格中刪除的索引名稱。 例如: 從職員表格中,刪除編號索引。 DROP INDEX MyIndex ON Employees; 例如: 從數(shù)據(jù)庫中,刪除整個表格。 DROP TABLE 職員表格; INSERT INTO語句 新建一條數(shù)據(jù)到表格當(dāng)中。 多條記錄新建查詢: INSERT INTO target [IN externaldatabase][(field1[,field2[,...]])] SELECT [source.]field1[,field2[,...] FROM tableexpression 單條記錄新建查詢: INSERT INTO target[(field1[,field2[,...]])] VALUES(value1[,value2[,...]) target 新建記錄的表格名稱。 externaldatabase 外部數(shù)據(jù)庫的路徑,搭配IN條件子句使用。 source 若是記錄從其它表格中拷貝時,指明該表格的名稱。 field1,field2 欲增加數(shù)據(jù)的字段名稱。 tableexpression 表格名稱或描述記錄是從哪一個表格中插入的表格名稱。配合INNER JOIN,LEFT JOIN,或 RIGHT JOIN 運(yùn)算符一起使用。 value1,value2 欲插入表格中的數(shù)值。 例如: 在客戶數(shù)據(jù)表格中,從新的表格插入數(shù)據(jù)。 INSERT INTO 客戶數(shù)據(jù)表格 SELECT 新客戶數(shù)據(jù)表格.* FROM 新客戶數(shù)據(jù)表格; 例如: 在職員表格中插入數(shù)據(jù)。 INSERT INTO 職員表格(姓名,生日,職稱) VALUES("王榮","57/12/11","經(jīng)理"); 例如: 從訓(xùn)練人員表格中,將職員雇用時間超過30天者,加入到正式職員表格中。 INSERT INTO 職員表格 SELECT 訓(xùn)練人員表格.* FROM 訓(xùn)練人員表格 WHERE 雇用天數(shù)> 30; UPDATE語句 建立一個UPDATE的查詢,通過條件的限制來修改特定的數(shù)據(jù)。 UPDATE table SET newvalue WHERE criteria; table 欲修改數(shù)據(jù)的表格名稱。 newvalue 欲修改成的數(shù)值(將該項數(shù)值插入到特定的字段當(dāng)中)。 criteria 查詢條件,用來決定要修改哪些記錄。 例如: 若是要把訂單表格中的訂單數(shù)量修改成1.1倍,運(yùn)費(fèi)為1.03倍,可利用下列之SQL語句來完成。 UPDATE 訂單表格 SET 訂單數(shù)量=訂單數(shù)量 * 1.1,運(yùn)費(fèi)=運(yùn)費(fèi) * 1.03倍 WHERE 運(yùn)達(dá)地點(diǎn)=’美國’; 當(dāng)我們完成修改后,你可以利用 SELECT 語句,配合同樣的 WHERE 條件子句,來察看修改的數(shù)據(jù)是否正確。 事實(shí)上,要利用SQL完成某些看似復(fù)雜的操作,并不需要繁瑣的SQL命令組合,或是許許多多的步驟才能完成,其實(shí)最重要的還是要活用SQL命令,才會在最精簡的SQL語句里獲得最高的效率。 全新的路由器不僅讓你更穩(wěn)定快速地連接無線網(wǎng)絡(luò),更可以讓家中的智能設(shè)備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!