SQL基础教程(第2版)第5章 复杂查询:练习题
Posted 绍耕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL基础教程(第2版)第5章 复杂查询:练习题相关的知识,希望对你有一定的参考价值。
/* 下面是问题中的SELECT语句 */ -- 确认视图内容 SELECT * FROM ViewPractice5_1; /* 下面是解答示例 */ -- 创建视图的语句 CREATE VIEW ViewPractice5_1 AS SELECT product_name, sale_price, regist_date FROM Product WHERE sale_price >= 1000 AND regist_date = \'2009-09-20\';
会发生错误。 >> 解答 对视图的更新归根结底是对视图所对应的表进行更新。 product_id(商品编号)、product_name(商品名称)、product_type(商 品种类) 3 列在表定义时都被赋予了 NOT NULL 约束 A。因此,向 product_id(商 品编号)以及 product_type(商品种类)中插入 NULL 的 INSERT 语句是无法执行的。 并且, INSERT 语句中只对 product_name(商品名称)、 sale_price(销 售单价)、 regist_date(登记日期) 3 列进行了赋值,所以剩余的列都会被自动插 入 NULL,于是就发生了错误。
SELECT product_id, product_name, product_type, sale_price, (SELECT AVG(sale_price) FROM Product) AS sale_price_all FROM Product;
-- 创建视图的语句 CREATE VIEW AvgPriceByType AS SELECT product_id, product_name, product_type, sale_price, (SELECT AVG(sale_price) FROM Product P2 WHERE P1.product_type = P2.product_type GROUP BY P1.product_type) AS avg_sale_price FROM Product P1; -- 确认视图内容 SELECT * FROM AvgPriceByType;
在 GROUP BY 子句中可以使用表的别名。
>> 解答 在视图中包含的列中,除了 avg_sale_price 之外的 4 列(product_id、product_name、 product_type、 sale_price) 在 Product 表 中 都 存 在, 因此可以直接读取。但是,最后的 avg_sale_price(平均销售单价)则必须使用关联子查询进行结算。使用标量子查询和关联子查询也可以创建出上述视图。
以上是关于SQL基础教程(第2版)第5章 复杂查询:练习题的主要内容,如果未能解决你的问题,请参考以下文章
SQL基础教程(第2版)第5章 复杂查询:5-3 关联子查询