天天看點

SQL(STructured Query Language)

      SQL(STructured Query Language)是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯式資料庫系統。美國國家标準局(ANSI)與國際标準化組織(ISO)已經制定了 SQL 标準。ANSI 是一個美國工業和商業集團組織,發展美國的商務和通訊标準。ANSI 同時也是 ISO 和 International Electrotechnical Commission(IEC)的成員之一。ANSI 發佈與國際标準組織相應的美國标準。1992年,ISO 和 IEC 發佈了 SQL 的國際标準,稱為 SQL-92。ANSI 随之發佈的相應标準是 ANSI SQL-92。ANSI SQL-92 有時被稱為 ANSI SQL。儘管不同的關聯式資料庫使用的 SQL 版本有一些差異,但大多數都遵循 ANSI SQL 标準。SQL Server 使用 ANSI SQL-92 的擴充集,稱為 T-SQL,其遵循 ANSI 制定的 SQL-92 标準。

      SQL 語言包括兩種主要程式設計語言類别的陳述式: 資料定義語言 (DDL)與資料操作語言 (DML)。下面我們将介紹這兩類語言。

DDL

 

      DDL 用於定義和管理物件,例如資料庫、資料表以及檢視表。DDL 陳述式通常包括每個物件的CREATE、ALTER 以及 DROP 指令。舉例來說,CREATE TABLE、ALTER TABLE 以及 DROP TABLE 這些陳述式便可以用來建立新資料表、修改其屬性(如新增或删除資料行)、删除資料表等,下面我們會一一介紹。

CREATE TABLE 陳述式

 

使用 DDL 在 MyDB 資料庫建立一個名為 Customer_Data 的範例資料表,本章後面的例子我們會使用到這個資料表。如前所述,CREATE TABLE 陳述式可以用來建立資料表。這個範例資料表被定義成四個資料行,如下所示:

Use MyDB

CREATE TABLE Customer_Data

(customer_id smallint,

first_name char(20),

last_name char(20),

phone char(10))

GO

這個陳述式能產生 Customer_Data 資料表,這個資料表會一直是空的直到資料被填入資料表内。

ALTER TABLE 陳述式

 

ALTER TABLE 陳述式用來變更資料表的定義與屬性。在下面的例子中,我們利用 ALTER TABLE 在已經存在的 Customer_Data 資料表中新增 middle_initial 資料行。

ALTER TABLE Customer_Data

ADD middle_initial char(1)

GO

現在資料表的定義包括了五個資料行,而不是之前的四個資料行 。

DROP TABLE 陳述式

 

DROP TABLE 陳述式用來删除資料表定義以及所有的資料、索引、觸發程式、條件限制以及資料表的權限。要删除我們的 Customer_Data 資料表,可利用下列指令:

DROP TABLE Customer_Data

GO。

DML

 

DML 利用 INSERT、SELECT、UPDATE 及 DELETE 等陳述式來操作資料庫物件所包含的資料。

INSERT 陳述式

 

INSERT 陳述式用來在資料表或檢視表中插入一列資料。例如,如果要在Customer_Data 資料表中新增一個客戶,可使用類似以下的 INSERT 陳述式:

INSERT INTO Customer_Data

(customer_id, first_name, last_name, phone)

VALUES (777, "Frankie", "Stein", "4895873900")

請注意 SQL 陳述式中第二行的資料行名稱清單,清單上資料行名稱的次序決定了資料數值将被放在哪個資料行。舉例來說,第一個資料數值将被放在清單列出的第一個資料行 customer_id、第二個資料數值放在第二個資料行,依此類推。由於我們在建立資料表時,定義資料資料行填入數值的次序與現在相同,是以我們不必特意指定欄位名稱。我們可以用以下的 INSERT 陳述式代替:

INSERT INTO Customer_Data

VALUES (777, "Frankie", "Stein", "4895873900")

注意

如果使用這種形式的 INSERT 陳述式,但被插入的數值次序上與建立資料表時不同,數值将被放入錯誤的資料行。如果資料的型别與定義不符,則會收到一個錯誤訊息。

--------------------------------------------------------------------------------

SELECT 陳述式

 

SELECT 陳述式用來檢索資料表中的資料,而哪些資料被檢索由列出的資料行與陳述式中的 WHERE 子句決定。例如,要從之前建立的 Customer_Data 資料表中檢索 customer_id 以及 first_name 資料行的資料,并且隻想取出每列中 first_name 資料行值為 Frankie 的資料,那麼可以利用以下的 SELECT 陳述式:

SELECT customer_id, first_name FROM Customer_Data

WHERE first_name = "Frankie"

如果有一列符合 SELECT 陳述式中的标準,則結果将顯示如下:

customer_id     first_name

-------------    ------------

777              Frankie

UPDATE 陳述式

 

UPDATE 陳述式用來更新或改變一列或多列中的值。例如,一位名稱為 Frankie Stein 的客戶想要在記錄中改變他的姓氏為 Franklin,可使用以下 UPDATE 陳述式:

UPDATE Customer_Data

SET first_name = "Franklin"

WHERE last_name = "Stein" and customer_id= 777

我們在 WHERE 子句中加入 customer_id 的項目來确定其他名稱為 Stein 的客戶不會被影響-隻有customer_id為777的客戶,姓氏會有所改變。

--------------------------------------------------------------------------------

說明

當您使用 UPDATE 陳述式時,要确定在 WHERE 子句提供充份的篩選條件,如此才不會不經意地改變了一些不該改變的資料。

--------------------------------------------------------------------------------

DELETE 陳述式

 

DELETE 陳述式用來删除資料表中一列或多列的資料,您也可以删除資料表中的所有資料列。要從 Customer_Data 資料表中删除所有的列,您可以利用下列陳述式:

DELETE FROM Customer_Data

DELETE Customer_Data

資料表名稱前的 FROM 關鍵字在 DELETE 陳述式中是選擇性的。除此之外,這兩個陳述式完全相同。

要從 Customer_Data 資料表中删除 customer_id 資料行的值小於100的列,可利用下列陳述式:

DELETE FROM Customer_Data

WHERE customer_id < 100

現在我們已經快速瀏覽了 SQL 提供的 DDL 與 DML 陳述式,接著,下面将介紹 T-SQL。

SQL中的五種資料類型 

簡要描述一下SQL中的五種資料類型:字元型,文本型,數值型,邏輯型和日期型

字元型

VARCHAR VS CHAR

VARCHAR型和CHAR型資料的這個差别是細微的,但是非常重要。他們都是用來儲存字元串長度小于255的字元。

假如你向一個長度為四十個字元的VARCHAR型字段中輸入資料BIll GAtES。當你以後從這個字段中取出此資料時,你取出的資料其長度為十個字元——字元串Bill Gates的長度。 現在假如你把字元串輸入一個長度為四十個字元的CHAR型字段中,那麼當你取出資料時,所取出的資料長度将是四十個字元。字元串的後面會被附加多餘的空格。

當你建立自己的站點時,你會發現使用VARCHAR型字段要比CHAR型字段友善的多。使用VARCHAR型字段時,你不需要為剪掉你資料中多餘的空格而操心。

VARCHAR型字段的另一個突出的好處是它可以比CHAR型字段占用更少的記憶體和硬碟空間。當你的資料庫很大時,這種記憶體和磁盤空間的節省會變得非常重要

文本型

TEXT

使用文本型資料,你可以存放超過二十億個字元的字元串。當你需要存儲大串的字元時,應該使用文本型資料。

注意文本型資料沒有長度,而上一節中所講的字元型資料是有長度的。一個文本型字段中的資料通常要麼為空,要麼很大。

當你從HTML fORM的多行文本編輯框(TEXTAREA)中收集資料時,你應該把收集的資訊存儲于文本型字段中。但是,無論何時,隻要你能避免使用文本型字段,你就應該不适用它。文本型字段既大且慢,濫用文本型字段會使伺服器速度變慢。文本型字段還會吃掉大量的磁盤空間。

一旦你向文本型字段中輸入了任何資料(甚至是空值),就會有2K的空間被自動配置設定給該資料。除非删除該記錄,否則你無法收回這部分存儲空間。

數值型

SQL支援許多種不同的數值型資料。你可以存儲整數 INT 、小數 NUMERIC、和錢數 MONEY。

INT VS SMALLINT VS TINYINT

他們的差別隻是字元長度:

INT型資料的表數範圍是從-2,147,483,647到2,147,483,647的整數

SMALLINT 型資料可以存儲從-32768到32768的整數

TINYINT 型的字段隻能存儲從0到255的整數,不能用來儲存負數

通常,為了節省空間,應該盡可能的使用最小的整型資料。一個TINYINT型資料隻占用一個位元組;一個INT型資料占用四個位元組。這看起來似乎差别不大,但是在比較大的表中,位元組數的增長是很快的。另一方面,一旦你已經建立了一個字段,要修改它是很困難的。是以,為安全起見,你應該預測以下,一個字段所需要存儲的數值最大有可能是多大,然後選擇适當的資料類型。

MUNERIC

為了能對字段所存放的資料有更多的控制,你可以使用NUMERIC型資料來同時表示一個數的整數部分和小數部分。NUMERIC型資料使你能表示非常大的數——比INT型資料要大得多。一個NUMERIC型字段可以存儲從-1038到1038範圍内的數。NUMERIC型資料還使你能表示有小數部分的數。例如,你可以在NUMERIC型字段中存儲小數3.14。

當定義一個NUMERIC型字段時,你需要同時指定整數部分的大小和小數部分的大小。如:MUNERIC(23,0)

一個 NUMERIC型資料的整數部分最大隻能有28位,小數部分的位數必須小于或等于整數部分的位數,小數部分可以是零。

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型資料,以節省空間。

邏輯型

BIT

如果你使用複選框( CHECKBOX)從網頁中搜集資訊,你可以把此資訊存儲在BIT型字段中。BIT型字段隻能取兩個值:0或1。

當心,在你建立好一個表之後,你不能向表中添加 BIT型字段。如果你打算在一個表中包含BIT型字段,你必須在建立表時完成。

日期型

DATETIME VS SMALLDATETIME

一個 DATETIME型的字段可以存儲的日期範圍是從1753年1月1日第一毫秒到9999年12月31日最後一毫秒。

如果你不需要覆寫這麼大範圍的日期和時間,你可以使用SMALLDATETIME型資料。它與DATETIME型資料同樣使用,隻不過它能表示的日期和時間範圍比DATETIME型資料小,而且不如DATETIME型資料精确。一個SMALLDATETIME型的字段能夠存儲從1900年1月1日到2079年6月6日的日期,它隻能精确到秒。

DATETIME型字段在你輸入日期和時間之前并不包含實際的資料。