数据库系统学习

一、非常用sql命令

  1. any和all
  • any/some:表示至少一个满足条件
    如:列出工资高于B003分中至少一位员工工资的所有员工
select * from staff
where salary > some(select salary from staff where branch_no = 'B003');
  • all:表示满足所有条件
    如:列出工资高于B003分中所有员工工资的所有员工
select * from staff
where salary > all(select salary from staff where branch_no = 'B003');
  1. intersect和except
    intersect:取相同字段两表或子查询的交集
    except:取相同字段两张表,A表与B表的差集,即在A表中存在且不再B表中存在的数据

二、视图

  1. 视图在DBMS中只存储视图的定义,不存储实际的数据,通过视图访问库数据时,存在一个“视图分解”的过程。
  2. 视图创建:
create view viewname 
as subselect [with[cascaded|local]check option]
  • 其中subselect为定义视图的查询语句;
  • 使用with check option创建视图,则以下情况的修改是不被允许的:
    update更新后,通过视图无法查询出来的数据
    insert更新后,通过视图无法查询出来的数据
  1. 视图删除
drop view viewname [restrict|cascade]
  • 删除时如指定cascade,则删除是所有依赖改视图的视图全部都会删除;
  • 删除时如指定restrice,则删除时不会删除依赖的视图
  1. 视图的局限
  • 如果视图中某个列是基于聚合函数的,那么在访问改视图的查询语句中,该列只能出现在select和order by子句中
    例如:视图staff中一个列cnt是基于聚集函数count,则下述查询会失败
select count(cnt) from staff;//失败
select * from staff where cnt > 2;//失败
  • 分组视图不能与基板或视图连接?
  1. 视图的可更新性
    视图的可更新性是指可以通过更新视图对基表数据进行更新,但更新存在一些充分必要条件:
  • 没有指定distinct;
  • 定义的查询中的所有列名均为表列名,不能为常量、表达式或聚集函数,且列明出现次数不可重复。
  • from子句只能指定一个表
  • where子句不能包括含有from子句的嵌套select
  • 定义的查询中不能包括group by 或having子句
  1. 视图物化
    当普通视图比较复杂且查询频繁时,每次查询时进行驶入分解会影响查询的执行效率,这种情况可以通过将视图查询的数据存入临时表的方式提升查询速度,基表数据进行更新时也需要对临时表数据进行更新。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容