相关文章链接:
一周速学SQL Server(第四天)
一周速学SQL Server(第六天)
一、模糊查询
查询分为完整查询和模糊查询。
模糊查询:select 列名 from 表名 where 子句
如:select UserName,Age from 表名 where UserName like。。。
like后SQL提供了四种匹配模式:
1)% 0个或多个 %可以任意匹配类型和长度
2)_ 匹配单个字符 限制表达式的字符长度
如:select * from ProductType where Typename like '_dmin'
3)[ ] 范围匹配,括号中所有字符中的一个
如:select * from UserInfos where UserName like ‘ad[mnd]in’
select * from UserInfos where UserName like ‘ad[m-p]in’
4)[^] 不在括号中所有字符之内的单个字符
如:select * from UserInfos where UserName like ‘ad[^abc]in’
二、范围查询
2.1、范围查询方式一:select * from where 子句 条件 --条件是一个给定范围
1)比较运算符 < > = <= >=
如:select * from UserInfos where Age >= 30
2)in(2,3,4) 或not in(2,3,4)
如:select * from UserInfos where Age in(30,35,24)
3)between and 等价于 >= and <= (推荐写法)
如:select * from UserInfos where Age between 20 and 33
2.2、范围查询方式二:查询前面多少条或百分比
如:select top 10 * from UserInfos
select top 50% * from UserInfos
三、聚合函数
3.1、聚合函数
定义:对一组值执行计算并返回单一的值,经常与select语句中group by 组合使用
一般统计一个表的记录数用count(1)写法:
select count(1) from UserInfos --select count(1)伪造列,统计有多少条记录数
3.2、五种聚合函数
1)count 记录个数
如:select count(1)Record from UserInfos
2)sum 求和
如:select sum(Age)from UserInfos
3)avg 求平均
如:select avg(Age)from UserInfos
4)max 最大值
如:select max(Age)from UserInfos
5)min 最小值
如:select min(Age)from UserInfos
四、分组查询
4.1、group by分组
group by分组, 结合聚合函数,根据一个列或多个列对结果集进行分组。
4.2、语法
语法:select ... where... group by ... order by ...
如:select DepId,count(1)用户数 from UserInfos
Where Age >26
group by DepId ——统计各部门有多少个年龄大于26岁的用户
Having DeptId > 1 ——分组后的筛选条件
Order by DeptId desc ——排序
注意:select出现的列名,必须出现在group by 之后或包含在聚合函数之中。
五、连接查询之内连接
5.1、连接查询
根据两个或多个表之间的关系,从这些表中查询数据。
目的:实现多表查询
5.2、分类
内连接 外连接(左连接、右连接、全连接) 交叉连接
5.3、内连接:inner join
1)使用比较运算符 = >= <= > <进行表间的比较,查询与条件相匹配的数据。
2)等值连接
结果:想匹配的数据查询出来,如果没有匹配上,就没有结果。
(1)显示连接—表 inner join 表 on 条件
如:select UserId,UserName,Age,u.DeptId,DeptName
from UserInfos u ——将表UserInfos命别名为u
inner join DeptInfos d on d.DeptId=u.DeptId ——将表DeptInfos命别名为d
where Age >25
(2)隐式连接—select ... from 表,表 where 关联条件
如:select UserId,UserName,Age,u.DeptId,DeptName
from UserInfos u, DeptInfos d
where d.DeptId=u.DeptId and Age >25
六、连接查询之外连接
6.1、外连接分类
1)左外连接(左连接):left join on
返回的是左表的所有行,右表中没有匹配上,对应的列就显示NULL。
如:select * from UserInfos u ——左表
left join on DeptInfos d ——右表
on u.DeptId = d.DeptId
2)右外连接(右连接):right join on
返回的结果与左连接相反,返回的是右表的所有行,左表进行匹配,左表中没有匹配上的,对应列显示NULL。
如:select * from UserInfos u ——左表
right join on DeptInfos d ——右表
on u.DeptId = d.DeptId
3)全外连接(全连接):full join
返回左表和右表中所有行,当某一行在另一个表中没有匹配,另一个表中的列返回NULL。
如:select * from UserInfos u
full join DeptInfos d
on u.DeptId = d.DeptId
结果:左表和右表所有数据都会显示出来,每一行的数据如果在另一个表里匹配不上,就会对应显示NULL。
七、连接查询之交叉连接
交叉连接(笛卡尔积):cross join
如果不带where子句时,返回被连接的两个表的笛卡尔积,返回的行数是两个表行数的乘积。
带where子句,等价于inner join,返回的是匹配的数据。
如:select * from UserInfos u
cross join DeptInfos d
where u.DeptId = d.DeptId
八、类型转换函数
8.1、convert函数
convert(类型(长度),表达式)
如:select‘cbd' + convert(varchar,2)
8.2、cast函数
cast(表达式 as 类型)
如:select‘cbd' + cast(2,varchar)
九、字符串操作函数
9.1、字符串操作
1)从一个字符串里找一个子串,返回该子串第一次出现的位置
如:select CHARINDEX(‘bc',’abcdc‘)——返回2,索引从1开始
如:select PATINDEX(‘%bc’,‘abcdc)——返回2,指定的子串前后必须带%。
2)取长度
如:select len(‘abc’)
3)字符串大小写转换
转换小写:如:select LOWER(‘ABCDEFG’)
转换大写:如:select UPPER(‘abcdefg’)
4)去空格
如:select LTRIM(‘ dbcd ’)——‘dbcd ’ 去掉左边的空格
如:select RTRIM(‘ dbcd ’)——‘ dbcd’ 去掉右边的空格
5)截取字符串
如:select LEFT(‘abcdefg’,4)——abcd 返回字符串从左边起4个字符
如:select RIGHT(‘abcdefg’,6)——bcdefg 返回字符串从右边起6个字符
如:select SUBSTRING(‘abcdefg’,3,4)——cdef 返回字符串从左边起第3个位置开始,取4个字符。
6)把其中一个子串重复n次
如:select REPLICATE(‘abc’,4)——abcabcabcabc 将指定字符串重复4次
7)顺序颠倒
如:select REVERSE(‘abcdef’)——fdecba 字符串翻转
8)字符串替换
如:select REPLACE(‘abcdefg’,‘cd',’‘ss’)——abssdefg 字符串替换
如:select STUFF(‘abcdefg’,2,3,‘tt’)——attefg 用指定子串替换指定长度的子串后生成的字符串。