.Net_04_表表达式 (Sql 语句)
表表达式
-> 派生表
就是将一个查询得到的结果作为另一个查询的数据源
-> 加括号,取别名(数据源的别名,列的别名)
-> 使用集合
-> 公用表表达式
-> 有些时候发现表使用派生表,太长了,不好组织代码
-> 将这个派生表写在前面,用一个变量记下来
-> 那么在后面使用的时候,就很简短
with 表的别名 as
(
派生表的查询
)
引用别名进行的查询
-> 视图
-> 是一张虚拟表
-> 在数据库中不存在这张表
-> 在视图中存的是查询表的一个步骤
-> 最后视图中应该是一个结果集
create view vw_视图名
as
查询的SQL语句
-> 视图在处理数据的时候,是一张虚拟表
-> 真正的数据时存在最底层的真实表中
-> 查询的时候,只是根据视图的组织关系分别到具体的真实表中将数据取出
-> 按照视图中的规则显示给用户
-> 视图在使用的时候,多半是提供权限的管理
-> (*)
表表达式,相当于对各个表之间做了一个封装,对于使用查询,就是在底层访问实际的表
组合结果显示给用户
如果要对其进行修改等操作,也会将数据传递给底层的真实表进行对应的修改(注意表结构中设计引发的异常)
-> 表值构造函数(SQL Server 2008)
(values
(1,2,3)
) as t(col1,col2,col3);
-> 表值函数
--- 派生表
1 select 2 tbl.stuId, 3 tbl.stuName 4 from 5 ( 6 --这是学生表的一个完整信息,可以作为数据源 7 select 8 --是学生id 9 s1.stuId, 10 s1.stuName, 11 case s1.stuSex 12 when 'f' then '女' 13 else '男' 14 end as [stuSex], 15 s2.className, 16 s2.classDescription 17 from 18 Student as s1 19 inner join 20 Course as s2 21 on s1.classId = s2.classId 22 ) as tbl 23 where 24 tbl.stuSex = '女' 25 and 26 tbl.className like '%C++%';
1 --公用表表达式(CTE) 2 with tbl as 3 ( 4 --这是学生表的一个完整信息,可以作为数据源 5 select 6 --是学生id 7 s1.stuId, 8 s1.stuName, 9 case s1.stuSex 10 when 'f' then '女' 11 else '男' 12 end as [stuSex], 13 s2.className, 14 s2.classDescription 15 from 16 Student as s1 17 inner join 18 Course as s2 19 on s1.classId = s2.classId 20 ) 21 select * from tbl
--创建视图 create view S_view1 as select Name,Sex,age from Student where age>20 select * from S_view1