mysql 基础语法3

代码:
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)去查询。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值