SQLSERVER語句 in和exists哪個效率高本人測試證明
例如下面兩個SQL語句1 SELECT OrderNo, SiteCode, AreaCode2 FROM SchedulingProgram3 WHERE AreaCode IN ( 'P', 'M' ) AND SiteCode IN ( SELECT SiteCode4 FROM EnvBasicInfo5 WHERE cityiD = 31 ) AND OrderNo NOT IN (6 SELECT OrderNo7 FROM KK_DeliveryinfoTmp )上面SQL語句IN里面有IN和NOT IN1 SELECT OrderNo, SiteCode, AreaCode2 FROM SchedulingProgram3 WHERE ( AreaCode IN ( 'P', 'M' ) AND SiteCode IN ( SELECT SiteCode4 FROM EnvBasicInfo5 WHERE cityiD = 31 )6 ) AND NOT EXISTS ( SELECT OrderNo7 FROM KK_DeliveryinfoTmp8 WHERE KK_*o = *o )上面的SQL語句IN里面又有NOT EXISTS這樣的情況很難測試同等條件下IN語句和EXISTS語句的效率還有一個非SARG運算符在《SQLSERVER企業級平臺管理實踐》的第424頁里提到:SQLSERVER對篩選條件(search argument/SARG)的寫法有一定的建議對于不使用SARG運算符的表達式,索引是沒有用的,SQLSERVER對它們很難使用比較優化的做法。
非SARG運算符包括NOT、、NOT EXISTS、NOT IN、NOT LIKE和內部函數,例如:Convert、Upper等所以當您的表中有索引并且SQL語句包含非SARG運算符,那么當測試SQL語句的執行時間的時候肯定相差很大,因為有些SQL語句走索引,有些SQL語句不走索引建表腳本注意:兩個表中都有索引!!CT_FuelingData表1 USE [GPOSDB] 2 GO 3 /****** 對象: Table [dbo].[CT_FuelingData] 腳本日期: 08/24/2013 11:00:34 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 SET ANSI_PADDING ON 9 GO10 CREATE TABLE [dbo].[CT_FuelingData](11 [RecordNO] [int] IDENTITY(1,1) NOT NULL,12 [I_FD_StationNo] [int] NOT NULL,13 [VC_FD_No] [varchar](50) NOT NULL,14 [VC_FD_Cardno] [varchar](50) NOT NULL,15 [I_FD_CardStatus] [int] NULL,16 [LI_FD_CTC] [bigint] NOT NULL,17 [I_FD_TypeCode] [int] NULL,18 [I_FD_PumpID] [int] NOT NULL,19 [VC_FD_OilType] [varchar](50) NULL,20 [DE_FD_Volume] [decimal](18, 2) NULL,21 [DE_FD_Price] [decimal](18, 2) NULL,22 [DE_FD_Amount] [decimal](18, 2) NULL,23 [I_FD_Point] [decimal](10, 2) NULL,24 [D_FD_DateTime] [datetime] NOT NULL,25 [VC_FD_GroupNo] [varchar](50) NULL,26 [D_FD_GroupDate] [datetime] NULL,27 [DE_FD_CardAmount] [decimal](18, 2) NULL,28 [DE_FD_VolumeTotals] [decimal](18, 2) NULL,29 [DE_FD_AmountTotals] [decimal](18, 2) NULL,30 [I_FD_ISSend] [int] NULL,31 [VC_FD_CardMoneyauthFile] [varchar](50) NULL,32 [D_Month] [datetime] NULL,33 CONSTRAINT [PK_CT_FuelingData_1] PRIMARY KEY CLUSTERED 34 (35 [VC_FD_No] ASC36 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]37 ) ON [PRIMARY]38 39 GO40 SET ANSI_PADDING OFFCT_InhouseCard表1 USE [GPOSDB] 2 GO 3 /****** 對象: Table [dbo].[CT_InhouseCard] 腳本日期: 08/24/2013 10:59:58 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 SET ANSI_PADDING ON 9 GO10 CREATE TABLE [dbo].[CT_InhouseCard](11 [RecordNO] [int] IDENTITY(1,1) NOT NULL,12 [VC_IC_CardNO] [varchar](50) NOT NULL,13 [VC_IC_PhysicalNO] [varchar](50) NULL,14 [I_IC_CardType] [int] NULL,15 [VC_IC_UserName] [varchar](50) NULL,16 [VC_IC_JobNO] [varchar](50) NULL,17 [VC_IC_UserID] [varchar](50) NULL,18 [VC_IC_Password] [varchar](50) NULL,19 [DE_IC_CardAmount] [decimal](18, 2) NULL,20 [DE_IC_AppendAmount] [decimal](18, 2) NULL,21 [DE_IC_ConsumerAmount] [decimal](18, 2) NULL,22 [I_IC_ISLost] [int] NULL,23 [D_IC_UsedDateTime] [datetime] NULL,24 [D_IC_UselifeDateTime] [datetime] NULL,25 [I_IC_IssueStationNO] [int] NULL,26 [VC_IC_IssuerNO] [varchar](50) NULL,27 [D_IC_IssueDateTime] [datetime] NULL,28 [D_IC_LastUpdateDateTime] [datetime] NULL,29 [I_IC_CardStatus] [int] NULL,30 [VC_IC_Remark] [varchar](256) NULL,31 CONSTRAINT [PK_CT_InhouseCard] PRIMARY KEY CLUSTERED 32 (33 [VC_IC_CardNO] ASC34 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]35 ) ON [PRIMARY]36 37 GO38 SET ANSI_PADDING OFF。
SQL Server里常用的語句有哪些
一、 簡單查詢 簡單的Transact-SQL查詢只包括選擇列表、 FROM子句和WHERE子句。
它們分別說明所查詢列、查詢的 表或視圖、以及搜索條件等。例如, 下面的語句查詢testtable表中姓名為“張三” 的nickname字段和email字段。
SELECT nickname,email FROM testtable WHERE name='張三' (一) 選擇列表 選擇列表(select_list)指出所查詢列, 它可以是一組列名列表、星號、表達式、變量( 包括局部變量和全局變量)等構成。 1、選擇所有列 例如,下面語句顯示testtable表中所有列的數據: SELECT * FROM testtable 2、 選擇部分列并指定它們的顯示次序查詢結果集合中數據的排列順序與 選擇列表中所指定的列名排列順序相同。
例如: SELECT nickname,email FROM testtable 3、更改列標題 在選擇列表中,可重新指定列標題。定義格式為: 列標題=列名 列名 列標題如果指定的列標題不是標準的標識符格式時, 應使用引號定界符,例如,下列語句使用漢字顯示列標題: SELECT 昵稱=nickname,電子郵件=email FROM testtable 4、刪除重復行 SELECT語句中使用ALL或DISTINCT選項來顯示表中 符合條件的所有行或刪除其中重復的數據行,默認 為ALL。
使用DISTINCT選項時, 對于所有重復的數據行在SELECT返回的結果集合中只保留一行 。 5、限制返回的行數 使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說明返回n行,而TOP n PERCENT時,說明n是 表示一百分數,指定返回的行數等于總行數的百分之幾。
例如: SELECT TOP 2 * FROM testtable SELECT TOP 20 PERCENT * FROM testtable (二)FROM子句 FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。 在FROM子句中最多可指定256個表或視圖, 它們之間用逗號分隔。
在FROM子句同時指定多個表或視圖時, 如果選擇列表中存在同名列,這時應使用對象名限定這些列 所屬的表或視圖。 例如在usertable和citytable表中同時存在ci tyid列,在查詢兩個表中的cityid時應 使用下面語句格式加以限定: SELECT username,* FROM usertable,citytable WHERE *=citytable. cityid 在FROM子句中可用以下兩種格式為表或視圖指定別名: 表名as 別名 表名 別名 (二) FROM子句 FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。
在FROM子句中最多可指定256個表或視圖, 它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時, 如果選擇列表中存在同名列,這時應使用對象名限定這些列 所屬的表或視圖。
例如在usertable和citytable表中同時存在ci tyid列, 在查詢兩個表中的cityid時應使用下面語句格式加以限定: SELECT username,* FROM usertable,citytable WHERE *=citytable. cityid 在FROM子句中可用以下兩種格式為表或視圖指定別名: 表名as 別名 表名 別名 例如上面語句可用表的別名格式表示為: SELECT username,* FROM usertable a,citytable b WHERE *=* SELECT不僅能從表或視圖中檢索數據, 它還能夠從其它查詢語句所返回的結果集合中查詢數據。 例如: SELECT *_fname+*_lname FROM authors a,titleauthor ta (SELECT title_id,title FROM titles WHERE ytd_sales>10000 ) AS t WHERE *_id=*_id AND *_id=*_id 此例中,將SELECT返回的結果集合給予一別名t, 然后再從中檢索數據。
(三) 使用WHERE子句設置查詢條件 WHERE子句設置查詢條件,過濾掉不需要的數據行。 例如下面語句查詢年齡大于20的數據: SELECT * FROM usertable WHERE age>20 WHERE子句可包括各種條件運算符: 比較運算符(大小比較):>、>=、=、<、<=、<>、!>、 !< 范圍運算符(表達式值是否在指定的范圍):BETWEEN… AND… NOT BETWEEN…AND… 列表運算符(判斷表達式是否為列表中的指定項):IN (項1,項2……) NOT IN (項1,項2……) 模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、 NOT LIKE 空值判斷符(判斷表達式是否為空):IS NULL、NOT IS NULL 邏輯運算符(用于多條件的邏輯連接):NOT、AND、OR 1、范圍運算符例:age BETWEEN 10 AND 30相當于age>=10 AND age<=30 2、列表運算符例:country IN ('Germany','China') 3、模式匹配符例:常用于模糊查找, 它判斷列值是否與指定的字符串格式相匹配。
可用于char、 varchar、text、ntext、 datetime和smalldatetime等類型查詢。 可使用以下通配字符: 百分號%:可匹配任意類型和長度的字符,如果是中文, 請使用兩個百分號即%%。
下劃線_:匹配單個任意字符,它常用來限制表達式的字符長度。 方括號[]:指定一個字符、字符串或范圍, 要求所匹配對象為它們中的任一個。
[^]:其取值也[] 相同,但它要求所匹配對象為指定字符以外的任一個字符。 例如: 限制以Publishing結尾,使用LIKE '%Publishing' 限制以A開頭:LIKE '[A]%' 限制以A開頭外:LIKE '[^A]%' 4、空值判斷符例WHERE age IS NULL 5、邏輯運算符:優先級為NOT、AND、OR (四)查詢結果排序 使用。
Sql Server 中 in 和 between 的用法..
操作符 BETWEEN 。
AND 會選取介于兩個值之間的數據范圍。這些值可以是數值、文本或者日期。
例如:SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 *:IN 操作符允許我們在 WHERE 子句中規定多個值。 例如:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,。
) 擴展資料: SQL 語句后面的分號: 某些數據庫系統要求在每條 SQL 命令的末端使用分號。在我們的教程中不使用分號。
分號是在數據庫系統中分隔每條 SQL 語句的標準方法,這樣就可以在對服務器的相同請求中執行一條以上的語句。 如果您使用的是 MS Access 和 SQL Server 2000,則不必在每條 SQL 語句之后使用分號,不過某些數據庫軟件要求必須使用分號。
參考鏈接:w3school-sql server語法。
常用標準Sql Server語句
一、基礎1、說明:創建數據庫CREATE DATABASE database-name 2、說明:刪除數據庫drop database dbname3、說明:備份sql server--- 創建 備份數據的 deviceUSE masterEXEC 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 only5、說明:刪除新表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 * from 學員表 刪除視圖:drop view viewname10、說明:幾個簡單的基本的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 table111、說明:幾個高級查詢運算詞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 = *:right outer join: 右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。二、提升1、說明:復制表(只復制結構,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1法二:select top 0 * into b from a2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)insert into b(a, b, c) select d,e,f from b;3、說明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)insert into b(a, b, c) select d,e,f from b in '具體數據庫' where 條件例子:..from b in '"&*h(".")&"\*" &"' where..4、說明:子查詢(表名1:a 表名2:b)select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)5、說明:顯示文章、提交人和最后回復時間select *,*me,*e from table a,(select max(adddate) adddate from table where *=*) b6、說明:外連接查詢(表名1:a 表名2:b)select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c7、說明:在線視圖查詢(表名1:a )select * from (SELECT a,b,c FROM a) T where t.a > 1;8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between 數值1 and 數值29、說明:in 的使用方法select * from table1 where a [not] in ('值1','值2','值4','值6')10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息 delete from table1 where not exists ( select * from table2 where *1=*1 )11、說明:四表聯查問題:select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where 。
..12、說明:日程安排提前五分鐘提醒 SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate()。
請教一個關于SQL語句中in的相關問題
拜托,int [] cID 這個變量時。net程序里面的數組, sql=“”語句則是要放到sql2005這個dbms里面執行,他們兩個是不同的系統怎么能直接寫在sql里面??如果你要那樣實現,應該先把cID這樣的數組值先insert到一個臨時表里面,然后在sql里面這樣寫
where id in (select cID from 臨時表),
如果cID里面值不多,可以用拼字符串來實現,就是你說的那個意思,只是拼字符串的方法不對,應該是
for (i=0 ,i++ ,i{sql_str1 = convertostring(cID[i]) +','+sql_str1} ;
sql="******* where id in (" + sql_str1 +")";
最后輸出sql檢查下,如果沒問題就ok了
sql server 嵌套查詢語句中什么時候用in,什么時候又用exists!
sqlserver嵌套查詢語句中使用in或者exists的場景和原則如下:
1. 如果查詢的兩個表大小相當,那么用in和exists差別不大。兩者都可以使用。
2. in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。所以當有多重循環,使用in更合適,效率越高。
3. 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。
NOT EXISTS,exists的用法跟in不一樣,一般都需要和子表進行關聯,而且關聯時,需要用索引,這樣就可以加快速度。
sqlserver 更新語句
UPDATE table_1 SET code = 333
WHERE exists
( select top 2 id,name from table_2
where table_*=id and table_*=name order by id)
不知道你的top的用意,如果確實只提取子查詢的前兩條估計要麻煩點寫了
UPDATE table_1 SET code = 333
WHERE id in ( select top 2 id from table_2 order by id)
and name in ( select top 2 name from table_2 order by id)
sql 語句大全
1. 查看數據庫的版本 select @@version 2. 查看數據庫所在機器操作系統參數 exec master..xp_msver 3. 查看數據庫啟動的參數 sp_configure 4. 查看數據庫啟動時間 select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1 查看數據庫服務器名和實例名 print 'Server Name。
:' + convert(varchar(30),@@SERVERNAME) print 'Instance。
:' + convert(varchar(30),@@SERVICENAME) 5. 查看所有數據庫名稱及大小 sp_helpdb 重命名數據庫用的SQL sp_renamedb 'old_dbname', 'new_dbname' 6. 查看所有數據庫用戶登錄信息 sp_helplogins 查看所有數據庫用戶所屬的角色信息 sp_helpsrvrolemember 修復遷移服務器時孤立用戶時,可以用的fix_orphan_user腳本或者LoneUser過程 更改某個數據對象的用戶屬主 sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner' 注意:更改對象名的任一部分都可能破壞腳本和存儲過程。 把一臺服務器上的數據庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 查看某數據庫下,對象級用戶權限 sp_helprotect 7. 查看鏈接服務器 sp_helplinkedsrvlogin 查看遠端數據庫用戶登錄信息 sp_helpremotelogin 8.查看某數據庫下某個數據對象的大小 sp_spaceused @objname 還可以用sp_toptables過程看最大的N(默認為50)個表 查看某數據庫下某個數據對象的索引信息 sp_helpindex @objname 還可以用SP_NChelpindex過程查看更詳細的索引情況 SP_NChelpindex @objname clustered索引是把記錄按物理順序排列的,索引占的空間比較少。
對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數都用默認值。 查看某數據庫下某個數據對象的的約束信息 sp_helpconstraint @objname9.查看數據庫里所有的存儲過程和函數 use @database_name sp_stored_procedures 查看存儲過程和函數的源代碼 sp_helptext '@procedure_name' 查看包含某個字符串@str的數據對象名稱 select distinct object_name(id) from syscomments where text like '%@str%' 創建加密的存儲過程或函數在AS前面加WITH ENCRYPTION參數 解密加密過的存儲過程和函數可以用sp_decrypt過程 10.查看數據庫里用戶和進程的信息 sp_who 查看SQL Server數據庫里的活動用戶和進程的信息 sp_who 'active' 查看SQL Server數據庫里的鎖的情況 sp_lock 進程號1--50是SQL Server系統內部用的,進程號大于50的才是用戶的連接進程. spid是進程編號,dbid是數據庫編號,objid是數據對象編號 查看進程正在執行的SQL語句 dbcc inputbuffer () 推薦大家用經過改進后的sp_who3過程可以直接看到進程運行的SQL語句 sp_who3 檢查死鎖用sp_who_lock過程 sp_who_lock 11.查看和收縮數據庫日志文件的方法 查看所有數據庫日志文件大小 dbcc sqlperf(logspace) 如果某些日志文件較大,收縮簡單恢復模式數據庫日志,收縮后@database_name_log的大小單位為M backup log @database_name with no_log dbcc shrinkfile (@database_name_log, 5) 12.分析SQL Server SQL 語句的方法:set statistics time {on | off} set statistics io {on | off} 圖形方式顯示查詢執行計劃 在查詢分析器->查詢->顯示估計的評估計劃(D)-Ctrl-L 或者點擊工具欄里的圖形 文本方式顯示查詢執行計劃 set showplan_all {on | off} set showplan_text { on | off } set statistics profile { on | off } 13.出現不一致錯誤時,NT事件查看器里出3624號錯誤,修復數據庫的方法 先注釋掉應用程序里引用的出現不一致性錯誤的表,然后在備份或其它機器上先恢復然后做修復操作 alter database [@error_database_name] set single_user 修復出現不一致錯誤的表 dbcc checktable('@error_table_name',repair_allow_data_loss) 或者可惜選擇修復出現不一致錯誤的小型數據庫名 dbcc checkdb('@error_database_name',repair_allow_data_loss) alter database [@error_database_name] set multi_user CHECKDB 有3個參數:repair_allow_data_loss 包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤,以及刪除已損壞的文本對象,這些修復可能會導致一些數據丟失。
修復操作可以在用戶事務下完成以允許用戶回滾所做的更改。 如果回滾修復,則數據庫仍會含有錯誤,應該從備份進行恢復。
如果由于所提供修復等級的緣故遺漏某個錯誤的修復,則將遺漏任何取決于該修復的修復。 修復完成后,請備份數據庫。
repai*_**st 進行小的、不耗時的修復操作,如修復非聚集索引中的附加鍵。 這些修復可以很快完成,并且不會有丟失數據的危險。
repair_rebuild 執行由 repai*_**st 完成的所有修復,包括需要較長時間的修復(如重建索引)。 執行這些修復時不會有丟失數據的危險。
添加、刪除、修改使用*e(Sql)命令執行操作 ╔--------------------╗ ☆ 數據記錄篩選 ☆ ╚--------------------╝ 注意:單雙引號的用法可能有誤(沒有測式) Sql = "Select Distinct 字段名 From 數據表" Distinct函數,查詢數據庫存表內不重復的記錄 Sql = "Select Count(*) From 數據表 where 字段名1>#18:0:0# and 。
公司常用的sql server 語句
--數據定義CREATE TABLE --創建一個數據庫表DROP TABLE --從數據庫中刪除表ALTER TABLE --修改數據庫表結構CREATE VIEW --創建一個視圖DROP VIEW --從數據庫中刪除視圖CREATE INDEX --為數據庫表創建一個索引DROP INDEX --從數據庫中刪除索引CREATE PROCEDURE --創建一個存儲過程DROP PROCEDURE --從數據庫中刪除存儲過程CREATE TRIGGER --創建一個觸發器DROP TRIGGER --從數據庫中刪除觸發器CREATE SCHEMA --向數據庫添加一個新模式DROP SCHEMA --從數據庫中刪除一個模式CREATE DOMAIN --創建一個數據值域ALTER DOMAIN --改變域定義DROP DOMAIN --從數據庫中刪除一個域--數據控制GRANT --授予用戶訪問權限DENY --拒絕用戶訪問REVOKE --解除用戶訪問權限--事務控制COMMIT --結束當前事務ROLLBACK --中止當前事務SET TRANSACTION --定義當前事務數據訪問特征--程序化SQLDECLARE --為查詢設定游標EXPLAN --為查詢描述數據訪問計劃OPEN --檢索查詢結果打開一個游標FETCH --檢索一行查詢結果CLOSE --關閉游標PREPARE --為動態執行準備SQL 語句EXECUTE --動態地執行SQL 語句DESCRIBE --描述準備好的查詢 ---局部變量declare @id char(10)--set @id = ''''10010001''''select @id = ''''10010001'''' ---全局變量---必須以@@開頭--IF ELSEdeclare @x int @y int @z intselect @x = 1 @y = 2 @z=3if @x > @yprint ''''x > y'''' --打印字符串''''x > y''''else if @y > @zprint ''''y > z''''else print ''''z > y''''--CASEuse panguupdate employeeset e_wage =casewhen job_level = '1' then e_wage*1.08when job_level = '2' then e_wage*1.07when job_level = '3' then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印變量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印變量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--WAITFOR--例 等待1 小時2 分零3 秒后才執行SELECT 語句waitfor delay '01:02:03'select * from employee--例 等到晚上11 點零8 分后才執行SELECT 語句waitfor time '23:08:00'select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator valueex宿主)select * from stock_information where stockid = str(nid)stockname = ''''str_name'''' stockname like ''''% find this %'''' stockname like ''''[a-zA-Z]%'''' --------- ([]指定值的范圍)stockname like ''''[^F-M]%'''' --------- (^排除指定范圍)--------- 只能在使用like關鍵字的where子句中使用通配符)or stockpath = ''''stock_path''''or stocknumber < 1000and stockindex = 24not stock*** = ''''man''''stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列號stockname = (select stockname from stock_information where stockid = 4)--------- 子查詢--------- 除非能確保內層select只返回一個行的值,--------- 否則應在外層where子句中用一個in限定符select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重復select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_nameselect stockname , "stocknumber" = count(*) from table_name group by stockname--------- group by 將表按行分組,指定列中有相同的值having count(*) = 2 --------- having選定指定的組select * from table1, table2 where * *= * -------- 左外部連接,table1中有的而table2中沒有得以null表示* =* * -------- 右外部連接 select stockname from table1union [all] ----- union合并查詢結果集,all-保留重復行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value為select語句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name ----------- 刪除表中所有行,仍保持表的完整性drop table table_name --------------- 完全刪除表***alter table*** --- 修改數據庫表結構alter table *_name add column_name char(2) null 。
..sp_help table_name ---- 顯示表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select 。
。 ----- 實現刪除列的方法(創建新表)alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束***function(/*常用函數*/)***----統計函數----AVG --求平均值COUNT --統計數目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工資最高的員工姓。
轉載請注明出處華閱文章網 » sqlserverin語句