1.报表查询
count 个数
sun 总数
avg 平均值
max 最大值
min 最小值
统计班级里边有多少学生
select count(*)from student;
统计总成绩大于250分的人数
select count(*)from student where (math+english+chinese)>250;
统计班级里边各科总成绩
select sum(math),sum(english),sum(chinese) from student
统计所有科目的总成绩
select sum(math+english+chinese) from student;
统计一下语文平均成绩
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
统计一下班级语文最高分和最低分
select max(chinese) from student;
select min(chinese) from student;
报表查询订单根据名称合并后,总价格>10000的商品
select * from orders group by product having sum(price) >7000
2.多表设计
一对一
一张表的一条记录只能与另外一张表的一条记录进行对应,反之亦然
有时候,为了业务,或者避免一张表中数据量过大,过复杂,在开发中会进行一对一方式来设计表
一对多
指的是一个实体的某个数据与另外一个实体的多个数据有关联关系, 一对多的关系在设计的时候,需要设计表的外键
多对多
一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。
一个学生可以有多个老师,一个老师可以教多个学生
解决方案:创建一个中间表,专门用来维护多表之间的对应关系,通常是能够唯一标识出数据的字段(主键)
3.内连接查询
内连接,inner join on 查询两张表,设定条件,将两张表中对应的数据查询出来
不会产生笛卡尔积,不会产生临时表,性能高
select * from customer c inner join orders o on c.id=o.customer_id;
select * from customer,orders where customer.id=orders.customer_id;
select * from customer c,orders o where c.id=o.customer_id;
4.左连接查询
左外连接 left join on 设定条件,将两张表对应的数据查询出来,同时将左表自己没有关联的数据也查询出来
注意:join前面是左,后面是右
select * from customer c left join orders o on c.id=o.customer_id;
5.右连接查询
右外连接 right join on 设定条件,将两张表对应的数据查询出来,同时将右表自己没有关联的所有数据查询出来
select * from customer c right join orders o on c.id=o.customer_id;