經(jīng)典SQL語句大全
CREATE DATABASE dbnameDROP DATABASE dbnameCREATE TABLE tabname(
col1 type1 [not null] [primary key],
col2 type2 [not null],..
)使用舊表創(chuàng)建新表
create table tab_new
as
select
col1,
col2…
from tab_oldDROP TABLE tablenameAlter table tabname add column col typeAlter table tabname add primary key(col)Alter table tabname drop primary key(col)create [unique] index idxname on tabname(col….)drop index idxnamecreate view viewname as select statementdrop view viewname--選擇:
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%’
--排序:
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 table110、幾個高級查詢運算詞
A:UNION 運算符
UNION 運算符通過組合其他兩個結(jié)果表,并消去表中任何重復(fù)行而派生出一個結(jié)果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B:EXCEPT 運算符
EXCEPT運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行。
C:INTERSECT 運算符
INTERSECT運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表。當 ALL隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行。
注:使用運算詞的幾個查詢結(jié)果行必須是一致的。
11、使用外連接
A、left (outer) join:
左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。
select
a.a,
a.b,
a.c,
b.c,
b.d,
b.f
from a
LEFT OUT JOIN
b ON a.a = b.cB:right (outer) join
右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full/cross (outer) join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
12、Group by
對列進行分組,常與聚合函數(shù)(count,sum,max,min,avg )一起使用
注意:
在分組時:不能以text,ntext,image類型的字段作為分組依據(jù)
在select統(tǒng)計函數(shù)中的字段,不能和普通的字段放在一起;
--方法一 僅用于SQL Server:
select * into b from a where 1<>1
--方法二:
select top 0 * into b from ainsert into b(a, b, c)
select d,e,f from 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)select
a.title,
a.username,
b.adddate
from table a,
(select max(adddate) adddate
from table
where table.title=a.title) bselect
a.a,
a.b,
a.c,
b.c,
b.d,
b.f
from a
LEFT OUT JOIN b ON a.a = b.cselect * from (
SELECT a,b,c FROM a
) T
where t.a > 1;select * from table1
where time between time1 and time2
select a,b,c, from table1
where a not between 數(shù)值1 and 數(shù)值2select * from table1
where a [not] in (‘值1’,’值2’,’值4’,’值6’)delete from table1
where not exists (
select * from table2
where table1.field1=table2.field1
)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 ...select * from 日程安排
where datediff('minute',f開始時間,getdate())>5select top 10 b.*
from (
select top 20 主鍵字段,排序字段
from 表名 order by 排序字段 desc
) a,
表名 b
where b.主鍵字段 = a.主鍵字段
order by a.排序字段具體declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’+str(@end-@start+1)+’+from T
where rid not in(
select top’+str(@str-1)+’Rid from T where Rid>-1)’
exec sp_executesql @sqlselect top 10 *
form table1
where 范圍(select a from tableA )
except
(select a from tableB)
except
(select a from tableC)select top 10 *
from tablename
order by newid()--方法一
delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
--方法二
select distinct * into temp from tablename
delete from tablename
insert into tablename select * from tempalter table tablename
--添加一個自增列
add column_b int identity(1,1)
delete from tablename
where column_b not in(
select max(column_b)
from tablename
group by column1,column2,...
)
alter table tablename drop column column_b17、列出數(shù)據(jù)庫里所有的表名
use master
go
select name from sysobjects
where type='U' // U代表用戶use master
go
select name
from syscolumns
where id=object_id('TableName')TRUNCATE TABLE table1select top 5 *
from (
select top 15 *
from table
order by id asc
) table_別名
order by id descif @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from ['
+ @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
endset @strSQL = 'select count(*) as Total from ['
+ @tblName + '] where 1=1 '+ @strWhere2、收縮數(shù)據(jù)庫
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數(shù)據(jù)和日志
DBCC SHRINKDB
DBCC SHRINKFILE3、壓縮數(shù)據(jù)庫
dbcc shrinkdatabase(dbname)4、轉(zhuǎn)移數(shù)據(jù)庫給新用戶以已存在用戶權(quán)限
exec sp_change_users_login 'update_one','newname','oldname'
go5、檢查備份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'6、修復(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
GO7、日志清除
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 OFF8、更改某個表
exec sp_changeobjectowner 'tablename','dbo'9、存儲更改全部表
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
GO10、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案例:有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎(chǔ)上,使他們剛好及格:
Name score
Zhangshan 80
Lishi 59
Wangwu 50
Songquan 69
while((select min(score) from tb_table)<60)
begin
update tb_table set score =score*1.01
where score<60
if (select min(score) from tb_table)>60
break
else
continue
end
最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》和《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。 有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行 數(shù)據(jù)前線 后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨 后臺回復(fù)關(guān)鍵字:進群,帶你進入高手如云的交流群。 推薦閱讀
SQL 常用函數(shù) 不懂就問:SQL 語句中 where 條件后 寫上1=1 是什么意思 推薦一個 SQL 學(xué)習(xí)刷題網(wǎng)站! SQL 中為什么經(jīng)常要加NOLOCK?


