常用函数有:聚合函数,日期函数,数值函数,字符串函数,其他函数
1,聚合函数
count() 计数 sum()求和 avg(): 求平均数
2.日期函数
Curdate()日期、curtime()时间、now()日期+时间
group by 分组(分组函数的重要规则,having where 的区别)
3.数值函数
Abs()绝对值、floor()向下取整、ceil()向上取整、…
4.字符串函数
Concat() 字符串连接
5.其他函数
(1)Database()库、user()用户名、version()版本、…
Select database() from dual;
一:聚合函数
1.count() :求满足列条件的总的行数。
练习:
(1)、统计一个班级共有多少学生?
select count(id) from student_score;
Select count(chinese) from student; // 和上面的结果不同,忽略了null。
select count(*) from student;
(2)、统计数学成绩大于90的学生有多少个?
select count(*) from student where math>90;
(3)、统计总分大于250的人数有多少?
select count(*) from student where (chinese+english+math)>250;
表格:
注意: 除了count(*)以外,其他字段都会忽略NULL值;
2.sum(): 求总和。
练习:
(1)、统计一个班级数学总成绩?
select sum(math) from student;
(2)、统计一个班级语文、英语、数学各科的总成绩
select sum(chinese),sum(english),sum(math) from student;
(3)、统计一个班级语文、英语、数学的成绩总和
select sum(chinese+english+math) from student;
(4)、统计一个班级语文成绩平均分
select sum(chinese)/count(*) from student; //或用avg
3.avg(): 求平均数。
(1)、求数学平均分
select avg(math) from student;
(2)、求一个班级总分平均分
select avg(chinese+english+math) from student;
4.min() 和 max() 求最大值和最小值。
(1)、求班级数学最高分和最低分
select max(math),min(math) from student;
5.group by 分组。
group by子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组。
分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。分组函数忽略空值。
练习:
表格: t_order:
create table t_order(id int primary key,product varchar(20),price float(8,2));
insert into t_order values(1,'xiaomi', 1000);
insert into t_order values(2,'xiaomi',1100);
insert into t_order values(3,'huawei',2200);
insert into t_order values(4,'apple',8200);
1.对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) from t_order group by product;
2.查询商品总价格大于3000的商品
select product,sum(price) from t_order group by product having sum(price)>100;
注意:
(1)、分组函数的重要规则
如果使用了分组函数,或者使用group by 的查询:出现在select列表 中的字段,要么出现在聚合函数里,要么出现在group by 子句中。
(上面的product出现在了group by中,price出现在了聚合函数中)
group by 子句的字段可以不出现在SELECT列表当中。
(2)、having where 的区别
①、where和having都是用来做条件限定的,
②、where是在分组(group by)前进行条件过滤,
③、having子句是在分组(group by)后进行条件过滤,
④、where子句中不能使用聚合函数,having子句可以使用聚合函数。
⑤、having子句用来对分组后的结果再进行条件过滤
having sum(price)>2000 相当于 拿着 列名为sum(price)去查询。
总结:select 语句条件顺序:
selec * from 表1 left join 表2 on 条件
[where 条件字句]
[group by 字句]
[having 字句]
[order by 字句]
[limit 字句]
二:日期函数
select curdate() from dual;
select curtime() from dual;
select now() from dual;
注: dual 是虚拟表,为了凑sql语句的格式;
三:数值函数
select abs(-23) from dual;
select ceil(3.13) from dual;
select floor(4.87) from dual;
四:字符串函数
select concat(‘hello’,‘world’) from dual;
select inset(‘helloworld’,2,3,‘xxxxxx’) from dual;
select lower(‘HELLO MYSQL’)from dual
五:其他函数
select database() from dual;
select version() from dual;
select user() from dual;
select password(‘admin’) from dual;