SQL定義索引的語句有哪些
用SQL建立索引 為了給一個表建立索引,啟動任務欄SQL Sever程序組中的ISQL/w程序。
進入查詢窗口后,輸入下面的語句: CREATE INDEX mycolumn_index ON mytable (myclumn) 這個語句建立了一個名為mycolumn_index的索引。你可以給一個索引起任何名字,但你應該在索引名中包含所索引的字段名,這對你將來弄清楚建立該索引的意圖是有幫助的。
注意: 執行后,都會收到如下的信息: This command did not return data,and it did not return any rows這說明該語句執行成功了。索引mycolumn_index對表mytable的mycolumn字段進行。
這是個非聚簇索引,也是個非唯一索引。(這是一個索引的缺省屬性)如果你需要改變一個索引的類型,你必須刪除原來的索引并重建 一個。
建立了一個索引后,你可以用下面的SQL語句刪除它:DROP INDEX *mn_index注意在DROP INDEX 語句中你要包含表的名字。在這個例子中,你刪除的索引是mycolumn_index,它是表mytable的索引。
要建立一個聚簇索引,可以使用關鍵字CLUSTERED。記住一個表只能有一個聚簇索引。
這里有一個如何對一個表建立聚簇索引的例子:CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn)如果表中有重復的記錄,當你試圖用這個語句建立索引時,會出現錯誤。但是有重復記錄的表也可以建立索引;你只要使用關鍵字ALLOW_DUP_ROW把這一點告訴SQL Sever即可:CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW這個語句建立了一個允許重復記錄的聚簇索引。
你應該盡量避免在一個表中出現重復記錄,但是,如果已經出現了,你可以使用這種方法。要對一個表建立唯一索引,可以使用關鍵字UNIQUE。
對聚簇索引和非聚簇索引都可以使用這個關鍵字。這里有一個例子:CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)這是你將經常使用的索引建立語句。
無論何時,只要可以,你應該盡量對一個對一個表建立唯一聚簇索引來增強查詢操作。最后,要建立一個對多個字段的索引──復合索引──在索引建立語句中同時包含多個字段名。
下面的例子對firstname和lastname兩個字段建立索引:CREATE INDEX name_index ON username(firstname,lastname)這個例子對兩個字段建立了單個索引。在一個復合索引中,你最多可以對16個字段進行索引。
用事務管理器建立索引用事務管理器建立索引比用SQL語句容易的多。使用事務管理器,你可以看到已經建立的索引的列表,并可以通過圖形界面選擇索引選項。
使用事務管理器你可以用兩種方式建立索引:使用Manage Tables窗口或使用Manage Indexes窗口。 要用Manage Tables 窗口建立一個新索引,單擊按鈕Advanced Options(它看起來象一個前面有一加號的表)。
這樣就打開了Advanced Options對話框。這個對話框有一部分標名為Primary Key。
要建立一個新索引,從下拉列表中選擇你想對之建立索引的字段名。如果你想建立一個對多字段的索引,你可以選擇多個字段名。
你還可以選擇索引是聚簇的還是非聚簇的。在保存表信息后,索引會自動被建立。
在Manage Tables窗口中的字段名旁邊,會出現一把鑰匙。你已經為你的表建立了“主索引”。
主索引必須對不包含空值的字段建立。另外,主索引強制一個字段成為唯一值字段。
要建立沒有這些限制的索引,你需要使用Manage Indexes窗口。從菜單中選擇Manage|Indexes,打開Manage Indexes 窗口。
在Manage Indexes 窗口中,你可以通過下拉框選擇表和特定的索引。(見圖11.2)。
要建立一個新索引,從Index下拉框中選擇New Index.,然后就可以選擇要對之建立索引的字段。單擊按鈕Add,把字段加人到索引中。
你可以為你的索引選擇許多不同的選項。例如,你可以選擇該索引是聚簇的還是非聚簇的。
你還可以指定該索引為唯一索引。設計好索引后,單擊按鈕Build,建立該索引。
注意:唯一索引是指該字段不能有重復的值,而不是只能建立這一個索引。
編寫T-SQL語句,定義規則Email-rule,限制字符串中必
ifobject_id('fCheckEmail')isnotnulldropfunctionfCheckEmailGO----創建驗證函數,返回值為1表示正確,否則格式錯誤createfunctionfCheckEmail(@Emailvarchar(1000)) ('')>0or/*含有空格*/len(@email)-len(replace(@email,'。
',''))>1or/*'。'超過1個*/len(@email)-len(replace(@email,'@',''))>1or/*'@'超過1個*/right(@email,1)='。
'or/*以'。'結尾*/right(@email,1)='@'or/*以'@'結尾*/left(@email,1)='。
'or/*以'。'開頭*/left(@email,1)='@'or/*以'。
'開頭*/charindex('。')-charindex('@') '相鄰*/charindex('。
')-charindex('@')=1/*'@'與'。'相鄰*/ /*僅供參考,可以靈活添加\刪除或修改某些條件*/。
SQL最基本的語句是哪些
掌握SQL四條最基本的數據操作語句:Insert,Select,Update和Delete。
練掌握SQL是數據庫用戶的寶貴財 富。在本文中,我們將引導你掌握四條最基本的數據操作語句?SQL的核心功能?來依次介紹比較操作符、選擇斷言以及三值邏輯。
當你完成這些學習后,顯然你已經開始算是精通SQL了。在我們開始之前,先使用CREATE TABLE語句來創建一個表(如圖1所示)。
DDL語句對數據庫對象如表、列和視進行定義。它們并不對表中的行進行處理,這是因為DDL語句并不處理數據庫中實際的數據。
這些工作由另一類SQL語句?數據操作語言(DML)語句進行處理。SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。
由于這是大多數SQL用戶經常用到的,我們有必要在此對它們進行一一說明。在圖1中我們給出了一個名為EMPLOYEES的表。
其中的每一行對應一個特定的雇員記錄。請熟悉這張表,我們在后面的例子中將要用到它。
INSERT語句用戶可以用INSERT語句將一行記錄插入到指定的一個表中。例如,要將雇員John Smith的記錄插入到本例的表中,可以使用如下語句:INSERT INTO EMPLOYEES VALUES('Smith','John','1980-06-10','Los Angles',16,45000);通過這樣的INSERT語句,系統將試著將這些值填入到相應的列中。
這些列按照我們創建表時定義的順序排列。在本例中,第一個值“Smith”將填到第一個列LAST_NAME中;第二個值“John”將填到第二列FIRST_NAME中……以此類推。
我們說過系統會“試著”將值填入,除了執行規則之外它還要進行類型檢查。如果類型不符(如將一個字符串填入到類型為數字的列中),系統將拒絕這一次操作并返回一個錯誤信息。
如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因為SQL提供對事務的支持。
一次事務將數據庫從一種一致性轉移到另一種一致性。如果事務的某一部分失敗,則整個事務都會失敗,系統將會被恢復(或稱之為回退)到此事務之前的狀態。
回到原來的INSERT的例子,請注意所有的整形十進制數都不需要用單引號引起來,而字符串和日期類型的值都要用單引號來區別。為了增加可讀性而在數字間插入逗號將會引起錯誤。
記住,在SQL中逗號是元素的分隔符。同樣要注意輸入文字值時要使用單引號。
雙引號用來封裝限界標識符。對于日期類型,我們必須使用SQL標準日期格式(yyyy-mm-dd),但是在系統中可以進行定義,以接受其他的格式。
當然,2000年臨近,請你最好還是使用四位來表示年份。既然你已經理解了INSERT語句是怎樣工作的了,讓我們轉到EMPLOYEES表中的其他部分:INSERT INTO EMPLOYEES VALUES('Bunyan','Paul','1970-07-04','Boston',12,70000);INSERT INTO EMPLOYEES VALUES('John','Adams','1992-01-21','Boston',20,100000);INSERT INTO EMPLOYEES VALUES('Smith','Pocahontas','1976-04-06','Los Angles',12,100000);INSERT INTO EMPLOYEES VALUES('Smith','Bessie','1940-05-02','Boston',5,200000);INSERT INTO EMPLOYEES VALUES('Jones','Davy','1970-10-10','Boston',8,45000);INSERT INTO EMPLOYEES VALUES('Jones','Indiana','1992-02-01','Chicago',NULL,NULL);在最后一項中,我們不知道Jones先生的工薪級別和年薪,所以我們輸入NULL(不要引號)。
NULL是SQL中的一種特殊情況,我們以后將進行詳細的討論。現在我們只需認為NULL表示一種未知的值。
有時,像我們剛才所討論的情況,我們可能希望對某一些而不是全部的列進行賦值。除了對要省略的列輸入NULL外,還可以采用另外一種INSERT語句,如下:INSERT INTO EMPLOYEES(FIRST_NAME, LAST_NAME,HIRE_DATE, BRANCH_OFFICE)VALUE('Indiana','Jones','1992-02-01','Indianapolis');這樣,我們先在表名之后列出一系列列名。
未列出的列中將自動填入缺省值,如果沒有設置缺省值則填入NULL。請注意我們改變了列的順序,而值的順序要對應新的列的順序。
如果該語句中省略了FIRST_NAME和LAST_NAME項(這兩項規定不能為空),SQL操作將失敗。讓我們來看一看上述INSERT語句的語法圖:INSERT INTO table[(column { ,column})]VALUES(columnvalue [{,columnvalue}]);和前一篇文章中一樣,我們用方括號來表示可選項,大括號表示可以重復任意次數的項(不能在實際的SQL語句中使用這些特殊字符)。
VALUE子句和可選的列名列表中必須使用圓括號。SELECT語句SELECT語句可以從一個或多個表中選取特定的行和列。
因為查詢和檢索數據是數據庫管理中最重要的功能,所以SELECT語句在SQL中是工作量最大的部分。實際上,僅僅是訪問數據庫來分析數據并生成報表的人可以對其他SQL語句一竅不通。
SELECT語句的結果通常是生成另外一個表。在執行過程中系統根據用戶的標準從數據庫中選出匹配的行和列,并將結果放到臨時的表中。
在直接SQL(direct SQL)中,它將結果顯示在終端的顯示屏上,或者將結果送到打印機或文件中。也可以結合其他SQL語句來將結果放到一個已知名稱的表中。
SELECT語句功能。
SQL有那些基本語句
1、說明:創建數據庫 CREATE DATABASE database-name 2、說明:刪除數據庫 drop database dbname 3、說明:備份sql server --- 創建 備份數據的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_*' --- 開始 備份 BACKUP DATABASE pubs TO testBack 4、說明:創建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根據已有的表創建新表: A:create table tab_new like tab_old (使用舊表創建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、說明:刪除新表 drop table tabname 6、說明:增加一個列 Alter table tabname add column col type 注:列增加后將不能刪除。
DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度。 7、說明:添加主鍵: Alter table tabname add primary key(col) 說明:刪除主鍵: Alter table tabname drop primary key(col) 8、說明:創建索引:create [unique] index idxname on tabname(col….) 刪除索引:drop index idxname 注:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement 刪除視圖:drop view viewname 10、說明:幾個簡單的基本的sql語句 選擇:select * from table1 where 范圍 插入:insert into table1(field1,field2) values(value1,value2) 刪除:delete from table1 where 范圍 更新:update table1 set field1=value1 where 范圍 查找:select * from table1 where field1 like '%value1%' ---like的語法很精妙,查資料! 排序:select * from table1 order by field1,field2 [desc] 總數:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、說明:幾個高級查詢運算詞 A: UNION 運算符 UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。
兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。 B: EXCEPT 運算符 EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結果表。
當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。 C: INTERSECT 運算符 INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結果表。
當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。 注:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接 A、left outer join: 左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。