原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80262309
SQL不完全手册(三):函数
SQL系列
https://blog.csdn.net/qq21497936/article/details/80207610
https://blog.csdn.net/qq21497936/article/details/80242112
https://blog.csdn.net/qq21497936/article/details/80262309
函数
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