工作經常使用的SQL整理,實戰篇,地址一覽:
?
目錄概覽:
1.數據庫
2.表
3.臨時表
4.索引和約束
5.范式
6.增刪改查
7.連接
8.分組和排序
9.通配符
10.視圖
11.存儲過程和事務
12.游標
13.觸發器
14.作業
?
自己親手編寫的一些常用的SQL,希望對大家有用喔,廢話不多說了,直接入正題~
1.數據庫
創建數據庫
use master if exists ( select * from sysdatabases where name = ' OrderDB ' ) drop database OrderDB create database OrderDB on ( 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_User Create 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_Product Create 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_Order Create 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 master go create 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 int declare @Str nvarchar ( 4000 ) set @i = 0 select @Count = COUNT ( 0 ) from #Employee while ( @i < @Count ) begin set @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 output select @Name , @i set @i = @i + 1 End
查看表結構及表附加屬性
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整理,實戰篇(二)
如果您有什么問題,歡迎在下面評論,我們一起討論,謝謝~
如果您覺得還不錯,不妨點下右下方的推薦,有您的鼓勵我會繼續努力的~
?
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
