Wonderful Sql

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_dateFROM productWHERE 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 productWHERE purchase_price = NULL;

SELECT *FROM productWHERE purchase_price <> NULL;

SELECT *FROM productWHERE 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_priceFROM productWHERE sale_price - purchase_price >= 500;
SELECT product_name, sale_price, purchase_priceFROM productWHERE 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 profitFROM productWHERE sale_price * 0.9 - purchase_price > 100AND (   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_dateFROM 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_priceFROM productWHERE purchase_price NOT IN (500, 2800, 5000);

SELECT product_name, purchase_priceFROM productWHERE 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.mzph.cn/news/9226.shtml

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

相关文章

java代码审计6之ssrf

文章目录 1、java支持的网络请求协议&#xff1a;2、Java 中能发起⽹络请求的类2.1、仅⽀持 HTTP/HTTPS 协议的类2.2、⽀持 sun.net.www.protocol 所有协议的类2.3、审计关键词 3、靶场3.1、漏洞代码13.2、ftp协议读取技巧3.3、无回显之探测内网3.4、无回显之探测文件 之前的文…

【数据分析专栏之Python篇】二、Jupyer Notebook安装配置及基本使用

文章目录 前言一、Jupter Notebook是什么1.1 简介1.2 组成部分1.3 Jupyter Notebook的主要特点 二、为什么使用Jupyter Notebook?三、安装四、Jupyter Notebok配置4.1 基本配置4.2 配置开机自启与后台运行4.3 开启代码自动补全 五、两种键盘输入模式5.1 编辑模式5.2 命令模式5…

探究Spring Bean的六种作用域:了解适用场景和使用方式

这里写目录标题 单例&#xff08;Singleton&#xff09;作用域&#xff1a;原型&#xff08;Prototype&#xff09;作用域&#xff1a;请求&#xff08;Request&#xff09;作用域&#xff1a;会话&#xff08;Session&#xff09;作用域&#xff1a;全局&#xff08;applicati…

4-Linux组管理和权限管理

Linux组管理和权限管理 Linux组的基本介绍文件/目录的所有者组的创建文件/目录所在的组其它组改变用户所在的组权限的基本介绍第0-9位说明rwx权限详解rwx 修饰文件时rwx修饰目录时 修改权限第一种方式&#xff1a;、-、 变更权限第二种方式&#xff1a;通过数字变更权限 修改文…

安全学习DAY07_其他协议抓包技术

协议抓包技术-全局-APP&小程序&PC应用 抓包工具-Wireshark&科来分析&封包 TCPDump&#xff1a; 是可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来帮助你去掉无用…

疾风计划-程序设计基础-期末考试-05

擀面皮 有一块1x1的方形面团&#xff08;不考虑面团的厚度&#xff09;&#xff0c;其口感值为0。擀面师傅要将其擀成一个N x M&#xff08;纵向长N&#xff0c;横向宽M&#xff09;的面皮。师傅的擀面手法娴熟&#xff0c;每次下手&#xff0c;要么横向擀一下&#xff08;使得…

深入理解Linux 内核追踪机制

Linux 存在众多 tracing tools&#xff0c;比如 ftrace、perf&#xff0c;他们可用于内核的调试、提高内核的可观测性。众多的工具也意味着繁杂的概念&#xff0c;诸如 tracepoint、trace events、kprobe、eBPF 等&#xff0c;甚至让人搞不清楚他们到底是干什么的。本文尝试理清…

centos下安装ftp-读取目录列表失败-

1.下载安装ftp服务器端和客户端 #1.安装yum -y install vsftpdyum -y install ftp #2.修改配置文件vim /etc/vsftpd.conflocal_enablesYESwrite_enableYESanonymous_enableYESanon_mkdir_write_enableYES //允许匿名用户在FTP上创建目录anon_upload_enableYES //允许匿名用户…

B074-详情富文本 服务上下架 高级查询 分页 查看详情

目录 服务详情修改优化ProductServiceImplProduct.vue 详情数据-富文本-vue-quill-editor使用步骤测试图片的访问方式富文本集成fastDfs 后台服务上下架&#xff08;批量&#xff09;前端开始后端完成ProductControllerProductServiceImplProductMapper 前台展示上架前端开始后…

使用docker 部署自己的chatgpt

直接docker部署 docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEYyour_api_key chenzhaoyu94/chatgpt-web:latestDocker compose部署 version: 3services:app:image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可ports…

NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档问答助手

在文章NLP&#xff08;六十&#xff09;Baichuan-13B-Chat模型使用体验中&#xff0c;我们介绍了Baichuan-13B-Chat模型及其在向量嵌入和文档阅读上的初步尝试。   本文将详细介绍如何使用Baichuan-13B-Chat模型来构建智能文档问答助手。 文档问答流程 智能文档问答助手的流…

【*1900 图论】CF1328 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 注意到题目的性质&#xff1a;满足条件的路径个数是极少的&#xff0c;因为每个点离路径的距离<1 先考虑一条链&#xff0c;那么直接就选最深那个点作为端点即可 为什么&#xff0c;因为我们需要遍历所有点…

3.安装kubesphere

1.本地存储动态 PVC # 在所有节点安装 iSCSI 协议客户端&#xff08;OpenEBS 需要该协议提供存储支持&#xff09; yum install iscsi-initiator-utils -y # 设置开机启动 systemctl enable --now iscsid # 启动服务 systemctl start iscsid # 查看服务状态 systemctl status …

将数据转二进制流文件,用PostMan发送二进制流请求

一、将byte数组转二进制流文件&#xff0c;并保存到本地 byte [] oneshotBytesnew byte[]{78,-29,51,-125,86,-105,56,82,-94,-115,-22,-105,0,-45,-48,-114,27,13,38,45,-24,-15,-13,46,88,-90,-66,-29,52,-23,40,-2,116,2,-115,17,36,15,-84,88,-72,22,-86,41,-90,-19,-58,19…

Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

文章目录 一、概述图像滤波1.1、均值滤波1.2中值滤波1.3、高斯滤波1.4、双边滤波1.5、方框滤波 二、自定义掩码三、边缘处理四、Sobel算子五、Scharr算子六、拉普拉斯算子十、Canny算法 一、概述图像滤波 头文件 quick_opencv.h&#xff1a;声明类与公共函数 #pragma once #i…

13.Netty源码之Netty中的类与API

highlight: arduino-light ServerBootstrap Bootstrap 意思是引导&#xff0c;一个 Netty 应用通常由一个 Bootstrap 开始&#xff0c;主要作用是配置整个 Netty 程序&#xff0c;串联各个组件&#xff0c;Netty 中ServerBootstrap 是服务端启动引导类。 java //泛型 AbstractB…

Vue2到3 全套学习内容(持续更新)

Vue 初次上手 1. Vue 概念 概念: Vue 是一个用于 构建用户界面 的 渐进式 框架 ①构建用户界面&#xff1a;基于数据动态渲染出用户看到的页面 ②渐进式&#xff1a;循序渐进 Vue的两种使用方式: ①Vue 核心包开发 场景: 局部 模块改造 ②Vue核心包&Vue插件工程化开发…

C++-----list

本期我们来讲解list&#xff0c;有了string和vector的基础&#xff0c;我们学习起来会快很多 目录 list介绍 ​编辑 list常用接口 insert erase reverse sort merge unique remove splice 模拟实现 基础框架 构造函数 push_back 迭代器 常见问题 const迭代器 …

springboot 之以enable开头的注解

Spring​ 有很多 Enable 开头的注解&#xff0c;平时在使用的时候也没有注意过为什么会有这些注解 Enable 注解 首先我们先看一下有哪些常用的 Enable 开头的注解&#xff0c;以及都是干什么用的。 EnableRetry​&#xff1a;开启Spring 的重试功能&#xff1b; EnableSch…

手机python怎么用海龟画图,python怎么在手机上编程

大家好&#xff0c;给大家分享一下手机python怎么用海龟画图&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1、如何python手机版创造Al&#xff1f; 如果您想在手机上使用Python来创建AI&#xff08;人工智能&#xff09;程序&#xff0…