2008年9月12日 星期五

T-SQL 執行效能考量

Exact Matches 或Ranges查詢可加速查詢速度
僅量不要用not like order by

T-SQL 查詢處理的方式

Parse
檢查語法
Resolve
解釋欄位存在
Optimize
最佳化判斷有無索引
Compile
編譯
Execute

T-SQL 算年齡的方法

USE Northwind
select Employeeid , year(getdate())-year(birthdate)
from Employees


USE Northwind
select Employeeid ,DATEDIFF(yy,birthdate,getdate())
from Employees

T-SQL 資料排序

SELECT DISTINCT UnitPrice as abc , SupplierID as def , ProductID as ghi
FROM Products
ORDER BY UnitPrice DESC

DISTINCT:將重覆的除去
AS:將欄位命名為
ORDER BY 依序排列 DESC=降幕 沒打就是升幕ASC
以上會以abc先排再來比較def或ghi

T-SQL IS NULL

USE northwind
SELECT *
FROM suppliers
WHERE fax IS NULL
同之前做法可查出suppliers表隔中欄位中有NULL的

*NULL不等於任何值

T-SQL IN

USE northwind
SELECT *
FROM suppliers
WHERE country in ('japan' ,'italy')

查尋條件中使用值串
以上會找出suppliers表隔中含有japan,italy的欄位

T-SQL BETWEEN AND

USE northwind
SELECT UnitPrice
FROM Products
WHERE UnitPrice BETWEEN 50 AND 90
//也可寫成WHERE UnitPrice<90>50
就會取出在Products表格裡UnitPrice欄位中
值有介於50至90的欄位表出來

T-SQL 一些特殊字用法

%=任意字元 任意字
_=單一任一字元
[0-9]=在這範圍任意一字元
[a-y]=在這範圍任意一字元
[^A]=除了A以外任意一字元

T-SQL SELECT WHERE用法

SELECT 用以指定查詢欄位

SELECT 欄位名 FROM 表格名
SELECT DISTINCT 欄位名 FROM 表格名 //可將重覆欄位名稱除去

WHERE 子句用以指定查詢的條件
SELECT 欄位名 FROM 表格名 WHERE 條件 //可選擇性的抓出資料例如 WHERE sale>1000就是sale大於100抓出

SELECT name
FROM user
WHERE name LIKE'%jo%'
就會搜尋出字中有jo的欄位

FROM 子句用以標示查詢的資料表

T-SQL sqlcmd常用語

sqlcmd -E //windows驗證
sqlcmd -U -P SQL //驗證
sqlcmd -S //連至別台似服器用
sqlcmd -E -i c:\123.sql -0 c:\123.txt //-i input sql檔 -o 輸出sql檔至