一、视图

视图中存放的是sql查询语句,而非数据。使用视图时,会运行视图里的sql查询语句创建出一张临时表

创建视图语句:

create view 视图名称(<视图列名1>,<视图列名2>,...)

as

<select 查询语句>;

例题:




sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效


注意:sql查询语句中列的顺序和视图中列的顺序是一一对应的,它们列的名称可以不一样,但是对应关系是一一对应的。

使用视图的注意事项:

  1. 避免在视图的基础上再创建视图,多重视图会降低sql的性能和运行效率
  2. 不能往sql里插入数据,否则会报错

二、子查询

子查询可以被看成是一个临时表,在sql语句运行结束后临时表就消失了。

sql运行顺序:先运行子查询


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_02


子查询除了放到如上图所示的from子句中,也可以放到where子句中,与运算符in, any, all一起使用,从而构建出复杂的查询条件。使用方法是在in, any, all括号里面放入子查询。

与in关键字一起使用:找出每个课程里成绩最低的学号


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_03


与any关键词一起使用:哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?

...any(子查询)与some(子查询)相同:

select 列名1

from 表名1

where 列名1>any(子查询)


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询重复数据sql_04


与all关键词一起使用:哪些学生的成绩比课程0002的全部成绩里的都高呢?


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_子查询_05


三、标量子查询

标量子查询返回的是一个一行一列的数值。当需要单一值的时候,就可以使用标量子查询来获取到。

例题:大于平均成绩学生的学号和成绩


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_子查询_06


例题:查找成绩介于差生(成绩<=60)平均分和优等生(成绩>=60)平均分之间的学生的学号和成绩


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询2分钟内的数据sql_07


通常任何使用单一值的情况都可以使用标量子查询:


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询2分钟内的数据sql_08


四、关联子查询

使用关联子查询的场景:当每个组里进行比较的时候使用关联子查询。关联子查询是在子查询里面有了一个关联条件。

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


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询2分钟内的数据sql_09


关联子查询中起到关键作用的是关联条件。在上面这道例题中子查询部分有一个where子句的条件就是关联条件,这个条件的意思是按课程号对成绩表(score)分组,同一组里的数据和这一组里的平均成绩去比较,由于作为比较对象的是同一张表score,为了进行区别分别使用了s1和s2两个别名。在使用关联子查询的时候,需要取表的别名去使用表里的列名。

注:1. 子查询里的关联条件保证了子查询返回的是当前组的数据

2. 关联条件一定要写在子查询里面

五、如何用SQL解决业务问题

  1. 翻译成大白话
  2. 写出分析思路
  3. 写出对应的sql子句

以题目:“哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?”为例

  1. 翻译成大白话


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_10


2. 写出分析思路


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效_11


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_12


3. 写出对应的sql子句


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_子查询_13


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_子查询_14


六、各种函数

函数的功能:


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_15


函数可分为:汇总函数,算术函数,字符串函数,日期函数等


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询重复数据sql_16


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询2分钟内的数据sql_17


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_18


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效_19


本节课程总结:


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效_20


七、sqlzoo子查询题目


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询重复数据sql_21


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效_22


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_23


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_子查询_24


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效_25


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_26


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_27


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_从两张表查询数据 sql_28


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_sql视图查询对象无效_29


sql server2014 对象类型没有视图 存储过程 sql视图创建时对象无效_查询重复数据sql_30