1视图
1.1什么是视图
数据库的表里面存放的是实际数据,视图中存放的是SQL查询语句,当使
用客户端使用视图的时候,会运行视图里的SQL查询语句创建出一张临时表,视图本身不存放数据,只存放SQL查询语句。
1.2如何创建视图
Create view 视图名称(<视图列名1>,<视图列名2>,……)
As
<select 查询语句> (注:查询语句中列的顺序与视图名称后视图列名的顺序要一一对应)
例如:
运行结果:
视图定义好后可以直接在SQL语句中使用:
1.3为什么要使用视图
把需要频繁使用的SQL语句保存成视图,特别是汇总以及复杂查询条件导致SQL查询
语句非常庞大的时候,使用视图可以提高效率;视图中数据可以随源表中的数据变化自动更新,可以保证数据的最新状态;视图不保存数据,可以节省数据的存储设备的空间。
1.4使用视图的注意事项
要避免在视图的基础上再去创建视图,因为多重视图会降低SQL的性能及效率;也不能往视图里插入数据,不然会报错。
2 子查询
2.1 什么是子查询
子查询指的是一次性的视图,即在from子句中直接写定义视图的SQL查询语句(在select语句中嵌套另一个select语句)。
例如:
2.2 子查询也可以放入where子句中,与运算符一起使用:
---in(子查询)
---any(子查询)
----all(子查询)
2.2.1 找出每个课程里成绩最低的学号
第1步:查找出每门课程的最低成绩
第2步:在成绩表里查找出这些值对应的学号
最终SQL语句:
2.2.2 哪些学生的成绩比课程002的全部成绩里任意一个高?
第1步:查找出课程号002的全部成绩。
第2步:某个学生的成绩大于任何一个第1步里的成绩。
运行结果:
2.2.3 使用子查询的注意事项
(1)在SQL里,all得到的是一个集合,是n行数据,如果两个数字比较,不能写成
a>3*all (b),只能写成a/3>all (b)。
(2)避免使用多层嵌套子查询,会降低SQL性能。
- 子查询的as关键字和子查询的名称可以省略,但是尽量不要省略。
- 子查询运行顺序
2.3.1先运行子查询
2.3.2 每个查询语句里的运行顺序:
- 先运行蓝框里的子句
- 然后运行SELECT子句
- 最后运行红框里的子句
3 标量子查询
标量子查询:必须而且只能返回一行一列的查询结果,即是单一的值。标量子查询可以和比较运算符一起使用。
3.1 查询出大于平均成绩的学生的学号和成绩
3.2 成绩介于差生平均成绩和优等生平均成绩之间的学生学号和成绩
3.3 标量子查询的作用
标量子查询可以和比较运算符以及in,any,all.between一起使用,进行复杂查询。
使用标量子查询的时候需要注意,标量子查询不能返回多行的结果。
- 关联子查询
查找出每个课程中大于对应课程平均成绩的学生:
当每个组里比较的时候可以使用关联子查询。
- 运用SQL解决业务问题的实际运用
如何用SQL解决业务问题:
翻译成大白话→写出分析思路→写出对应的SQL子句
分析思路:
Select查询结果
From【从哪个表里查询】
Where 查询条件
Group by 分组【按什么条件分组】
Having 对分组结果指定条件
Order by 对查询结果排序
Limit 从查询结果中取出指定行
6函数
6.1汇总函数
6.2算术函数
6.3字符串函数
6.4日期函数