视图建立

在数据库中,以Student Course 和sc 表为基础完成以下视图定义:

1.定义计算机系学生基本情况视图V_Computer;

create view V_Computer

as

select *

from student

where sdept='CS';

 

Student Course 和sc表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G

create view V_S_C_G

as 

select distinct student.sno,sname,course.cno,cname

from student,sc,course

where student.sno=sc.sno and course.cno=sc.cno;

 

3. 将各系学生人数,平均年龄定义为视图V_NUM_AVG

create view V_NUM_AVG(xi,sums,asage)

as

select sdept,count(distinct sno),avg(sage)

from student

group by sdept;

©

4.将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G

create view V_AVG_S_G(sno,sums,avggrade)

as

select sno,count(distinct cno),avg(grade)

from sc

group by sno;

 

5. 各门课程的选修人数及平均成绩定义为视图V_AVG_C_G

create view V_VAG_C_G(cno,sums,average)

as

select cno,count(distinct sno),avg(grade)

from sc

group by cno;


### 如何在数据库中基于现有视图创建新视图 在 SQL 中,可以利用现有的视图为基础来创建新的视图。这实际上是个简单的扩展过程,类似于通过基创建视图的方式。以下是关于如何实现这目标的具体说明: #### 基本概念 视图本质上是种存储的查询结果集,它并不实际保存数据,而是动态地从其依赖的基础视图中获取数据[^1]。因此,在创建新视图时,可以直接将已有视图视为种特殊类型的“”,并在此基础上构建更复杂的逻辑。 #### 创建新视图的语法 要基于已有的视图创建个新的视图,可以使用标准的 `CREATE VIEW` 语句。假设有个名为 `existing_view` 的视图,可以通过如下方式创建个新视图 `new_view`: ```sql CREATE VIEW new_view AS SELECT column1, column2, ... FROM existing_view WHERE condition; ``` 在这个例子中: - **`existing_view`** 是已经存在的视图名称。 - **`column1`, `column2`, ...** 示希望从中提取的列名。 - **`condition`** 可选参数,用于进步筛选所需的数据。 如果需要确保对新视图的操作不会违反某些特条件,还可以加入 `WITH CHECK OPTION` 子句[^1]: ```sql CREATE VIEW new_view AS SELECT column1, column2, ... FROM existing_view WHERE condition WITH CHECK OPTION; ``` 此选项的作用在于限制任何经由该视图执行的修改操作都需满足所指的选择准则。 #### 数据更新注意事项 需要注意的是,并非所有的视图都是可更新的。当试图通过对某个视图进行插入、更新或者删除记录的时候,会遇到各种各样的约束情况。比如,如果原始视图包含了来自不同格之间的联接或者是采用了诸如总计数之类的聚合函数,则派生出来的子视图通常也是不可更改的状态[^2]。 #### 示例代码 下面给出了段具体的实例演示如何依据既有视图建立个更加细化的新视图: ```sql -- 假设存在个叫做 'sales_summary' 的初始视图 CREATE VIEW sales_details AS SELECT product_id, SUM(sale_amount) as total_sales FROM sales_summary GROUP BY product_id; -- 如果想增加 WITH CHECK OPTION 来控制后续可能发生的变更行为的话 CREATE VIEW sales_details_with_check AS SELECT * FROM sales_details WHERE total_sales > 0 WITH CHECK OPTION; ``` 以上脚本先是从销售汇总信息里提炼出了每种商品对应的总销售额形成第个层次化的视图;接着再此基础上又加了个过滤器只保留那些有正向收入的产品列,并启用了检查机制防止未来有人误改不符合设规则的内容进入这个集合之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值