常用的SQL語句

来源:http://www.cnblogs.com/zhangpengnike/archive/2016/05/31/5545715.html
-Advertisement-
Play Games

一、基礎 1、說明:創建資料庫 2、說明:刪除資料庫 3、說明:備份sql server 4、說明:創建新表 5、說明:刪除新表 6、說明:增加一個列 7、說明:添加主鍵 8、說明:創建索引 9、說明:創建視圖 10、說明:幾個簡單的基本的sql語句 11、說明:幾個高級查詢運算詞 A: UNION ...


一、基礎

  1、說明:創建資料庫

CREATE DATABASE database-name

  2、說明:刪除資料庫

drop database dbname

  3、說明:備份sql server

1 --- 創建 備份數據的 device
2 
3   USE master
4 
5   EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
6 
7   --- 開始 備份
8 
9   BACKUP DATABASE pubs TO testBack

  4、說明:創建新表

1 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
2 
3   --根據已有的表創建新表:
4 
5   A:create table tab_new like tab_old (使用舊表創建新表)
6 
7   B:create table tab_new as select col1,col2… from tab_old definition only

  5、說明:刪除新表

1 drop table tabname

  6、說明:增加一個列

1 Alter table tabname add column col type
2 
3   --註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。

  7、說明:添加主鍵

1 Alter table tabname add primary key(col)
2 
3 --說明:刪除主鍵: Alter table tabname drop primary key(col)

  8、說明:創建索引

1 create [unique] index idxname on tabname(col….)
2 
3 --刪除索引:drop index idxname
4 
5 --註:索引是不可更改的,想更改必須刪除重新建。

  9、說明:創建視圖

1 create view viewname as select statement
2 
3 --刪除視圖:drop view viewname

  10、說明:幾個簡單的基本的sql語句

 1 --選擇:
 2         select * from table1 where 範圍
 3 
 4 --插入:
 5         insert into table1(field1,field2) values(value1,value2)
 6 
 7 --刪除:
 8         delete from table1 where 範圍
 9 
10 --更新:
11         update table1 set field1=value1 where 範圍
12 
13 --查找:
14         select * from table1 where field1 like%value1%---like的語法很精妙,查資料!
15 
16 --排序:
17         select * from table1 order by field1,field2 [desc]
18 
19 --總數:
20         select count as totalcount from table1
21 
22 --求和:
23         select sum(field1) as sumvalue from table1
24 
25 --平均:
26         select avg(field1) as avgvalue from table1
27 
28 --最大:
29         select max(field1) as maxvalue from table1
30 
31   最小:select min(field1) as minvalue from table1        

  11、說明:幾個高級查詢運算詞

A: UNION 運算符

  UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重覆行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重覆行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。

B: EXCEPT 運算符

  EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重覆行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重覆行。

C: INTERSECT 運算符

  INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重覆行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重覆行。

  註:使用運算詞的幾個查詢結果行必須是一致的。

  12、說明:使用外連接

 1 A、left (outer) join 2 
 3 --左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
 4 
 5   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
 6 
 7 B:right (outer) join:
 8 
 9 --右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
10 
11 C:full/cross (outer) join12 
13 --全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

  12、分組:Group by

  一張表,一旦分組 完成後,查詢後只能得到組相關的信息。

  組相關的信息:(統計信息) count,sum,max,min,avg 分組的標準)

  在SQLServer中分組時:不能以text,ntext,image類型的欄位作為分組依據

  在selecte統計函數中的欄位,不能和普通的欄位放在一起;

  13、對資料庫進行操作

  分離資料庫: sp_detach_db; 附加資料庫:sp_attach_db 後接表明,附加需要完整的路徑名

  14.如何修改資料庫的名稱

1 sp_renamedb 'old_name', 'new_name'

一、提升

1、說明:複製表(只複製結構,源表名:a 新表名:b) (Access可用)

1 方法一:
2     select * into b from a where 1<>1(僅用於SQlServer)
3 
4 方法二:
5     select top 0 * into b from a

2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)

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

3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)

1 insert into b(a, b, c) select d,e,f from b in ‘具體資料庫’ where 條件
2 
3 例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、說明:子查詢(表名1:a 表名2:b)

1 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)

5、說明:顯示文章、提交人和最後回覆時間

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

6、說明:外連接查詢(表名1:a 表名2:b)

1 select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、說明:線上視圖查詢(表名1:a )

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

8、說明:between的用法,between限制查詢數據範圍時包括了邊界值,not between不包括

1 select * from table1 where time between time1 and time2
2 
3 select a,b,c, from table1 where a not between 數值1 and 數值2

9、說明:in 的使用方法

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

10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息

1 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、說明:四表聯查問題

1 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 .....

12、說明:日程安排提前五分鐘提醒

1 select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

13、說明:一條sql 語句搞定資料庫分頁

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

具體實現,關於資料庫分頁:

1 declare @start int,@end int
2 
3   @sql nvarchar(600)
4 
5   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)’
6 
7   exec sp_executesql @sql

註意:在top後不能直接跟一個變數,所以在實際應用中只有這樣的進行特殊的處理。Rid為一個標識列,如果top後還有具體的欄位,這樣做是非常有好處的。因為這樣可以避免 top的欄位如果是邏輯索引的,查詢的結果後實際表中的不一致(邏輯索引中的數據有可能和數據表中的不一致,而查詢時如果處在索引則首先查詢索引)

14、說明:前10條記錄

1 select top 10 * form table1 where 範圍

15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)

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

16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重覆行而派生出一個結果表

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

17、說明:隨機取出10條數據

1 select top 10 * from tablename order by newid()

18、說明:隨機選擇記錄

1 select newid()

19、說明:刪除重覆記錄

 1 1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
 2 
 3 2),select distinct * into temp from tablename
 4 
 5   delete from tablename
 6 
 7   insert into tablename select * from temp
 8 
 9 --評價: 這種操作牽連大量的數據的移動,這種做法不適合大容量但數據操作
10 
11 3),例如:在一個外部表中導入數據,由於某些原因第一次只導入了一部分,但很難判斷具體位置,這樣只有在下一次全部導入,這樣也就產生好多重覆的欄位,怎樣刪除重覆欄位
12 
13   alter table tablename
14 
15   --添加一個自增列
16 
17   add column_b int identity(1,1)
18 
19   delete from tablename where column_b not in(
20 
21   select max(column_b) from tablename group by column1,column2,...)
22 
23   alter table tablename drop column column_b

20、說明:列出資料庫里所有的表名

1 select name from sysobjects where type='U' // U代表用戶

21、說明:列出表裡的所有的列名

1 select name from syscolumns where id=object_id('TableName')

22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case

 1 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
 2 
 3 --顯示結果:
 4 
 5   type vender pcs
 6 
 7   電腦 A 1
 8 
 9   電腦 A 1
10 
11   光碟 B 2
12 
13   光碟 A 2
14 
15   手機 B 3
16 
17   手機 C 3

23、說明:初始化表table1

1 TRUNCATE TABLE table1

24、說明:選擇從10到15的記錄

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

一、技巧

1、1=1,1=2的使用,在SQL語句組合時用的較多 “where 1=1” 是表示選擇全部 “where 1=2”全部不選,如:

 1 if @strWhere !=''
 2 
 3   begin
 4 
 5   set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
 6 
 7   end
 8 
 9   else
10 
11   begin
12 
13   set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
14 
15   end

我們可以直接寫成,錯誤!未找到目錄項。

1 set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere

2、收縮資料庫

 1 --重建索引
 2 
 3   DBCC REINDEX
 4 
 5   DBCC INDEXDEFRAG
 6 
 7   --收縮數據和日誌
 8 
 9   DBCC SHRINKDB
10 
11   DBCC SHRINKFILE

3、壓縮資料庫

1 dbcc shrinkdatabase(dbname)

4、轉移資料庫給新用戶以已存在用戶許可權

1 exec sp_change_users_login 'update_one','newname','oldname'

5、檢查備份集

1 RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

6、修複資料庫

 1    ALTER DATABASE [dvbbs] SET SINGLE_USER
 2 
 3   GO
 4 
 5   DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
 6 
 7   GO
 8 
 9   ALTER DATABASE [dvbbs] SET MULTI_USER
10 
11   GO

7、日誌清除

 1    SET NOCOUNT ON
 2 
 3   DECLARE @LogicalFileName sysname,
 4 
 5   @MaxMinutes INT,
 6 
 7   @NewSize INT
 8 
 9   USE tablename -- 要操作的資料庫名
10 
11   SELECT @LogicalFileName = 'tablename_log', -- 日誌文件名
12 
13   @MaxMinutes = 10, -- Limit on time allowed to wrap log.
14 
15   @NewSize = 1 -- 你想設定的日誌文件的大小(M)
16 
17   Setup / initialize
18 
19   DECLARE @OriginalSize int
20 
21   SELECT @OriginalSize = size
22 
23   FROM sysfiles
24 
25   WHERE name = @LogicalFileName
26 
27   SELECT 'Original Size of ' + db_name() + ' LOG is ' +
28 
29   CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
30 
31   CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
32 
33   FROM sysfiles
34 
35   WHERE name = @LogicalFileName
36 
37   CREATE TABLE DummyTrans
38 
39   (DummyColumn char (8000) not null)
40 
41   DECLARE @Counter INT,
42 
43   @StartTime DATETIME,
44 
45   @TruncLog VARCHAR(255)
46 
47   SELECT @StartTime = GETDATE(),
48 
49   @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
50 
51   DBCC SHRINKFILE (@LogicalFileName, @NewSize)
52 
53   EXEC (@TruncLog)
54 
55   -- Wrap the log if necessary.
56 
57   WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
58 
59   AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
60 
61   AND (@OriginalSize * 8 /1024) > @NewSize
62 
63   BEGIN -- Outer loop.
64 
65   SELECT @Counter = 0
66 
67   WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
68 
69   BEGIN -- update
70 
71   INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
72 
73   SELECT @Counter = @Counter + 1
74 
75   END
76 
77   EXEC (@TruncLog)
78 
79   END
80 
81   SELECT 'Final Size of ' + db_name() + ' LOG is ' +
82 
83   CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
84 
85   CONVERT(VARCHAR(30),(size*8
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • db.集合名稱.remove({query}, justOne)query:過濾條件,可選justOne:是否只刪除查詢到的第一條數據,值為true或者1時,只刪除一條數據,預設為false,可選。 準備數據:把_id為1和2的age都變成28 1、使用兩個參數:刪除age=28的第一條數據 2、使 ...
  • 報錯內容是:SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的訪問,因為此組件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 ' ...
  • mariadb的查詢流程圖 select語句的從句分析順序:from(過濾表)-->where(過濾行)-->group by(分組)-->having(分組過濾)-->order by(排序)-- >select(選取欄位)-->limit(查詢限制)-->最終結果 DISTINCT: 數據去重 ...
  • 使用VBScript腳本從Excel文件中導入PowerDesigner的物理模型。 ...
  • 使用 mysqladmin 刪除資料庫 使用普通用戶登陸mysql伺服器,你可能需要特定的許可權來創建或者刪除 MySQL 資料庫。 所以我們這邊使用root用戶登錄,root用戶擁有最高許可權,可以使用 mysql mysqladmin 命令來創建資料庫。 在刪除資料庫過程中,務必要十分謹慎,因為在執 ...
  • 以均方誤差或交叉熵誤差作為loss function的NN, 其輸出神經元的敏感度是它的激活值與目標值的差值 ...
  • 最近項目使用到MongoDB,在此記錄下使用到的基礎的東西 1.下載安裝包 https://www.mongodb.com/download-center?jmp=nav#community 我下的是3.2.6帶ssl的版本(如果打算使用到ssl,連接字元串需要帶上ssl=true,如:"mongo ...
  • NoSQL在2010年風生水起,大大小小的Web站點在追求高性能高可靠性方面,不由自主都選擇了NoSQL技術作為優先考慮的方面。今年伊始,InfoQ中文站有幸邀請到鳳凰網的孫立先生,為大家分享他之於NoSQL方面的經驗和體會。 非常榮幸能受邀在InfoQ開闢這樣一個關於NoSQL的專欄,InfoQ是 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...