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. 关于volatile的一些理解

    什么是volatile?什么是可见性? volatile本意是易变的,就是说它修饰的变量可能经常被修改. 可见性就是说多线程访问一个共享变量的时候,任何的修改都会让所有的线程知道并且更新. 如何实现可 ...

  2. JAVA栈帧

    简介 Java栈是一块线程私有的内存空间.java堆和程序数据相关,java栈就是和线程执行密切相关的,线程的执行的基本行为是函数调用,每次函数调用的数据都是通过java栈来传递的. Java栈与数据 ...

  3. Visual Studio Code for mac

    Visual Studio Code for mac 将下载文件解压拖到应用程序文件夹即可 下载地址:链接: https://pan.baidu.com/s/1geHL5f1 密码: 2fdw

  4. 扫描soa并输出所有服务方法

    现在,大多公司都采用soa架构.那么我们怎么知道soa提供哪些服务方法呢?是通过浏览器不断的点击尝试?还是通过wcf?还是通过阅读soa接口文档,在软件开发行业,总会有文档落后于代码的情况?这些手法都 ...

  5. MySQL主从搭建

    主服务器配置 1.编辑配置文件 # 如果不存在,就手动创建一个 vim /etc/my.cnf 在配置文件加入如下值: [mysqld] # 唯一的服务辨识号,数值位于 1 到 2^32-1之间. # ...

  6. CentOS上安装NodeJs

    (1)参照:http://www.cnblogs.com/zhangqingsh/archive/2013/04/15/3022583.html  安装Python2.7 (2)安装Nodejs yu ...

  7. 关于饿了么在浏览器标签页失去焦点时网页Title改变的实现方法

    说在前面:必须是基于支持H5的浏览器才可以 这个 API 本身非常简单,由以下三部分组成. document.hidden:表示页面是否隐藏的布尔值.页面隐藏包括 页面在后台标签页中 或者 浏览器最小 ...

  8. OpenGL教程(0)——介绍

    OpenGL介绍 OpenGL,全称Open Graphics Library,是一个用C语言写的图形API.通俗地说,OpenGL用来绘制2D/3D图形.目前OpenGL的运用十分广泛,有许多用Op ...

  9. 【2017-06-02】Jquery基础

    Jquery就是Js集成的一些方法包. 注意:Jquery的引入位置在<head></head>里. 一.选择器 1.Id选择器 $("#div1") 2. ...

  10. HTML5笔记3——Web Storage和本地数据库

    上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storag ...