需要SQL學習資料的同學見文末的資料領取方法。
1、說明:創建資料庫
CREATE databasename
2、說明:刪除資料庫
drop dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC 'disk''testBack''c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP pubs testBack
4、說明:創建新表
create tabname(col1 type1 [nullprimary ],col2 type2 [nullcreate tab_new tab_old (使用舊錶創建新表)
B:table as col1,col2… tab_old definition table
table add col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加類型的長度。
7、說明:添加主鍵: table add keyAlter tabname primary (col)
8、說明:創建索引:[] idxname tabname(col….)
刪除索引:index create viewname select
drop viewname
10、說明:幾個簡單的基本的sql語句
選擇:* table1 範圍
插入:into valuesdelete table1 範圍
更新:table1 field1=value1 範圍
查找:* table1 field1 』%value1%』 select from order field1,field2 []
總數:count totalcount table1
求和:sumas from select (field1) avgvalue table1
最大:maxas from select (field1) minvalue table1
11、說明:幾個高級查詢運算詞
A: 運算符
UNION ALL UNION UNION ),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: 運算符
EXCEPT ALL EXCEPT EXCEPT ),不消除重複行。
C: 運算符
INTERSECT ALL INTERSECT INTERSECT ),不消除重複行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、() :
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: a.a, a.b, a.c, b.c, b.d, b.f a OUT b a.a = b.c
B:() :
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:/() :
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
12、分組:by一張表,一旦分組完成後,查詢後只能得到組相關的信息。
countsummaxminavg 在SQLServer中分組時:不能以text,ntext,image類型的欄位作為分組依據
分離資料庫: sp_detach_db; 附加資料庫:sp_attach_db 後接表明,附加需要完整的路徑名
14.如何修改資料庫的名稱:
sp_renamedb ,
二、提升
1、說明:複製表(只複製結構,源表名:a 新表名:b) (Access可用)
法一:* b a 1<>1(僅用於SQlServer)
法二:top into from into select from
into select from in where
from in where
a,b,c a a (d b ) 或者: a,b,c a a (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select from a,(maxfrom where .title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select from LEFT JOIN ON * (a,b,c a) T t.a > 1;
8、說明:的用法,限制查詢數據範圍時包括了邊界值,between* table1 time time1 time2
select from where not 數值1 數值2
9、說明:的使用方法
select from where notin from where exists ( * table2 table1.field1=table2.field1 )
11、說明:四表聯查問題:
select from left join on right join on inner d a.a=d.d
12、說明:日程安排提前五分鐘提醒
SQL: * 日程安排 datediff(,f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select 10 b.* (top from order 排序欄位 ) a,表名 b b.主鍵欄位 = a.主鍵欄位 by declare intend
@sql nvarchar(600)
@sql=’topendfrom where not (topfrom where exec
注意:在後不能直接跟一個變量,所以在實際應用中只有這樣的進行特殊的處理。Rid為一個標識列,如果後還有具體的欄位,這樣做是非常有好處的。因為這樣可以避免 的欄位如果是邏輯索引的,查詢的結果後實際表中的不一致(邏輯索引中的數據有可能和數據表中的不一致,而查詢時如果處在索引則首先查詢索引)
14、說明:前10條記錄
select 10 * form table1 範圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select from where select (a) tablename tb tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重複行而派生出一個結果表
(a tableA ) (a tableB) (a tableC)
17、說明:隨機取出10條數據
select 10 * tablename by newid()
19、說明:刪除重複記錄
1),from where not (maxfrom group col1,col2,...)
2),distinct into from delete tablename
into select from table
column_b identity(1,1)
from where not (
select (column_b) tablename by table drop column_b
20、說明:列出資料庫裡所有的表名
select from where 'U' name syscolumns id=object_id()
22、說明:列示type、vender、pcs欄位,以type欄位排列,可以方便地實現多重選擇,類似中的。
select sumcase when then else endsumcase when then else endsumcase when then else endFROM group type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE table1
24、說明:選擇從10到15的記錄
select 5 * (top from order id ) table_別名 by desc
三、技巧
1、1=1,1=2的使用,在SQL語句組合時用的較多
「1=1」 是表示選擇全部 「1=2」全部不選,
如:
if @strWhere !=@strSQL = + @tblName + + @strWhere
end
else
begin
set 'select count(*) as Total from [' ']'
end
我們可以直接寫成
錯誤!未找到目錄項。
set 'select count(*) as Total from [' '] where 1=1 安定 'sp_change_users_login ,,
from 'E:\dvbbs.bak'
6、修複數據庫
ALTER [dvbbs] SINGLE_USER
GO
DBCC CHECKDB(,repair_allow_data_loss) TABLOCK
GO
ALTER [dvbbs] MULTI_USER
GO
7、日誌清除
SET ON
DECLARE @MaxMinutes ,
INT
-- 要操作的資料庫名
SELECT 'tablename_log'-- 日誌文件名
@MaxMinutes = 10, @NewSize = 1
@OriginalSize
@OriginalSize =
FROM
WHERE = @LogicalFileName
SELECT + db_name() + +
((30),@OriginalSize) + +
((30),(@OriginalSize*8/1024)) + FROM
WHERE = @LogicalFileName
CREATE DummyTrans
char not )
@Counter ,
@TruncLog (255)
SELECT @TruncLog = + db_name() +
(@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) AND SELECT FROM WHERE = @LogicalFileName)
(@OriginalSize * 8 /1024) > @NewSize
-- Outer loop.
SELECT WHILE ((@Counter < @OriginalSize / 16) (@Counter < 50000))
-- update
DummyTrans () DummyTrans
@Counter = @Counter + 1
EXEC
END
SELECT + db_name() + +
((30),) + +
((30),(*8/1024)) + FROM
WHERE = @LogicalFileName
DROP DummyTrans
SET OFF
8、說明:更改某個表
exec 'tablename''dbo'
9、存儲更改全部表
CREATE dbo.User_ChangeObjectOwnerBatch
@OldOwner NVARCHAR(128),
@NewOwner NVARCHAR(128)
AS
DECLARE Name NVARCHAR(128)
DECLARE as @OwnerName NVARCHAR(128)
DECLARE CURSOR 'Name' name
'Owner'
sysobjects
where by
curObject
FETCH FROM INTO Nameset '.' Name
exec
NEXT curObject @, @Owner
END
close curObject
GO
@i
@i=1
while @i<30
begin
into valuesset
Name
Zhangshan 80
Wangwu 50
select (score) tb_table)<60)
begin
update set score<60
if (minfrom break
continue
end
1.按姓氏筆畫排序:
Select From Order CustomerName Chinese_PRC_Stroke_ci_as //從少到多
2.資料庫加密:
select '原始密碼'pwdencrypt()
select '原始密碼''加密後密碼'--相同;否則不相同 encrypt('原始密碼')
select '原始密碼'pwdcompare(,) = 1
@list (1000),
@sql nvarchar(1000)
select ','name sysobjects a,syscolumns b a.id=b.id a.=@sql=+(@list,len(@list)-1)+
(@sql)
4.查看硬碟分區:
EXEC select from
=
select from '相等'
else
print hcforeach GLOBAL SELECT +RTRIM(spid) master.dbo.sysprocesses
WHERE IN'SQL profiler''SQL 事件探查器'sp_msforeach_worker
Top From
Top From Where in Select M ID 表) by Desc
----
N到結尾記錄
Select N * 表 by Desc
案例
例如1:一張表有一萬多條記錄,表的第一個欄位 RecID 是自增長欄位, 寫一個SQL語句,找出表的第31到第40個記錄。
top from where not (top from select 10 recid A ……是從索引中查找,而後面的top from
order select 30 recid A by
select 30 recid A recid>-1
例2:查詢表中的最後以條記錄,並不知道這個表共有多少數據,以及表結構。
set 'select top 1 * from T where pid not in (select top ' count' pid from T)'
print @s sp_executesql @s
9:獲取當前資料庫中的所有用戶表
select from where 'u' status>=0
10:獲取某一個表的所有欄位
select from where '表名'name syscolumns id (id sysobjects type = and = )
兩種方式的效果相同
11:查看與某一個表相關的視圖、存儲過程、函數
select from where and like name 存儲過程名稱 sysobjects xtype=
* master..sysdatabases D sid inselect from where =)
或者
select name DB_NAME master..sysdatabases sid <> 0x01
14:查詢某一個表的欄位和數據類型
select from table_name =
sp_addlinkedserver , , ,
sp_addlinkedsrvlogin , ,, ,
* ITSV.資料庫名.dbo.表名
--導入示例
select into from sp_dropserver ,
--連接遠程/區域網數據(openrowset/openquery/opendatasource)
--1、openrowset
--查詢示例
select from 'SQLOLEDB ''sql伺服器名 ''用戶名 ''密碼 '* 表 openrowset( , ; ; ,資料庫名.dbo.表名)
openrowset( , ; ; ,資料庫名.dbo.表名)
select from b
set from 'SQLOLEDB ''sql伺服器名 ''用戶名 ''密碼 'as inner 本地表 b
on sp_addlinkedserver , , ,
*
FROM 'SELECT * FROM 資料庫.dbo.表名 'openquery(ITSV, )
select from b
set openquery(ITSV, ) a
inner 本地表 b a.列A=b.列A
*
FROM 'SQLOLEDB ''Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' opendatasource( , ).資料庫.dbo.表名
select from substring
rightleft
isnull
EXEC 'NULL'
6,nocount {|}
使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息。如果存儲過程中包含的一些語句並不返回許多實際的數據,則該設置由於大量減少了網絡流量,因此可顯著提高性能。NOCOUNT 設置是在執行或運行時設置,而不是在分析時設置。
SET ON NOCOUNT 為 時,返回計數
常識
fromOrder ,查詢時,先排序,後取
在SQL中,一個欄位的最大容量是8000,而對於nvarchar(4000),由於nvarchar是Unicode碼。
SQLServer2000同步複製技術實現步驟
一、 預備工作
1.發布伺服器,訂閱伺服器都創建一個同名的windows用戶,並設置相同的密碼,做為發布快照文件夾的有效訪問用戶
--管理工具
--計算機管理
--用戶和組
--右鍵用戶
--新建用戶
--建立一個隸屬於administrator組的登陸windows的用戶(SynUser)
2.在發布伺服器上,新建一個共享目錄,做為發布的快照文件的存放目錄,操作:
我的電腦
--確定
3.設置SQL代理(SQLSERVERAGENT)服務的啟動用戶(發布/訂閱伺服器均做此設置)
開始(在連接端配置,比如,在訂閱伺服器上配置的話,伺服器名稱中輸入的是發布伺服器的IP)
開始"SQL SERVER 2000"
name
name
要求:
srv1.庫名..author增加記錄則srv1.庫名..author記錄增加
srv1.庫名..author的phone欄位更新,則srv1.庫名..author對應欄位telphone更新
--*/
sp_addlinkedserver ,,,
sp_addlinkedsrvlogin ,,,,
--控制面板--管理工具--服務--右鍵 Distributed Transaction Coordinator--屬性--啟動--並將啟動類型設置為自動啟動
go
--然後創建一個作業定時調用上面的同步處理存儲過程就行了
設置方法:
我的電腦
--在srv1中創建如下的同步處理存儲過程
create b namename
srv2.庫名.dbo.author b,author i
where and
(b.<> i.or
--插入新增的數據
insert nameid,,telphone author i
where exists(
select from where
--刪除已經刪除的數據(如果需要的話)
delete srv2.庫名.dbo.author b
where exists(
select from where
資料的領取方法(任選一):
1. 分享此篇文章到朋友圈,並獲得5個贊。
2. 分享本文到100人以上的數據分析微信群(溫馨提醒,小心被T)。
完成後,加微信 L23683716,發截圖,我們會儘快給您發送資料。
學習交流請加小編入群。