一:简单查询
语法:
select 列名 from 表名 where 列名=值
1、不等于:< > 或“!=”但是不属于T-SQL语句(建议使用< >)
2、别名
(1) as (2)空格
(3)=(从右向左赋值)例:select 姓名=UserName from dbo.User_tb
3、查询NULL值 where 列名is null (如果原来有数据,而后被删除,那么is null查询不到)
例: select AdContact,AdNum from dbo.Address_tb where AdNum is null
Is NULL 与 ‘’的区别
Is NULL:从未录入过数据,没有地址
‘’: 原来有数据,而后被删除,是有地址的
4、查询中使用常量列(常量的信息添加到查询的结果集当中,以方便进行统计和计算)
例:select UserNoId 用户编号,UserSex 性别,UserName as 姓名,‘登录’ as 登录情况 from dbo.User_tb
5、使用top关键字查询
(1)返回限定的行数
例:select top 2 UserNoId as 用户编号, UserName 用户姓名 from dbo.User_tb
(2) 返回限定百分比 关键字PERCENT
注:使用百分比的形式能够达到大概的数据而非精确的数据,
二:字符串函数
1、charindex函数:在一个字符串中查找另一个字符串,如果查询到则返回的是位置
语法:charindex(’要查找的字符串’,’源字符串’) 不指定开始的位置,默认从1开始
三个参数charindex(’要查找的字符串’,’源字符串’,10)指定开始位置
使用目的是提取需要的字符串
2、len函数:字符串的长度
语法:len(列名)
例:select LEN(UserOpenid) from dbo.User_tb where UserName=‘张三’
3、left函数:从字符串的左边截取指定字符
left(列,截取的个数)
select LEFT(UserOpenid,charindex(‘1’,UserOpenid)-1)
from dbo.User_tb where UserName=‘张三’
4、replace函数:替换一个字符串
语法:replace(‘原字符串’,‘要替换字符串’,‘新字符串’)
如果最后参数为空,相当于将第二个参数删除
5、stuff函数:将字符串插入另一个字符串,第一个开始位置删除指定长度
stuff(‘原字符串’,‘位置开始’,‘删除长度’,‘插入新字符串’)
例:select STUFF(UserOpenid,2,3,‘j34’)
from dbo.User_tb where UserName=‘张三’
三、模糊查询
(与like一起使用)通配符:1、%:一类字符,代替一个或多个字符
2、- 一个字符
3、[]:指定范围[0-9]
4、[^]:不在指定范围[0-9]
例:select * from dbo.Address_tb where AdCity like’%福州%’
Like特点:
1、只能与字符型一起使用
2、对于查询结果中的个数不固定
beetween….and 查询两个在两个已知值之间未知的值
例:select UserName 用户名,UserBirthday 出生日期 from dbo.User_tb where UserBirthday
between ‘1993-01-01’ and ‘1995-12-30’
特点:1、查询包含起止值2、起始值小于终止3、实际上是大于等于。。小于等于的形式4、可以与数值型和日期型使用
使用not进行反取:not between……and
In列举值范围内进行查询
例:select * from dbo.User_tb where UserSex in (1)
特点:1、可以与字符型,日期型,数值型一起使用 2、通常用于子查询 3、
相当于使用or进行连接的查询
四、聚合函数
聚合函数:count、sum、avg、max、min
五、分组函数
1、语法:
select 聚合函数,分组的列 from 表名 where 条件 group by 分组的列
注意:对查询的列有限制,除了聚合函数外就必须是分组的列
例:select COUNT(*) as 总人数,UserSex 性别 from dbo.User_tb
group by UserSex
2、排序 order by 升序:asc 降序:desc
小技巧:“每”,“各”后面的名称就是分组的项
例:select COUNT(*) as 总人数,UserSex 性别 from dbo.User_tb
group by UserSex order by UserSex desc
3、 对分组进行筛选(having)
Where用于分组之前的条件筛选,Having用于分组之后的条件筛选
语法:select…from…where…group by…having…order by…
六、日期函数
1、getdate:取当前系统日期
select GETDATE()
2、 Dateadd:将指定的数值添加到指定的日期部分后的日期
YY-年 MM-月 DD-天 DW-星期 QQ-季度
select DATEadd(MM,2, GETDATE())
参数2可以负数,小数取整
3、 datediff:两个日期之间的指定日期之间
select DATEdiff(MM,‘2017-4-1’,GETDATE())
4、 datename:日期中指定日期部分的字符串形式
select DATENAME(DW,GETDATE())
5、 datepart:日期中指定日期部分的整型形式
select DATEPART(DAY,GETDATE())
七、数学函数
1、随机数:rand 返回值:0~1之间
select rand ([100])
如果指定随机种子,返回的随机数都相同,反之,那么系统自动分配,所以每次的返回值都不相同
3、 ceiling:英译天花板,正数进位取大值,负数舍小数去大值
select CEILING(9.0002)
select CEILING(-9.0002)
4、 floor:英译地板,与ceiling相反
select floor(9.0002)
select floor(-9.0002)
八、使用union查询合并查询
1、语法:
Select…from.表名1
Union
Select…from…表名2
2、特点
(1)合并表中的列的个数、数据类型必须相同
(2)union默认去掉重复值 取反union all
(3)执行顺序从左向右
(4)可以与select into一起使用,但是into必须放第一个select中
(5)排序,order by 放在最后一个select
类型转换:covert(数据类型,列名)
例:select UserSex 性别,UserName 姓名,UserNc 昵称 from dbo.User_tb
union
select AdUserNo,AdContact,AdNum from dbo.Address_tb
九、子查询
1、在一个查询语句中包含了另外一个查询语句(先执行子查询后父查询)
语法:
Select…… from 表1 where 列1=(子查询)
特点:
(1)必须放在一对小括号里
(2)“=”比较运算符,还可以与其他的比较运算符一起使用
(3)作为where的条件
(4)不能出现order by字句,如果要使用,只能放在父查询中
方法:根据已知项去查未知项
例:select * from dbo.Henhouse_tb where HenFrNo=
(
select FrNoId from dbo.Farm_tb where FrUserNo=
(
select UserNoId from dbo.User_tb where UserName=‘张三’
)
)
2、in 和not in子查询
当子查询返回的列的值为多个时,使用关键字in
语法:
Select …from where 查询表达式 in(子查询)
Not in取反,不匹配的信息显示出来
In:可以使父查询匹配子查询返回的多个单列值
Not in:将取值查询条件中的表达式与子查询返回的结果进行比较,把不匹配的信息显示出来
注:关键字distinct去掉重复数据
4、exists子查询
语法:
If exists(子查询)
Begin
语句块
End
Exists:子查询查到记录,结果为真,否则为假
Not Exists:子查询查不到记录,结果为真,否则为假
5、all、any、some子查询(any、some等同)
(1)>all:父查询中的列的值必须大于子查询返回的值列表中的每一个值
(2)>any:父查询中的列的值必须至少大于子查询返回值列表中的一个
>some:等同
(3)=any与子查询in等同:父查询中列的值必须在子查询返回的值列表中存在
(4)<>any与not in
<>any:父查询的结果列的值与子查询返回的值列表中只要有一个不同就可以了(相当于OR或者的关系,父查询中的列不等于子查询中值a,或者不等于b,或不等于c)
Not in:父查询的结果列的值必须不能存在子查询返回值的列表中
(相当于and并且的关系,父查询中的列不等于子查询中值a,并且不等于b,并且不等于c)
十、内外连接
1、内连接 inner join…on
特点:1、地位相同无主次之分
2、先将两表中的数据相乘,用where条件选取重叠部分
例:select * from dbo.User_tb inner join dbo.Address_tb on
dbo.Address_tb.AdUserNo=dbo.User_tb.UserNoId
2、外链接
(1)左外连接:left join….on 子句中指定左表所以行
(2)右外连接:right join…on 右表中所有匹配行
(3)左右连接之间可互换
(4)不符合,使用NULL空值
例:select UserName 用户名,UserBirthday 生日,AdRess 地址 from dbo.User_tb
left join dbo.Address_tb on
dbo.Address_tb.AdUserNo=dbo.User_tb.UserNoId