SQL 是用于訪問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言。 在本教程中,您將學(xué)到如何使用 SQL 訪問(wèn)和處理數(shù)據(jù)系統(tǒng)中的數(shù)據(jù),這類數(shù)據(jù)庫(kù)包括:Oracle, Sybase, SQL Server, DB2, Access 等等。
結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)簡(jiǎn)稱SQL(發(fā)音:/?es kju? ?el/ "S-Q-L"),是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng);同時(shí)也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名。
結(jié)構(gòu)化查詢語(yǔ)言是高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng), 可以使用相同的結(jié)構(gòu)化查詢語(yǔ)言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語(yǔ)言語(yǔ)句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。
如果您想要更快、更系統(tǒng)地學(xué)會(huì)SQL,您最好采用邊學(xué)邊練(SQL微課)的學(xué)習(xí)模式。
學(xué)完本教程,推薦您進(jìn)行實(shí)戰(zhàn)練習(xí):點(diǎn)擊進(jìn)入實(shí)戰(zhàn)
結(jié)構(gòu)化查詢語(yǔ)言包含6個(gè)部分:
一:數(shù)據(jù)查詢語(yǔ)言(DQL:Data Query Language):其語(yǔ)句,也稱為“數(shù)據(jù)檢索語(yǔ)句”,用以從表中獲得數(shù)據(jù),確定數(shù)據(jù)怎樣在應(yīng)用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動(dòng)詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其他類型的SQL語(yǔ)句一起使用。
二:數(shù)據(jù)操作語(yǔ)言(DML:Data Manipulation Language):其語(yǔ)句包括動(dòng)詞INSERT,UPDATE和DELETE。它們分別用于添加,修改和刪除表中的行。也稱為動(dòng)作查詢語(yǔ)言。
三:事務(wù)處理語(yǔ)言(TPL):它的語(yǔ)句能確保被DML語(yǔ)句影響的表的所有行及時(shí)得以更新。TPL語(yǔ)句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:數(shù)據(jù)控制語(yǔ)言(DCL):它的語(yǔ)句通過(guò)GRANT或REVOKE獲得許可,確定單個(gè)用戶和用戶組對(duì)數(shù)據(jù)庫(kù)對(duì)象的訪問(wèn)。某些RDBMS可用GRANT或REVOKE控制對(duì)表單個(gè)列的訪問(wèn)。
五:數(shù)據(jù)定義語(yǔ)言(DDL):其語(yǔ)句包括動(dòng)詞CREATE和DROP。在數(shù)據(jù)庫(kù)中創(chuàng)建新表或刪除表(CREAT TABLE 或 DROP TABLE);為表加入索引等。DDL包括許多與人數(shù)據(jù)庫(kù)目錄中獲得數(shù)據(jù)有關(guān)的保留字。它也是動(dòng)作查詢的一部分。
六:指針控制語(yǔ)言(CCL):它的語(yǔ)句,像DECLARE CURSOR,F(xiàn)ETCH INTO和UPDATE WHERE CURRENT用于對(duì)一個(gè)或多個(gè)表單獨(dú)行的操作。
簡(jiǎn)要描述一下結(jié)構(gòu)化查詢語(yǔ)言中的五種數(shù)據(jù)類型:字符型,文本型,數(shù)值型,邏輯型和日期型。
字符型(VARCHARVS CHAR)VARCHAR型和CHAR型數(shù)據(jù)的這個(gè)差別是細(xì)微的,但是非常重要。他們都是用來(lái)儲(chǔ)存字符串長(zhǎng)度小于255的字符。
假如你向一個(gè)長(zhǎng)度為四十個(gè)字符的VARCHAR型字段中輸入數(shù)據(jù)Bill Gates。當(dāng)你以后從這個(gè)字段中取出此數(shù)據(jù)時(shí),你取出的數(shù)據(jù)其長(zhǎng)度為十個(gè)字符——字符串Bill Gates的長(zhǎng)度。假如你把字符串輸入一個(gè)長(zhǎng)度為四十個(gè)字符的CHAR型字段中,那么當(dāng)你取出數(shù)據(jù)時(shí),所取出的數(shù)據(jù)長(zhǎng)度將是四十個(gè)字符。字符串的后面會(huì)被附加多余的空格。
當(dāng)你建立自己的站點(diǎn)時(shí),你會(huì)發(fā)現(xiàn)使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段時(shí),你不需要為剪掉你數(shù)據(jù)中多余的空格而操心。
VARCHAR型字段的另一個(gè)突出的好處是它可以比CHAR型字段占用更少的內(nèi)存和硬盤(pán)空間。當(dāng)你的數(shù)據(jù)庫(kù)很大時(shí),這種內(nèi)存和磁盤(pán)空間的節(jié)省會(huì)變得非常重要。
使用文本型數(shù)據(jù),你可以存放超過(guò)二十億個(gè)字符的字符串。當(dāng)你需要存儲(chǔ)大串的字符時(shí),應(yīng)該使用文本型數(shù)據(jù)。
注意文本型數(shù)據(jù)沒(méi)有長(zhǎng)度,而上一節(jié)中所講的字符型數(shù)據(jù)是有長(zhǎng)度的。一個(gè)文本型字段中的數(shù)據(jù)通常要么為空,要么很大。
當(dāng)你從HTML FORM的多行文本編輯框(TEXTAREA)中收集數(shù)據(jù)時(shí),你應(yīng)該把收集的信息存儲(chǔ)于文本型字段中。但是,無(wú)論何時(shí),只要你能避免使用文本型字段,你就應(yīng)該不使用它。文本型字段既大且慢,濫用文本型字段會(huì)使服務(wù)器速度變慢。文本型字段還會(huì)吃掉大量的磁盤(pán)空間。
一旦你向文本型字段中輸入了任何數(shù)據(jù)(甚至是空值),就會(huì)有2K的空間被自動(dòng)分配給該數(shù)據(jù)。除非刪除該記錄,否則你無(wú)法收回這部分存儲(chǔ)空間。
通常,為了節(jié)省空間,應(yīng)該盡可能的使用最小的整型數(shù)據(jù)。一個(gè)TINYINT型數(shù)據(jù)只占用一個(gè)字節(jié);一個(gè)INT型數(shù)據(jù)占用四個(gè)字節(jié)。這看起來(lái)似乎差別不大,但是在比較大的表中,字節(jié)數(shù)的增長(zhǎng)是很快的。另一方面,一旦你已經(jīng)創(chuàng)建了一個(gè)字段,要修改它是很困難的。因此,為安全起見(jiàn),你應(yīng)該預(yù)測(cè)一下,一個(gè)字段所需要存儲(chǔ)的數(shù)值最大有可能是多大,然后選擇適當(dāng)?shù)臄?shù)據(jù)類型。
NUMERIC為了能對(duì)字段所存放的數(shù)據(jù)有更多的控制,你可以使用NUMERIC型數(shù)據(jù)來(lái)同時(shí)表示一個(gè)數(shù)的整數(shù)部分和小數(shù)部分。NUMERIC型數(shù)據(jù)使你能表示非常大的數(shù)——比INT型數(shù)據(jù)要大得多。一個(gè)NUMERIC型字段可以存儲(chǔ)從-10^38到10^38范圍內(nèi)的數(shù)。NUMERIC型數(shù)據(jù)還使你能表示有小數(shù)部分的數(shù)。例如,你可以在NUMERIC型字段中存儲(chǔ)小數(shù)3.14。
MONEY 對(duì)比 SMALLMONEY你可以使用 INT型或NUMERIC型數(shù)據(jù)來(lái)存儲(chǔ)錢(qián)數(shù)。但是,專門(mén)有另外兩種數(shù)據(jù)類型用于此目的。如果你希望你的網(wǎng)點(diǎn)能掙很多錢(qián),你可以使用MONEY型數(shù)據(jù)。如果你的野心不大,你可以使用SMALLMONEY型數(shù)據(jù)。MONEY型數(shù)據(jù)可以存儲(chǔ)從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢(qián)數(shù)。如果你需要存儲(chǔ)比這還大的金額,你可以使用NUMERIC型數(shù)據(jù)。
SMALLMONEY型數(shù)據(jù)只能存儲(chǔ)從-214,748.3648到214,748.3647 的錢(qián)數(shù)。同樣,如果可以的話,你應(yīng)該用SMALLMONEY型來(lái)代替MONEY型數(shù)據(jù),以節(jié)省空間。
如果你使用復(fù)選框(CHECKBOX)從網(wǎng)頁(yè)中搜集信息,你可以把此信息存儲(chǔ)在BIT型字段中。BIT型字段只能取兩個(gè)值:0或1。
注意:在你創(chuàng)建好一個(gè)表之后,你不能向表中添加 BIT型字段。如果你打算在一個(gè)表中包含BIT型字段,你必須在創(chuàng)建表時(shí)完成。
日期型(DATETIME 對(duì)比 SMALLDATETIME)
一個(gè) DATETIME型的字段可以存儲(chǔ)的日期范圍是從1753年1月1日第一毫秒到9999年12月31日最后一毫秒。
如果你不需要覆蓋這么大范圍的日期和時(shí)間,你可以使用SMALLDATETIME型數(shù)據(jù)。它與DATETIME型數(shù)據(jù)同樣使用,只不過(guò)它能表示的日期和時(shí)間范圍比DATETIME型數(shù)據(jù)小,而且不如DATETIME型數(shù)據(jù)精確。一個(gè)SMALLDATETIME型的字段能夠存儲(chǔ)從1900年1月1日到2079年6月6日的日期,它只能精確到秒。
DATETIME型字段在你輸入日期和時(shí)間之前并不包含實(shí)際的數(shù)據(jù),認(rèn)識(shí)這一點(diǎn)是重要的。
SQL 教程:http://www.hgci.cn/sql/y93wmfol.html