MySQL(四)--练习题

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(四)--练习题的更多相关文章
- MYSQL经典练习题,熟悉DQL
MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...
- 【Python全栈-后端开发】MySQL数据库-练习题
MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...
- Mysql 四种事务隔离介绍以及锁机制
还有很多不太懂,这里收集几份大佬文章“飞机票”,待我整理好了,再好好写一篇文章吧. MySQL的四种事务隔离级别 https://www.cnblogs.com/huanongying/p/70215 ...
- 四、MYSQL数据练习题
我的MYSQL版本是mysql-5.7.24-winx64,每天练习5道习题. 如果有错误或者更优的解决方法,欢迎大家指出,谢谢!! 一.测试表格 --1.学生表Student(Sid,Sname,S ...
- mysql 及练习题
if() 函数的用法 IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false, mysql,'女','男') as sex fr ...
- mysql四-1:单表查询
一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...
- mysql四-2:多表查询
一.介绍 本节主题: 多表连接查询 复合条件连接查询 子查询 准备表: #建表 create table department( id int, name ) ); create table empl ...
- MySQL 四种事务隔离级的说明
很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...
- 细说Mysql四种安装方法及自动化部署
一.简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文件中,但是 ...
随机推荐
- Tomcat8-源码编译及开发
前言 下载Tomcat8源码进行分析,最好的方式,可以编译及运行,从网上查询了很多方式,总是不能完整的运行,由于本人采用idea编辑器,所以喜欢maven的方式,所以综合了网上的多种方案,最终可以在i ...
- Handler线程间通信
package com.hixin.appexplorer; import java.util.List; import android.app.Activity; import android.ap ...
- 解决ubuntu的gedit显示中文乱码问题
http://www.cnblogs.com/zhcncn/p/4032321.html
- Qt Opencv 在Linux下摄像头简单示例(转)
下面写的文章也许网上也有类似的,但是大多数都没有给出思路及背景,让初学者每次都只能学到一点皮毛,不少知识需要大量搜索零碎地拼凑起来.题外话,虽然现在是碎片化信息时代,但正是这样信息整合能力也显得非常重 ...
- Linux中重定向
转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1 重定向符号 > 输出 ...
- OpenCV探索之路(十五):角点检测
角点检测是计算机视觉系统中用来获取图像特征的一种方法.我们都常说,这幅图像很有特点,但是一问他到底有哪些特点,或者这幅图有哪些特征可以让你一下子就识别出该物体,你可能就说不出来了.其实说图像的特征,你 ...
- 利用formatter原理自动化参数化查询
前言:对于经常忙于服务端开发的小伙伴来说,与DB层打交道是在正常不过的事了,但是每次页面的查询条件新增往往意味着后端代码参数化同比增长,当然你可以不使用sqlhelper自带的参数化条件查询,可以直接 ...
- 第40篇 使用Sublime+MarkDown快速写博客
原文地址:http://blog.laofu.online/2017/06/03/how-use-sublime/ 前端的开发人员应该都知道sublime的神器,今天就说说如何使用sublime结合m ...
- JavaScript中Object的总结
基于原型继承,动态对象扩展,闭包,JavaScript已经成为当今世界上最灵活和富有表现力的编程语言之一. 这里有一个很重要的概念需要特别指出:在JavaScript中,包括所有的函数,数组,键值对和 ...
- Coursera 机器学习笔记(四)
主要为第六周内容机器学习应用建议以及系统设计. 下一步做什么 当训练好一个模型,预测未知数据,发现结果不如人意,该如何提高呢? 1.获得更多的训练实例 2.尝试减少特征的数量 3.尝试获得更多的特征 ...