学点儿数据库_Day12_数据库SQL练习题

0 版本与工具

mysql-8.0.31
Navicat Premium 16
每做一题,选中相应代码运行即可,很方便
在这里插入图片描述

1 建表

create table goods (
  goods_id mediumint(8) unsigned primary key auto_increment,
  goods_name varchar(120) not null default '',
  cat_id smallint(5) unsigned not null default '0',
  brand_id smallint(5) unsigned not null default '0',
  goods_sn char(15) not null default '',
  goods_number smallint(5) unsigned not null default '0',
  shop_price decimal(10,2) unsigned not null default '0.00',
  market_price decimal(10,2) unsigned not null default '0.00',
  click_count int(10) unsigned not null default '0'
) ;

insert into `goods` values (1,'kd876',4,8,'ecs000000',1,1388.00,1665.60,9),
(4,'诺基亚n85原装充电器',8,1,'ecs000004',17,58.00,69.60,0),
(3,'诺基亚原装5800耳机',8,1,'ecs000002',24,68.00,81.60,3),
(5,'索爱原装m2卡读卡器',11,7,'ecs000005',8,20.00,24.00,3),
(6,'胜创kingmax内存卡',11,0,'ecs000006',15,42.00,50.40,0),  
(7,'诺基亚n85原装立体声耳机hs-82',8,1,'ecs000007',20,100.00,120.00,0),
(8,'飞利浦9@9v',3,4,'ecs000008',1,399.00,478.79,10),
(9,'诺基亚e66',3,1,'ecs000009',4,2298.00,2757.60,20),
(10,'索爱c702c',3,7,'ecs000010',7,1328.00,1593.60,11),
(11,'索爱c702c',3,7,'ecs000011',1,1300.00,0.00,0),
(12,'摩托罗拉a810',3,2,'ecs000012',8,983.00,1179.60,13),
(13,'诺基亚5320 xpressmusic',3,1,'ecs000013',8,1311.00,1573.20,13),
(14,'诺基亚5800xm',4,1,'ecs000014',1,2625.00,3150.00,6),
(15,'摩托罗拉a810',3,2,'ecs000015',3,788.00,945.60,8),
(16,'恒基伟业g101',2,11,'ecs000016',0,823.33,988.00,3),
(17,'夏新n7',3,5,'ecs000017',1,2300.00,2760.00,2),
(18,'夏新t5',4,5,'ecs000018',1,2878.00,3453.60,0),
(19,'三星sgh-f258',3,6,'ecs000019',12,858.00,1029.60,7),
(20,'三星bc01',3,6,'ecs000020',12,280.00,336.00,14),
(21,'金立 a30',3,10,'ecs000021',40,2000.00,2400.00,4),
(22,'多普达touch hd',3,3,'ecs000022',1,5999.00,7198.80,16),
(23,'诺基亚n96',5,1,'ecs000023',8,3700.00,4440.00,17),
(24,'p806',3,9,'ecs000024',100,2000.00,2400.00,35),
(25,'小灵通/固话50元充值卡',13,0,'ecs000025',2,48.00,57.59,0),
(26,'小灵通/固话20元充值卡',13,0,'ecs000026',2,19.00,22.80,0),
(27,'联通100元充值卡',15,0,'ecs000027',2,95.00,100.00,0),
(28,'联通50元充值卡',15,0,'ecs000028',0,45.00,50.00,0),
(29,'移动100元充值卡',14,0,'ecs000029',0,90.00,0.00,0),
(30,'移动20元充值卡',14,0,'ecs000030',9,18.00,21.00,1),
(31,'摩托罗拉e8 ',3,2,'ecs000031',1,1337.00,1604.39,5),  
(32,'诺基亚n85',3,1,'ecs000032',4,3010.00,3612.00,9);

-- 分类表
create table category (
    cat_id smallint unsigned auto_increment primary key,
    cat_name varchar(90) not null default '',
    parent_id smallint unsigned
);

INSERT INTO `category` VALUES
(1,'手机类型',0),
(2,'CDMA手机',1),
(3,'GSM手机',1),
(4,'3G手机',1),
(5,'双模手机',1),
(6,'手机配件',0),
(7,'充电器',6),
(8,'耳机',6),
(9,'电池',6),
(11,'读卡器和内存卡',6),   
(12,'充值卡',0),
(13,'小灵通/固话充值卡',12),
(14,'移动手机充值卡',12),
(15,'联通手机充值卡',12);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 练习与答案

2.0 知识点

无限级分类(上树):
在这里插入图片描述
select where常用运算符:
在这里插入图片描述NOT可以否定IN、BETWEEN、EXISTS

2.1 条件查询1

DESC goods;

-- 1:主键为32的商品
SELECT * FROM goods
WHERE goods_id=32;
-- 2:不属第3栏目的所有商品(category中id为3)
SELECT * FROM goods
WHERE cat_id!=3;
-- 3:本店价格高于3000元的商品
SELECT * FROM goods
WHERE market_price>3000;
-- 4:本店价格低于或等于100元的商品
SELECT * FROM goods
WHERE market_price<=100;
-- 5:取出第4栏目或第11栏目的商品
SELECT * FROM goods
WHERE cat_id=4 OR cat_id=11;
-- 
SELECT * FROM goods
WHERE cat_id IN (4,11);
-- 6:取出100<=价格<=500的商品
SELECT * FROM goods
WHERE market_price BETWEEN 100 AND 500;
-- BETWEEN AND是能取到开始和结束的值,等价于>= and <=

-- 7:取出不属于第3栏目且不属于第11栏目的商品(and,或not in分别实现)
SELECT * FROM goods
WHERE cat_id!=3 AND cat_id!=11;

SELECT * FROM goods
WHERE cat_id NOT IN (3,11);

2.2 条件查询2

-- 8:取出价格大于100且小于300,或者大于4000且小于5000的商品()
-- 要适当的加括号(括号的优先级比AND和OR优先级高),不加括号数据也正确,只是巧合,因为AND优先级要高于OR优先级,写出有歧义的语句并不能显出你多厉害
-- 任何时候使用AND和OR操作符时候,都应该加括号明确的分组操作符,不要过分依赖默认求值顺序,及时它确实如你希望的那样。使用括号没有什么坏处,它能消除歧义。
-- select * from goods where () OR ();
SELECT * FROM goods
WHERE (market_price>100 AND market_price<300) OR (market_price>4000 AND market_price<5000);
-- 9:取出第3个栏目下面价格<1000或>3000,并且点击量>5的系列商品
SELECT * FROM goods
WHERE (cat_id=3) AND (market_price<1000 OR market_price>3000) AND (click_count>5);

2.3 子查询

-- 10:取出第1个栏目下面的商品(注意:1栏目下面没商品,但其子栏目下有)
SELECT * FROM category
WHERE cat_id = 1 OR parent_id=1;
SELECT * FROM goods
WHERE cat_id IN (SELECT cat_id FROM category WHERE cat_id=1 OR parent_id=1);-- 子查询

2.4 模糊查询

-- 11:取出名字以"诺基亚"开头的商品
-- like 模糊匹配
-- % 通配任意字符
-- _ 通配单一字符
SELECT * FROM goods
WHERE goods_name LIKE '诺基亚%';
-- 12:取出名字为"诺基亚nxx"的手机
SELECT * FROM goods
WHERE goods_name LIKE '诺基亚n__';
-- 13:取出名字不以"诺基亚"开头的商品
SELECT * FROM goods
WHERE goods_name NOT LIKE '诺基亚%';
-- 14:取出第3个栏目下面价格在<1000或者>3000,并且点击量>5 "诺基亚"开头的系列商品
SELECT * FROM goods
WHERE (cat_id=3) 
AND (market_price<1000 OR market_price>3000) 
AND (click_count>5) 
AND (goods_name LIKE '诺基亚%');

2.5 数据库字符串操作

//java
public static void main(String[] args) {
        String goodsName = "诺基亚原装5800耳机";
        String name = "HTC" + goodsName.substring(3);
        System.out.println(name);//HTC原装5800耳机
    }
-- 15:把goods表中商品名为'诺基亚xxxx'的商品,改为'HTCxxxx',
-- 提示:大胆的把列看成变量,参与运算,甚至调用函数来处理 .
-- substr(),concat(),trim(),ltrim(),rtrim()
-- 修改
UPDATE goods SET goods_name = CONCAT('HTC',TRIM(leading '诺基亚' FROM goods_name))
WHERE goods_name LIKE '诺基亚%';
-- 修改后再查询
UPDATE goods SET goods_name = CONCAT('HTC',SUBSTR(goods_name,4)) AS goods_name
WHERE goods_name LIKE '诺基亚%';

SELECT goods_id,goods_name FROM goods 
WHERE goods_name LIKE 'HTC%';

-- 查询 ----
SELECT goods_id,SUBSTR(goods_name, 4) FROM goods 
WHERE goods_name LIKE '诺基亚%';
-- 查询并拼接 ----
SELECT goods_id,CONCAT('HTC',SUBSTR(goods_name,4)) FROM goods 
WHERE goods_name LIKE '诺基亚%';

2.6 聚合查询(聚合函数)

-- 15:计算指定分类(cat_id=3)下面商品的平均价格,计算平均价格时候去掉重复价格的
-- 只包含不同的值,指定DISTINCT参数 (去重)
SELECT DISTINCT market_price 
FROM goods
WHERE cat_id=3;

SELECT market_price 
FROM goods
WHERE cat_id=3;

SELECT AVG(market_price) AS '平均价格' 
FROM goods
WHERE cat_id=3;

SELECT AVG(DISTINCT market_price) AS '平均价格' 
FROM goods
WHERE cat_id=3;

-- 16:组合聚集函数,SELECT可以根据需要包含多个聚集函数
-- goods_count price_min  price_max price_avg

SELECT COUNT(*) AS 'goods_count',
	MIN(market_price) AS 'price_min',
	MAX(market_price) AS 'price_max',
	AVG(market_price) AS 'price_avg'
FROM goods;

2.7 order by 与 limit

-- order by 与 limit:
-- LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
-- LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
-- 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)
SELECT * FROM goods LIMIT 0,3;
SELECT * FROM goods;
-- 1、按照栏目由低到高排序,栏目内部按照价格由高到低排序
SELECT * 
FROM goods
ORDER BY cat_id ASC,market_price DESC;
-- 2、取出价格最高的前三名商品
-- limit offset,rowcount
-- limit 偏移到哪个位置,往下数几个
SELECT * 
FROM goods
ORDER BY market_price DESC
LIMIT 0,3;
-- 3、取出点击量第三名到第五名的商品
SELECT * 
FROM goods
ORDER BY click_count DESC
LIMIT 2,3;

2.8 order by 与 having

-- 1、这个店积压的货款:
SELECT goods_id,goods_name,cat_id,goods_number*shop_price AS '货款' FROM goods;
SELECT SUM(goods_number*shop_price) '总货款' FROM goods;
-- 2、查询该店每个栏目下挤压的货款
SELECT cat_id,SUM(goods_number*shop_price) AS total_price FROM goods
GROUP BY cat_id;
-- 3、查询该店每个栏目下挤压的货款 > 100
SELECT cat_id,total_price FROM 
(SELECT cat_id,SUM(goods_number*shop_price) AS total_price FROM goods GROUP BY cat_id) AS table2
WHERE total_price>100
ORDER BY total_price,cat_id;
-- 3、查询该店每个栏目下挤压的货款 > 100
SELECT cat_id,SUM(goods_number*shop_price) AS total_price
FROM goods GROUP BY cat_id HAVING total_price>100
ORDER BY total_price,cat_id;

DROP TABLE goods;

备注:我们经常发现,用 GROUP BY 分组的数据确实是以分组顺序输出的。但并不总是这样,这不是 SQL 规范所要求的。此外,即使特定的 DBMS(DateBaseManagerSystem,数据库管理系统) 总是按给出的 GROUP BY 子句排序数据,用户也可能会要求以不同的顺序排序。应该提供明确的 ORDER BY 子句,即使其效果等同于 GROUP BY 子句。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cesium vue 绘制标记实体(撒点),监听鼠标左击事件

添加实体 const viewer new Cesium.Viewer(cesiumContainer, {})viewer.entities.add()查看实体 const viewer new Cesium.Viewer(cesiumContainer, {}) const billboard viewer.entities.add({...})viewer.zoomTo(billboard)删除实体 根据实体删除 if (billboard.value…

C#手术麻醉信息系统全套商业源码,自主版权,支持二次开发 医院手麻系统源码

手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与排班、审批、安排、术前、术中和术后的信息管理提供支持。 手术麻醉信息系统可与EM…

《QT实用小工具·一》电池电量组件

1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件&#xff0c;包含如下功能&#xff1a; 可设置电池电量&#xff0c;动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…

重学SpringBoot3-SpringBoot可执行JAR的原因

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringBoot可执行JAR的原因 Spring Boot可执行JAR的结构打包运行JAR 包内部结构 工作原理优点总结 Spring Boot 的一个核心特性是它的可执行 JAR&#x…

stm32之GPIO寄存器

文章目录 1 背景2 GPIO寄存器的类型2.1 端口配置寄存器2.2 设置/清除寄存器和位清除寄存器 3 总结 1 背景 C51单片机在进行数据的输入输出时&#xff0c;是直接操作与外部引脚关联的内部寄存器&#xff0c;例如&#xff0c;当设置P2_1为0时&#xff0c;就是将外部引脚的P21引脚…

Composer常见错误解决指南 ️

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

基于java疫情防控系统

疫情防控系统 伴随着新年的喜悦&#xff0c;2020年春节之际一场新冠疫情席卷了全球&#xff0c;但是在中国领导人的英明领导之下我国的疫情很快得到了控制&#xff0c;但是因为欧美等国家对疫情的不够重视&#xff0c;仍然有很多的境外疫情携带者会出入我国&#xff0c;为了能…

语句数据库查询有数据,放在帆软预览没数据

问题描述&#xff1a; 要展示的数据&#xff0c;写的sql放在帆软里面预览没数据&#xff0c;然后将语句预览丢在数据库里执行有数据。 问题解决: 1. 首先你要确保两个用的是一个数据库&#xff0c;如果在生产环境中&#xff0c;一般是会有多个数据库&#xff0c;所以你要确保你…

Spring boot 发送文本邮件 和 html模板邮件

Spring boot 发送文本邮件 和 html模板邮件 提示&#xff1a;这里使用 spring-boot-starter-mail 发送文本邮件 和 html模板邮件 文章目录 Spring boot 发送文本邮件 和 html模板邮件一、开启QQ邮箱里的POP3/SMTP服务①&#xff1a;开启步骤 二、简单配置①&#xff1a;引入依赖…

「JavaSE」Lambda表达式

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; Lambda表达式 &#x1f349;简介&#x1f349;函数式接口&#x1f34c;注解 &#x1f349;语法&#x1f349;Lambda表达式的基本…

如何使用Java语言发票查验接口实现发票真伪查验、票据ocr

随着时代潮流的发展&#xff0c;企业也在寻找更加便捷、高效的办公模式&#xff0c;尤其是针对财务工作人员而言&#xff0c;繁琐的发票录入、查验工作占据了财务人员的大部分时间。对此&#xff0c;翔云提供了发票识别接口、发票查验接口&#xff0c;那么企业应当如何将这些接…

第二证券|沪指震荡涨0.49%,石油、有色等板块拉升

29日早盘&#xff0c;沪指盘中强势上扬&#xff0c;深成指、创业板指小幅走低&#xff0c;科创50指数跌超1%。 到午间收盘&#xff0c;沪指涨0.49%报3025.56点&#xff0c;深成指跌0.22%&#xff0c;创业板指微跌0.07%&#xff0c;科创50指数跌1.34%&#xff1b;两市算计成交5…

SAMRTFORMS 转换PDF 发送邮件

最终成果&#xff1a; *&---------------------------------------------------------------------**& Report ZLC_FIND_EXIT*&---------------------------------------------------------------------**&根据T-CODE / 程序名查询出口、BADI增强*&-------…

【LeetCode】LeetCode 547. 省份数量(Java版 什么是并查集)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、题目描述 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直…

位操作符

简介&#xff1a; &&#xff0c;|,^,~都是常见的位操作符&#xff0c;操作对象是二进制数&#xff0c;运算时须将原码转换成补码&#xff08;符号位为0&#xff0c;即正数时&#xff0c;补码与原码一致&#xff0c;不需要再转换&#xff09;&#xff0c;位数不一致时&#…

ros2相关代码记录

1.ros2概述 ROS2&#xff08;Robot Operating System 2&#xff09;是一个用于机器人应用程序的开源软件框架。它是ROS&#xff08;Robot Operating System&#xff09;的下一代版本&#xff0c;旨在改进和扩展原始ROS的特性&#xff0c;以适应更广泛的机器人应用场景和需求。…

HarmonyOS入门--配置环境 + IDE汉化

文章目录 下载安装DevEco Studio配置环境先认识DevEco Studio界面工程目录工程级目录模块级目录 app.json5module.json5main_pages.json通知栏预览区 运行模拟器IED汉化 下载安装DevEco Studio 去官网下载DevEco Studio完了安装 配置环境 打开已安装的DevEco Studio快捷方式…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中&#xff0c;数据探索是至关重要的一步。它不仅是模型构建的基础&#xff0c;还是确保模型性能稳定、预测准确的关键。数据探索的过程中&#xff0c;数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

Day24:私信列表、私信详情、发送私信

测试用户&#xff1a;用户名aaa 密码aaa 查询当前用户的会话列表&#xff1b;每个会话只显示一条最新的私信&#xff1b;支持分页显示。 首先看下表结构&#xff1a; conversation_id: 用from_id和to_id拼接&#xff0c;小的放前面去&#xff08;因为两个人的对话应该在一个会…

Linux:详解TCP报头类型

文章目录 温习序号的意义序号和确认序号报文的类型 TCP报头类型详解ACK: 确认号是否有效SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称…