必威电竞|足球世界杯竞猜平台

結(jié)構(gòu)化查詢語言
來源:互聯(lián)網(wǎng)

結(jié)構(gòu)化查詢語言(簡稱SQL),起源于20世紀(jì)70年代,是一種特殊目的的編程語言,用于存取數(shù)據(jù)、查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。SQL是基于關(guān)系代數(shù)和元組關(guān)系演算的編程語言,包括數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)和數(shù)據(jù)控制語言(DCL)。SQL具有極大的靈活性和強大的功能,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作,而不需要了解具體的數(shù)據(jù)存放方式。 SQL最初是基于E. F. Codd關(guān)系模型設(shè)計的,后來成為最為廣泛運用的數(shù)據(jù)庫語言。1986年,SQL成為美國國家標(biāo)準(zhǔn)學(xué)會(ANSI)的標(biāo)準(zhǔn),1987年成為國際標(biāo)準(zhǔn)化組織(ISO)的標(biāo)準(zhǔn)。經(jīng)過一系列的增訂,SQL加入了大量新特性。盡管有標(biāo)準(zhǔn)的存在,但大部分的SQL代碼在不同數(shù)據(jù)庫系統(tǒng)中并不能完全具有跨平臺性。

簡介

結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL結(jié)構(gòu)化查詢語言是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng);同時也是數(shù)據(jù)庫腳本文件的擴展名。結(jié)構(gòu)化查詢語言是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,其語法具有高度統(tǒng)一性和可移植性,被各類主流數(shù)據(jù)庫系統(tǒng)廣泛支持,具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng)可以使用相同的結(jié)構(gòu)化查詢語言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。

發(fā)展歷史

1. 1970: E.J. Codd 發(fā)表了關(guān)系數(shù)據(jù)庫理論(relational database theory);2. 1974-79: IBM 以Codd的理論為基礎(chǔ)開發(fā)了“sequel”,并重命名為"結(jié)構(gòu)化查詢語言";3. 1979: Oracle數(shù)據(jù)庫 發(fā)布了商業(yè)版結(jié)構(gòu)化查詢語言4. 1981-84:出現(xiàn)了其他商業(yè)版本,分別來自 IBM(DB2),Data General,Relational Technology(ingres);5. 結(jié)構(gòu)化查詢語言/86:ANSI 跟 ISO的第一個標(biāo)準(zhǔn);6. 結(jié)構(gòu)化查詢語言/89:增加了參照完整性(referential integrity);7. 結(jié)構(gòu)化查詢語言/92(aka 結(jié)構(gòu)化查詢語言2):被數(shù)據(jù)庫管理系統(tǒng)(DBMS)生產(chǎn)商廣發(fā)接受;8. 1997+:成為動態(tài)網(wǎng)站(Dynamic web content)的后臺支持;9. 結(jié)構(gòu)化查詢語言/2003:包含了XML相關(guān)內(nèi)容,自動生成列值(column values);10. 結(jié)構(gòu)化查詢語言/2006:定義了結(jié)構(gòu)化查詢語言與XML(包含XQuery)的關(guān)聯(lián)應(yīng)用;11. 2006:Sun公司將以結(jié)構(gòu)化查詢語言基礎(chǔ)的數(shù)據(jù)庫管理系統(tǒng)嵌入Java V6

語句結(jié)構(gòu)

結(jié)構(gòu)化查詢語言包含5個部分:※ 數(shù)據(jù)定義語言(DDL),例如:CREATE、DROP、ALTER等語句,以及為表加入索引等操作。※ 數(shù)據(jù)操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用于添加、修改和刪除。※ 數(shù)據(jù)查詢語言(DQL),例如:SELECT語句?!?數(shù)據(jù)控制語言(DCL)(又稱數(shù)據(jù)管理語言),是用來管理(或控制)用戶訪問權(quán)限的,例如:GRANT(授權(quán))、REVOKE(回收)等語句;而Visual Foxpro6不支持這種權(quán)限管理。※ 事務(wù)控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新,典型語句包括COMMIT(提交事務(wù))、ROLLBACK(回滾事務(wù))等。

五種數(shù)據(jù)類型

簡要描述一下結(jié)構(gòu)化查詢語言中的五種數(shù)據(jù)類型:字符型,文本型,數(shù)值型,邏輯型和日期型

1. 字符型

VARCHAR VS CHARVARCHAR型和CHAR型數(shù)據(jù)的這個差別是細微的,但是非常重要。他們都是用來儲存字符串長度小于255的字符。假如你向一個長度為四十個字符的VARCHAR型字段中輸入數(shù)據(jù)BIll GAtES。當(dāng)你以后從這個字段中取出此數(shù)據(jù)時,你取出的數(shù)據(jù)其長度為十個字符——字符串Bill Gates的長度。現(xiàn)在假如你把字符串輸入一個長度為四十個字符的CHAR型字段中,那么當(dāng)你取出數(shù)據(jù)時,所取出的數(shù)據(jù)長度將是四十個字符。字符串的后面會被附加多余的空格。當(dāng)你建立自己的站點時,你會發(fā)現(xiàn)使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段時,你不需要為剪掉你數(shù)據(jù)中多余的空格而操心。VARCHAR型字段的另一個突出的好處是它可以比CHAR型字段占用更少的內(nèi)存HDD空間。當(dāng)你的數(shù)據(jù)庫很大時,這種內(nèi)存和磁盤空間的節(jié)省會變得非常重要

2. 文本型

文本使用文本型數(shù)據(jù),你可以存放超過二十億個字符的字符串。當(dāng)你需要存儲大串的字符時,應(yīng)該使用文本型數(shù)據(jù)。注意文本型數(shù)據(jù)沒有長度,而上一節(jié)中所講的字符型數(shù)據(jù)是有長度的。一個文本型字段中的數(shù)據(jù)通常要么為空,要么很大。當(dāng)你從HTML fORM的多行文本編輯框(TEXTAREA)中收集數(shù)據(jù)時,你應(yīng)該把收集的信息存儲于文本型字段中。但是,無論何時,只要你能避免使用文本型字段,你就應(yīng)該不適用它。文本型字段既大且慢,濫用文本型字段會使服務(wù)器速度變慢。文本型字段還會吃掉大量的磁盤空間。一旦你向文本型字段中輸入了任何數(shù)據(jù)(甚至是空值),就會有2K的空間被自動分配給該數(shù)據(jù)。除非刪除該記錄,否則你無法收回這部分存儲空間。

3. 數(shù)值型

整數(shù)INT 、小數(shù)NUMERIC、錢數(shù)MONEYINT VS SMALLINT VS TINYINT通常,為了節(jié)省空間,應(yīng)該盡可能的使用最小的整型數(shù)據(jù)。一個TINYINT型數(shù)據(jù)只占用一個字節(jié);一個INT型數(shù)據(jù)占用四個字節(jié)。這看起來似乎差別不大,但是在比較大的表中,字節(jié)數(shù)的增長是很快的。另一方面,一旦你已經(jīng)創(chuàng)建了一個字段,要修改它是很困難的。因此,為安全起見,你應(yīng)該預(yù)測以下,一個字段所需要存儲的數(shù)值最大有可能是多大,然后選擇適當(dāng)?shù)臄?shù)據(jù)類型。NUMERIC為了能對字段所存放的數(shù)據(jù)有更多的控制,你可以使用NUMERIC型數(shù)據(jù)來同時表示一個數(shù)的整數(shù)部分和小數(shù)部分。NUMERIC型數(shù)據(jù)使你能表示非常大的數(shù)——比INT型數(shù)據(jù)要大得多。一個NUMERIC型字段可以存儲從-1038到1038范圍內(nèi)的數(shù)。NUMERIC型數(shù)據(jù)還使你能表示有小數(shù)部分的數(shù)。例如,你可以在NUMERIC型字段中存儲小數(shù)3.14。MONEY VS SMALLMONEY你可以使用 INT型或NUMERIC型數(shù)據(jù)來存儲錢數(shù)。但是,專門有另外兩種數(shù)據(jù)類型用于此目的。如果你希望你的網(wǎng)點能掙很多錢,你可以使用MONEY型數(shù)據(jù)。如果你的野心不大,你可以使用SMALLMONEY型數(shù)據(jù)。MONEY型數(shù)據(jù)可以存儲從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢數(shù)。如果你需要存儲比這還大的金額,你可以使用NUMERIC型數(shù)據(jù)。SMALLMONEY型數(shù)據(jù)只能存儲從-214,748.3648到214,748.3647 的錢數(shù)。同樣,如果可以的話,你應(yīng)該用SMALLMONEY型來代替MONEY型數(shù)據(jù),以節(jié)省空間。

4. 邏輯型

BIT如果你使用復(fù)選框( CHECKBOX)從網(wǎng)頁中搜集信息,你可以把此信息存儲在BIT型字段中。BIT型字段只能取兩個值:0或1。當(dāng)心,在你創(chuàng)建好一個表之后,你不能向表中添加 BIT型字段。如果你打算在一個表中包含BIT型字段,你必須在創(chuàng)建表時完成。

5. 日期型

DATETIME VS SMALLDATETIME一個 DATETIME型的字段可以存儲的日期范圍是從1753年1月1日第一毫秒到9999年12月31日最后一毫秒。如果你不需要覆蓋這么大范圍的日期和時間,你可以使用SMALLDATETIME型數(shù)據(jù)。它與DATETIME型數(shù)據(jù)同樣使用,只不過它能表示的日期和時間范圍比DATETIME型數(shù)據(jù)小,而且不如DATETIME型數(shù)據(jù)精確。一個SMALLDATETIME型的字段能夠存儲從1900年1月1日到2079年6月6日的日期,它只能精確到秒。DATETIME型字段在你輸入日期和時間之前并不包含實際的數(shù)據(jù),認識這一點是重要的。

精華使用簡要

簡單的Transact-結(jié)構(gòu)化查詢語言查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。

1. 選擇列表

選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達式、變量(包括局部變量和全局變量)等構(gòu)成。1、選擇所有列例如,下面語句顯示testtable表中所有列的數(shù)據(jù):SELECT * FROM testtable2、選擇部分列并指定它們的顯示次序查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。3、更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)題=列名 列名 列標(biāo)題如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識符格式時,應(yīng)使用引號定界符,例如,下列語句使用漢字顯示列標(biāo)題: SELECT 昵稱=nickname,電子郵件=email FROM testtable4、刪除重復(fù)行SELECT語句中使用ALL或DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認為ALL。使用DISTINCT選項時,對于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用TOP n [PERCENT]選項限制返回的數(shù)據(jù)行數(shù),TOP n說明返回n行,而TOP n PERCENT時,說明n是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。

2. FROM子句

FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應(yīng)使用對象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應(yīng)使用下面語句格式加以限定:

3. WHERE子句

WHERE子句設(shè)置查詢條件,過濾掉不需要的數(shù)據(jù)行。WHERE子句可包括各種條件運算符:比較運算符(大小比較):>、>=、=、<、<=、<>、!>、!<范圍運算符(表達式值是否在指定的范圍):BETWEEN…AND…NOT BETWEEN…AND…列表運算符(判斷表達式是否為列表中的指定項):IN (項1,項2……)NOT IN (項1,項2……)模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOT LIKE空值判斷符(判斷表達式是否為空):IS NULL、NOT IS NULL邏輯運算符(用于多條件的邏輯連接):NOT、AND、OR1、范圍運算符例:age BETWEEN 10 AND 30相當(dāng)于age>=10 AND age<=302、列表運算符例:country IN ('Germany','China')3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于char、varchar、文本、ntext、datetime和smalldatetime等類型查詢??墒褂靡韵峦ㄅ?a href="/hebeideji/4149195651219888018.html">字符:百分號%:可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即%%。下劃線_:匹配單個任意字符,它常用來限制表達式的字符長度。方括號[]:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。[^]:其取值也[] 相同,但它要求所匹配對象為指定字符以外的任一個字符。

4. 查詢結(jié)果排序

使用ORDER BY子句對查詢返回的結(jié)果按一列或多列排序。ORDER BY子句的語法格式為:ORDER BY {column_人名 [ASC|DESC]} [,…n]其中ASC表示升序,為默認值,DESC為降序。ORDER BY不能按ntext、text和image數(shù)據(jù)類型進行排序。

參考資料 >

生活家百科家居網(wǎng)