SQL主要分為DDL和DML兩類:create table \drop table、ALTER TABLE等屬於DDL,select insert等屬於DML;
sqlsERVERZH中兩種常用的主鍵類型,int\識別欄位(又稱自動成長列)uniqueidentifier,用識別欄位的欄位在insert的時候不用指定主索引值;Sqlserver中產生GUID的函數:newid().net中:GUID.NewGuid(),返回GUID類型;
delete:刪除資料,drop table把整個表直接刪除
資料檢索:
檢索需要的列,select 列值進行計算:select age+100 from person
列別名:select id as '編號',name as '姓名',age as '年齡' from person
還可以檢索不與任何錶關聯的資料:select 1+1;select newid() select getdate()
彙總函式:對查詢的結果進行統計;
資料排序:asc descselect * from person order by age asc,id desc這裡面有一個先後順序,先按照年齡進行升序,如果年齡中有相同的則按照id進行降序排列order by子句要放到where之後:可以解釋為對結果集進行排序
萬用字元過濾:使用like單字元萬用字元半形底線_,多字元萬用字元半形百分比符號%
空值處理:在資料庫中一個列如果沒有指定值那麼值就為null,這個和C#中的null室友區別的,查詢列值為null時使用is:空值處理函數isnull('被判斷的值','如果被判斷的值為空白返回第二個參數')
多值匹配:使用in :select * from person where id in (1,2,3)between and :select * from person where id between 2 and 4
資料分組:先按照欄位進行分組,然後處理各組的資料,出現在select中的欄位名必須是彙總函式或者出現在group by 中的欄位;
彙總函式中的欄位可以是其他列的欄位;select count(*)as '姓名相同的人數' ,name as'姓名',max(age)as '改組中的最大年齡' from person group by name
having語句:在where中不能使用彙總函式,必須使用HAVING,Having要位於group by 之後,起到對組進行過濾的作用;能出現在having中的欄位要和在select中能用的的欄位一樣,即對組內的資料進行過濾
限制結果集的行數:select top 或者SQl server 2005後增加的row_number()函數
去掉重複資料:
distinct是針對整個行的而不是針對某個欄位:select distinct name ,age from personu
聯合結果集union
把兩個執行結果整合到一起;select id,name from person2 union select id ,name from person上下兩行的列數,欄位的資料類型一致select 0,name from person2union select id ,name from personunion
預設將重複資料合併掉,如果不需要去掉重複資料使用
union all
select 0,name,age from person2union allselect id ,name,age from person資料報表執行個體select 'person2中的最小年齡',min(age) from person2union allselect 'person中的最大年齡',max(age) from personunion allselect 'person中的最小年齡',min(age) from person
數字函數
abs() ceiling() floor() round()
字串函數:
len() lower() ltrim() rtrim() substring('',strarposition,length)
日期函數:
getdate() dateadd(depart,number,date)計算增加以後的日期,參數date為待計算的日期,參數number為增量,參數depart為計量單位如day ,year...datediff(depart,statrdate,enddate)datepart(depart,date);返回一個日期的特定部分;擷取每年入職的人數case函數用法:
可用於修改表的輸出樣式:
單值判斷,
相當於switch cas
ecase expression
when value1 then returnvalue
when value1 then returnvalue
else defaultreturnvalue
end
實現if else,
此時case後沒有運算式:
select * ,
(case
when age>30 then '大齡青年'
when age=30
then '30'
else '小屁孩'
end)
as '客戶類型'
from person
索引:
只在經常檢索的欄位上建立索引,即使建立了索引也有可能全表掃描:比如:like,函數,
類型轉換
串連查詢join
子查詢:將一個查詢語句作為一個結果集給其他語句使用;就像使用普通的表一樣,