2.1 编写一条 SQL 语句,从 Product(商品)表中选取出“登记日期(regist_date)在 2009 年 4 月 28 日之后”的商品。查询结果要包含 product_name 和 regist_date 两列。

SELECT product_name, regist_date
FROM Product
where regist_data > '2009-04-28';

2.4 请写出一条 SELECT 语句,从 Product 表中选取出满足“销售单价打九折之后利润高于 100 日元的办公用品和厨房用具”条件的记录。查询结果要包括 product_name 列、product_type 列以及销售单价打九折之后的利润(别名设定为 profit)。

SELECT product_name, product_type,
sale_price * 0.9 - purchase_price AS profit
FROM Product
WHERE sale_price * 0.9 - purchase_price > 100
AND (product_type = '办公用品' OR product_type = '厨房用具'));

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

SELECT product_type, SUM(sale_price), SUM(purchase_price)
FROM Product
GROUP BY product_type
HAVING SUM(sale_price) > SUM(purchase_price) * 1.5;

4.2 有一张包含 3 条记录的 Product 表。

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

INSERT INTO Product SELECT * FROM Product;

违反了商品编号列的主键约束,即不能存在主键重复的记录,不能更新操作。

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

INSERT INTO ProductMargin (product_id, product_name, sale_price, purchase_price, margin)
SELECT product_id, product_name, sale_price, purchase_price, sale_price - purchase_price
FROM Product;

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

将运动 T 恤的销售单价从 4000 日元下调至 3000 日元。
根据上述结果再次计算运动 T 恤的利润。

UPDATE ProductMargin
SET sale_price = 3000,
margin = sale_price - purchase_price
WHERE product_id = '0003';

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

条件1: 销售单价大于等于1000 日元。
条件2: 登记日期是2009 年9 月20 日。
条件3: 包含商品名称、销售单价和登记日期三列。

CREATE VIEWS ViewPractice5_1 AS
SELECT product_name, sale_price, regist_date
FROM Product
WHERE sale_price>=1000
AND regist_date= '2009-09-20';

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

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

注意:使用GROUP BY子句时,SELECT子句中不能出现聚合键之外的列名。

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

执行结果

product_id product_name product_type sale_price avg_sale_price
0001 T恤衫 衣服 1000 2500.0000000000000000
0002 打孔器 办公用品 500 300.0000000000000000
0003 运动T恤 衣服 4000 2500.0000000000000000
0004 菜刀 厨房用具 3000 2795.0000000000000000
0005 高压锅 厨房用具 6800 2795.0000000000000000
0006 叉子 厨房用具 500 2795.0000000000000000
0007 擦菜板 厨房用具 880 2795.0000000000000000
0008 圆珠笔 办公用品 100 300.0000000000000000

提示:其中的关键是 avg_sale_price 列。这里需要计算出的是各商品种类的平均销售单价。

CREATE VIEWS AS AvgPriceByType
SELECT product_id, product_name, product_type, sale_price,
(SELECT AVG(sale_price)
FROM Product AS P2
WHERE P1.product_type = P2.product_type
GROUP BY P2.product_type) AS avg_sale_price
FROM Product AS P1

6.2 按照销售单价(sale_price)对 Product(商品)表中的商品进行如下分类。

低档商品 :销售单价在 1000 日元以下(T 恤衫、办公用品、叉子、擦菜板、圆珠笔)

中档商品 :销售单价在 1001 日元以上 3000 日元以下(菜刀)

高档商品 :销售单价在 3001 日元以上(运动 T 恤、高压锅)

请编写出统计上述商品种类中所包含的商品数量的 SELECT 语句。

执行结果

low_price mid_price high_price
5 1 2
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.2 两针表外联结的结果中,高压锅和圆珠笔 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;

MySQL(四)--练习题的更多相关文章

  1. MYSQL经典练习题,熟悉DQL

    MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...

  2. 【Python全栈-后端开发】MySQL数据库-练习题

    MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...

  3. Mysql 四种事务隔离介绍以及锁机制

    还有很多不太懂,这里收集几份大佬文章“飞机票”,待我整理好了,再好好写一篇文章吧. MySQL的四种事务隔离级别 https://www.cnblogs.com/huanongying/p/70215 ...

  4. 四、MYSQL数据练习题

    我的MYSQL版本是mysql-5.7.24-winx64,每天练习5道习题. 如果有错误或者更优的解决方法,欢迎大家指出,谢谢!! 一.测试表格 --1.学生表Student(Sid,Sname,S ...

  5. mysql 及练习题

    if() 函数的用法 IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false, mysql,'女','男') as sex fr ...

  6. mysql四-1:单表查询

    一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...

  7. mysql四-2:多表查询

    一.介绍 本节主题: 多表连接查询 复合条件连接查询 子查询 准备表: #建表 create table department( id int, name ) ); create table empl ...

  8. MySQL 四种事务隔离级的说明

    很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...

  9. 细说Mysql四种安装方法及自动化部署

    一.简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文件中,但是 ...

随机推荐

  1. mysql一库多表查询主键

    mysql> show databases; mysql> use information_schema; mysql> show tables; mysql> select ...

  2. 18、面向对象基本原则及UML类图简介

    18.1.面向对象基本原则 18.1.1.面向抽象原则 抽象类特点: a.抽象类中可以有abstract方法,也可以有非abstract方法. b.抽象类不能用new运算符创建对象. c.如果一个非抽 ...

  3. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...

  4. OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用

    OWIN是Open Web Server Interface for .NET的首字母缩写,他的定义如下: OWIN在.NET Web Servers与Web Application之间定义了一套标准 ...

  5. 结构化CSS设计思维

    LESS.SASS等预处理器给CSS开发带来了语法的灵活和便利,其本身却没有给我们带来结构化设计思维.很少有人讨论CSS的架构设计,而很多框架本身,如Bootstrap确实有架构设计思维作为根基. 要 ...

  6. react 热替换 ([HMR])

    react 热替换 ([HMR]) 热替换好多地方可以用到,目前比较流行的用法是搭配React和webpack实现在不刷新页面的情况下对模块的增删改.在给项目添加热替换功能的时候,可以说是踩了各种坑, ...

  7. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  8. 刨根究底字符编码之十三——UTF-16编码方式

    UTF-16编码方式 1. UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets.2-byte Universal Character ...

  9. cpp(第十四章)

    1.类的静态成员变量.静态常整型(static const int)变量可以直接在类声明中初始化,静态常变量(static const )需要在类定义文件中初始化, 常变量(const )则在构造函数 ...

  10. 使用KeePass愉快的来管理你的密码

    不要老是使用同一个密码 这话说了好多次了,以前的CSDN被拖库,或者是好多xx照门,都告诉我们不宜使用用一个密码. 现在我各个网站的密码都不一样,而且复杂的我都记不住,例如,我的前Google账户密码 ...