[SQL SERVER系列]工作經常使用的SQL整理,實戰篇(一)[原創]


工作經常使用的SQL整理,實戰篇,地址一覽:

  工作經常使用的SQL整理,實戰篇(一)

  工作經常使用的SQL整理,實戰篇(二)

  工作經常使用的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整理,實戰篇(二)

  如果您有什么問題,歡迎在下面評論,我們一起討論,謝謝~

  如果您覺得還不錯,不妨點下右下方的推薦,有您的鼓勵我會繼續努力的~

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM