工作經常使用的SQL整理,實戰篇,地址一覽:
工作經常使用的SQL整理,實戰篇(一)
工作經常使用的SQL整理,實戰篇(二)
工作經常使用的SQL整理,實戰篇(三)
?
目錄概覽:
1.數據庫
2.表
3.臨時表
4.索引和約束
5.范式
6.增刪改查
7.連接
8.分組和排序
9.通配符
10.視圖
11.存儲過程和事務
12.游標
13.觸發器
14.作業
?
自己親手編寫的一些常用的SQL,希望對大家有用喔,廢話不多說了,直接入正題~
1.數據庫
創建數據庫
use masterif exists(select * from sysdatabases where name = 'OrderDB')drop database OrderDBcreate database OrderDBon(name='OrderDB_data',filename = 'D:\DB\OrderDB_data.mdf',size=10,filegrowth=15%)log on(name='OrderDB_log',filename='D:\DB\OrderDB_log.ldf',size=3,filegrowth=10%)
刪除數據庫
drop database OrderDB
2.表
創建表
--用戶表
if exists (select * from sysobjects where name = 'Tse_User')drop table Tse_UserCreate table Tse_User(ID int identity(1,1),UserID int not null,UserName varchar(64) not null,RealName varchar(64) null,PRIMARY KEY (UserID))
?
--產品表if exists (select * from sysobjects where name = 'Tse_Product')drop table Tse_ProductCreate table Tse_Product(ID INT IDENTITY(1,1),ProductID varchar(64) not null,ProductName varchar(256) not null,Price float not null,Storage int not null, --庫存PRIMARY KEY(ProductID))
?
--訂單表if exists (select * from sysobjects where name = 'Tse_Order')drop table Tse_OrderCreate table Tse_Order(ID int identity(1,1),OrderID varchar(64) not null,UserID int not null,ProductID varchar(64) not null,Number int not null, --購買數量PostTime datetime not null,PRIMARY KEY(OrderID),FOREIGN KEY (UserID) REFERENCES Tse_User(UserID),FOREIGN KEY (ProductID) REFERENCES Tse_Product(ProductID))
刪除表
drop table Tse_User
清空表
truncate?table?Tse_User????清除表中所有數據,下次插入編號從1開始
delete?from?Tse_User??????清除表中所有數據,但下次插入編號從原有編號+1開始
3.臨時表
生成臨時表,插入數據,將員工姓名全部打印出來
use mastergocreate table #Employee(ID int identity(1,1),Name varchar(64) not null,primary key (ID))insert into #Employee(Name) values('zhangsan')insert into #Employee(Name) values('lisi')insert into #Employee(Name) values('wangwu')insert into #Employee(Name) values('tony')insert into #Employee(Name) values('mike')declare @i int declare @Name varchar(64)declare @Count intdeclare @Str nvarchar(4000)set @i = 0select @Count = COUNT(0) from #Employeewhile(@i < @Count)beginset @Str = 'select top 1 @Name = Name from #Employee where id not in (select top '+STR(@i) +'id from #Employee)'exec sp_executesql @Str ,N'@Name varchar(64) output', @Name outputselect @Name, @iset @i = @i + 1End
查看表結構及表附加屬性
SP_HELP Tse_User
4.索引和約束
聚集索引確定表中數據的物理順序。聚集索引類似于電話簿,后者按姓氏排列數據。由于聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
非聚集索引,該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同。一個表可以創建多個非聚集索引。
創建聚集索引
CREATE?UNIQUE?CLUSTERED?INDEX?[PK_Tse_ID]?ON?[dbo].[Tse_User]?
(??--唯一聚集索引
[ID]?ASC
)WITH?(PAD_INDEX??=?OFF,?STATISTICS_NORECOMPUTE??=?OFF,?SORT_IN_TEMPDB?=?OFF,?IGNORE_DUP_KEY?=?OFF,?DROP_EXISTING?=?OFF,
?ONLINE?=?OFF,ALLOW_ROW_LOCKS??=?ON,?ALLOW_PAGE_LOCKS??=?ON)?ON?[PRIMARY]
GO
?
創建非聚集索引
CREATE?UNIQUE?NONCLUSTERED?INDEX?[IX_Tse_UserID]?ON?[dbo].[Tse_User]?
(??--唯一非聚集索引
[UserID]?ASC
)WITH?(PAD_INDEX??=?OFF,?STATISTICS_NORECOMPUTE??=?OFF,?SORT_IN_TEMPDB?=?OFF,?IGNORE_DUP_KEY?=?OFF,?DROP_EXISTING?=?OFF,?
ONLINE?=?OFF,?ALLOW_ROW_LOCKS??=?ON,?ALLOW_PAGE_LOCKS??=?ON)?ON?[PRIMARY]
GO
?
約束
alter?table?Tse_User
add?constraint?CS_UserName?check?(len(Username)?>?3),
constraint?CS_Email?check?(charindex('@',?Email)?>?0)
5.范式
第一范式1NF
第一范式需滿足兩個條件:
1)每個數據行必須包含具有原子性(即不可再分)的值;
2)每個數據行必須包含一個獨一無二的值,即主鍵。
舉例:假如客戶表中存在地址列,如果經常需要按城市歸類,那么,應該地址列拆分為省份,城市,縣,街道地址等列。
?
第二范式2NF
第二范式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種 數據,不可以把多種數據保存在同一張數據庫表中。
舉例:比如常用的選課表中,以學號和課程號為聯合主鍵,不能將課程名,學分等課程相關信息寫入選課表,因為他們只與主鍵的一部分(課程號)相關。
?
第三范式3NF
第三范式需要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。
舉例:訂單表中以訂單號為主鍵,用戶真實姓名和郵箱等信息與用戶有關,與訂單沒有直接關系,因此,用戶真實姓名和郵箱等不能放到訂單表中。
由于時間關系,余下的幾個問題在下一篇中討論,謝謝關注~,下一篇地址為:工作經常使用的SQL整理,實戰篇(二)
如果您有什么問題,歡迎在下面評論,我們一起討論,謝謝~
如果您覺得還不錯,不妨點下右下方的推薦,有您的鼓勵我會繼續努力的~
?
?
?
?
?