1松嘶、連接查詢join...on
連接查詢適用于當(dāng)需要的結(jié)果來自多張表時。
內(nèi)連接:inner join翠订,查詢兩表中完全匹配的數(shù)據(jù);
左外連接:left outer join港谊,查詢兩表中完全匹配的數(shù)據(jù)橙弱,以及左表特有的數(shù)據(jù);
左外連接:left outer join斜筐,查詢兩表中完全匹配的數(shù)據(jù)蛀缝,以及右表特有的數(shù)據(jù);
完全外連接:full outer join屈梁,查詢兩表中完全匹配的數(shù)據(jù),以及左表特有的數(shù)據(jù)煞抬,還有右表特有的數(shù)據(jù);
示例:
select * from StudentInfo as si inner join ClassInfo as ci on si.cid=ci.cId--查
詢表StudentInfo中cid與表ClassInfo中cId完全匹配的所有列,as:為表取別名战坤,StudentInfo
as si就是為表Student取別名為si
select * from ClassInfo as ci left join StudentInfo as si on ci.cId=si.cid--查
詢表ClassInfo中cId與表StudentInfo中cid完全匹配的,以及ClassInfo特有的所有列,
2残拐、聚合函數(shù)
聚合函數(shù)用于對行數(shù)據(jù)進行合并,一般是對數(shù)字類型的列進行操作慈省,一條查詢中可以寫多個聚合函數(shù)(null不參與運算)眠菇。
常用聚合函數(shù):sum(求和)、avg(求平均值)笑窜、count(計數(shù))登疗、max(求最大值)、min(求最小值)断傲。
sum示例:計算表StudentInfo中列cid的和智政,并取別名為sum
select SUM(cid) as sum from StudentInfo
avg示例:計算表StudentInfo中列cid的平均值
select AVG(cid) from StudentInfo
count示例:計算StudentInfo表中一共多少行续捂,如果存在某行的值全為null,則不計數(shù)
select COUNT(*) from StudentInfo
max示例:查詢表StudentInfo的列cid的最大值
select MAX(cid) from StudentInfo
min示例:查詢表StudentInfo的列cid的最小值
select MIN(cid) from StudentInfo
3劫拗、開窗函數(shù)over()
開窗函數(shù)和聚合函數(shù)結(jié)合使用矾克,用于將聚合結(jié)果還原至原數(shù)據(jù),便于將聚合結(jié)果與原數(shù)據(jù)進行對比酒繁。
開窗函數(shù)還可以和排名函數(shù)ROW_NUMBER()結(jié)合使用。
結(jié)合聚合函數(shù)示例:計算表StudentInfo的列cid的平均值欲逃,并利用開窗函數(shù)與原cid進行對比
select *,AVG(cid) over() from StudentInfo
結(jié)果:結(jié)合排名函數(shù)示例:將表StudentInfo中sGendre=1的數(shù)據(jù)進行排序稳析,并且進行排號
select *,ROW_NUMBER() over(order by sId desc) as rowindex from
StudentInfo where sGender=1
結(jié)果:4彰居、分組group by
聚合函數(shù)一般結(jié)合分組使用撰筷,進行分組內(nèi)的數(shù)據(jù)統(tǒng)計;分組依據(jù)值相同的示例在一組抬闯,在結(jié)果列中只能出現(xiàn)分組依據(jù)列和聚合列关筒。
ps:group by與where共存時,group by寫where后面睡榆。
單一列依據(jù)分組示例:將表studentInfo按照sGender進行分組袍榆,并計算每組數(shù)量
select sGender,count(*) from StudentInfo group by sGender--分組將屏蔽除分組依據(jù)以
外的其他列,故結(jié)果集中只能顯示分組依據(jù)列宿崭、聚合函數(shù)列
結(jié)果:多列分組示例:將表StudentInfo按照sGender和cid進行分組才写,并計算每組數(shù)量
select sGender,cid,count(*) from StudentInfo group by sGender,cid
select * from StudentInfo
結(jié)果:5琅摩、分組結(jié)果篩選having
示例:將表StudentInfo按照cid進行分組,并且計算每組數(shù)量蜕劝,篩選出數(shù)量大于1的組
select cid,count(*) from StudentInfo group by cid having COUNT(*)>1
6、聯(lián)合查詢union
聯(lián)合查詢:將多個查詢的結(jié)果集合并成一個結(jié)果集暑始。
聯(lián)合要求:
結(jié)果集列數(shù)一致婴削;
對應(yīng)列的類型一致。
關(guān)鍵字:
union:將多個結(jié)果集的數(shù)據(jù)進行合并嗤朴,并且消除重復(fù)行虫溜,按照第一列從小到大排序;
union all:將多個結(jié)果集進行合并吱雏,但不消除重復(fù)行瘾境,也不排序;
except:差集得滤,A except B表示A結(jié)果集中的數(shù)據(jù)但不包括B結(jié)果集中的數(shù)據(jù)盒犹;
intersect:交集,結(jié)果集中都有的數(shù)據(jù)沮协。
union示例:
select cId from ClassInfo union select sId from StudentInfo
結(jié)果:union all示例:
select cId from ClassInfo union all select sId from StudentInfo
結(jié)果:except示例:
select cId from ClassInfo except select sId from StudentInfo
結(jié)果:intersect示例:
select cId from ClassInfo intersect select sId from StudentInfo
結(jié)果:7、快速備份
向未有表備份:select 列名 into 備份表名 from 源表名晨雳。
(備份表如果不存在將新建表餐禁,表的結(jié)構(gòu)完全一致,但是不包含約束帮非,如果想只包含結(jié)構(gòu)不包含數(shù)據(jù),可以加個top 0)
示例:將表ClassInfo的結(jié)構(gòu)和數(shù)據(jù)快速備份到表test1筑舅,將自動新建表test1
select * into test1 from ClassInfo
向已有表備份:insert into 備份表名 select 列名 from 源表名。
示例:向已有表test2中備份表ClassInfo的列cTitle
insert into test2(cTitle) select cTitle from ClassInfo
8版仔、內(nèi)置函數(shù)
8.1误墓、類型轉(zhuǎn)換函數(shù)
cast(expression as date_type):將任意類型轉(zhuǎn)到任意類型
convert(date_type ,expression[,style]):將任意類型轉(zhuǎn)到任意類型,如果目標(biāo)類型是字符串蝉揍,則style可以設(shè)置樣式
示例:將89.0000轉(zhuǎn)換成89.0
select CAST(89.0000 as decimal(4,1))
select CONVERT(decimal(4,1),89.0000)
8.2畦娄、字符串函數(shù)
ascii:求字符的ascii碼值弊仪;
char:根據(jù)ascii碼轉(zhuǎn)到字符;
left:自左開始往右截取字符串驳癌;
right:自右開始往左截取字符串役听;
substring:從任意位置開始截取字符串典予,函數(shù)參數(shù):字符串、開始索引瘤袖、截取數(shù)量(索引從1開始);
len:返回字符串的長度艾扮;
lower:轉(zhuǎn)小寫占婉;
upper:轉(zhuǎn)大寫泡嘴;
ltrim:去除左側(cè)空格逆济;
rtrim:去除右側(cè)空格;
8.3滞磺、日期函數(shù)
getDate:獲取當(dāng)前日期時間莱褒;
dateAdd:日期加;
dateDiff:日期差广凸;
datePart:取日期的某部分
year:取年谅海;
month:取月;
day:取日扭吁。
(返回值都是int類型)