Wonderful Sql

news2024/11/25 19:28:07

Wonderful Sql

一. 初识数据库

练习题

1.1 编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束

表1-A 表 Addressbook (地址簿)中的列

在这里插入图片描述

DROP TABLE IF EXISTS Adressbook;

CREATE TABLE Adressbook
(regist_no	INTEGER	NOT NULL,
name	VARCHAR(128) NOT NULL,
adress	VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_adress	CHAR(20),
PRIMARY KEY (regist_no));

DESC Adressbook;
FieldTypeNullKeyDefaultExtra
0regist_noint(11)NOPRINone
1namevarchar(128)NONone
2adressvarchar(256)NONone
3tel_nochar(10)YESNone
4mail_adresschar(20)YESNone

1.2 假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请编写 SQL 把此列添加到 Addressbook 表中。

列名 : postal_code

数据类型 :定长字符串类型(长度为 8)

约束 :不能为 NULL

ALTER TABLE Adressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
FieldTypeNullKeyDefaultExtra
0regist_noint(11)NOPRINone
1namevarchar(128)NONone
2adressvarchar(256)NONone
3tel_nochar(10)YESNone
4mail_adresschar(20)YESNone
5postal_codechar(8)NONone

1.3 填空题

请补充如下 SQL 语句来删除 Addressbook 表。

(    ) table Addressbook;
DROP table Addressbook;

1.4 判断题

是否可以编写 SQL 语句来恢复删除掉的 Addressbook 表?

不使用工具无法恢复,只能通过运行建表语句重新创建

二. 基础查询与排序

练习题 - 第一部分

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

SELECT product_name, regist_date
  FROM product
 WHERE regist_date > '2009-04-28';
product_nameregist_date
0T恤2009-09-20
1打孔器2009-09-11
2菜刀2009-09-20
3叉子2009-09-20
4圆珠笔2009-11-11

2.2 请说出对product 表执行如下3条SELECT语句时的返回结果。

SELECT *
  FROM product
 WHERE purchase_price = NULL;

SELECT *
  FROM product
 WHERE purchase_price <> NULL;

SELECT *
  FROM product
 WHERE product_name > NULL;

product_idproduct_nameproduct_typesale_pricepurchase_priceregist_date

product_idproduct_nameproduct_typesale_pricepurchase_priceregist_date

product_idproduct_nameproduct_typesale_pricepurchase_priceregist_date

2.3 2.2.3章节中的SELECT语句能够从product 表中取出“销售单价(sale_price)比进货单价(purchase_price`)高出500日元以上”的商品。请写出两条可以得到相同结果的SELECT语句。执行结果如下所示:

product_name | sale_price | purchase_price 
-------------+------------+------------
T恤衫        |   1000    | 500
运动T恤      |    4000    | 2800
高压锅       |    6800    | 5000
SELECT product_name, sale_price, purchase_price
  FROM product
 WHERE sale_price - purchase_price >= 500;
SELECT product_name, sale_price, purchase_price
  FROM product
 WHERE sale_price >= purchase_price + 500;

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

提示:销售单价打九折,可以通过 sale_price 列的值乘以0.9获得,利润可以通过该值减去 purchase_price 列的值获得。

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 = '厨房用具');
product_nameproduct_typeprofit
0打孔器办公用品130.0
1高压锅厨房用具1120.0

练习题 - 第二部分

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

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

SUM函数仅适用于数字类型的字段, 不能对product_name使用SUM聚合

SELECT子句中的product_id字段为非聚合函数, 不在GROUP BY的字段列表product_type

WHERE子句应该出现在GROUP BY之前, FROM之后

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

product_type | sum  | sum 
-------------+------+------
衣服         | 5000 | 3300
办公用品      |  600 | 320

SELECT product_type, SUM(sale_price), SUM(purchase_price)
  FROM product
GROUP BY product_type
HAVING SUM(sale_price) > SUM(purchase_price) * 1.5;
product_typeSUM(sale_price)SUM(purchase_price)
0衣服5000.03300.0
1办公用品600.0320.0

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

SELECT *
  FROM product
ORDER BY regist_date IS NOT NULL, regist_date DESC, sale_price;
product_idproduct_nameproduct_typesale_pricepurchase_priceregist_date
00003运动T恤衣服40002800.0None
10008圆珠笔办公用品100NaN2009-11-11
20006叉子厨房用具500NaN2009-09-20
30001T恤衣服1000500.02009-09-20
40004菜刀厨房用具30002800.02009-09-20
50002打孔器办公用品500320.02009-09-11
60005高压锅厨房用具68005000.02009-01-15
70007擦菜板厨房用具880790.02008-04-28

三. 复杂一点的查询

练习题 - 第一部分

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

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

对该视图执行 SELECT 语句的结果如下所示。

SELECT * FROM ViewPractice5_1;

执行结果

product_name | sale_price | regist_date
-------------+------------+------------
T恤          |   1000    | 2009-09-20
菜刀         |    3000    | 2009-09-20
CREATE VIEW ViewPractice5_1 (product_name, sale_price, regist_date) AS
SELECT product_name, sale_price, regist_date
    FROM product
WHERE sale_price >= 1000 
    AND regist_date='2009-09-20';

SELECT * FROM ViewPractice5_1;
product_namesale_priceregist_date
0T恤10002009-09-20
1菜刀30002009-09-20

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

INSERT INTO ViewPractice5_1 VALUES (' 刀子 ', 300, '2009-11-02');
#TimeActionMessageDuration / Fetch
1000:38:48INSERT INTO ViewPractice5_1 VALUES (’ 刀子 ', 300, ‘2009-11-02’) Error Code: 1423. Field of view ‘shop.viewpractice5_1’ underlying table doesn’t have a default value0.000 sec

查询结果会报错, 由于视图只是原表的一个窗口, 视图中的字段与原表不重合, 原表中有NOT NULL的字段没有给默认值导致报错, 只有插入命令对原表能插入成功时, 才能对视图插入成功

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

SELECT product_id, product_name, product_type, sale_price,
       (SELECT AVG(sale_price) FROM product) AS sale_price_avg
FROM product;
product_idproduct_nameproduct_typesale_pricesale_price_avg
00001T恤衣服10002097.5
10002打孔器办公用品5002097.5
20003运动T恤衣服40002097.5
30004菜刀厨房用具30002097.5
40005高压锅厨房用具68002097.5
50006叉子厨房用具5002097.5
60007擦菜板厨房用具8802097.5
70008圆珠笔办公用品1002097.5

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

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

CREATE VIEW AvgPriceByType AS
SELECT product_id, product_name, product_type, sale_price,
       (SELECT AVG(sale_price) 
			FROM product AS p2 
		WHERE p1.product_type=p2.product_type) AS sale_price_avg
FROM product AS p1;

SELECT * FROM AvgPriceByType;
product_idproduct_nameproduct_typesale_pricesale_price_avg
00001T恤衣服10002500.0
10002打孔器办公用品500300.0
20003运动T恤衣服40002500.0
30004菜刀厨房用具30002795.0
40005高压锅厨房用具68002795.0
50006叉子厨房用具5002795.0
60007擦菜板厨房用具8802795.0
70008圆珠笔办公用品100300.0

练习题 - 第二部分

3.5 判断题

四则运算中含有 NULL 时(不进行特殊处理的情况下),运算结果是否必然会变为NULL ?

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

SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price NOT IN (500, 2800, 5000);

SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price NOT IN (500, 2800, 5000, NULL);
product_namepurchase_price
0打孔器320
1擦菜板790
product_namepurchase_price
IN或NOT IN谓词无法选取NULL的数据,也无法与NULL作比较,可以使用特定的谓词IS NULL或IS NOT NULL搭配逻辑运算符实现

3.7 按照销售单价( sale_price )对练习 3.6 中的 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;
low_pricemid_pricehigh_price
05.01.02.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/795526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode64.Minimum-Path-Sum<最小路径和>

题目&#xff1a; 思路&#xff1a; 一开始使用的深度优先搜索,结果果然是超时了.好吧 是需要动态规划的. 和上次有一题有点像.(12条消息) LeetCode62.Unique-Paths&#xff1c;不同路径&#xff1e;_Eminste的博客-CSDN博客 将边缘初始化为数组原本的数.然后每次只能向下或…

#P1108. [NOIP2008提高组] 双栈排序

题目描述 Tom 最近在研究一个有趣的排序问题。如图所示&#xff0c;通过 22 个栈 S_1S1​ 和 S_2S2​&#xff0c;Tom 希望借助以下 44 种操作实现将输入序列升序排序。 操作 aa&#xff1a;将第一个元素压入栈 S_1S1​。 操作 bb&#xff1a;将 S_1S1​ 栈顶元素弹出至输出序…

13.5.3 【Linux】PAM 模块设置语法

PAM 借由一个与程序相同文件名的配置文件来进行一连串的认证分析需求。我们同样以passwd 这个指令的调用 PAM 来说明好了。 当你执行 passwd 后&#xff0c;这支程序调用 PAM 的流程是&#xff1a; 1. 使用者开始执行 /usr/bin/passwd 这支程序&#xff0c;并输入密码&#xf…

windos 服务器设置指定ip访问指定端口,其他ip不能访问

需求&#xff1a;设置指定ip访问指定端口&#xff0c;其他ip不能访问 一&#xff0c;禁止所有ip访问 需要打开IP安全策略 或者winR 输入secpol.msc 1.先创建一个ip安全策略 2.点击添加&#xff0c;不使用添加向导&#xff0c;建一个安全策略 继续点添加 二&#xff0c;放开需…

01 Excel常用高频快捷键汇总

目录 一、简介二、快捷键介绍2.1 常用基本快捷键1 复制&#xff1a;CtrlC2 粘贴&#xff1a;CtrlV3 剪切&#xff1a;CtrlX4 撤销&#xff1a;CtrlZ5 全选&#xff1a;CtrlA 2.2 常用高级快捷键1 单元格内强制换行&#xff1a;AltEnter2 批量输入相同的内容&#xff1a;CtrlEnt…

448.找到所有数组中消失的数字

448.找到所有数组中消失的数字 class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {int[] temp new int[nums.length1];for (int i 0; i < nums.length; i) {temp[nums[i]];}ArrayList<Integer> list new ArrayList<>();for (…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Linux——设备模型

目录 本章目标 一、设备模型基础 二、总线、设备和驱动 --------------------------------------------------------------------------------------------------------------------------------- 工作两周了&#xff0c;真吃不消啊&#xff0c;虽然年轻但是早8.30晚10点还…

JAVA面试总结-Redis篇章(四)——双写一致性

JAVA面试总结-Redis篇章&#xff08;四&#xff09;——双写一致性 问&#xff1a;redis 做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;第一种情况&#xff0c;如果你的项目一致性要求高的话 采用以下逻辑我们应该先删除缓存&#xff0c;再修改数据库&…

【C++】STL——string的模拟实现、常用构造函数、迭代器、运算符重载、扩容函数、增删查改

文章目录 1.模拟实现string1.1构造函数1.2迭代器1.3运算符重载1.4扩容函数1.5增删查改 1.模拟实现string string使用文章 1.1构造函数 这里我们实现常用的第四个string(const char* s)和析构函数 class string { public://初始化列表赋值//string(const char* str "\0…

如何搭建一个成功的书店小程序

随着互联网的快速发展&#xff0c;传统实体书店面临着客流量下降的困境。为了适应市场需求&#xff0c;书店行业转型变得尤为重要。而制作书店小程序商城则成为了一种必备的转型方式。下面将详细介绍如何利用专业的小程序商城制作平台&#xff0c;手把手制作书店小程序商城。 首…

Docker 基础知识解析:容器与虚拟化的区别与优势

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

DTH11 温湿度模块

文章目录 前言一、DTH11 模块介绍二、设备树设置三、驱动程序四、测试程序五、上机测试及效果总结 前言 DHT11 是一款可测量 温度 和 湿度 的传感器。比如市面上一些空气加湿器&#xff0c;会测量空气中湿度&#xff0c;再根据测量结果决定是否继续加湿。 一、DTH11 模块介绍 …

VS下c++解析pcap文件

一、pcap文件格式 https://www.cnblogs.com/Chary/articles/15716063.html 接口协议&#xff08;四&#xff09;&#xff1a;以太网&#xff08;Ethernet&#xff09;学习&#xff08;一&#xff09;&#xff1a;协议_以太网协议_QNee的博客-CSDN博客 二、代码 pcapParser.h #…

向npm注册中心发布包(下)

目录 1、在package.json文件中指定dependencies和devDependencies 1.1 将依赖项添加到 package.json 文件 1.2 从命令行中 将依赖项添加到 package.json 文件 1.3 手动编辑 package.json 文件 2、关于语义版本控制 2.1 在已发布的包中增加语义版本 2.2 使用语义版本控制…

CentOS7系统Nvidia Docker容器基于TensorFlow2.12测试GPU

CentOS7系统Nvidia Docker容器基于TensorFlow1.15测试GPU 参考我的另一篇博客 1. 安装NVIDIA-Docker的Tensorflow2.12.0版本 1. 版本依赖对应关系&#xff1a;从源代码构建 | TensorFlow GPU 版本Python 版本编译器构建工具cuDNNCUDAtensorflow-2.6.03.6-3.9GCC 7.3.1Ba…

Linux设置密码复杂度

在etc目录下pam.d目录下&#xff0c;存在system-auth文件 先将文件备份下&#xff0c;然后在system-auth中插入下面行 password requisite pam_pwquality.so try_first_pass local_users_only retry3 authtok_type minlen8 lcredit-1 ucredit-1 dcredit-1 ocredi…

OpenCV 4.0+Python机器学习与计算机视觉实战

&#x1f482; 个人网站:【办公神器】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言第一部分&…

Shell脚本学习-变量子串

变量子串&#xff1a; man bash&#xff0c;然后搜索&#xff1a;Parameter Expansion。 参数拓展 $字符引进、提出了参数拓展、命令替换和数字替换。变量名或标识被大括号包围才能够被拓展。 我们可以记住一个表&#xff1a; 序号表达式说明1${parameter}返回变量$paramete…

东南大学齿轮箱故障诊断(Python代码,CNN结合LSTM模型)

运行代码要求&#xff1a; 代码运行环境要求&#xff1a;Keras版本>2.4.0&#xff0c;python版本>3.6.0 1.东南大学采集数据平台&#xff1a; 数据 该数据集包含2个子数据集&#xff0c;包括轴承数据和齿轮数据&#xff0c;这两个子数据集都是在传动系动力学模拟器&am…