SQLserver 基本函数及连表查询

目录

一,字符函数

1,字符长度 LEN ('字符')注意和字节长度的区别

2,全大写UPPER('要全大写的字符')

3,全小写 LOWER('要全小写的字符')

4,取左/右 边的字符 LEFT RIGHT('要截取的字符',截取个数)

5,去除出左/右边的空格 LTRIM  RTRIM('字符')

6,替换REPLACE('字符串','需要替换的值','替换后的值')

7,截取SUBSTRING('字符','从第几位开始','到第几位结束')

8,找指定字符  CHARINDEX   ('指定字符','字符串')

二,日期函数

1,获取系统当前日期 getdate()

2,取年/月/日 YEAR/MONTH/DAY('日期')

3,取 年月日 DATEPART

4,两个日期之差  DATEDIFF 

6,在某个日期中增加 年月日 DATEADD

7,求某个日期是星期几 DATENAME

三,数学函数

1,绝对值ABS

2,幂值POWER

3,平方根 SQRT

4,最小整数 FLOOR

5,最大整数 CEILING

6,四舍五入 ROUND

7,返回值 SIGN  正数返回1  负数返回-1  0返回0

五,系统函数 

1,字节长度  DATALENGTH

2,数据类型转换CONVERT/CAST

六,聚合函数

1,count 计数

2,sum 求和

3,avg 平均分

4,max 最大值

5,min 最小值

七,分组函数

1,求班上男女生分别有多少人

2,查询姓张的男女生分别有多少人   先 where 再分组

3,求各个地方的人数

4,求各个地方的男女生分别有多少人

5,求人数大于1人以上的地方

6,求男生人数大于1人以上的地方求所有的男生  根据地方进行分组并统计   筛选人数大于1人以上

八,联表查询

查询学生的学号 姓名 课程号 成绩

1,inner join  内联  查询两张表中共有的数据, 默认内联可以省略inner

2,left join  左联 :以左边的表为基准,左表有的数据都会显示出来

3,right join  右联: 以右边的表为基准,右表有的数据都会显示出来

4,full join 全联:将左右两边表的数据全部展示出来

5,多表联查

查询学生的姓名  课程名  成绩


一,字符串函数

1,字符长度 LEN ('字符')注意和字节长度的区别

select len('哈哈abc')--返回5

2,全大写UPPER('要全大写的字符')

select upper('abc')--返回ABC

3,全小写 LOWER('要全小写的字符')

select lower('ABC')--返回abc

4,取左/右 边的字符 LEFT RIGHT('要截取的字符',截取个数)

select left('abcdefg',2)--返回ab
select right('abcdefg',2)--返回fg

5,去除出左/右边的空格 LTRIM  RTRIM('字符')

select len(ltrim('   abc'))
select len(rtrim('abcd   '))

6,替换REPLACE('字符串','需要替换的值','替换后的值')

select replace('我喜欢你','喜欢','like')--返回我like你

7,截取SUBSTRING('字符','从第几位开始','到第几位结束')

select SUBSTRING('我喜欢你',2,4)--返回喜欢你

8,找指定字符  CHARINDEX   ('指定字符','字符串')

select charindex('s','goodgoodstudy')--返回9

二,日期函数

1,获取系统当前日期 getdate()

select getdate()--返回当前时间

2,取年/月/日 YEAR/MONTH/DAY('日期')

select year('2021-2-12')--返回2021
select month('2021-2-12')--返回2
select day('2021-2-12')--返回12

3,取 年月日 DATEPART

select  DATEPART(yy,'2021-12-3')--返回2021
select  DATEPART(mm,'2021-12-3')--返回12
select  DATEPART(dd,'2021-12-3')--返回3

4,两个日期之差  DATEDIFF 

select DATEDIFF(yy,'2008-12-2','2021-12-4')
select DATEDIFF(mm,'2018-12-2','2020-12-4')
select DATEDIFF(dd,'2018-12-2','2020-12-4')

6,在某个日期中增加 年月日 DATEADD

select dateadd(yy,2,'2020-12-2')--返回2022-12-02 00:00:00.000
select dateadd(mm,2,'2020-12-2')--返回2021-02-02 00:00:00.000
select dateadd(dd,2,'2020-12-30')--返回2021-01-01 00:00:00.000

7,求某个日期是星期几 DATENAME

select dateName(DW,'2022-2-12')--返回星期六

三,数学函数

1,绝对值ABS

select abs(-4)--返回4

2,幂值POWER

select power(5,3)--返回125

3,平方根 SQRT

select sqrt(9)--返回3

4,最小整数 FLOOR

select floor(3234.9999)--返回3234

5,最大整数 CEILING

select ceiling(3234.00001)--返回33235

6,四舍五入 ROUND

select round(234.2563,2)--返回234.2600

7,返回值 SIGN  正数返回1  负数返回-1  0返回0

select sign(0)--返回0
select sign(8)--返回1
select sign(-19)--返回-1

五,系统函数 

1,字节长度  DATALENGTH

 select datalength('哈哈abc')--返回7

2,数据类型转换CONVERT/CAST

select CONVERT(int ,'123')
select cast('123' as int)

六,聚合函数

返回结果集为单行单列

1,count 计数

--求全班总共有多少人
select count(*) from student

2,sum 求和

--求全班同学的年龄总和
select sum(datediff(yy,SBirth,getdate())) from student

3,avg 平均分

--求全班同学的平均年龄
select avg(datediff(yy,SBirth,getdate())) from student

4,max 最大值

--求班上年龄最大的学生
select max(datediff(yy,SBirth,getdate())) from student

5,min 最小值

--求班上年龄最小的学生
select min(datediff(yy,SBirth,getdate())) from student

七,分组函数

特点: 必须与聚合函数搭档使用

group by 分组     having 分组后过滤

select后接列名的个数必须小于或等于group by 后接列的个数  除去聚合函数

1,求班上男女生分别有多少人

select ssex ,count(*) from  Student group by ssex

2,查询姓张的男女生分别有多少人   先 where 再分组

select ssex,count(*) from Student where sname like '张%' group by ssex

3,求各个地方的人数

select saddress, count(*) from student group by saddress

4,求各个地方的男女生分别有多少人

select saddress,ssex, count(*) from student group by saddress,ssex

5,求人数大于1人以上的地方

select SAddress,count(*) from student group by SAddress having count(*)>1

6,求男生人数大于1人以上的地方
求所有的男生  根据地方进行分组并统计   筛选人数大于1人以上

  select SAddress,count(*) from  Student where ssex='男'
  group by SAddress
  having count(*)>1

八,联表查询

查询学生的学号 姓名 课程号 成绩

1,inner join  内联  查询两张表中共有的数据, 默认内联可以省略inner

select a.SCode,a.SName,b.Course,b.Score from  Student a
 join score b
on a.SCode = b.StudentID

select a.SCode,a.SName,b.Course,b.Score from  Student a, score b
where a.SCode = b.StudentID

2,left join  左联 :以左边的表为基准,左表有的数据都会显示出来

select a.SCode,a.SName,b.Course,b.Score from  Student a
left join score b
on a.SCode = b.StudentID

3,right join  右联: 以右边的表为基准,右表有的数据都会显示出来

select a.SCode,a.SName,b.Course,b.Score from  Student a
 right join score b
on a.SCode = b.StudentID

4,full join 全联:将左右两边表的数据全部展示出来

select a.SCode,a.SName,b.Course,b.Score from  Student a
full join score b
on a.SCode = b.StudentID

5,多表联查

查询学生的姓名  课程名  成绩

 select  a.sname,b.cname,c.score from  a
 join c
 on a.sid = c.sidss
 join b
 on  c.cid = b.cid

  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝的宝呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值