T-SQL語言基礎

1.T-SQL語言

  • CREATE:建立新對象,包括數據庫、表、視圖、過程、觸發器和函數等常見數據庫對象。
  • ALTER:修改已有對象的結構。
  • DROP:用來刪除已有的對象。有些對象是沒法刪除的,由於它們是與模式捆綁的。若是表中包含的數據參與了一個關聯,或者另外一個對象依賴要刪除的對象,就不能刪除它。

1.1建立表

CREATE TABLE [ dbo ] . [ Student ] (

[ StudentID ] [ int ] NULL ,

[ Studentname ] [ varchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL ,

[ Class ] [ varchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL ,

[ Sex ] [ varchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL

)

1.2建立視圖web

視圖存儲在數據庫中,但並不保存數據,指示一個通過優化的SELECT查詢。數據庫

CREATE VIEW [ dbo ] . [ View_Employee ]

AS

SELECT dbo.Employees.LastName AS LName, dbo.EmployeeTerritories.EmployeeID AS EpID,
dbo.EmployeeTerritories.TerritoryID AS TyID,

dbo.Employees.FirstName
AS FName

FROM dbo.Employees INNER JOIN

dbo.EmployeeTerritories
ON dbo.Employees.EmployeeID = dbo.EmployeeTerritories.EmployeeID

1.3建立存儲過程函數

存儲過程能夠執行操做和業務功能,例如插入,更新,刪除表數據。經過參數傳遞,判斷是選擇執行的操做。輸入需在AS字符前定義。測試

CREATE PROCEDURE sqInsertOrUpdateProduct

@ProductName nvarchar ( 50 )

,
@ProductNumber nvarchar ( 25 )

,
@StdCost money

AS

IF EXISTS ( SELECT * FROM Production.Product WHERE

ProductNumber
= @ProductNumber )

Update Production.Product SET NAME = @ProductName ,

StandardCost
= @StdCost WHERE

ProductNumber
= @ProcuctNumber

ELSE

INSERT INTO Production.Product

(Name,ProductNumber,StandardCost)

SELECT @ProdcutName

,
@ProductNumber

,
@StdCost

1.4建立觸發器優化

觸發器對錶的記錄執行特定的操做時執行。觸發器一般應用特殊的業務規則來保證數據的完整性。觸發器獨有的特性包括賦予DML的操做、隱式事務控制,以及虛表引用。編碼

CREATE TRIGGER Upd_JG ON dbo.sys_zzjg

FOR UPDATE

AS

if Update (jgid)

begin

update sys_yonghu set sys_yonghu.jgid = i.jgid

from sys_yonghu Sr,deleted d

,inserted i
where Sr.jgid = d.jgid

End

1.5建立用戶自定義函數url

主要實現定製的業務邏輯。CREATE命令以後是函數名,函數名後的括號中包含對一個或多個參數的引用。每一個參數後跟數據類型。Returns關鍵字後的文本表名函數返回的數據類型。spa

2.數據檢索

DML(Data Manipulation Language)數據操縱語言。code

子句orm

解釋

SELECT

後跟一組列的列表,或者一個星號,表示要返回全部的列

FROM

後跟一個表或視圖的名字,或者帶有鏈接表達式的多個表

WHERE

後跟過濾規則

ORDER BY

後跟一組列的列表,用於對這些列進行排序

2.1列的選擇

SELECT yhid,yhmc FROM Sys_Yonghu order by yhid

返回yhid,yhmc對應的列。用(*)來表明全部列執行查詢會下降處理器的效率,通常儘可能不是用(*)來返回全部列數據。

在執行多表查詢的時候,若是表之間有相同名稱的列,必須制定所屬表。例如上例的yhid爲Sys_Yonghu.yhid

2.2列的別名

別名的設置主要方便業務層,數據層編碼人員對列明的理解和描述。常見別名方法有

語法

描述

列AS別名

 

列別名

 

別名=列

 

SELECT yhid as UserName FROM Sys_Yonghu

SELECT yhid UserName FROM Sys_Yonghu

SELECT UserName = yhid FROM Sys_Yonghu

2.3被計算和繼承的列

SELECT UnitsInStock - UnitsOnOrder as margin from Products

Margin爲被計算生成的新列

2.4行的過濾

行的過濾有兩種方法:是用WHERE子句根據過濾條件來限制每一個行,或使用TOP子句使列表中只包含指定數量的列。

2.5 WHERE子句

SQL Server在檢索數據以前會先運行WHERE子句,節省內存和I/O資源。

select yhmc from sys_yonghu where sex = ' '

2.51比較運算符

比值與限定值一般可總結爲:一個值等於、小於或大於另外一個值。

運算符

描述

=

等於。可用於幾乎全部數據類型

<>或者!=

不等於

小於。用於數值與日期

大於

!<

不小於

!>

不大於

<=

小於等於

>=

大於等於

Like

用於對字符型的值進行通配符匹配

select yhmc from sys_yonghu where sfqy != 0

select yhmc from sys_yonghu where jgid like ' 0102% '

  對於Like運算經常使用的通配符有

運算符

說明

%

0個或多個字符

_

單個字符

[]

在指定範圍或集合內的單個字符

[^]

不在指定範圍或集合內的單個字符

找出以某個值結束的字符串,只需把通配符放在字符串的開頭

select jgid from sys_yonghu where jgid like'%02'

運行結果:0102

找出包含某個字符串的值,在開頭和結尾使用通配符

select jgid from sys_yonghu where jgid like ' %104% '

運行結果:0104

找出包含某個字符串的值,使用下劃線

select jgid from sys_yonghu where jgid like ' _104 '

運行結果:0104

找出單個字符在指定範圍或集合中的值,可使用方括號

select jgid from sys_yonghu where jgid like ' 010[24] '

運行結果:0104,0102

在一個範圍內搜索,在字母之間添加短橫線

select jgid from sys_yonghu where jgid like ' 010[0-4] '

運行結果:0104,0102

搜索不包含某些字符的值,使用^符號

select jgid from sys_yonghu where jgid like ' 010[^4] '

運行結果:0102

查找不相似某規則的字段,使用NOT

select jgid from sys_yonghu where jgid notlike'0102%'
運行結果:01,0104

2.52邏輯比較

邏輯門分爲三種:與(And)、或(Or)、非(Not)

And運算符:若是整個表達式的結果是真,則表達式中的每一個語句都必須是真。只有匹配where後面兩個過濾器才能查詢獲得。

Or運算符:只要執行匹配任何一個條件,就會被返回。

NOT運算符:該運算符不是獨立的,它是一個能夠放在任何邏輯表達式前面的修飾符,能獲得與結果相反的結果。NOT運算符一般效率比較低,SQL Server實際上將銜處理基本表達式,而後才提取不包含在原結果中的行。

select yhmc from sys_yonghu where jgid like ' 0102% ' and Not sex = ' '

2.53 NULL

Null值不等於任何值,甚至它本身。可用IS運算符來測試Null。也可使用IS NOT來測試非NULL值。

select yhmc from sys_yonghu where yhkl is null

2.54被擴展的過濾技術

select ProductName from Products where UnitPrice > 10 and UnitPrice < 19

通常爲日期和數值的範圍匹配。

2.55 BETWEEN運算符

簡化範圍表達式,在值範圍之間,幷包括值範圍的邊界。

2.56 IN()函數

可也把一個字段與列表中的數值進行匹配。

elect ProductName from Products where UnitPrice in ( 10 , 11 , 12 , 18 , 19 )

in函數也能夠用於子查詢。

2.57運算符優先級

NOT運算符最早被處理,其次是AND,而後是OR,最後才考慮運算符。

2.58使用括號

使用括號來分隔表達式,以制定運算符的優先次序。處理多個運算時,使用括號就不用關心運算符的正常優先級。

2.59結果排序

排序規則:若是但願行以某種順序返回,就必須使用ORDER BY 子句來強制排序。ORDER BY 子句老是放在WHERE子句後面,它能夠包含一個或多個列,每一個列之間用括號分割。默認爲升序ASC,若是須要降序則使用DESC

select ProductID,ProductName from Products where UnitPrice > 18 order by ProductID DESC

2.510排在前面的值

返回排序排在前面的值,能夠指定固定數量的行或者指定總行數的百分比。 

select top 5 ProductID,ProductName from Products where UnitPrice > 18 order by ProductID DESC

WITH TIES語句:把全部和最後一行相同的已排序記錄都加到結果集中。

select top 5 WITH TIES UnitPrice from Products order by ProductID DESC

百分比:用百分比來指定整個結果集的百分比,SQL SERVER對記錄進行計算,並圓整爲最近的整數。

select top 5 PERCENT UnitPrice from Products order by ProductID DESC
相關文章
相關標籤/搜索