mysql 如何查询查询四件_MySQL-四-复杂查询

1.视图

view, 是一种不存在的虚拟表: 类似表但是不是表

类似表: 视图有表结构

不是表: 没有数据, 视图的数据来源都是基表

执行了视图的创建语句之后: 发生什么?

1、会在对应的数据库的表空间中产生一个视图(表)

2、会在数据库对应存储文件夹下产生一个结构文件

视图是虚拟表: 有类似的表结构: 凡是表的查看结构所能用的都可以用在视图上面

删除视图发生了什么?

1、数据库没有视图结构

2、数据库文件夹下也不存在对应的视图结构文件

视图意义

1、视图可以将复杂的SQL查询语句进行了封装: 简化了SQL语句: 从而提升了带宽的使用效率和网络间的传输效率

2、视图的存在: 主要是为了对外提供数据支持(外部系统)

隐藏基表字段(隐私)

保证了数据库的数据安全(保护数据库内部的数据结构)

可以灵活的控制对外的数据: 保证针对每个接口都有一个单独的数据支持: 增强了用户友好性.

3、视图利于权限控制: 有助于数据库对权限进行管理.

练习:创建视图按性别汇总按成绩汇总按出生日期汇总

###注意:在写create view视图名称时,视图列名要与select后接的列名对应,不要漏写。例如:

2.子查询

子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。在一个select查询语句中嵌套了另一个select查询语句。当sql查询语句中有子查询的时候,会先运行子查询语句再运行子查询再运行外部的查询语句。

练习一:from中的子查询

练习二:哪些学生的成绩比课程0002的全部成绩里的任意一个还高?比任意一个高,where里面放any

练习三:哪些学生的成绩比课程0002的全部成绩都高?all大于所有数据

3.标量子查询

是指子查询返回的是单一值(一行一列)的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。 可以使用比较运算符 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧。

普通的子查询返回多行结果,标量子查询返回单一值。也是因为返回的是单一值,所以它可以和比较运算符以及in, all, any,between 等关键字一起使用,实现复杂查询。

练习一:查找大于平均成绩的学生的学号和成绩返回的单一值是81.125

练习二:成绩<=60为差生,成绩大于80为优等生,查询成绩介于差生和优等生(60-80)平均成绩的学生。

##

Subquery returns more than 1 row : 子查询返回值不唯一,返回多行,标量子查询返回值必须唯一才正确。

修改办法:在这个查询里加上where 条件语句,保证查询结果唯一

##

如果子查询返回多行就是普通子查询了,普通子查询也不也能用于比较运算符中。

4.关联子查询

定义:引用外部的一列或多列,将外部查询的每一行都传递给子查询,子查询依次读取传递过来的每一行的值,并将其使用到子查询上,直到外部查询的所有行都处理完为止,然后返回子查询的结果

关联子查询会在细分的组内进行比较的时候使用。子查询中添加的where语句就是让两个查询关联的条件:仅当商品种类(课程号)相同时进行平均值计算,一次一个平均值。https://blog.csdn.net/qq_41805514/article/details/81638006​blog.csdn.net

练习:查出每个课程中大于对应课程的平均成绩的学生

5.如何用SQL解决业务问题?(函数)

函数:汇总函数,算术函数,字符串函数,日期函数

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

分析思路:1.0002 全部成绩;2.哪些学生成绩比全部成绩的任意值都高?

######SQL书写顺序:

SELECT》FROM 》WHERE》GROUP BY》HAVE》ORDER BY

执行顺序:

FROM 》WHERE》GROUP BY》HAVE》SELECT》ORDER BY

6.SQLZOO练习思路:求出欧洲国家中gdp.p.c比英国大的国家。先求UK的GDP.P.C,再限定条件为欧洲大陆,且gdp.p.c大于that of 英国此题有难度要反复练三倍都多,除以三还大;另外<>为不等号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值