文章目录
前言
有关视图、子查询、各种各样的函数、谓词以及CSAE表达式的学习记录如下。
一、视图
“视图不是表,视图是虚表,视图依赖于表。”
表中保存的是实际数据,视图中保存的是SELECT语句。
1.视图的作用
那既然已经有数据表了,为什么还需要视图呢?主要有以下几点原因:
通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
通过定义视图可以使用户看到的数据更加清晰。
通过定义视图可以不对外公开数据表全部字段,增强数据的保密性。
通过定义视图可以降低数据的冗余。
2、创建视图
基本语法(只能用于创建不存在的视图,删除视图可以使用DROP语句,语法为DROP VIEW viewname,想要覆盖或更新视图,必须先删除它,然后再重新创建):
CREATE VIEW <视图名称>(<列名1>,<列名2>,...) AS <SELECT语句>
SELECT 语句中列的排列顺序和视图中列的排列顺序相同, SELECT 语句中的第 1 列就是视图中的第 1 列, SELECT 语句中的第 2 列就是视图中的第 2 列,以此类推。而且视图的列名是在视图名称之后的列表中定义的。 需要注意的是视图名在数据库中需要是唯一的,不能与其他视图和表重名。
视图不仅可以基于真是表,我们也可以在视图的基础上继续创建视图。
虽然在视图上继续创建视图的语法并没有错误,但是我们还是要尽量避免这种操作。这是因为对多数DBMS(数据库管理系统)来说,多重视图会降低SQL的性能。
注意事项:
1.与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)
2. 对于可以创建的视图数目没有限制。
3. 创建视图,必须具有足够的访问权限。这些权限通常由数据库管理人员授予。
4. 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造视图。所允许的嵌套层数在不同的 DBMS 中有所不同(嵌套视图可能会严重降低查询的性能,因此在产品环境中使用之前,应该对其进行全面测试)
5. 许多 DBMS 禁止在视图查询中使用 ORDER BY 子句。
6. 有些 DBMS 要求对返回的所有列进行命名,如果列是计算字段,则需要使用别名。
…(在创建视图前,有必要花点时间了解必须遵守的规定)
基于单表的视图:
表product:
我们在product表创建一个视图,如下:
CREATE VIEW productsum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type ;
运行结果:
基于多表创建视图
表shopproduct:
CREATE VIEW view_shop_product(product_type, sale_price, shop_name)
AS
SELECT product_type, sale_price, shop_name
FROM product,
shop_product
WHERE product.product_id = shop_product.product_id;
输出结果: