第7讲-SQL语言复杂查询之视图

三级模式两层映像:对应概念模式的数据在SQL中被称为基本表,而对应外模式的数据称为视图。视图不仅包含外模式,而且包含E-C映像。

SQL数据库结构:

1)基本表是实际存储文件的表,基本表中的数据时需要存储的。

2)视图在SQL中只存储其由基本表导出视图的所有公式,即由基本表产生视图的映像信息。视图并不存储数据。

3)对视图数据的更改最终要反映在对基本表的更改上。

1.定义视图

Create View view_name 列名1[...]

as (子查询[with check option]);

如果视图的属性名缺省,则默认为子查询结果中的属性名,否则就是指出的列名。

with check option是指:当视图包含insert,updata语句,delete语句时,要检查进行:insert/updata/delete的元组是否,满足视图中定义的子查询定义的约束条件。

例:定义一个视图为Compstud为计算机系的学生。

select View Compstu
AS  (select * From student
where D# in(select D# From Dept where Dname=‘计算机‘);

2.使用视图:定义好的视图可以像table一样在SQL语言中使用。

例:查询计算机系所有的学生

select * From Comp stud;

例:检索计算机系年龄小于20的同学

select * From Compstud
where age<20;

  例;定义视图Studstat描述学生信息,平均成绩,最高成绩,最低成绩等等

Create View Studstat (S#,Sname,AVGS,MINS,MAXS,CNT) as
(select S#,Sname,AVG(score),Min(score),Max(score),count(*)
From student S,SC
where S.S#=SC.S#
Group by S.S#);

3.SQL视图的更新:由于视图不保存数据,对视图的更新最终要反映在对基本表的更新,但是有时候视图定义的映射不可逆。

SQL语言视图更新的规则:

1)如果视图的select的目标包含了聚集函数,则不可以更新。

2)如果视图中的select使用了unique或者distiinc,则不可以更新。

3)如果视图中包含了Group by语句,则不可以更新。

4)如果视图中包含了算数表达式,则不可以更新

5)如果视图是由单个表的列构成的,但是视图没有包含主键,则不可以更新。

对于单一table子集形成的视图,且包含主键属性,那么视图可以更新。

4.视图的撤销: Drop View view_name

例:撤销视图Compstud

Drop View Compdtud;

  

时间: 2024-10-09 21:07:12

第7讲-SQL语言复杂查询之视图的相关文章

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第4/5套:Oracle SQL语言之查询语句.主要学习Oracle数据库SQL查询限制排序.Oracle SQL联接查询.Oracle SQL子查询等. 视频学习地址: http://edu.51cto.com/course/course_id-8047.html Oracle SQL语

oracle sql语言模糊查询

'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合.'$' 匹配输入字符串的结尾位置.如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'.'.' 匹配除换行符之外的任何单字符.'?' 匹配前面的子表达式零次或一次.'+' 匹配前面的子表达式一次或多次.'*' 匹配前面的子表达式零次或多次.'|' 指明两项之间的一个选择.例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串.'( )' 标记一

17 SQL语言——子查询与关键字in

子查询 单行子查询 --使用时机:筛选条件并不明确需要执行一次查询,并且查询结果只有一个字段并只有一个值 --注意:where子句中允许出现查询语句,该查询语句称为子查询 --例1:查询所有比雇员‘CLARK’工资高的员工信息. --普通两步: select sal from emp where ename='CLARK';--得到2450 select* from emp where sal>2450; --使用子查询: select * from emp where sal>(select

Oracle数据库SQL语言实战培训教程(全面、详细、案例、精讲)套餐

风哥Oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 套餐介绍: 风哥Oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 内容: SQL语言基础入门:SQL语言DDL语句和对象管理,表/临时表/索引/约束/视图/同义词/序列/触发器/存储过程/包的创建管理:SQL语言DML语句,SQL语句INSERT/UPDATE/DELETE,PL/SQL创建,事务与锁:SQL语言Select查询语句,SQL查询限制排序,联接查询,SQL子查询:SQL语言

SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5.在SELECT子句中使用子查询 6.WITH子句 子查询(进阶) 7.分析函数 8.行列转换 9.设置数据层次 八.行列转换 pivot和unpivot函数是Oracle 11g增加的新函数,利用此函数可以实现行列转换操作 按照原始方式实现,使用通用函数中的DECODE()函数 列字段的处理 SQ

SQL结构化查询语——之DQL语言

记忆思路:SQL的DQL语言select查询命令.from从哪个表中where以什么条件select查询哪些列,order by是否基于某字段排序,limit # 输出多少行.一.单表查询1. 常用查询语法: SELECT 输出显示字段 FROM 表名 无条件查询语法:SELECT 指定输出的列 FROM 表名 ; 限制输出语法:SELECT 指定输出的列 FROM 表名 LIMIT 显示记录数 ; 条件查询语法:SELECT 指定输出的列 FROM 表名 WHRER 查询条件 : 条件查询再排

SQL结构化查询语——之DDL语言

一.SQL结构化查询语言概述SQL是关系型数据库所使用的标准语言,最初是基于IBM的实现在1986年被批准的.1987年,"国际标准化组织(ISO)"把ANSI(美国国家标准化组织) SQL作为国际标准.1. SQL语言规范 在数据库系统中,SQL语句关键词不区分大小写(建议用大写) 数据库的资源对象是区分大小写的,如表.数据库这类资源在操作系统中以独立文件形来存储,如果文件系统对文件命名区分大小写则SQL语言内引用资源对象 资源内的元素不区分大小写,如:表的字段名称不区分大小写,因为

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

ASP.NET - LINQ 语言集成查询

LINQ(Language Integrated Query) LINQ语言集成查询是一组用于C#语言的扩展.它允许编写C#代码对数据集进行查询,这等同于使用数据库查询语句,这样程序员不必掌握数据库查询语句而是使用Linq就能完成相同的查询任务.而传统数据查询的弱点很多,比如执行简单查询也需要冗长的操作代码,查询语句是字符串格式,无法让编译器执行检查错误及早提示,查询不是强类型,查询参数容易写错,查询结果没有真正面向对象,每次查询取结果还得事先知道列名或列索引,不使用抽象工厂的前提下,查询语句是