1.聯合結果集 (1) 簡單的結果集聯合 select FNumber,FName,Fage from T_Employee\ union select FidCardNumber,FName,Fage from T_Employee (2) 查詢的基本原則是:每個結果集必須有相同的列數,沒個結果集
1.聯合結果集
(1) 簡單的結果集聯合
select FNumber,FName,Fage from T_Employee\
union
select FidCardNumber,FName,Fage from T_Employee
(2) 查詢的基本原則是:每個結果集必須有相同的列數,沒個結果集的列必須類型相同。
select FNumber,FName,Fage,FDepartment from T_Employee
union
select FidNumber,FName,Fage,’臨時工,無部門’ from T_Employee
- union All
(1) select FName,Fage from T_Employee
union
select FName,Fage from T_Emoloyee
(*) union合併兩個查詢結果集,並且將其中完全重覆的數據行合併為一條記錄。
(2) select FName,Fage from T_Employee
union All
select FName,Fage from T_Employee
(*) union因為要進行重覆值的掃描,所以效率低,因此如果不是確定要合併重覆行,那麼推薦用union All
- 資料庫函數
(1) 數字函數
1) ABS():求絕對值 select ABS(-3)
2) ceiling():舍入到最大整數。例如:3.33將被舍入為4,2.89將被舍入為3,-3.61將被舍入為-3。ceiling的英文意思是天花板。
3) floor():舍入到最小整數。例如:3.33將被舍入為3,2.89將被舍入為2,-3.61將被舍入為-4。floor的英文意思是:地板。
4) round():四捨五入。舍入到“離我半徑最近的數”。round的英文意思是:半徑。
例如:select Round(-3.1415926,3) 執行結果是:-3.1420000
(2) 字元串函數
1) len():計算字元串長度, select len(‘234’) 執行結果是3。例如:
select FName,len(FName) from T_Employee。
2) lower(),upper():轉小寫,轉大寫。
3) ltrim():字元串左側的空格去掉。例如:去掉兩邊的空格:
rtrim():字元串右側的空格去掉。
例如:去掉兩邊的空格:ltrim(rtrim(‘ 韓迎龍 ’))
4) SubString(string,start_position,length),參數string為主字元串,start_position為字元串在主字元串中的起始位置,length為子字元串的最大長度。例如:
select substring(‘abcdefghijk’,2,3) 執行結果為:bcd。
select FName,Substring(FName,2,2) from T_Employee。
(3) 日期函數
1) getdate():取得當前日期的時間。
2) dateadd(datepart,number,date),計算增加以後的時間,參數date為待計算的日期,參數number為增量,參數datepart為計量單位。例如:
dateadd(day,3,date)為計算日期date的3天後的日期。
dateadd(month,-3,date)為計算日期date的8個月前的日期。
select dateadd(day,-3,getdate()) 執行結果是:當前時間的前三天。
3) datediff(datepart,startdate,enddate):計算兩個日期之間的差額。datepart為計量單位。
select datetdiff(hh,getdate(),dateAdd(day,-3,getdate())) 執行結果為-72。
select FName,FInDate,DateDiff(year,FInDate,getdate()) from T_Employee 員工的工齡。
4) datepart(datepart,date):返回一個日期的特定部分。例如:
select datepart(year,getdate()),datepart(month,getdate()) 執行結果:2012 4
(4) 類型轉換函數
1) cast(expression as data_type)
2) Convert(date_type,express)
例如:select cast (’123’as int),cast(‘2012/4/9’ as dattime),Convert(datetime,’2012/4/9’)
- 空值處理函數
(1) isNull(express,value):如果express不為空則返回express,否則返回value。例如:
select isNull(Fname,’佚名’) as 姓名 from T_Employee
- Case函數用法
(1) 單值判斷,相當於switch case,語法為:
case expression
when value1 then returnvalue1
when value2 then returnvalue2
when value3 then returnvalue3
else defaultreturnvalue
end
舉例如下:select FName,
(
when 1 then ‘普通用戶’
when 2 then ‘會員’
when 3 then ‘VIP’
else ‘未知客戶類型’
end
) as 客戶類型 from T_Customer
- 索引Index
(1) 全表掃描,對數據進行檢索(select)效率最差的就是全表掃描,就是一條一條的找。
(2) 如果沒有目錄,查詢漢語字典就要一頁頁的翻,而有了目錄,只要查詢目錄即可,為了提高檢索的速度,可以為經常檢索的列添加索引,相當於創建目錄。
(3) 創建索引的方式,在表設計器中單擊右鍵,選擇”索引/鍵”到添加到在列中選擇索引包含的列。
(4) 使用索引能夠提高查詢效率,但是索引也是占據空間的,而且添加,刪除,更新數據的時候也需要同步更新索引,因此會降低insert,update,delete的速度,只有在經常檢索的欄位(where)上創建索引。
(5) (*)即使創建了索引,任然有可能全表掃描,比如:link,函數,類型轉換等。
- 表連接ioin
(1) select o.BillName,c.Name,c.Age
from T_Orders as o join T_Customers as c on o.customerID=c.ID
註:簡單的join可以將兩張表按照一定的規律連接起來,使我們可以再兩張甚至更多的表之間進行查詢。
- 子查詢
(1) 將一個查詢語句做成一個結果集供其它SQL語句使用,就像使用普通的表一樣,被當做結果集的查詢語句被稱為子查詢。所有可以使用表的地方幾乎都可以使用子查詢來代替。
select * from (select * from T2 where FAge<30)。