1. 程式人生 > >mysql 語法大全

mysql 語法大全

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 [null

create 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 ,

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 wherea,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 '.' Nameexec 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 substringrightleftisnullEXEC '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"namename

要求:

srv1.庫名..author增加記錄則srv1.庫名..author記錄增加

srv1.庫名..author的phone欄位更新,則srv1.庫名..author對應欄位telphone更新

--*/

sp_addlinkedserver ,,,sp_addlinkedsrvlogin ,,,,--控制面板--管理工具--服務--右鍵 Distributed Transaction Coordinator--屬性--啟動--並將啟動型別設定為自動啟動

go

--然後建立一個作業定時呼叫上面的同步處理儲存過程就行了

設定方法:

我的電腦

--在srv1中建立如下的同步處理儲存過程

create b namenamesrv2.庫名.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 <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