SQL语句高级查询一、二(刚入门 的也能看懂)

高级查询(一)

一、where条件表达式

SELECT column1, column2… FROM tablename [WHERE condition];
在这里插入图片描述
name = “张三”
name like “%三”
新建一张表进行测试
在这里插入图片描述
在这里插入图片描述
1.查找语文成绩大于80分的学生
select * from chengji where chinese > 80;

2.查询数学成绩在60-90之间的学生信息()
select * from chengji where math between 60 and 90;

3.查询张三、王五、赵六3位同学的所有成绩
IN(set),查找在set集合中的所有元素
select * from chengji where id in (1,3,4); id = 1 id = 3 id=4

4.查询所有叫冰冰的学生的成绩
select * from chengji where name like “%冰冰”;

5.查找所有姓李的学生的成绩
select * from chengji where name like “李%”;

6.查找语文大于数学成绩,并且数学成绩及格的学生信息
select * from chengji where chinese > math and math >= 60;

查询英语成绩大于语文成绩的同学
select * from chengji where english > chinese;
查询总分大于200分 并且 数学成绩小于语文成绩的学生.

select id,name,(chinese + math + english) as sum from chengji where (chinese + math + english) > 200 and math < chinese;

  • 查询语文分数在 70-80之间的同学。
  • 查询总分为189,190,191的同学。
  • 查询所有姓李 或者 姓张 的学生成绩。
  • 查询所有叫冰冰的学生的成绩。
  • 查询数学比语文多30分的同学。

二、字段别名

在这里插入图片描述
语法格式:
select 列名 as 别名…
as关键字可以省略,例如:
select 列名 别名 …

在这里插入图片描述

三、排序

排序查询,针对某个字段(数值类型的字段),进行排序,再将排序之后的结果展示

语法格式:
order by 列名 排序方式; 根据指定的列名进行排序

排序方式:
升序 asc【默认】
降序 desc

代码演示:
根据数学成绩进行从小到大进行排序
select * from chengji order by math asc;
在这里插入图片描述
在这里插入图片描述

四、聚合函数

mysql提供了一些聚合函数,用来对某个列进行聚合操作,聚合操作包括:
count(),统计某一列的数量
sum(),统计某一列的和
avg(),统计某一列的平均值
max()/min,统计某一列的最大值、最小值

例如:
统计成绩表中,有多少学生?
select count(id) from chengji;
在这里插入图片描述
在这里插入图片描述

高级查询(二)

一、limit查询

limit有2种用法:
limit n; 限定查询n条记录,例如:limit 3; 限定查询前3条记录
在这里插入图片描述
2.limit offset, number;
offset,表示偏移量,略过(忽略)的数量
number,保留的数量
例如:
limit 0,3; 略过前面0条记录,保留3条记录
limit 3,5; 略过前面3条,保留5条

获取数学成绩是第二名的学生信息
select * from chengji order by math desc limit 1,1;

在这里插入图片描述

二、group by分组查询

使用group by 子句对列进行分组统计,通常group by和聚合函数搭配使用,表示统计的是每个分组的情况
打个比方,打仗胜利后清点战利品:
机关枪:5挺
手雷:100枚
步枪:300只
迫击炮:10架

先增加一些测试数据:
先删除已经存在的goods、category表
在这里插入图片描述
把素材中的category、goods表导入
在这里插入图片描述
group by 列,表示针对某一列进行分组统计

1.针对商品表进行分组(分类),也就是统计有哪些种类?
select * from goods group by cat_id;
在这里插入图片描述
2.统计每个分组(分类)里面的商品的数量
group by 和 聚合函数组合使用,表示统计的是每个分组里面的数量
select cat_id,count(goods_id) from goods group by cat_id;
在这里插入图片描述

三、where、having

where,后面跟的字段,必须是原表中存在的字段
查询的是原表的某个列,符合特定条件的记录
在这里插入图片描述
如果需要对查询的结果,进行再次过滤,可以使用having代替where

区别在于:
where,在查询之前,查询表中的某个列符合指定条件的记录(不符合条件的,就不查询)
having,查询之后,对查询的结果进行再次过滤

以雇员系统表为例进行练习:

在这里插入图片描述
查询每个部门的平均工资和最高工资
按照部门号,分组:
再统计分割分组(部门)的薪水
select deptno,avg(sal),max(sal) from emp group by deptno;
在这里插入图片描述
在这里插入图片描述
查询平均工资低于2000的部门号和它的平均工资[别名可用]
select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal) < 2000;
在这里插入图片描述
请统计部门号大于10的各个部门平均工资,并且是平均工资大于1000的,并且按照平均工资从高到低排序 , 取出 前 2条
在这里插入图片描述

四、子查询

嵌入在其他查询语句中的select语句,称为子查询(嵌套查询)
一个select语句查询的结果作为另外select语句的查询条件【查询的字段的值】

需求:查询“GSM手机”下的商品有哪些?

在这里插入图片描述
在这里插入图片描述
1.通过”GSM手机”名称找到它所属的分类
select cat_id from category where cat_name = “GSM手机”;
2.再去goods表中查找哪些商品的cat_id = 3
select goods_id,goods_name,cat_id from goods where cat_id = (select cat_id from category where cat_name = “GSM手机”);
在这里插入图片描述

五、连接查询入门

前提:当我们需要查询的列【字段】,不在同一张表中时,就需要连接上其他表进行查询
例如:	查询 商品id、商品名称、分类名称

连接查询的语法格式:
select 表1.列,表2.列… from 表1 join 表2 ON 连接的条件;
在这里插入图片描述
select goods_id,goods_name,cat_name from goods join category on goods.cat_id = category.cat_id;
on goods.cat_id = category.cat_id; 表示通过goods表的cat_id 找到category表的cat_id
在这里插入图片描述

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperProgMan.SYJ

你的鼓励将是我创作更大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值