代码:
Customers表格:

Orders表格:

内连接:
内连接是在交叉连接的基础上
只列出连接表中与连接条件相匹配的数据行,匹配不上的记录不会被列出。

语法:
隐式语法: select * from customers,orders where customers.id=orders.customer_id;
显式语法: select * from customers as c inner join orders as o on c.id=o.customer_id;
外链接:
外链接是以一张表为基表,其他表信息进行拼接,如果有就拼接上,如果没有显示null; 外链接分为左外连接和右外连接。

左外连接: 以关键字左边的表格为基表进行拼接。

语法:

select * from customers as c left join orders as o on c.id=o.customer_id;

右外连接: 以关键字右边的表格为基表

语法:
select * from orders as o right join customer as c on c.id=o.customer_id;
子查询:包括嵌套子查询、相关子查询。

嵌套子查询:
内部查询的执行独立于外部查询,内部查询仅执行一次,执行完毕后将结果作为外部查询的条件使用(嵌套子查询中的子查询语句可以拿出来单独运行。)

例如:查询id为1的老师教过的学生。
select * from students where id in(select student_id from teacher_student
where t_id=1);

相关子查询:

内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。

例如:每一科考试成绩大于平均分的学生的分数。
select * from score as a where a.score>(select avg(b.score) from score as b
where a.cou_id=b.cou_id);

常用函数:
1、count():求满足列的条件的总的行数。
例如:统计一个班级的人数。
select count(id) from class one;

2、sum():求总和。
例如:求一个班的数学平均分。
select sum(math)/count(*) from student ;

3、avg():求平均数。
例如:求数学平均分
select avg(math) from student;

4、max()\min():求最大值,最小值。
例如:求数学成绩的最大值最小值。
select max(math),min(math) from student;

group by :分组
GROUP BY子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组。
分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。分组函数忽略空值。

例题:
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)>3000;

having \ where 的区别
①、where和having都是用来做条件限定的,
②、WHERE是在分组(group by)前进行条件过滤,
③、HAVING子句是在分组(group by)后进行条件过滤,
④、WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数。
⑤、HAVING子句用来对分组后的结果再进行条件过滤
having sum(price)>2000 相当于 拿着 列名为sum(price)去查询。

技术
©2019-2020 Toolsou All rights reserved,
一个名叫“讨火车”的小村子 终于把火车讨来了c++内存 指针越界检测机制_CrtMemBlockHeade错误总结-myBatis plus 分页记一次EventBus内存泄露导致的项目问题服务器价格有什么差异?Android中获取当前正在显示的Activity实例创建数据mysql库流程在Vue中使用Web Worker最优化方法总结:公式解、数值优化、求解思想使用easyPOI导入Excel数据