一、视图
视图就是存储在数据库中并具有名字的 SQL 语句,或者说是以预定义的 SQL 查询的形式存在的数据表的成分。视图可以包含表中的所有列,或者仅包含选定的列。视图可以创建自一个或者多个表,这取决于创建该视图的 SQL 语句的写法。
数据库视图由 CREATE VIEW 语句创建。视图可以创建自单个表、多个表或者其他视图。要创建视图的话,用户必须有适当的系统权限。具体需要何种权限随数据库系统实现的不同而不同。CREATE VIEW 语句的基本语法如下所示:
CREATE
这里在mayan:SQL初体验建立的数据库基础之上进行操作
ex:
二、子查询
子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。
子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制。
子查询可以在 SELECT、INSERT、UPDATE 和 DELETE 语句中,同 =、<、>、>=、<=、IN、BETWEEN 等运算符一起使用。
使用子查询必须遵循以下几个规则:
- 子查询必须括在圆括号中。
- 子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。
- 子查询不能使用 ORDER BY,不过主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。
- 返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。
- SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。
- 子查询不能直接用在集合函数中。
- BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。
ex:找出每个课程号里成绩最低的学生(in子查询)
错解1:
错解2:
正解:
3.拓展
ex:
1.哪些学生成绩比课程0002全部成绩里的任意一个高:(any)
2..哪些学生成绩比课程0002全部成绩里的都高: (all)
4.注意事项及总结
三、标量子查询
1.定义
当使用另一个select语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值,这种类型的子查询成为标量子查询。
标量子查询在结果集中的每一行结果产生时都要执行一遍,在某些情况下可以进行优化以减少标量子查询才重复执行,标量子查询是很耗性能的注意使用。2.应用场景
复杂查询
3.ex
3.1大于平均成绩学生的学号和成绩
3.2统计学生成绩与平均成绩(使用round近似)
四、关联子查询
这篇文章写的很好AD王子:简单易懂教你学会SQL关联子查询,子查询里的where是在不断地取数查询。
ex:查找出每个课程中大于对应课程平均成绩的学生
五、总结
六、各种函数
附SQLzoo练习章节SELECT within SELECT Tutorial: