mysql 語法大全
1、說明:建立資料庫
CREATE database
name
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 [
null
primary
],col2 type2 [
null
create
tab_new
tab_old (使用舊錶建立新表)
B:table
as
col1,col2…
tab_old definition
table
table
add
col type
注:列增加後將不能刪除。DB2中列加上後資料型別也不能改變,唯一能改變的是增加型別的長度。
7、說明:新增主鍵: table
add
key
Alter
tabname
primary
(col)
8、說明:建立索引:[
]
idxname
tabname(col….)
刪除索引:index
create
viewname
select
drop
viewname
10、說明:幾個簡單的基本的sql語句
選擇:*
table1
範圍
插入:into
values
delete
table1
範圍
更新:table1
field1=value1
範圍
查詢:*
table1
field1
’%value1%’
select
from
order
field1,field2 [
]
總數:count
totalcount
table1
求和:sum
as
from
select
(field1)
avgvalue
table1
最大:max
as
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
一張表,一旦分組完成後,查詢後只能得到組相關的資訊。
count
sum
max
min
avg
在SQLServer中分組時:不能以text,ntext,image型別的欄位作為分組依據
分離資料庫: sp_detach_db; 附加資料庫:sp_attach_db 後接表明,附加需要完整的路徑名
14.如何修改資料庫的名稱:
sp_renamedb ,
15.sql去重複
select distinct 重複欄位,重複欄位 from 表名;
16.只顯示重複資料
select count(*) as c,欄位名稱,欄位名稱 from 表名 group by 重複的欄位名 having c>1;
17.replace的用法,例如:手機號掩碼(131****7894)
replace(mm.`member_mobile`, SUBSTR(mm.`member_mobile`,4,4), '****') AS 'member_mobile';
二、提升
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,(
max
from
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
not
in
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
int
end
@sql nvarchar(600)
@sql=’
top
end
from
where
not
(
top
from
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
(
max
from
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 sum
case
when
then
else
end
sum
case
when
then
else
end
sum
case
when
then
else
end
FROM
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
Name
set
'.'
Name
exec
NEXT
curObject
@
, @Owner
END
close curObject
GO
@i
@i=1
while @i<30
begin
into
values
set
Name
Zhangshan 80
Wangwu 50
select
(score)
tb_table)<60)
begin
update set
score<60
if (min
from
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
in
select
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
right
left
isnull
EXEC
'NULL'
6,nocount {
|
}
使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的資訊。如果儲存過程中包含的一些語句並不返回許多實際的資料,則該設定由於大量減少了網路流量,因此可顯著提高效能。NOCOUNT 設定是在執行或執行時設定,而不是在分析時設定。
SET ON
NOCOUNT 為
時,返回計數
常識
from
Order
,查詢時,先排序,後取
在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
name
name
srv2.庫名.dbo.author b,author i
where and
(b.<> i.
or
--插入新增的資料
insert name
id,
,telphone
author i
where exists(
select from
where
--刪除已經刪除的資料(如果需要的話)
delete srv2.庫名.dbo.author b
where exists(
select from
where
<code plain"="" style="margin: 0px !important; padding: 0px !important; white-space: pre-wrap; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; min-height: auto !important;">go