day08数据库多表查询

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.多表设计

        一对一

                一张表的一条记录只能与另外一张表的一条记录进行对应,反之亦然

                有时候,为了业务,或者避免一张表中数据量过大,过复杂,在开发中会进行一对一方式来设计表

day08数据库多表查询

        一对多

                指的是一个实体的某个数据与另外一个实体的多个数据有关联关系, 一对多的关系在设计的时候,需要设计表的外键

day08数据库多表查询 

         多对多           

                一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。

                一个学生可以有多个老师,一个老师可以教多个学生

                解决方案:创建一个中间表,专门用来维护多表之间的对应关系,通常是能够唯一标识出数据的字段(主键)

day08数据库多表查询

 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;

上一篇:Day08(private关键字(封装),类与对象的关系,对象的内存图)


下一篇:day08