mysql复杂查询 书_MySQL 复杂查询

视图表中存放的是实际数据

视图中存放的是sql查询语句,不存放数据

* 使用视图时,会运行视图里的sql查询语句,创建出一张临时表,当sql关闭之后,临时表就会自动删除

1.1 如何创建视图

1.2 如何使用视图

在From子句中使用视图名称代替表名称;

1.3 视图有什么用

如果在工作中需要频繁地xxx(e.g. 对性别进行汇总),那就不需要每次都写一遍,定义好视图,直接来使用。视图也会随着原表数据的修改,而更新导出最新的数据。

如果只是偶尔使用,用子查询就可以了。

1.4. 注意事项

不要一个视图套一个视图

视图里面不要插入数据,否则会报错

2. 子查询

2.1 什么是子查询

成绩大于平均成绩(一环套一环

在一个select查询语句当中嵌套了另一个select查询语句

“一次性的视图”

运行顺序:先运行子查询

搭配使用:….from / …in / …any / …all

案例:找出每个课程里成绩最低的学号

此类是面试中常见的Top N问题,比如如何找到每个类别下用户点击最多的5个商品是什么?=> 分组取每组最大值、最小值,每组最大的N条记录

2.2. …any … some / … all

select 列名 1

from 表名 1

where 列名1 > any (子查询)

案例: 哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?

案例: 哪些学生的成绩比课程0002的全部成绩里的全部都要高呢?

2.3 注意事项all得到的是一个集合,不能够再做运算,如果要有运算关系,那么就需要施加在符号左边:

a/3 > all (b)不要嵌套太多层

子查询 + as 子查询名称,最好不要省略

3. 标量子查询where 子句当中不能使用汇总函数(count, sum, avg, max, min)

需要用到单一值的时候,就可以用到标量子查询;除了where,其实任何需要单一值的地方都可以用到标量子查询

4. 关联子查询 (当在每个组里进行比较的时候,使用xxx)

案例:查找出每个课程中大于对应课程平均成绩的学生

/因为关联条件的存在,子查询只返回与s1是同一组的平均成绩,每次只返回一行结果,然后就将成绩进行比较,以此类推;子查询内部的s2可以看到外面的s1,反之则不然*/

5. 如何用SQL 解决业务问题

5.1 哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?

5.2 如何看懂报错

可以选择某一部分运行,排查错误;

6. SQLZoo

新知:between查找范围包括了边界值,可以用+1 / -1 去掉边界值'

Concat 可以用来把字符连着显示在一起; 字符的话记得加单引号;>0 可以写在查询条件中用于去掉空值(Null);

错题集:in 后面跟一个集合,元素之间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值