SQL不完全手册(三):函数

版权声明:欢迎技术交流和帮助,提供IT相关服务,索要源码请联系博主QQ: 21497936,若该文为原创文章,未经允许不得转载 https://blog.csdn.net/qq21497936/article/details/80262309

原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80262309


SQL不完全手册(三):函数


接上一部分

    《SQL不完全手册(二):高级语句》: https://blog.csdn.net/qq21497936/article/details/80242112


函数

1.函数说明

    SQL有计数和计算的内建函数。

    我们将使用下表进行查询,建表语句附在下面:

drop table student;
create table student (
  id int not null primary key,
  name varchar(20),
  age int,
  birthday date
)
insert into student values(1,'yang',18,'2000-01-01')
insert into student values(2,'yang2',20,'1998-02-01')
insert into student values(3,'yang5',18,'2000-03-01')
insert into student values(4,'yang4',20,'1998-04-01')
insert into student values(5,'yang3',18,'2000-05-01')
insert into student values(6,'yang7',21,'1997-04-01')
insert into student values(7,'yang6',30,'1988-05-01')
select * from student

函数的语法:

select function(table_column) from table_name

函数的类型

    在SQL中,基本的函数类型和种类有若干种。函数的基本类型是:

  • Aggregate函数
  • Scalar函数

合计函数(Aggregate functions)

    Aggregate函数的操作对象是一系列的值,并返回一个单一的值。

注释:如果在select语句的项目列表中的众多其他表达式中使用select语句,则这个select必须使用group by语句!

表:SQL Server中的合计函数

函数

描述

AVG(column)

返回某列的平均值

BINARY_CHECKSUM

 

CHECKSUM

 

CHECKSUM_AGG

 

COUNT(column)

返回某列的行数(不包括NULL值)

COUNT(*)

返回被选行数

COUNT(DISTINCT column)

返回相异结果的数目

FIRST(column)

返回在指定的域中第一个记录的值

(sqlserver2000不支持)

LAST(column)

返回在指定的域中最后一个记录的值

(sqlserver2000不支持)

MAX(column)

返回某列的最大值

MIN(column)

返回某列的最小值

STDEV(column)

 

STDEVP(column)

 

SUM(column)

返回某列的综合

VAR(column)

 

VARP(column)

 

表:MS Access中的合计函数

函数

描述

AVG(column)

返回某列的平均值

COUNT(column)

返回某列的行数(不包括NULL值)

COUNT(*)

返回被选行数

FIRST(column)

返回在指定的域中第一个记录的值

LAST(column)

返回在指定的域中最后一个记录的值

MAX(column)

返回某列的最大值

MIN(column)

返回某列的最小值

STDEV(column)

 

STDEVP(column)

 

SUM(column)

返回某列的综合

VAR(column)

 

VARP(column)

 

Scalar函数

    Scalar函数的操作面向某个单一的值,并返回基于输入值的一个单一的值。

表:MS Access中的Scalar函数

函数

描述

UCASE(c)

将某个域转换为大写

LCASE(c)

将某个域转换为小写

MID(c, start[,end])

从某个文本域提取字符

LEN(c)

返回某个文本域的长度

INSTR(c,char)

返回在某个文本域中指定字符的数据值位置

LEFT(c,number_of_char)

返回某个被请求的文本域的左侧部分

RIGHT(c,number_of_char)

返回某个被请求的文本域的右侧部门

ROUND(c,decimals)

对某个数值域进行指定小数位数的四舍五入

MOD(x,y)

返回除法操作的余数

NOW()

返回当前的系统日期

FORMAT(c,format)

改变某个域的显示方式

DATEDIFF(d,date1,date2)

用于执行日期计算

2.返回列的平均值:SQL AVG()

语法

select avg(column_name) from table_name;

实例:求某列的平均值

select * from student
select avg(id) from student
select avg(age) as avgOfAge from student
select avg(name) as avgOfName from student


实例:查询年龄大于平均值的人员记录列表

select * from student where age > (select avg(age) from student)
select * from student where age > (select avg(age) as avgOfAge from student)
select * from student where age >= (select avg(age) from student)

3.返回匹配指定条件的行数:SQL COUNT()

语法1:返回指定列的值的数目(NULL不会计入)

select count(cloumn_name) from table_name

语法2:返回表中的记录数

select count(*) from table_name

语法3:返回指定列的不同值得数目

select count(distinct column_name) from table_name

实例:

附:添加一条记录(为了测试null)

insert into student(id, name) values(8,'yang')
select * from student
select count(*) from student
select count(name) from student
select count(age) from student
select count(distinct age) from student
select count(distinct birthday) from student

4.返回指定的字段的第一个记录的值:SQL FIRST()

    可使用order by语句对记录进行排序。

语法:

select first(column_name) from table_name

实例:

替代方法1:返回查询到的第一条记录;

5.返回指定的字段的最后一个记录的值:SQL LAST()

6.返回一列中的最大值:SQL MAX()

语法

select max(coulmn_name) from table_name

注意:min和max也可用于文本列,以获得按字母排序的最高或最低值

实例:

select * from student
select max(birthday) as maxBirthday from student
select min(id) as minId from student

7.返回一列中的最小是:SQL MIN()

语法

select min(column_name) from table_name

参照6.返回一列中的最大值:SQL MAX()

8.返回一列中所有值得和:SQL SUM()

语法

select sum(column_name) from table_name

实例


9.合计函数(比如sum)分组:SQL GROUP BY

语法

select coumn_name, aggregate_function(column_name) from table_name 
where column_name operator value 
group by column_name

实例

select * from student
select age, sum(id) from student group by age
select age,name, sum(id) from student group by age,name

10.解决WHERE关键字无法与合计函数一起用:SQL HAVING()

语法:

select coulmn_name, aggregate_function(column_name)
from table_name
where coulumn_name operator value
group by column_name
having aggregate_function(column_name) operator value

实例

select * from student
select age, sum(id) from student group by age having sum(id) > 8

11.返回文本字段转换为大写:SQL UCASE()/UPPER()

语法

select ucase(column_name) from table_name

sql server 2008不支持ucase,用upper替代

select * from student
select upper(name) from student

实例

12.返回文本字段转换为小写:SQL LCASE()/LOWER()

语法

select lcase(column_name) from table_name

sql server 2008不支持lcase,用lower替代

实例

select * from student
select lower(name) from student

13.返回文本字段中的某段字符:SQL MID()/SUBSTRING()

语法

select mid(column_name, start[,length]) from table_name

sql server 2008不支持mid,用substring替代

14.返回文本字段中值得长度:SQL LEN()

语法

select len(name) from student

实例

select * from student
select len(name) as idd from student

15.把树枝字段舍入为指定的小数位数:SQL ROUND()

语法

select round(column_name, decimals) from table_name

实例:先添加新的一列为float

alter table student add height float
update student set height = 1.33333
update student set height = 1.37777 where id between 1 and 3
select * from student
select round(height, 2) from student

16.返回当前的日期和时间:SQL NOW()/GETDATE()

语法

select now() from table_name

sql server 2008不支持改函数,使用getdate替代

select *,getdate() as now from student

17.对字段的现实进行格式化:SQL FORMAT()

语法

select format(column_name, format) from table_name

实例

select *,format(getdate(),'yy-MM-dd') as now from student


《SQL不完全手册(四):多表查询》后续发布


原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80262309


阅读更多
换一批

没有更多推荐了,返回首页