結構化查詢語言

一種資料庫查詢和程序設計語言

結構化查詢語言,簡稱SQL,起源於1970年。它是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係資料庫系統。它的優點在於具有極大的靈活性和強大的功能。

簡介


結構化查詢語言(Structured Query Language)簡稱SQL結構化查詢語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係資料庫系統;同時也是資料庫腳本文件的擴展名。結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的結構化查詢語言語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使他具有極大的靈活性和強大的功能

發展歷史


1. 1970: E.J. Codd 發表了關係資料庫理論(relational database theory);2. 1974-79: IBM 以Codd的理論為基礎開發了“sequel”,並重命名為"結構化查詢語言";3. 1979: Oracle 發布了商業版結構化查詢語言4. 1981-84:出現了其他商業版本,分別來自 IBM(DB2),Data General,Relational Technology(ingres);5. 結構化查詢語言/86:ANSI 跟 ISO的第一個標準;6. 結構化查詢語言/89:增加了引用完整性(referential integrity);7. 結構化查詢語言/92(aka 結構化查詢語言2):被資料庫管理系統(DBMS)生產商廣發接受;8. 1997+:成為動態網站(Dynamic web content)的後台支持;9. 結構化查詢語言/2003:包含了XML相關內容,自動生成列值(column values);10. 結構化查詢語言/2006:定義了結構化查詢語言與XML(包含XQuery)的關聯應用;11. 2006:Sun公司將以結構化查詢語言基礎的資料庫管理系統嵌入Java V6

語句結構


結構化查詢語言包含4個部分:※ 數據定義語言(DDL),例如:CREATE、DROP、ALTER等語句。※ 數據操作語言(DML),例如:INSERT、UPDATE、DELETE語句。※ 數據查詢語言(DQL),例如:SELECT語句。※ 數據控制語言(DCL),例如:GRANT、REVOKECOMMIT、ROLLBACK等語句。

五種數據類型


簡要描述一下結構化查詢語言中的五種數據類型:字元型,文本型,數值型,邏輯型和日期型
1. 字元型
VARCHAR VS CHARVARCHAR型和CHAR型數據的這個差別是細微的,但是非常重要。他們都是用來儲存字元串長度小於255的字元。假如你向一個長度為四十個字元的VARCHAR型欄位中輸入數據BIll GAtES。當你以後從這個欄位中取出此數據時,你取出的數據其長度為十個字元——字元串Bill Gates的長度。現在假如你把字元串輸入一個長度為四十個字元的CHAR型欄位中,那麼當你取出數據時,所取出的數據長度將是四十個字元。字元串的後面會被附加多餘的空格。當你建立自己的站點時,你會發現使用VARCHAR型欄位要比CHAR型欄位方便的多。使用VARCHAR型欄位時,你不需要為剪掉你數據中多餘的空格而操心。VARCHAR型欄位的另一個突出的好處是它可以比CHAR型欄位佔用更少的內存和硬碟空間。當你的資料庫很大時,這種內存和磁碟空間的節省會變得非常重要
2. 文本型
TEXT使用文本型數據,你可以存放超過二十億個字元的字元串。當你需要存儲大串的字元時,應該使用文本型數據。注意文本型數據沒有長度,而上一節中所講的字元型數據是有長度的。一個文本型欄位中的數據通常要麼為空,要麼很大。當你從HTML fORM的多行文本編輯框(TEXTAREA)中收集數據時,你應該把收集的信息存儲於文本型欄位中。但是,無論何時,只要你能避免使用文本型欄位,你就應該不適用它。文本型欄位既大且慢,濫用文本型欄位會使伺服器速度變慢。文本型欄位還會吃掉大量的磁碟空間。一旦你向文本型欄位中輸入了任何數據(甚至是空值),就會有2K的空間被自動分配給該數據。除非刪除該記錄,否則你無法收回這部分存儲空間。
3. 數值型
整數INT 、小數NUMERIC、錢數MONEYINT VS SMALLINT VS TINYINT通常,為了節省空間,應該儘可能的使用最小的整型數據。一個TINYINT型數據只佔用一個位元組;一個INT型數據佔用四個位元組。這看起來似乎差別不大,但是在比較大的表中,位元組數的增長是很快的。另一方面,一旦你已經創建了一個欄位,要修改它是很困難的。因此,為安全起見,你應該預測以下,一個欄位所需要存儲的數值最大有可能是多大,然後選擇適當的數據類型。NUMERIC為了能對欄位所存放的數據有更多的控制,你可以使用NUMERIC型數據來同時表示一個數的整數部分和小數部分。NUMERIC型數據使你能表示非常大的數——比INT型數據要大得多。一個NUMERIC型欄位可以存儲從-1038到1038範圍內的數。NUMERIC型數據還使你能表示有小數部分的數。例如,你可以在NUMERIC型欄位中存儲小數3.14。MONEY VS SMALLMONEY你可以使用 INT型或NUMERIC型數據來存儲錢數。但是,專門有另外兩種數據類型用於此目的。如果你希望你的網點能掙很多錢,你可以使用MONEY型數據。如果你的野心不大,你可以使用SMALLMONEY型數據。MONEY型數據可以存儲從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢數。如果你需要存儲比這還大的金額,你可以使用NUMERIC型數據。SMALLMONEY型數據只能存儲從-214,748.3648到214,748.3647 的錢數。同樣,如果可以的話,你應該用SMALLMONEY型來代替MONEY型數據,以節省空間。
4. 邏輯型
BIT如果你使用複選框( CHECKBOX)從網頁中搜集信息,你可以把此信息存儲在BIT型欄位中。BIT型欄位只能取兩個值:0或1。當心,在你創建好一個表之後,你不能向表中添加 BIT型欄位。如果你打算在一個表中包含BIT型欄位,你必須在創建表時完成。
5. 日期型
DATETIME VS SMALLDATETIME一個 DATETIME型的欄位可以存儲的日期範圍是從1753年1月1日第一毫秒到9999年12月31日最後一毫秒。如果你不需要覆蓋這麼大範圍的日期和時間,你可以使用SMALLDATETIME型數據。它與DATETIME型數據同樣使用,只不過它能表示的日期和時間範圍比DATETIME型數據小,而且不如DATETIME型數據精確。一個SMALLDATETIME型的欄位能夠存儲從1900年1月1日到2079年6月6日的日期,它只能精確到秒。DATETIME型欄位在你輸入日期和時間之前並不包含實際的數據,認識這一點是重要的。

精華使用簡要


簡單的Transact-結構化查詢語言查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。
1. 選擇列表
選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達式、變數(包括局部變數和全局變數)等構成。1、選擇所有列例如,下面語句顯示testtable表中所有列的數據:SELECT * FROM testtable2、選擇部分列並指定它們的顯示次序查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同。3、更改列標題在選擇列表中,可重新指定列標題。定義格式為:列標題=列名 列名 列標題如果指定的列標題不是標準的標識符格式時,應使用引號定界符,例如,下列語句使用漢字顯示列標題: SELECT 昵稱=nickname,電子郵件=email FROM testtable4、刪除重複行SELECT語句中使用ALL或DISTINCT選項來顯示錶中符合條件的所有行或刪除其中重複的數據行,默認為ALL。使用DISTINCT選項時,對於所有重複的數據行在SELECT返回的結果集合中只保留一行。5、限制返回的行數使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說明返回n行,而TOP n PERCENT時,說明n是表示一百分數,指定返回的行數等於總行數的百分之幾。
2. FROM子句
FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應使用下面語句格式加以限定:
3. WHERE子句
WHERE子句設置查詢條件,過濾掉不需要的數據行。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相當於age>=10 AND age<=302、列表運算符例:country IN ('Germany','China')3、模式匹配符例:常用於模糊查找,它判斷列值是否與指定的字元串格式相匹配。可用於charvarchar、text、ntext、datetime和smalldatetime等類型查詢。可使用以下通配字元:百分號%:可匹配任意類型和長度的字元,如果是中文,請使用兩個百分號即%%。下劃線_:匹配單個任意字元,它常用來限制表達式的字元長度。方括弧[]:指定一個字元、字元串或範圍,要求所匹配對象為它們中的任一個。[^]:其取值也[] 相同,但它要求所匹配對象為指定字元以外的任一個字元。
4. 查詢結果排序
使用ORDER BY子句對查詢返回的結果按一列或多列排序。ORDER BY子句的語法格式為:ORDER BY {column_name [ASC|DESC]} [,…n]其中ASC表示升序,為默認值,DESC為降序。ORDER BY不能按ntext、text和image數據類型進行排序。