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、无回显之探测文件 之前的文…

el-input 文本框 输入数字校验

目录 1. 输入整数 2. 输入整数和小数 3. 输入两位小数 1. 输入整数 <el-inputv-model"scopeRows.row.inWarehouseRow.Quantity"type"number"blur"getRowData(scopeRows.row.inWarehouseRow)"oninput"valuevalue.replace(/^0|[^0-9]/g…

【前缀和】238. 除自身以外数组的乘积

238. 除自身以外数组的乘积 解题思路 前缀与后缀的思路对于给定索引i&#xff0c;将它左边的所有数字乘积乘以右边所有数字的乘积初始化两个数组L R计算L[i] L[i - 1] * nums[i - 1] 也就是左侧所有数字的乘积计算R[i] R[i 1] * nums[i 1] 也就是右侧所有数字的成绩计算L…

Ceph概述、准备ceph部署环境、cephadm概述、安装Ceph集群、ceph块存储、存储池、rbd镜像管理、ceph客户端配置

day03 day03ceph概述部署Ceph节点准备cephadm准备基础环境安装ceph实现块存储块存储基础存储池镜像ceph客户端 ceph概述 ceph可以实现的存储方式&#xff1a; 块存储&#xff1a;提供像普通硬盘一样的存储&#xff0c;为使用者提供“硬盘”文件系统存储&#xff1a;类似于NFS…

cst 导出z方向电场分布图的后处理方式(matlab origin)?

文章目录 一、使用Matlab进行后处理&#xff1a;二、使用Origin进行后处理 当我们使用Matlab或Origin对CST导出的Z方向电场分布图进行后处理时&#xff0c;可以这样做&#xff1a; 一、使用Matlab进行后处理&#xff1a; 1. 导入数据&#xff1a; 使用Matlab的文件读取函数&am…

【数据分析专栏之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…

13.python设计模式【策略者模式】

内容&#xff1a;定义一系列的算法&#xff0c;把它们一个一个的封装起来&#xff0c;并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。角色&#xff1a; 抽象策略&#xff08;Strategy&#xff09;具体策略&#xff08;ConcreteStrategy&#xff09;上下文…

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

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

【vue3+ts】TypeError: Cannot read properties of undefined (reading ‘commit‘)

项目场景&#xff1a; <script lang"ts"> import { defineComponent, reactive, ref } from vue import { useStore } from vuex export default defineComponent({name: Login.vue,components: {},setup () {const onFormSubmit (result: boolean) > {if…

http 请求报文响应报文的格式以及Token cookie session 区别

面试必备 http 请求报文响应报文的格式Token cookie session 区别 http 请求报文响应报文的格式 HTTP 请求报文和响应报文的格式如下&#xff1a; HTTP 请求报文格式&#xff1a; <方法> <路径> <协议版本> <请求头部字段1>: <值1> <请求头…

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;甚至让人搞不清楚他们到底是干什么的。本文尝试理清…

JOGL教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Java支持OpenGL(JOGL)是在Java OpenGL图形API结合。它是一个包装库,它可以访问OpenGL API,并且它被设计来创建Java编码的2D和3D图形应用程序。它允许将 OpenGL 与 Java 编程语言一起使用&#xff0c;因此&#xff0c;程序员可以在 JOGL 的帮助下轻松地将计算机图形嵌…

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 前台展示上架前端开始后…

MySQL - 事务隔离级别

并发事务问题 脏读 概念&#xff1a; 一个事务读到另外一个事务还没提交的数据 举例&#xff1a; 事务A&#xff1a;第一步&#xff1a;select 第二步&#xff1a;update 第三步&#xff1a;… 事务B&#xff1a;第一步&#xff1a;select 第二步&#xff1a;… 假设原本在…

PostgreSQL 常用空间处理函数

1.OGC标准函数 管理函数&#xff1a; 添加几何字段 AddGeometryColumn(, , , , , ) 删除几何字段 DropGeometryColumn(, , ) 检查数据库几何字段并在geometry_columns中归档 Probe_Geometry_Columns() 给几何对象设置空间参考&#xff08;在通过一个范围做空间查询时常用&…

C#设计模式之---原型模式

原型模式&#xff08;Prototype Pattern&#xff09; 原型模式&#xff08;Prototype Pattern&#xff09; 是用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型&#xff0c;通过…