zoukankan      html  css  js  c++  java
  • 《SQL基础教程》课后习题

    第三章

    3.1 请指出下述 SELECT 语句中所有的语法错误。

    SELECT product_id, SUM(product_name)
    -- 本 SELECT 语句中存在错误。
    FROM Product
    GROUP BY product_type
    WHERE regist_date > '2009-09-01';

    答:① GROUP BY应该在WHERE后面

           ②SELECT中不能出现GROUP BY中不包含的列

    3.2 请编写一条 SELECT 语句,求出销售单价( sale_price 列)合计值是进货单价( purchase_price 列)合计值 1.5 倍的商品种类。执行结果如下所示。

    答:

    SELECT product_type,SUM(sale_price) AS "售价总和",SUM(purchase_price) AS "进价总和" FROM Productbook GROUP BY product_type HAVING SUM(sale_price)>SUM(purchase_price)*1.5;
    

    3.3 此前我们曾经使用 SELECT 语句选取出了 Product ( 商品 ) 表中的全部记录。当时我们使用了 ORDER BY 子句来指定排列顺序,但现在已经无法记起当时如何指定的了。请根据下列执行结果,思考 ORDER BY 子句的内容。

     答:

     SELECT product_id,product_name,product_type,sale_price,purchase_price,regist_date FROM Productbook ORDER BY regist_date DESC,sale_price;
    

    第四章

    4.1  A 先生在自己的计算机(电脑)上,使用 CREATE TABLE 语句创建出了一张空的 Product (商品)表,并执行了如下的 SQL 语句向其中插入数据。

    BEGIN TRANSACTION;
    INSERT INTO Product VALUES ('0001', 'T 恤衫 ',  ' 衣服 ', 1000, 500, '2008-09-20');
    INSERT INTO Product VALUES ('0002', ' 打孔器 ',  ' 办公用品 ', 500, 320, '2008-09-11');
    INSERT INTO Product VALUES ('0003', ' 运动 T 恤 ',  ' 衣服 ', 4000, 2800, NULL);
    

         紧接着,B 先生使用其他的计算机连接上该数据库,执行了如下 SELECT语句。这时 B 先生能得到怎样的查询结果呢?

    SELECT * FROM Product;
    

    答:只有表头,没有提交COMMIT;

    4.2  如下所示,有一张包含 3 条记录的 Product 表。

     使用如下的 INSERT 语句复制这 3 行数据,应该就能够将表中的数据增加为 6 行。请说出该语句的执行结果

    INSERT INTO Product SELECT * FROM Product;
    

    答:会出现错误,因为主键不允许重复,如果执行成功商品编号会重复,就无法通过商品编号进行唯一查询了

    4.3 以练习 4.2 中的 Product 表为基础,再创建另外一张包含利润列的新表ProductMargin (商品利润)

    --  商品利润表
    CREATE TABLE ProductMargin
    (product_id CHAR(4) NOT NULL,
    product_name VARCHAR(100) NOT NULL,
    sale_price INTEGER,
    purchase_price INTEGER,
    margin INTEGER,
    PRIMARY KEY(product_id));
    

     请写出向上述表中插入如下数据的 SQL 语句,其中的利润可以简单地通过对 Product 表中的数据进行计算(销售单价 - 进货单价)得出

     

     答:

    INSERT INTO ProductMargin SELECT product_id,product_name,sale_price,purchase_price,sale_price-purchase_price FROM Productbook;
    

      

    4.4   对练习 4.3 中的 ProductMargin 表的数据进行如下更改。

              1. 将运动 T 恤的销售单价从 4000 日元下调至 3000 日元。
              2. 根据上述结果再次计算运动 T 恤的利润。
    更改后的 ProductMargin 表如下所示。请写出能够实现该变更的SQL语句

     

     答:

    UPDATE ProductMargin SET sale_price=3000,margin=sale_price-purchase_price WHERE product_name='运动T恤';

     

    第五章

    5.1  创建出满足下述三个条件的视图(视图名称为 ViewPractice5_1 )。使用 Product (商品)表作为参照表,假设表中包含初始状态的 8 行数据。

           条件 1: 销售单价大于等于 1000 日元。
           条件 2: 登记日期是 2009 年 9 月 20 日。
           条件 3: 包含商品名称、销售单价和登记日期三列。
           对该视图执行 SELECT 语句的结果如下所示。

    SELECT * FROM ViewPractice5_1;

     答:

     CREATE VIEW ViewPractices5_1(product_name,sale_price,regist_date ) AS SELECT product_name,sale_price,regist_date FROM Productbook WHERE sale_price>=1000 AND regist_date='2009-09-20';

    5.2  向习题 5.1 中创建的视图 ViewPractice5_1 中插入如下数据,会得到什么样的结果呢?

    INSERT INTO ViewPractice5_1 VALUES (' 刀子 ', 300, '2009-11-02');
    

      答:报错,“错误: 在字段 "product_id" 中空值违反了非空约束;描述: 失败, 行包含(null, 刀子 , null, 300, null, 2009-11-02).”,视图中无法插入数据

    5.3  请根据如下结果编写 SELECT 语句,其中 sale_price_all 列为全部商品的平均销售单价。

     答: 

    SELECT product_id,product_name,product_type,sale_price,(SELECT AVG(sale_price) FROM Productbook AS sale_price_all) FROM Productbook;

    5.4   请根据习题 5.1 中的条件编写一条 SQL 语句,创建一幅包含如下数据的视图(名称为 AvgPriceByType )。

     提示:其中的关键是 avg_sale_price 列。与习题5.3不同,这里需要计算出的是各商品种类的平均销售单价。这与5-3节中使用关联子查询所得到的结果相同。也就是说,该列可以使用关联子查询进行创建。问题就是应该在什么地方使用这个关联子查询。

    答:

    CREATE VIEW ViewPractice5_4 AS
    SELECT product_id,product_name,product_type,sale_price,
           (SELECT AVG(sale_price)
    	  FROM Productbook p2
    	WHERE p2.product_type = p1.product_type
    	GROUP BY p2.product_type) AS avg_sale_price
    FROM Productbook p1;
    

      

    第六章

    6.1  对本章中使用的 Product (商品)表执行如下 2 条 SELECT 语句,能够得到什么样的结果呢?

     

     答:①选出价格不再是500,2800,5000的商品名称和价格

            ②选出价格不为500,2800,5000和空的商品名称和价格

    6.2 按照销售单价( sale_price )对练习 6.1 中的 Product (商品)表中的商品进行如下分类。
    ● 低档商品:销售单价在1000日元以下(T恤衫、办公用品、叉子、擦菜板、圆珠笔)
    ● 中档商品:销售单价在1001日元以上3000日元以下(菜刀)
    ● 高档商品:销售单价在3001日元以上(运动T恤、高压锅)
    请编写出统计上述商品种类中所包含的商品数量的 SELECT 语句,结果如下所示。

     答:

    SELECT SUM(CASE WHEN sale_price <= 1000
                    THEN 1 ELSE 0 END) AS low_price,
           SUM(CASE WHEN sale_price BETWEEN 1001 AND 3000
                    THEN 1 ELSE 0 END) AS mid_price,
           SUM(CASE WHEN sale_price >= 3001
                    THEN 1 ELSE 0 END) AS high_price
     FROM Product;
    

      

    第七章

    7.1 请说出下述 SELECT 语句的结果。

    --  使用本章中的 Product 表
    SELECT *
    FROM Product
    UNION
    SELECT *
    FROM Product
    INTERSECT
    SELECT *
    FROM Product
    ORDER BY product_id;
    

      答:Product表的所有数据

    7-2 节的代码清单 7-11 中列举的外联结的结果中,高压锅和圆珠笔 2 条记录的商店编号( shop_id )和商店名称( shop_name )都是 NULL 。请使用字符串“不确定”替换其中的 NULL 。期望结果如下所示。

    SELECT COALESCE(SP.shop_id, '不确定')  AS shop_id, 
           COALESCE(SP.shop_name, '不确定') AS shop_name,
           P.product_id, 
           P.product_name, 
           P.sale_price
      FROM ShopProduct SP RIGHT OUTER JOIN Product P
        ON SP.product_id = P.product_id
    ORDER BY shop_id;
    

      

  • 相关阅读:
    azure备份虚拟机
    本地git部署web连接azure的git存储库
    dnsmasq服务的安装与配置
    hadoop错误- slave节点无法启动data node数据节点进程,但是master节点datanode正常启动
    hadoop错误--转发-hadoop启动遇到的各种问题
    hadoop错误--集群启动master时namenode进程无法启动
    c++的字节对齐
    fstream 和 iostream
    C语言的声明的优先级规则
    齐次矩阵
  • 原文地址:https://www.cnblogs.com/xingxyx/p/12507798.html
Copyright © 2011-2022 走看看