sql所有信息

基本操作(1.數據類型)

1.數據類型

數據類弄是數據的一種屬性,表示數據所表示信息的類型。任何一種計算機語言都定義了自己的數據類型。當然,不同的程序語言都具有不同的特點,所定義的數據類型的各類和名稱都或多或少有些不同。SQL Server 提供了 25 種數據類型:

·Binary [(n)]

·Varbinary [(n)]

·Char [(n)]

·Varchar[(n)]

·Nchar[(n)]

·Nvarchar[(n)]

·Datetime

·Smalldatetime

·Decimal[(p[,s])]

·Numeric[(p[,s])]

·Float[(n)]

·Real

·Int

·Smallint

·Tinyint

·Money

·Smallmoney

·Bit

·Cursor

·Sysname

·Timestamp

·Uniqueidentifier

·Text

·Image

·Ntext



(1)二進制數據類型

二進制數據包括 Binary、Varbinary 和 Image.

Binary 數據類型既可以是固定長度的(Binary),也可以是變長度的。

Binary[(n)] 是 n 位固定的二進制數據。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4 個字節。

Varbinary[(n)] 是 n 位變長度的二進制數據。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4個字節,不是 n 個字節。

在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用 BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。

(2)字符數據類型

字符數據的類型包括 Char,Varchar 和 Text。

字符數據是由任何字母、符號和數字任意組合而成的數據。

Varchar 是變長字符數據,其長度不超過 8KB。Char 是定長字符數據,其長度最多爲 8KB。超過 8KB 的ASCII 數據可以使用Text 數據類型存儲。例如,因爲 Html 文檔全部都是 ASCII 字符,並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在 SQL Server 中。

(3)Unicode 數據類型

Unicode 數據類型包括 Nchar,Nvarchar 和Ntext。

在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型允許使用由特定字符集定義的字符。在 SQL Server 安裝過程中,允許選擇一種字符集。使用 Unicode 數據類型,列中可以存儲任何由Unicode 標準定義的字符。在 Unicode 標準中,包括了以各種字符集定義的全部字符。使用Unicode 數據類型,所戰勝的窨是使用非 Unicode 數據類型所佔用的窨大小的兩倍。

在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用 Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該使用 Nchar 字符類型,同樣,這時最多可以存儲 4000 個字符。當使用 Ntext 數據類型時,該列可以存儲多於 4000 個字符。

(4)日期和時間數據類型

日期和時間數據類型包括 Datetime 和 Smalldatetime 兩種類型。

日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01 AM 8/17/98”。前一個數據類型是日期在前,時間在後一個數據類型是霎時間在前,日期在後。在 Microsoft SQL Server 中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期範圍是從 1753 年 1 月 1 日開始,到 9999 年12 月 31 日結束(每一個值要求 8 個存儲字節)。使用 Smalldatetime 數據類型時,所存儲的日期範圍是 1900 年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節)。

日期的格式可以設定。設置日期格式的命令如下:

Set DateFormat {format | @format _var|

其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認情況下,日期格式爲 MDY。

例如,當執行 Set DateFormat YMD 之後,日期的格式爲年 月 日 形式;當執行 Set DateFormat DMY 之後,日期的格式爲 日 月有年 形式

(5)數字數據類型

數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數 。

整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數存儲的數據類型是 Int,Smallint 和 Tinyint。Int 數據類型存儲數據的範圍大於 Smallint 數據類型存儲數據的範圍,而 Smallint 據類型存儲數據的範圍大於 Tinyint 數據類型存儲數據的範圍。使用 Int 數據狗昔存儲數據的範圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求 4個字節存儲空間)。使用 Smallint 數據類型時,存儲數據的範圍從 -32 768 到 32 767(每一個值要求2個字節存儲空間)。使用 Tinyint 數據類型時,存儲數據的範圍是從0 到255(每一個值要求1個字節存儲空間)。

精確小婁數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這種數據所佔的存儲空間根據該數據的位數後的位數來確定。

在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作。3333333,當使用近似數據類型時能準確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。

(6)貨幣數據表示正的或者負的貨幣數量 。在 Microsoft SQL Server 中,貨幣數據的數據類型是Money 和 Smallmoney。Money 數據類型要求 8 個存儲字節,Smallmoney 數據類型要求 4 個存儲字節。

(7)特殊數據類型

特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即 Timestamp、Bit 和 Uniqueidentifier。

Timestamp 用於表示SQL Server 活動的先後順序,以二進投影的格式表示。Timestamp 數據與插入數據或者日期和時間沒有關係。

Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。

Uniqueidentifier 由 16 字節的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。

2.用戶定義的數據類型

用戶定義的數據類型基於在 Microsoft SQL Server 中提供的數據類型。當幾個表中必須存儲同一種數據類型時,並且爲保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。例如,可定義一種稱爲 postal_code 的數據類型,它基於 Char 數據類型。

當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基於的系統數據類型和數據類型的可空性。

(1)創建用戶定義的數據類型

創建用戶定義的數據類型可以使用 Transact-SQL 語句。系統存儲過程 sp_addtype 可以來創建用戶定義的數據類型。其語法形式如下:

sp_addtype {type},[,system_data_bype][,'null_type']

其中,type 是用戶定義的數據類型的名稱。system_data_type 是系統提供的數據類型,例如 Decimal、Int、Char 等等。 null_type 表示該數據類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOT NULL'或者'NONULL'。

例子:

Use cust

Exec sp_addtype ssn,'Varchar(11)',"Not Null'

創建一個用戶定義的數據類型 ssn,其基於的系統數據類型是變長爲11 的字符,不允許空。

例子:

Use cust

Exec sp_addtype birthday,datetime,'Null'

創建一個用戶定義的數據類型 birthday,其基於的系統數據類型是 DateTime,允許空。

例子:

Use master

Exec sp_addtype telephone,'varchar(24),'Not Null'

Eexc sp_addtype fax,'varchar(24)','Null'

創建兩個數據類型,即 telephone 和 fax

(2)刪除用戶定義的數據類型

當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是 sp_droptype {'type'}。

例子:

Use master

Exec sp_droptype 'ssn'

注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。





SQL的基本操作(2.數據庫的相關操作)



1.如何創建數據庫

(1).使用 Create Database 創建數據庫



Create Database 語名的語法形式如下:



Create Database database_name

[On

{[Primary](Name=logical_file_name,

Filename='os_file_name'

[,Size=size]

[,Maxsize=max_size]

}[,...n]

]

[Log On

}(Name=Logical_name,

Filename='os_file_name'

[,Size=size])

}[,...n]

]

[For Restore]



註釋:

Primary:該選項是一個關鍵字,用來指定主文件組中的文件。主文件組不公包含了數據庫系統表中的全部內容,而且還包含了沒有在用戶文件組中包含的全部對象。一個數據庫只能有一個主文件。在默認情況下,即在沒有指定Primary關鍵字時,列在語句中的第一個文件就是主文件。

Name:該選項指定數據庫的邏輯名字,這是在SQL Server 系統中使用的名稱,是數據庫在SQL Server 中標識符。

Filename:該選項用來指定數據庫所在文件的操作系統文件名稱和路徑。在os_file_name中的路徑必須是SQL Server 所在服務器上的一個文件夾。該操作系統文件名稱與Name 的邏輯名稱是一一對應的。

Size:該選項用來指定數據庫操作系統文件的大小。在指定文件大小的時候,既可以使用MB單位,也可以使用KB單位。如果沒有指定單位,那麼系統默認的單位是MB。文件最小是1MB,也就是說,數據庫所在的文件不能小於1MB。在默認情況下,數據庫數據文件的大小是3MB,數據庫日誌文件的大小是1MB。

Maxsize:該選項用來指定操作系統文件可以增長的最大尺寸。在指定文件增長尺寸的時候,既可以使用MB單位,也可以使用KB單位。如果沒有指定單位,那麼系統的默認單位是MB。如果沒有指定文件可以增長的最大尺寸,那麼系統的增長是沒有限制的,可以佔滿整個磁盤空間。

FielGrowth:該選取項用來指定文件的增量,當然該選項不能與Maxsize選項有衝突。該選項指定的數據值爲零時,表示文件不能增長。該選項可以用MB、KB和百分比指定。



例子:

創建一個cust數據庫,該數據庫的主數據文件的邏輯名稱是cust_data,操作系統文件是cust.mdf,大小是15MB,最大是30MB,以20%的速度增加;該數據庫的日誌文件的邏輯名稱是cust_log,操作系統是cust.ldf,大小是3MB,最大是10MB,以1MB的速度增加。



Create Database cust

On

Primary (Name=cust_data,

Filename='d:/cust.mdf',

Size=15MB,

Maxsize=30MB,

Filegrowth=20%)

Log On

(Name=cust_log,

Filename='d:/cust.ldf',

Size=3MB,

Maxsize=10MB,

FileGrowth=1MB)



2.如何增加數據庫的大小

(1).使用Alter Database命令來增加數據庫文件的大小

如果在創建數據庫文件時沒有配置文件的大小自動增長,那麼可以使用Alter Database命令來增加文件的大小。



例子:

將數據庫cust的數據文件cust_data的大小調整爲50MB。

Alter Database cust

Modify File (Name='cust_data',Size=50)



(2).使用Add File 增加一個次要文件

通過爲數據庫增加次要的數據文件和日誌文件來增加數據庫的大小。

例子:

Alter Database cust

Add File

(Name=cust_data2,Filename='d:/cust2.mdf',

Size=5MB,

Maxsize=10MB,

Filegrowth=10%)



3.壓縮數據庫和數據文件

(1)使用Dbcc Shrinkdatabase 命令壓縮整個數據庫

例子:

將cust數據庫的大小壓縮到10%

Dbcc Shrinkdatabase (cust,10)

(2)使用Dbcc ShrinkFile命令壓縮數據庫中的某一個數據文件

例子:

將cust數據文件的大小壓縮到5MB

Dbcc ShrinkFile (cust,5)



4.刪除數據庫

(1)使用Drop命令刪除數據庫

例子:

將刪除cust數據庫

Drop Database cust





SQL的基本操作(3.表的相關操作)



1.創建表

(1)用Create Table 命令創建表

語法:

Create Table tabl_name

({

}column_name As computed_column_expression

}

}[,...n]

)

[On {fiegroup | Default}]

[Textimage_On {fiegroup | Default}]



例子:

打開cust數據庫,創建一個表,該表包含了學生的有關信息,即有學號、姓名、性別、出生日期、籍貫、聯繫電話、住址和備註信息。

Use cust

Create Table students

(

number int not null,

name varchar(10) not null,

sex char(2) null,

birthday datetime null,

hometown varchar(30) null,

telphone_no varchar(12) null,

address varchar(30) null,

others varchar(50) null

)

在這個表中number表示學生代號,數據類型爲int,不允許爲空;name表示學生姓名,數據類型爲varchar,長度爲10,不允許爲空;sex表示學生的性別,數據類型爲char,長度爲2,允許爲空;birthday表示學生的出生日期,數據類型爲datetime,允許爲空;hometown表示學生的籍貫,數據類型爲varchar,長度爲30,允許爲空;telephone_no表示學生的聯繫電腦,數據類型爲varchar,長度爲12,允許爲空;address表示學生的住址,數據類型爲varchar,長度爲30,允許爲空;others表示學生的備註信息,長度爲50,允許爲空。



2.修改表的結構

(1)使用T-SQL語句增加和刪除一個新列

語法:

Alter Table table

{

ADO

{[]

|colun_name As computed_column_expression

|[]

}[,...n]

|Drop

{Column column

}[,...n]

}



例子:打開cust數據庫,修改其中的表students的結構,增加一個新字段,字段名爲ying,數據類型是varchar,長度是10,沒有默認值,充許爲空。

Use cust

Alter Table students Add ying varchar(10) null



打開cust數據庫,修改其中的表students的結構,刪除一個字段,字段名爲ying。

Use cust

Alter Table students Drop Column ying



3.向表中插入數據

(1)用 Insert 語句

語法如下:

Insert [Into]

{table_name|view_name}[(column_list)]

{Values|values_list|select_statement}

注意:在插入數據時,字符數據和日期數據要使用引號引起來。

例子:

Use cust

Insert Into students

Values (11,"影子","男","1999-12-12","湖北","83779805","武漢市橋口區","VB愛好者")

打開cust數據庫,向students表中插入數據



(2)用Default 選項

在插入數據時,可以使用Default選項。Default選項有兩種形式,一種形式是Default Values,另一種是Default。

Default Values 形式爲表中的某一行的所有列插入默認值。使用這種形式的前提條件是表中的所有列必須是這四種類型之一:Identity屬性,Timestamp數據類型,允許爲Null,或者有一個指定的默認值。否則,會錯誤信息。

例子:

Use cust

Insert Into students Default Values

這個例子會出現錯誤,因爲students表的number字段是設置爲不允許爲空的。



Default 形式是爲表中的某一列插入默認值。要插入的該列必須具備一定的條件,即該列要麼是Timestamp 數據類型,要麼是允許爲Null,要麼是有一個指定的默認值,否則,會出現錯誤信息。

例子:

Use cust

Insert Into students Values(11,"影子",Default,Default,Default,Default,Default,Default)

由天前2個字段不能爲空,所以要賦值,否則會出現錯誤,而後面的6個字段允許爲空,因此可以調用Default默認。



(3)插入部分數據

在使用Insert語句插入數據是,還可以插入部分數據,也就是可以爲每一行的指定的部分列插入數據。在插入部分數據時,應該注意以下三個問題:

☆在 Insert 子句中,指定要插入數據的列名。

☆在 Values 子句中,列出與列名對應的數據。列名的順序和數據的順序應該完全對應。

☆在 Insert 子句中,沒有列出的列應該至少具有這四種類型之一:Identtty 屬性,Timestamp 數據類型,允許爲 Null,或者有一個指定的默認值。否則,會出現錯誤信息。

例子:

Use cust

Insert Into students (number,name)

Values (110,"影子")

打開cust數據庫,向students表中插入一行數據

注意:如用下例語句將發生錯誤,因爲name字段是不允許爲空的(在創建數據庫時設定的)

Insert Into students (number)

Values (110)



(4)用 Select 語句插入多條數據

Insert 語句插入數據的特點是每一次只能插入一行數據。相反,Select 也可以用在 Insert 語句中,並且可以一次插入多條數據。使用 Select 語句插入數據的語法形式如下:

Insert table_name

Select column_list

From table_list

Where search_conditions

在使用 Select 語句插入數據時,應該注意下面幾點:

☆在 Insert 語句中使用 Select 時,他們參考的表既可以是相同的,也可以是不同的。

☆要插入數據的表必須已經存在。

☆要插入數據的表必須和 Select 的結果集兼容。兼容的含義是列的數量和順序必須相同,列的數據類型或者相同,或者SQL Server 可以自動轉換。

例子:

Use cust

Insert students

Select number,name,sex,birthday,hometown,telphone_no,address,others

From students

注意:

Select 後面的字段要輸完整,這個例子是自己向自己插入多條數據(自己向自己插入是被允許的)

補充:

你還可以“From students”後面加上“Where name="影子"”,只插入name等於影子的記錄,可以用And 和 Or 加上多個條件。



(5)使用 Select Into 插入數據到一個新表中

帶有 Into 子句的 Select 語句允許用戶定義一個新表並且把數據插入到新表中。這種方法不同於前面講述的那些方法。在前面的那些方法中,一個共同的特點,是在數據輸入之前表已經存在。而使用 Select Into 插入數據的方法,是在插入數據的過程中建立新表。

Select Into 語句的語法如下:

Select select_list

Into new_table_name

From table_list

Where search_conditions

在使用 Select Into 插入數據時,要注意下面幾點:

☆在某個數據庫中使用 Select Into 插入數據時,設置該數據庫的 Select Into/Bulk Copy 爲真。

☆新表不能存在,否則會產生錯誤信息。

☆新表中的列和行是基於查詢結果集

☆要插入的數據不記錄在日誌中。

☆在select_list 中出現的列應該使用別名,否則,新表中的列沒有列名。沒列名的表只能通過 Select * From new_table_name 的形式查詢。因此,應該爲列起個別名。

☆這種方法多用在對列進行各種計算的情況。

例子:

Select number,name

Into newcust1

From students

創建新的表newcust1,插入students表中的number和name字段的所有數據。

補充:如果要插入所有字段的記錄,則“Select *”,也可在“From students”後加條件,方法和上個例子一樣。



(6)用 UPdate 語句修改表中的數據

Update 語句用來修改表中已存在的數據。Update 語句既可以一次修改一行數據,也可以一次修改許多行,甚至可以一次修改表中的全部數據。Update 語句使用 Where 子句指定要修改的行,使用 Set 子句給出新的數據。新數據可以是常量,也可以是指定的表達式,還可以是使用 From 子句來自其他表的數據。

Update 語句的語法如下:

Update {table_name|view_name}

Set {column_list}=expression [,. . .]

[Where clause]

在使用 Update 語句時,如果沒有使用 Where 子句,那麼就對錶中所有的行進行修改。如果使用Update 語句修改數據時與數據完整性約束有衝突,那麼修改就不會發生,整個修改事務全部滾回。例如,這種衝突可能是所輸入的值是錯誤的數據類型,或者所輸入的值違背了在該列定義的規則約束,等等。

例子:

Use cust

Update students

Set name=name+"007"

Where number>100

打開cust數據庫,修改students表,使number>100的數據的name的值全部加"007"。



4.用 Delete 語句刪除表中的數據

當數據庫中的數據不需要的進修可以刪除。一般情況下,刪除數據使用 Delete 語句。Delete 語句可以一次從一個表中刪除一條或者多條數據行。

Delete 語句的語法如下:

Delete [From] table_name

Where search_conditions

在 Delete 語句中如果使用了 Where 子句,那麼就從指定的表中刪除滿足 Where 子句條件的數據行。

例子:

Use cust

Delete students

Where number>100

刪除 students中,number>100的數據

補充:

如果在 Delete 語句中沒有指定 Where 子句,那麼就將表中所有的記錄全部刪除,即 Delete students 語句刪除表中的全部記錄。

在刪除表中的全部數據時,還可以使用 Truncate Table 語句。Truncate Table 語句和 Delete 語句都可以將表中的全部數據刪除,但是,兩條語句又有不同的特點。當用戶使用 Delete 語句刪除數據時,被刪除的數據要記錄在日誌中。並不將對數據的變化記錄在日誌中。因此,使用 Truncate Table students 語句刪除記錄的速度快於使用 Delete students 語句刪除表中記錄的速度。



5.用 Drop Table 命令刪除表

當數據庫中的表不需要時可以刪除。刪除表可以使用 Drop Table 語句。刪除表就是刪除表的定義以及表的全部數據、索引、觸發器、約束和指定該表的許可。當刪除表時,基於表的視圖不能被刪除,必須使用 Drop View 語句刪除視圖。

Drop Table 語句的語法如下:

Drop Table table_name

例子:

Use cust

Drop Table students

刪除cust數據庫中的students表。

補充:

不能使用 Drop Table 語句刪除正在被約束參考的表,必須首先要麼刪除外鍵約束,要麼刪除參考表。表的所有者可以刪除表。當刪除表是時,綁定在該表上的規則或者默認則失掉了綁定,該表的約束或者觸發器則自動被刪除。如果重新創建表,必須重新綁定相應的規則和默認、重新創建觸發器和增加必要的約束。另外,系統表不能刪除。

刪除表的許可屬於表的所有者。然而,數據所有者(DBO)、系統管理員(SA)和DLL管理員可以刪除數據庫中的任何對象。





SQL的基本操作(4.數據的檢索)



1.用 Select 子句檢索記錄

Select 子句是每一個檢索數據的查詢核心。它告訴數據庫引擎返回什麼字段。

Select 子句的常見形式是:

Select *

該子句的意思是“返回在所指定的記錄源中能找到的所有字段”。這種命令形式很方便,因爲你無需知道從表中檢索的字段名稱。然而,檢索表中的所有列是低效的。因此,因該只檢索需要的字段,這樣可以大大的提高查詢的效率。

2.使用 From 子句指定記錄源

From 子句說明的是查詢檢索記錄的記錄源;該記錄源可以是一個表或另一個存儲查詢。

你還能從多個表中檢索記錄,這在後面的章節中將介紹。

例子:

Select * From students 檢索students表中的所有記錄

3.用 Where 子句說明條件

Where 子句告訴數據庫引擎根據所提供的一個或多個條件限定其檢索的記錄。條件是一個表達式,可具有真假兩種判斷。

例子:

Select * From students Where name="影子"

返回students中name字段爲影子的列表,這次所返回的結果沒有特定順序,除非你使用了 Order By 子句。該子句將在後面的章節介紹。

注意:Where 子句中的文本字符串界限符是雙引號,在VB中因改爲單引號,因爲在VB中字符串的界定符是雙引號。

補充:

使用 And 和 Or 邏輯可以將兩個或更多的條件鏈接到一起以創建更高級的 Where 子句。

例子:

Select * From students Where name="影子" And number>100

返回name爲影子number大於100的列表。

例子:

Select * From students Where name="影子" And (number>100 Or number<50)

返回name爲影子,number大於100或者小於50的列表。



Where 子句中用到的操作符

操作符 功能

< 小於

<= 小於或等於

> 大於

>= 大於或等於

= 等於

<> 不等於

Between 在某個取值範圍內

Like 匹配某個模式

In 包含在某個值列表中

SQL中的等於和不等於等操作符與VB中的意義和使用相同



例子:

(1).Between 操作符

Use cust

Select * From students

Where number Between 1 and 100

Between 操作符返回的是位於所說明的界限之內的所有記錄值。這個例子就返回 number 字段 1 到 100 之間的全部記錄。



(2). Like 操作符和通配符

Use cust

Select * From students

Where name Like "%影%"

Like 操作符把記錄匹配到你說明的某個模式。這個例子是返回含“影”的任意字符串。



四種通配符的含義

通配符 描述

% 代表零個或者多個任意字符

_(下劃線) 代表一個任意字符

[] 指定範圍內的任意單個字符

[^] 不在指定範圍內的任意單個字符



全部示例子如下:

Like "BR%" 返回以"BR"開始的任意字符串

Like "br%" 返回以"Br"開始的任意字符串

Like "%een" 返回以"een"結束的任意字符串

Like "%en%" 返回包含"en"的任意字符串

Like "_en" 返回以"en"結束的三個字符串

Like "[CK]%" 返回以"C"或者"K"開始的任意字符串

Like "[S-V]ing" 返回長爲四個字符的字符串,結尾是"ing",開始是從S到V。

Like "M[^c]%" 返回以"M"開始且第二個字符不是"c"的任意字符串。



4. 使用 Order By 對結果排序

Order By 子句告訴數據庫引擎對其檢索的記錄進行排序。可以對任何字段排序,或者對多個字段排序,並且可以以升序或隆序進行排序。

在一個正式的 Select 查詢之後包含一個 Order By 子句,後跟想排序的字段(可以有多個)便可以說明一個排序順序。

例子:

Use cust

Select * From students

Where name Like "%影%"

Order By number

對返回的結果按 number 進行排序。



以降序排序

如要以隆序排序,只需在排序的字段之後使用 Desc 關鍵字。

例子:

Use cust

Select * From students

Where name Like "%影%"

Order By number Desc



5. 使用 Top 顯示某個範圍的第一個記錄或最後一個記錄。

使用 Top 關鍵字可以只顯示一個大記錄前面或後面的少數幾個記錄。在查詢中,Top 關鍵字與排序子句一起把結果集限制爲少數幾個記錄或按某個百分比顯示整個結果記錄集合中的一部分。

例子:

Select Top 3 * From students 返回 students 表中的前3條記錄

Select Top 10 Percent * From students 返回 students 表中前面的10%個記錄

Select Top 3 * From students Order By number desc 返回 students 表中 number 最大的(最後)的3條記錄



6. 用 As 對字段名進行別名化

爲什麼在查詢中對字段命以別名,或重新命名,這樣做的原因有兩個:

☆所涉及的表的字段名很長,想使字段在結果集中更易處理一些。

☆創建的查詢產生了某些計算或合計列,需要對之進行命名。

不管是什麼原因對字段命以別名,在 SQL 中都可以容易地使用 As 子句做得。

例子:

Select number As 學號 ,name As 姓名 From students



7. 合併查詢

合併查詢( Union Query )用於合併具有相同字段結構的兩個表的內容,如果想在一個結果集中顯示多個記錄源中的不相關的記錄時,這十分有用。

例子:

Select *

From students

Union

Select *

From students1

該查詢結果集把 students 和 students1 中的記錄合併到一個結果中,其輸出就和原表歸檔之前一模一樣。

注意:缺省情況下,合併查詢不會返回重複記錄(如果記錄歸檔系統在把記錄拷到歸檔表中後不將相應的記錄刪除,這時該功能就有用了),可以加上 All 關鍵字而讓合併查詢顯示重複記錄。

例子:

Select *

From students

Union All

Select *

From students1

該合併查詢顯示 students 表和 students1 表的內容時,沒有對重複記錄進行處理

補充:

Union 運算符允許把兩個或者多個查詢結果合併到一個查詢結果集中。如果比較 Union 和 Join 兩咱運算符,那麼 Union 運算符增加行的數量,而 Join 運算符增加列的數量。使用 Union 時應該注意,兩個結果中的列的結構必須匹配,數據類型必須兼容等等。

Union 運算符的語法形式如下:

Select select_list

From clause

Where clause

Group By clause

Having clause

Union [All]

Select select_list

From clause

Where clause

Group By clause

Having clause

Order By clause

Compute clause

對於 Union 運算符,有下列幾點需要說明:

·在默認情況下,Union 運算符刪除全部冗餘行。如果使用All 選項,那麼冗餘行不刪除。

·在 Union 語句中的全部 select_list 必須有相同數量的列、兼容的數據類型並且按照同樣的順序出現。

·在結果集中,列名來自第一個 Select 語句。





8.連接查詢

在實際使用過程中經常需要同時從兩個表或者兩個以上表中檢索數據。連接就是允許同時從兩個表或者兩個以上表中檢索數據,指定這些表中某個或者某些列作爲連接條件。在 SQL Server 中,可以使用兩種連接語法形式,一種是 Ansi 連接語法形式,這是連接用在 From 子句中,另外一種是 SQL Server 連接語句形式,這是連接用在 Where 子句中。

Ansi 連接語法形式如下:

Select table_name.column_name,table_name.column_name,...

From {table_name [join_type] Join table_name On search_conditions}

Where [search_conditions]

在 Ansi 語法形式中,可以 Ansi 連接關鍵字來確定使用的連接形式。例如:

☆使用 Inner Join 關鍵字,結果集中僅包含滿足條件的行。

☆使用 Cross Join 關鍵字,結果集中包含兩個表中所有行的組合。

☆使用 Outer Join 關鍵字,結果集中既包含那些滿足條件的行,還包含那些其中某個表的全部行。

SQL Server 連接語法形式如下所示:

Select table_name.column_name,table_name.column_name,...

From [table_name,tab



結構化查詢語言(SQL)詳解之一







一、SQL語句的分類



ANSI SQL語句分成以下六類(按使用頻率排列):





數據查詢語言(DQL):其語句,也稱爲“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其他類型的SQL語句一起使用。

數據操作語言(DML):其語句包括動詞INSERT,UPDATE和DELETE。它們分別用於添加,修改和刪除表中的行。也稱爲動作查詢語言。

事務處理語言(TPL):它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。

數據控制語言(DCL):它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對錶單個列的訪問。

數據定義語言(DDL):其語句可在數據庫中創建新表(CREAT TABLE);爲表加入索引等。DDL包括許多與人數據庫目錄中獲得數據有關的保留字。它也是動作查詢的一部分。

指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。

目前還沒有一個商用的RDBMS支持全部的ANSI SQL-92中的所有保留字。例如Jet 3.5數據庫引擎不支持任何DCL保留字,而是用Data Accesss Object的計劃性安全對象和Visual Basic的保留字及關鍵字取代。同時Jet 3.5引擎不需支持CCL語句,因爲Jet不處理SQL語句中的指針。



二、DQL語法詳解





SQL操作符和表達式



SQL提供基本的算術操作符:<,>,=,<=,>=,<>。SQL增加了一組操作符,用於與文本數據類型的字段值連接(LINK和IN)及處理字段中的NULL值(IS NULL和IS NOT NULL)。SQL語句中的大多數操作符都是雙值的。雙值函數需要兩個操作數,像LIKE,IN,IS NULL等則是單值的。



對於文本字段數據類型字段的WHERE標準,最有用的操作符是LIKE。在Jet SQL中稱爲LIKE操作符。下表顯示了LIKE操作符的ANSI SQL語法和用於SQL語句WHERE子句中的Jet SQL Like操作符。



用途 ANSI SQL Jet SQL 返回

取包含字符的任何文本 LIKE '%am%' Like "*am*" ram,rams damsel,amnesty

取以字符打頭的任何文本 LIKE 'John%' Like "John*" Johnson,Johnsson

取以字符結尾的任何文本 LIKE '%son' Like "*son" Johnson,Anderson

取文本和任意單個後綴字符 LIKE 'Glen_' Like "Glen?" Glenn,Glens

取文本和任意單個前綴字符 LIKE '_am' Like "?am" dam,Pam,ram

取文本和一個前綴及任意個後綴字符 LIKE '_am%' Like "?am*" dams,Pam,Ramses



注意:爲與ANSI SQL-92保持一致,本地OLE DB數據提供者(Microsoft.JET.OLEDB.3.51)使用%和_通配符而非Jet的?和*。這種不一致要求修改已存在的DAO代碼以適應ADO使用SQL通配符。



連接表



1。常規的內部連接或相等連接



最常見的連接類型是相等連接(或稱爲INNER JOIN)。例如:



SELECT Publishers.Name,Titles.ISBN,Titles.Title FROM Publishers INNER JOIN Titles ON Publishers.PubID=Titles.PubID



也可以寫成:



SELECT Publishers.Name,Titles.ISBN,Titles.Title FROM Publishers,Titles WHERE Publishers.PubID=Titles.PubID



2。多重相等連接



例如:



SELECT Titles.Title,Publishers.Name,Titles.ISBN,Authors.Author FROM Publishers,Titles,Authors,[Title Author] WHERE Titles.ISBN=[Title Author].ISBN AND Authors.Au_ID=[Title Author].Au_ID AND Publishers.PubID=Tiltes.PubID



3。外部連接



INNER JOIN只返回與字段值相匹配的行,OUTER JOIN返回一個表的所有行和另一個表中有匹配值的行。有兩種類型的OUTER JOIN。





LEFT OUTER JOIN返回LEFT OUTER JOIN 語句左邊表或結果集的所有行和語句右邊表具有匹配值的行。WHERE子句中,*=操作符特指LEFT OUTER JOIN

RIGHT OUTER JOIN返回RIGHT OUTER JOIN 語句右邊表或結果集的所有行和語句左邊表具有匹配值的行。WHERE子句中,=*操作符表求RIGHT OUTER JOIN。

通常地,按一到多的形式創建。也就是說,代表關係中“一”方的主要表出現在JOIN表達式左邊或WHERE子句中操作符左邊,而關係中“多”方的相關表出現在表達式或操作符的右邊。LEFT OUTER JOIN可以顯示主表所有記錄,而不管相關表中的匹配記錄;RIGHT OUTER JOIN對尋找孤兒記錄很有用。所謂“孤兒記錄”就是那些在主表中沒有相關記錄的相關表中的記錄,孤兒記錄是違反引用一致性規則的結果。



注意:Jet SQL不支持WHERE子句中的*=和=*操作符。用Jet數據庫引擎時要用LEFT JOIN或RIGHT JOIN保留字來創建外部連接。



4。DISTINCTROW



限定詞DISTINCT告訴查詢只返回在SELECT語句指定字段中具有不同值的行,Jet SQL的限定詞DISTINCTROW使得返回集包括在兩個表任意字段中有異值的行(而不只是SELECT語句指定顯示的字段)



5。自連接和複合列



自連接是建立在同一表中具有相似字段數據類型兩個字段之間的一個連接。第一個字段常爲主鍵字段,而第二個字段常爲與主鍵字段相關的外部鍵字段,儘管這種結構並不是自連接必需的(爲使自連接結果有意義,前一個要求也許是需要的)。



建立自連接時,RDBMS建立原表的一個副本,然後把副本連接到原表上。以VB自帶的Nwind.mdb爲例。其中的Employees表包含ReportsTo字段來表示僱員主管的EmployeeID.在Employees表上建立自連接以顯示僱員主管名字的Jet SQL語句如下



SELECT Employees.EmployeeID AS EmpID,Employees.LastName & "," & Employees.FirstName AS Employee,Employees.ReportsTo AS SupId, EmpCopy.LastName & "," & EmpCopy.FirstName AS Supervisor FROM Employees, Employees AS EmpCopy,Employees INNER JOIN EmpCopy ON Employees.ReportsTo=EmpCopy.EmployeeID



SQL彙總函數和GROUP BY及HAVING子句



1。彙總函數





COUNT(field_name)返回field_name中包含NOT NULL值的行數,COUNT(*)返回表或查詢的行數,不考慮字段的NULL值。

MAX(field_name)返回集合中field_name的最大值

MIN(field_name)返回集合中field_name的最小值

SUM(field_name)返回集合中field_name值的和

AVG(field_name)返回集合中field_name值的算術平均值

下面是使用匯總函數的一個例子:



SELECT COUNT(*) AS Count,SUM(PubID) AS Total,AVG(PubID) AS Average,MIN(PubID) AS Minimum,MAX(PubID) AS Maximum FROM publishers



2。GROUP BY和HAVING



有重要內容的數據庫常常有包含代表分類的字段的表,例如Nwind.mdb中的Products表把一種外來食品的品種歸爲8個類別。當要爲一個對象的每個類獲得SQL彙總函數值時,可以使用GROUP BY子句,GROUP BY子句創建一個虛表稱爲分組表。如果想用特殊標準來限制組(類)成員關係,WHERE子句可以建立標準,然而,WHERE作用於整個表。HAVING子句和WHERE子句一樣,但它作用於組,而且把SQL彙總函數的適用性限制在一個組的特定集合上。所以可以加上帶有IN操作符的HAVING子句。 例如:



SELECT CategoryID AS Categroy,COUNT(ProductID) AS Item, SUM(UnitsInStock) AS Sum_Stock FROM Products GROUP BY CategoryID HAVING CategoryID IN(1,2)
發佈了12 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章