mysql語句整理

轉(zhuǎn)自http://www.cnblogs.com/0351jiazhuang/p/4530366.html

SQL是(Structured Query Language)結(jié)構(gòu)化查詢語言的簡稱,下面趙一鳴隨筆博客從基礎(chǔ)知識擦囊、判斷對象和應(yīng)用技巧等方面音同,介紹了SQL的應(yīng)用方法迄委。

基礎(chǔ)

創(chuàng)建數(shù)據(jù)庫

創(chuàng)建之前判斷該數(shù)據(jù)庫是否存在

if exists (select * from sysdatabases where name='databaseName')

drop database databaseName

go

Create DATABASE database-name

刪除數(shù)據(jù)庫

drop database dbname

備份sql server

— 創(chuàng)建 備份數(shù)據(jù)的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

— 開始 備份

BACKUP DATABASE pubs TO testBack

創(chuàng)建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根據(jù)已有的表創(chuàng)建新表:

A:go

use 原數(shù)據(jù)庫名

go

select * into 目的數(shù)據(jù)庫名.dbo.目的表名 from 原表名(使用舊表創(chuàng)建新表)

B:create table tab_new as select col1,col2… from tab_old definition only

創(chuàng)建序列

create sequence SIMON_SEQUENCE

minvalue 1 — 最小值

maxvalue 999999999999999999999999999 最大值

start with 1 開始值

increment by 1 每次加幾

cache 20;

刪除新表

drop table tabname

增加一個列

Alter table tabname add column col type

注:列增加后將不能刪除厅克。DB2中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度譬嚣。

添加主鍵

Alter table tabname add primary key(col)

說明:刪除主鍵: Alter table tabname drop primary key(col)

創(chuàng)建索引

create [unique] index idxname on tabname(col….)

刪除索引:drop index idxname on tabname

注:索引是不可更改的懈贺,想更改必須刪除重新建。

創(chuàng)建視圖

create view viewname as select statement

刪除視圖:drop view viewname

幾個簡單的基本的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%’ (所有包含‘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

最信碚印:select min(field1) as minvalue from table1[separator]

幾個高級查詢運算詞

A: UNION 運算符

UNION 運算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(即 UNION ALL)备埃,不消除重復(fù)行姓惑。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2按脚。

B: EXCEPT 運算符

EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表于毙。當(dāng) ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行辅搬。

C: INTERSECT 運算符

INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表唯沮。當(dāng) ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行堪遂。

注:使用運算詞的幾個查詢結(jié)果行必須是一致的介蛉。

使用外連接

A、left outer join:

左外連接(左連接):結(jié)果集既包括連接表的匹配行溶褪,也包括左連接表的所有行甘耿。

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:

右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行竿滨。

C:full outer join:

全外連接:不僅包括符號連接表的匹配行佳恬,還包括兩個連接表中的所有記錄。

判斷對象是否存在

判斷數(shù)據(jù)庫是否存在

if exists (select * from sys.databases where name = ‘?dāng)?shù)據(jù)庫名’)

drop database [數(shù)據(jù)庫名]

判斷表是否存在

if not exists (select * from sysobjects where [name] = ‘表名’ and xtype=’U’)

begin

–這里創(chuàng)建表

end

判斷存儲過程是否存在

if exists (select * from sysobjects where id = object_id(N'[存儲過程名]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)

drop procedure [存儲過程名]

判斷臨時表是否存在

if object_id(‘tempdb..#臨時表名’) is not null

drop table #臨時表名

判斷視圖是否存在

–SQL Server 2000

IF EXISTS (SELECT * FROM sysviews WHERE object_id = ‘[dbo].[視圖名]’

–SQL Server 2005

IF EXISTS (SELECT * FROM sys.views WHERE object_id = ‘[dbo].[視圖名]’

判斷函數(shù)是否存在

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函數(shù)名]’) and xtype in (N’FN’, N’IF’, N’TF’))

drop function [dbo].[函數(shù)名]

獲取用戶創(chuàng)建的對象信息

SELECT [name],[id],crdate FROM sysobjects where xtype=’U’

/*

xtype 的表示參數(shù)類型于游,通常包括如下這些 C = CHECK 約束 D = 默認(rèn)值或 DEFAULT 約束 F = FOREIGN KEY 約束 L = 日志 FN = 標(biāo)量函數(shù) IF = 內(nèi)嵌表函數(shù) P = 存儲過程 PK = PRIMARY KEY 約束(類型是 K) RF = 復(fù)制篩選存儲過程 S = 系統(tǒng)表 TF = 表函數(shù) TR = 觸發(fā)器 U = 用戶表 UQ = UNIQUE 約束(類型是 K) V = 視圖 X = 擴展存儲過程 */

判斷列是否存在

if exists(select * from syscolumns where id=object_id(‘表名’) and name=’列名’)

alter table 表名 drop column 列名

判斷列是否自增列

if columnproperty(object_id(‘table’),’col’,’IsIdentity’)=1

print ‘自增列’

else

print ‘不是自增列’

SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(‘表名’)

AND is_identity=1

判斷表中是否存在索引

if exists(select * from sysindexes where id=object_id(‘表名’) and name=’索引名’)

print ‘存在’

else

print ‘不存在

查看數(shù)據(jù)庫中對象

SELECT * FROM sys.sysobjects WHERE name=’對象名’

提升

復(fù)制表

(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二:select top 0 * into b from a

拷貝表

(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

跨數(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..

子查詢

(表名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)

顯示文章毁葱、提交人和最后回復(fù)時間

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

外連接查詢

(表名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

在線視圖查詢

(表名1:a

select * from (Select a,b,c FROM a) T where t.a > 1;

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

in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

刪除主表中已經(jīng)在副表中沒有的信息

兩張關(guān)聯(lián)表delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1

四表聯(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 …..

日程安排提前五分鐘提醒

SQL: select * from 日程安排 where datediff(‘minute’,f開始時間,getdate())>5

一條sql 語句搞定數(shù)據(jù)庫分頁

select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段

前10條記錄

select top 10 * form table1 where 范圍

選擇排名

選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

派生結(jié)果表

包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個結(jié)果表

(select a from tableA except (select a from tableB) except (select a from tableC)

隨機取出10條數(shù)據(jù)

select top 10 * from tablename order by newid()

隨機選擇記錄

select newid()

刪除重復(fù)記錄

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,…)

列出數(shù)據(jù)庫里所有的表名

select name from sysobjects where type=’U’

列出表里的所有的

select name from syscolumns where id=object_id(‘TableName’)

列示排列

列示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

顯示結(jié)果:

type vender pcs

電腦 A 1

電腦 A 1

光盤 B 2

光盤 A 2

手機 B 3

手機 C 3

初始化表table1

TRUNCATE TABLE table1

選擇從10到15的記錄

select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

數(shù)據(jù)類型轉(zhuǎn)換

declare @numid int

declare @id varchar(50)

set @numid=2005

set @id=convert(varchar,@numid)

通過上述語句完成數(shù)據(jù)類型Int轉(zhuǎn)換成varchar凛捏,其他轉(zhuǎn)換類似,可參看convert函數(shù)

技巧

1=1芹缔,1=2的使用

在SQL語句組合時用的較多

“where 1=1” 是表示選擇全部 “where 1=2”全部不選坯癣,

如:

if @strWhere !=’

begin

set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where ‘ + @strWhere

end

else

begin

set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘]’

end

我們可以直接寫成

set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where 1=1 and ‘+ @strWhere

收縮數(shù)據(jù)庫

–重建索引

DBCC REINDEX

DBCC INDEXDEFRAG

–收縮數(shù)據(jù)和日志

DBCC SHRINKDB

DBCC SHRINKFILE

壓縮數(shù)據(jù)庫

dbcc shrinkdatabase(dbname)

轉(zhuǎn)移數(shù)據(jù)庫給新用戶以已存在用戶權(quán)限

exec sp_change_users_login ‘update_one’,’newname’,’oldname’

go

檢查備份集

RESTORE VERIFYONLY from disk=’E:\dvbbs.bak’

修復(fù)數(shù)據(jù)庫

Alter DATABASE [dvbbs] SET SINGLE_USER

GO

DBCC CHECKDB(‘dvbbs’,repair_allow_data_loss) WITH TABLOCK

GO

Alter DATABASE [dvbbs] SET MULTI_USER

GO

日志清除

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE tablename — 要操作的數(shù)據(jù)庫名

Select @LogicalFileName = ‘tablename_log’, — 日志文件名

@MaxMinutes = 10, — Limit on time allowed to wrap log.

@NewSize = 1 — 你想設(shè)定的日志文件的大小(M)

— Setup / initialize

DECLARE @OriginalSize int

Select @OriginalSize = size

FROM sysfiles

Where name = @LogicalFileName

Select ‘Original Size of ‘ + db_name() + ‘ LOG is ‘ +

CONVERT(VARCHAR(30),@OriginalSize) + ‘ 8K pages or ‘ +

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + ‘MB’

FROM sysfiles

Where name = @LogicalFileName

Create TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

Select @StartTime = GETDATE(),

@TruncLog = ‘BACKUP LOG ‘ + db_name() + ‘ WITH TRUNCATE_ONLY’

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

— Wrap the log if necessary.

WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) — time has not expired

AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)

AND (@OriginalSize * 8 /1024) > @NewSize

BEGIN — Outer loop.

Select @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

BEGIN — update

Insert DummyTrans VALUES (‘Fill Log’)

Delete DummyTrans

Select @Counter = @Counter + 1

END

EXEC (@TruncLog)

END

Select ‘Final Size of ‘ + db_name() + ‘ LOG is ‘ +

CONVERT(VARCHAR(30),size) + ‘ 8K pages or ‘ +

CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB’

FROM sysfiles

Where name = @LogicalFileName

Drop TABLE DummyTrans

SET NOCOUNT OFF

更改某個表

exec sp_changeobjectowner ‘tablename’,’dbo’

存儲更改全部表

Create PROCEDURE dbo.User_ChangeObjectOwnerBatch

@OldOwner as NVARCHAR(128),

@NewOwner as NVARCHAR(128)

AS

DECLARE @Name as NVARCHAR(128)

DECLARE @Owner as NVARCHAR(128)

DECLARE @OwnerName as NVARCHAR(128)

DECLARE curObject CURSOR FOR

select 'Name' = name,

'Owner' = user_name(uid)

from sysobjects

where user_name(uid)=@OldOwner

order by name

OPEN curObject

FETCH NEXT FROM curObject INTO @Name, @Owner

WHILE(@@FETCH_STATUS=0)

BEGIN

if @Owner=@OldOwner

begin

set @OwnerName = @OldOwner + '.' + rtrim(@Name)

exec sp_changeobjectowner @OwnerName, @NewOwner

end– select @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner

END

close curObject

deallocate curObject

GO

SQL SERVER中直接循環(huán)寫入數(shù)據(jù)

declare @i int

set @i=1

while @i<30

begin

insert into test (userid) values(@i)

set @i=@i+1

end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市最欠,隨后出現(xiàn)的幾起案子示罗,更是在濱河造成了極大的恐慌,老刑警劉巖芝硬,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚜点,死亡現(xiàn)場離奇詭異,居然都是意外死亡拌阴,警方通過查閱死者的電腦和手機绍绘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迟赃,“玉大人陪拘,你說我怎么就攤上這事∞嗲猓” “怎么了藻丢?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵剪撬,是天一觀的道長摄乒。 經(jīng)常有香客問我,道長残黑,這世上最難降的妖魔是什么馍佑? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮梨水,結(jié)果婚禮上拭荤,老公的妹妹穿的比我還像新娘。我一直安慰自己疫诽,他們只是感情好舅世,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奇徒,像睡著了一般雏亚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摩钙,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天罢低,我揣著相機與錄音,去河邊找鬼胖笛。 笑死网持,一個胖子當(dāng)著我的面吹牛宜岛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播功舀,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼萍倡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了日杈?” 一聲冷哼從身側(cè)響起遣铝,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莉擒,沒想到半個月后酿炸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡涨冀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年填硕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹿鳖。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡扁眯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翅帜,到底是詐尸還是另有隱情姻檀,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布涝滴,位于F島的核電站绣版,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歼疮。R本人自食惡果不足惜杂抽,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韩脏。 院中可真熱鬧缩麸,春花似錦、人聲如沸赡矢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吹散。三九已至弧械,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間送浊,已是汗流浹背梦谜。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唁桩。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓闭树,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荒澡。 傳聞我的和親對象是個殘疾皇子报辱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1、說明:創(chuàng)建數(shù)據(jù)庫CREATE DATABASE database-name2单山、說明:刪除數(shù)據(jù)庫drop dat...
    codeSirCao閱讀 436評論 0 2
  • 50個常用的sql語句 Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cna...
    最美的太陽WW閱讀 3,199評論 0 23
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,235評論 0 7
  • 一碍现、基礎(chǔ) 1、創(chuàng)建數(shù)據(jù)庫(create) CREATE DATABASE database-namecreate ...
    YBshone閱讀 643評論 0 1
  • 古人論事何不明米奸, 嘆息荊卿徒成仁昼接。 若使圖窮匕首用, 四海歸一待何人悴晰?
    AM王的巡夢人閱讀 182評論 2 0