1、說明:創(chuàng)建數(shù)據(jù)庫 CREATE DATABASE database-name 2、說明:刪除數(shù)據(jù)庫 drop database dbname 3、說明:備份sql server --- 創(chuàng)建 備份數(shù)據(jù)的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 開始 備份 BACKUP DATABASE pubs TO testBack 4、說明:創(chuàng)建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根據(jù)已有的表創(chuàng)建新表: A:create table tab_new like tab_old (使用舊表創(chuàng)建新表) 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中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。 7、說明:添加主鍵: Alter table tabname add primary key(col) 說明:刪除主鍵: Alter table tabname drop primary key(col) 8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….) 刪除索引:drop index idxname 注:索引是不可更改的,想更改必須刪除重新建。 9、說明:創(chuàng)建視圖: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] 總數(shù):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 最?。簊elect 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: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。 其次,大家來看一些不錯的sql語句 1、說明:復制表(只復制結構,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1>1 法二:select top 0 * into b from a 2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標表名:b) (Access可用) insert into b(a, b, c) select d,e,f from b; 3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫' where 條件 例子:..from b in '"Server.MapPath(".")"\data.mdb" "' 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 a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 6、說明:外連接查詢(表名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.c 7、說明:在線視圖查詢(表名1:a ) select * from (SELECT a,b,c FROM a) T where t.a > 1; 8、說明:between的用法,between限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括 select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2 9、說明:in 的使用方法 select * from table1 where a [not] in (‘值1','值2','值4','值6') 10、說明:兩張關聯(lián)表,刪除主表中已經在副表中沒有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、說明:四表聯(lián)查問題: 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())>5 13、說明:一條sql 語句搞定數(shù)據(jù)庫分頁 select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段 14、說明:前10條記錄 select top 10 * form table1 where 范圍 15、說明:選擇在每一組b值相同的數(shù)據(jù)中對應的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b) 16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、說明:隨機取出10條數(shù)據(jù) select top 10 * from tablename order by newid() 18、說明:隨機選擇記錄 select newid() 19、說明:刪除重復記錄 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 20、說明:列出數(shù)據(jù)庫里所有的表名 select name from sysobjects where type='U' 21、說明:列出表里的所有的 select name from syscolumns where id=object_id('TableName') 22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似select 中的case。 select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 顯示結果: type vender pcs 電腦 A 1 電腦 A 1 光盤 B 2 光盤 A 2 手機 B 3 手機 C 3 23、說明:初始化表table1 TRUNCATE TABLE table1 24、說明:選擇從10到15的記錄 select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
ext: 1. 查看數(shù)據(jù)庫的版本 select @@version 常見的幾種SQL SERVER打補丁后的版本號: 8.00.194 Microsoft SQL Server 2000 8.00.384 Microsoft SQL Server 2000 SP1 8.00.532 Microsoft SQL Server 2000 SP2 8.00.760 Microsoft SQL Server 2000 SP3 8.00.818 Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031 8.00.2039 Microsoft SQL Server 2000 SP4 2. 查看數(shù)據(jù)庫所在機器操作系統(tǒng)參數(shù) exec master..xp_msver 3. 查看數(shù)據(jù)庫啟動的參數(shù) sp_configure 4. 查看數(shù)據(jù)庫啟動時間 select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1 查看數(shù)據(jù)庫服務器名和實例名 print 'Server Name...............: ' + convert(varchar(30),@@SERVERNAME) print 'Instance..................: ' + convert(varchar(30),@@SERVICENAME) 5. 查看所有數(shù)據(jù)庫名稱及大小 sp_helpdb 重命名數(shù)據(jù)庫用的SQL sp_renamedb 'old_dbname', 'new_dbname' 6. 查看所有數(shù)據(jù)庫用戶登錄信息 sp_helplogins 查看所有數(shù)據(jù)庫用戶所屬的角色信息 sp_helpsrvrolemember 修復遷移服務器時孤立用戶時,可以用的fix_orphan_user腳本或者LoneUser過程 更改某個數(shù)據(jù)對象的用戶屬主 sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner' 注意: 更改對象名的任一部分都可能破壞腳本和存儲過程。 把一臺服務器上的數(shù)據(jù)庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 查看某數(shù)據(jù)庫下,對象級用戶權限 sp_helprotect 7. 查看鏈接服務器 sp_helplinkedsrvlogin 查看遠端數(shù)據(jù)庫用戶登錄信息 sp_helpremotelogin 8.查看某數(shù)據(jù)庫下某個數(shù)據(jù)對象的大小 sp_spaceused @objname 還可以用sp_toptables過程看最大的N(默認為50)個表 查看某數(shù)據(jù)庫下某個數(shù)據(jù)對象的索引信息 sp_helpindex @objname 還可以用SP_NChelpindex過程查看更詳細的索引情況 SP_NChelpindex @objname clustered索引是把記錄按物理順序排列的,索引占的空間比較少。 對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數(shù)都用默認值。 查看某數(shù)據(jù)庫下某個數(shù)據(jù)對象的的約束信息 sp_helpconstraint @objname 9.查看數(shù)據(jù)庫里所有的存儲過程和函數(shù) use @database_name sp_stored_procedures 查看存儲過程和函數(shù)的源代碼 sp_helptext '@procedure_name' 查看包含某個字符串@str的數(shù)據(jù)對象名稱 select distinct object_name(id) from syscomments where text like '%@str%' 創(chuàng)建加密的存儲過程或函數(shù)在AS前面加WITH ENCRYPTION參數(shù) 解密加密過的存儲過程和函數(shù)可以用sp_decrypt過程 10.查看數(shù)據(jù)庫里用戶和進程的信息 sp_who 查看SQL Server數(shù)據(jù)庫里的活動用戶和進程的信息 sp_who 'active' 查看SQL Server數(shù)據(jù)庫里的鎖的情況 sp_lock 進程號1--50是SQL Server系統(tǒng)內部用的,進程號大于50的才是用戶的連接進程. spid是進程編號,dbid是數(shù)據(jù)庫編號,objid是數(shù)據(jù)對象編號 查看進程正在執(zhí)行的SQL語句 dbcc inputbuffer () 推薦大家用經過改進后的sp_who3過程可以直接看到進程運行的SQL語句 sp_who3 檢查死鎖用sp_who_lock過程 sp_who_lock 11.查看和收縮數(shù)據(jù)庫日志文件的方法 查看所有數(shù)據(jù)庫日志文件大小 dbcc sqlperf(logspace) 如果某些日志文件較大,收縮簡單恢復模式數(shù)據(jù)庫日志,收縮后@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} 圖形方式顯示查詢執(zhí)行計劃 在查詢分析器->查詢->顯示估計的評估計劃(D)-Ctrl-L 或者點擊工具欄里的圖形 文本方式顯示查詢執(zhí)行計劃 set showplan_all {on | off} set showplan_text { on | off } set statistics profile { on | off }
13.出現(xiàn)不一致錯誤時,NT事件查看器里出3624號錯誤,修復數(shù)據(jù)庫的方法 先注釋掉應用程序里引用的出現(xiàn)不一致性錯誤的表,然后在備份或其它機器上先恢復然后做修復操作 alter database [@error_database_name] set single_user 修復出現(xiàn)不一致錯誤的表 dbcc checktable('@error_table_name',repair_allow_data_loss) 或者可惜選擇修復出現(xiàn)不一致錯誤的小型數(shù)據(jù)庫名 dbcc checkdb('@error_database_name',repair_allow_data_loss) alter database [@error_database_name] set multi_user CHECKDB 有3個參數(shù): repair_allow_data_loss 包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤, 以及刪除已損壞的文本對象,這些修復可能會導致一些數(shù)據(jù)丟失。 修復操作可以在用戶事務下完成以允許用戶回滾所做的更改。 如果回滾修復,則數(shù)據(jù)庫仍會含有錯誤,應該從備份進行恢復。 如果由于所提供修復等級的緣故遺漏某個錯誤的修復,則將遺漏任何取決于該修復的修復。 修復完成后,請備份數(shù)據(jù)庫。 repair_fast 進行小的、不耗時的修復操作,如修復非聚集索引中的附加鍵。 這些修復可以很快完成,并且不會有丟失數(shù)據(jù)的危險。 repair_rebuild 執(zhí)行由 repair_fast 完成的所有修復,包括需要較長時間的修復(如重建索引)。 執(zhí)行這些修復時不會有丟失數(shù)據(jù)的危險。
sql語句實例 1 Examples ======================================= select id,age,Fullname from tableOne a where a.id!=(select max(id) from tableOne b where a.age=b.age and a.FullName=b.FullName) ========================================= delete from dbo.Schedule where RoomID=29 and StartTime>'2005-08-08' and EndTime'2006-09-01' and Remark like 'preset' and UserID=107 and ( (ScheduleID>=3177 and ScheduleID=3202 ) or (ScheduleID>=3229 and ScheduleID=3254) or (ScheduleID>=3307 and ScheduleID=3332) ========================================= delete tableOne where tableOne.id!=(select max(id) from tableOne b where tableOne.age=b.age and tableOne.FullName=b.FullName); ========================================== DataClient 12/23/2005 5:03:38 PM select top 5 DOC_MAIN.CURRENT_VERSION_NO as Version, DOC_MAIN.MODIFY_DATE as ModifyDT, DOC_MAIN.SUMMARY as Summary, DOC_MAIN.AUTHOR_EMPLOYEE_NAME as AuthorName, DOC_MAIN.TITLE as Title, DOC_MAIN.DOCUMENT_ID as DocumentID, Attribute.ATTRIBUTE_ID as AttributeId, Attribute.CATALOG_ID as CatalogId, DOC_STATISTIC.VISITE_TIMES as VisiteTimes, DOC_STATISTIC.DOCUMENT_ID as DocumentID2 from DOC_MAIN DOC_MAIN Inner join CATALOG_SELF_ATTRIBUTE Attribute on DOC_MAIN.CATALOG_ID=Attribute.CATALOG_ID Left join DOC_STATISTIC DOC_STATISTIC on DOC_MAIN.DOCUMENT_ID=DOC_STATISTIC.DOCUMENT_ID where (DOC_MAIN.AUTHOR_EMPLOYEE_ID = 1) and (Attribute.ATTRIBUTE_ID = 11) order by VisiteTimes DESC ==================================== select top 1 DOCUMENT_ID,EMPLOYEE_NAME,COMMENT_DATE,COMMENT_VALUE from dbo.DOC_COMMENT where DOCUMENT_ID=19 and COMMENT_DATE = (select max(COMMENT_DATE) from DOC_COMMENT where DOCUMENT_ID=19) ====================================
select TITLE, (select top 1 EMPLOYEE_NAME from dbo.DOC_COMMENT where DOCUMENT_ID=19) Commentman, (select top 1 COMMENT_DATE from dbo.DOC_COMMENT where DOCUMENT_ID=19) COMMENT_DATE from DOC_MAIN where DOCUMENT_ID=19 ====================================== alter view ExpertDocTopComment as
select DOCUMENT_ID, max(ORDER_NUMBER ) as lastednum from dbo.DOC_COMMENT group by DOCUMENT_ID
go alter view ExpertDocView as select TITLE , a.AUTHOR_EMPLOYEE_ID , c.EMPLOYEE_NAME , c.COMMENT_DATE from dbo.DOC_MAIN a left join ExpertDocTopComment b
on a.DOCUMENT_ID = b.DOCUMENT_ID
inner join DOC_COMMENT c on b.DOCUMENT_ID = c.DOCUMENT_ID and b.lastednum = c. ORDER_NUMBER ====================================== select a.Id ,a.WindowsUsername , 0 , 1 , a.Email ,
case b.EnFirstName when null then a.Username else b.EnFirstName end, case b.EnLastName when null then a.Username else b.EnLastName end from UUMS_KM.dbo.UUMS_User a left join UUMS_KM.dbo.HR_Employee b on a. HR_EmployeeId = b.id ===================================== 列出上傳文檔最多的五個人的ID select AUTHOR_EMPLOYEE_ID,count(AUTHOR_EMPLOYEE_ID) from dbo.DOC_MAIN group by AUTHOR_EMPLOYEE_ID order by count(AUTHOR_EMPLOYEE_ID) 2719 2 6 9 12 30 1 116 列出上傳文檔最多的五個人的信息 select distinct AUTHOR_EMPLOYEE_ID ,AUTHOR_EMPLOYEE_NAME from dbo.DOC_MAIN where AUTHOR_EMPLOYEE_ID in ( select top 5 AUTHOR_EMPLOYEE_ID from dbo.DOC_MAIN group by AUTHOR_EMPLOYEE_ID order by count(AUTHOR_EMPLOYEE_ID) )