mysql学习总结二

news2024/11/27 10:28:26

聚合函数

聚合函数表示对 值的集合 进行操作的 组(集合)函数。

# 华为手机价格的平均值
SELECT AVG(price) FROM `products` WHERE brand = '华为';
# 计算所有手机的平均分
SELECT AVG(score) FROM `products`;
# 手机中最低和最高分数
SELECT MAX(score) FROM `products`;
SELECT MIN(score) FROM `products`;
# 计算总投票人数
SELECT SUM(voteCnt) FROM `products`;
# 计算所有条目的数量
SELECT COUNT(*) FROM `products`;
# 华为手机的个数
SELECT COUNT(*) FROM `products` WHERE brand = '华为';

Group By分组

  1. GROUP BY通常和聚合函数一起使用,表示我们先对数据进行分组,再对每一组数据,进行聚合函数的计算
  2. 聚合函数相当于默认将所有的数据分成了一组,我们前面使用avg还是max等,都是将所有的结果看成一组来计算的
# 根据品牌进行分组,计算各个品牌中:商品的个数、平均价格,最高价格、最低价格、平均评分
SELECT brand,
	COUNT(*) as count,
	ROUND(AVG(price),2) as avgPrice,
	MAX(price) as maxPrice,
	MIN(price) as minPrice,
	AVG(score) as avgScore
FROM `products` 
GROUP BY brand;

如果我们希望给Group By查询到的结果添加一些约束,那么我们可以使用:HAVING

# 如果我们还希望筛选出平均价格在4000以下,并且平均分在7以上的品牌
SELECT brand,
	COUNT(*) as count,
	ROUND(AVG(price),2) as avgPrice,
	MAX(price) as maxPrice,
	MIN(price) as minPrice,
	AVG(score) as avgScore
FROM `products` 
GROUP BY brand
HAVING avgPrice < 4000 and avgScore > 7;

多表查询

在实际开发中,我们会用很多表表示一条数据,比如商品表products记录商品基本信息,还有品牌表brand记录品牌信息等等。。。
外键

# 我们可以创建外键将两张表联系起来
# 创建表时添加外键,我们可以在最后加上
# 注释:外键brand_id引用brand表的id
FOREIGN KEY (brand_id) REFERENCES brand(id)
# 如果是表已经创建好,额外添加外键
ALTER TABLE `products` ADD `brand_id` INT;
ALTER TABLE `products` ADD FOREIGN KEY (brand_id) REFERENCES brand(id);
# 关联起来
UPDATE `products` SET `brand_id` = 1 WHERE `brand` = '华为';
UPDATE `products` SET `brand_id` = 4 WHERE `brand` = 'OPPO';

外键存在时更新和删除数据,会报错

  1. RESTRICT(默认属性):当更新或删除某个记录时,会检查该记录是否有关联的外键记录,有的话会报错的,不允许更新或删除;
  2. NO ACTION:和RESTRICT是一致的,是在SQL标准中定义的
  3. CASCADE:当更新或删除某个记录时,会检查该记录是否有关联的外键记录,有的话:
    更新:那么会更新对应的记录;
    删除:那么关联的记录会被一起删除掉
  4. SET NULL:当更新或删除某个记录时,会检查该记录是否有关联的外键记录,有的话,将对应的值设置为NULL
# 查看创建表的信息
SHOW CREATE TABLE `products`;
# 先删除
ALTER TABLE `products` DROP FOREIGN KEY products_ibfk_1;
# 再增加
ALTER TABLE `products` ADD FOREIGN KEY (brand_id) REFERENCES brand(id)
	ON UPDATE CASCADE
	ON DELETE CASCADE;

默认多表查询的结果

SELECT * FROM `products`, `brand`;

此时出现xy条数据,也就是笛卡尔乘积,也称之为直积,表示为 XY

多表之间链接

在这里插入图片描述

  1. 左连接
  2. 右链接
    在这里插入图片描述
  3. 内链接
    在这里插入图片描述
  4. 全链接
    在这里插入图片描述

多对多查询

在开发中我们还会遇到多对多的关系:

  • 比如学生可以选择多门课程,一个课程可以被多个学生选择;
  • 这种情况我们应该在开发中如何处理呢?

先创建学生表与课程表

# 创建学生表
CREATE TABLE IF NOT EXISTS `students`(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT
);
# 创建课程表
CREATE TABLE IF NOT EXISTS `courses`(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
price DOUBLE NOT NULL
);
# 加入数据
INSERT INTO `students` (name, age) VALUES('why', 18);
INSERT INTO `students` (name, age) VALUES('tom', 22);
INSERT INTO `students` (name, age) VALUES('lilei', 25);
INSERT INTO `students` (name, age) VALUES('lucy', 16);
INSERT INTO `students` (name, age) VALUES('lily', 20);
INSERT INTO `courses` (name, price) VALUES ('英语', 100);
INSERT INTO `courses` (name, price) VALUES ('语文', 666);
INSERT INTO `courses` (name, price) VALUES ('数学', 888);
INSERT INTO `courses` (name, price) VALUES ('历史', 80);

我们需要一个关系表来记录两张表中的数据关系

# 创建关系表
CREATE TABLE IF NOT EXISTS `students_select_courses`(
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
course_id INT NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id) ON UPDATE CASCADE,
FOREIGN KEY (course_id) REFERENCES courses(id) ON UPDATE CASCADE
);
# why 选修了 英文和数学
INSERT INTO `students_select_courses` (student_id, course_id) VALUES (1, 1);
INSERT INTO `students_select_courses` (student_id, course_id) VALUES (1, 3);
# lilei选修了 语文和数学和历史
INSERT INTO `students_select_courses` (student_id, course_id) VALUES (3, 2);
INSERT INTO `students_select_courses` (student_id, course_id) VALUES (3, 3);
INSERT INTO `students_select_courses` (student_id, course_id) VALUES (3, 4);

查询所有的学生选择的所有课程

SELECT
	stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
FROM `students` stu
JOIN `students_select_courses` ssc
ON stu.id = ssc.student_id
JOIN `courses` cs
ON ssc.course_id = cs.id; 

查询所有的学生选课情况

SELECT
	stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
FROM `students` stu
LEFT JOIN `students_select_courses` ssc
ON stu.id = ssc.student_id
LEFT JOIN `courses` cs
ON ssc.course_id = cs.id;

查询单个学生的课程

SELECT
	stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
FROM `students` stu
JOIN `students_select_courses` ssc
ON stu.id = ssc.student_id
JOIN `courses` cs
ON ssc.course_id = cs.id
WHERE stu.id = 1; 

lily同学选择了哪些课程(注意,这里必须用左连接,事实上上面也应该使用的是左连接)

SELECT
stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
FROM `students` stu
LEFT JOIN `students_select_courses` ssc
ON stu.id = ssc.student_id
LEFT JOIN `courses` cs
ON ssc.course_id = cs.id
WHERE stu.id = 5;

哪些学生是没有选课的

SELECT
	stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
FROM `students` stu
LEFT JOIN `students_select_courses` ssc
ON stu.id = ssc.student_id
LEFT JOIN `courses` cs
ON ssc.course_id = cs.id
WHERE cs.id IS NULL;

查询哪些课程没有被学生选择

SELECT
stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
FROM `students` stu
RIGHT JOIN `students_select_courses` ssc
ON stu.id = ssc.student_id
RIGHT JOIN `courses` cs
ON ssc.course_id = cs.id
WHERE stu.id IS NULL;

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

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

相关文章

SpringBoot解决全局和局部跨域问题的两种方式

前言 在如今前后端分离的开发模式下&#xff0c;跨域是一个非常经典的问题&#xff0c;解决的方式也有很多&#xff0c;比如代理服务器&#xff0c;使用JSONP 我之前也写过一篇解决跨域问题的文章&#xff0c;感兴趣的可以参考&#xff1a;解决Vue前后端跨域问题的多种方式 …

【现代机器人学】学习笔记九:运动规划

本节和前一节 【现代机器人学】学习笔记八&#xff1a;轨迹生成 不同&#xff0c;侧重于避障的内容。有一些我认为的重要的基本的概念&#xff1a;1.路径规划是一个纯几何问题&#xff0c;寻找一条无碰撞路径&#xff0c;不涉及动力学和时间相关内容。因此路径规划是运动规划的…

请查收 | 2022 阿里妈妈技术文章回顾

新年伊始&#xff0c;万象更新&#xff01;转眼&#xff0c;阿里妈妈技术已陪伴大家走过601天~在此&#xff0c;感谢每位读者朋友的支持与关注回顾2022&#xff0c;我们分享了60篇原创技术文章、发布了1本营销科学系列白皮书、开源了1项向量召回技术方案&#xff1b;阿里妈妈营…

Netty基础入门——NIO【1】

Netty基础入门——NIO【1】 1 NIO 1.1 三大组件 1.1.1 Channel && Buffer Channle channel类似于stream&#xff0c;是读写数据的双向通道&#xff0c;而stream要么是输入要么是输出 #mermaid-svg-9w1vFFYCVQmRvHja {font-family:"trebuchet ms",verdana…

YACC移进规约冲突案例分析

总结 总结&#xff1a; bison给出的用例是发现冲突的最便捷方法。 第一种用例&#xff1a;明确用例&#xff08;一个Example&#xff09;&#xff0c;直接反应问题。第二种用例&#xff1a;混淆用例&#xff08;两个Example&#xff09;&#xff0c;解析器无法区分两条语句。…

jenkins 节点部署

1、节点注册 登陆jenkins master界面 路径&#xff1a;首页-->系统管理--> 节点管理-->新建节点&#xff08;New Node&#xff09; 插曲&#xff1a;我在新的服务器部署master节点&#xff0c;显示剩余交换空间为0B 处理方式请查看&#xff1a;Jenkins - Free Swap…

关于MCU的BootLoader的一些理解

一、关于STM32单片机IAP升级中if(((*(__IO uint32_t*)Addr_App) & 0x2FFE0000) 0x20000000)语句的理解 参考自&#xff1a;https://blog.csdn.net/weixin_45394120/article/details/122732203?spm1001.2014.3001.5502 疑问&#xff1a; 1、为什么要用Addr_App里的数据…

Web操作系统漏洞发现——工具使用总结

目录 &#xff08;一&#xff09;web层面 1、信息收集 0x01 网站源码自己开发 0x02 网站源码使用开源CMS 2、可维护Poc 0x01 pocassist 0x02 afrog 3、APP渗透 0x01 在BP上添加转发端口 0x02 Xray进行监听 0x03 触发数据 4、Goby &#xff08;二&#xff09;操作系统层…

xss.haozi靶场通关

做完xss-labs靶场后&#xff0c;再继续做这个靶场&#xff0c;感觉这个不是很难&#xff0c;毕竟在第一个靶场也获取了一些经验&#xff0c;但是这个靶场偏向技巧&#xff0c;所以还是以了解为主。 0x00: 分析&#xff1a;对我们的代码未作出限制&#xff0c;因此这里可以使用…

如何用 nodejs 进行 sha1 加密验证,微信公众号开发验证

如何用 nodejs 进行 sha1 加密验证&#xff0c;微信公众号开发验证 一、问题 今天在摆弄微信公众号的时候&#xff0c;遇到这样一个问题&#xff1a; 我的后台是 nodejs 写的&#xff0c;express 框架&#xff0c;官方开发接入的验证代码是 php 写的&#xff0c;其中有一个部…

C语言之蓝桥杯习题(3)☞暴力求解版(思路写在解题过程中)

第一题.1.问题&#xff1a;小蓝数字卡片题小蓝有很多数字卡片&#xff0c;每张卡片上都是数字0到9。 小蓝准备用这些卡片来拼一些数&#xff0c;他想从1开始拼现在小蓝手里有0到9的卡片各2021张&#xff0c;共20210张&#xff0c;请问小蓝可以从1拼到多少?2.解题过程&#xff…

【Docker】(三)使用registry远程镜像仓库管理镜像

1.前言 本系列文章记录了从0开始学习Docker的过程&#xff0c;Docker系列历史文章&#xff1a; &#xff08;一&#xff09;基本概念与安装使用 &#xff08;二&#xff09;如何使用Docker发布一个SpringBoot服务 在上一篇中留下了一个问题&#xff0c;使用Docker发布服务的方…

【开源代码 | MATLAB线性阵列仿真】

本文编辑&#xff1a;调皮哥的小助理 1、16阵元均匀线阵方向图 %8阵元均匀线阵方向图&#xff0c;来波方向为0度 clc; clear all; close all; element_num16;%阵元数为16 d_lamda1/2;%阵元间距d与波长lamda的关系 thetalinspace(-pi/2,pi/2,200); theta0[0.2 0.1];%来波方向 w…

systemd wsl 测试笔记

文章目录systemd 简介WSL systemdsystemctljournalctlhello serviceSleep 与 Timeout 测试Requires 测试After 测试systemd 简介 Linux 从关闭到运行, 完整的启动和启动过程有三个主要部分: 硬件启动(Hardware boot): 初始化系统硬件Linux 引导(Linux boot): 加载 Linux 内核&…

基于ERNIELayoutPDFplumber-UIEX的多方案学术论文信息抽取

本项目链接&#xff1a;https://aistudio.baidu.com/aistudio/projectdetail/5196032?contributionType1 0.问题描述 可以参考issue&#xff1a; ERNIE-Layout在&#xff08;人名和邮箱&#xff09;信息抽取的诸多问题阐述#4031 ERNIE-Layout因为看到功能比较强大就尝试了一…

Linux安装mongodb集群整合SpringBoot

一、Mongodb集群安装 本文介绍基于mongodb的副本机制搭建集群 192.168.139.186CentOS Linux release 7.7.1908 (Core)192.168.139.187CentOS Linux release 7.7.1908 (Core)192.168.139.188CentOS Linux release 7.7.1908 (Core) 准备工作 关闭selinux&#xff0c;关闭防火墙…

近场通信到2027年将达到467.81亿美元

2020年&#xff0c;全球近场通信市场规模为178.75亿美元&#xff0c;预计到2027年将达到467.81亿美元&#xff0c;2021年至2027年的CAGR为14.8%。这是根据Market Statsville Group (MSG)的一份新报告得出的。 近场通信(NFC)是基于无线接口的一系列协议&#xff0c;使得通信设备…

Linux系统的优缺点

相比 Windows 系统&#xff0c;Linux 系统有更好的稳定性&#xff0c;那么除此之外&#xff0c;Linux 系统还有那些优点&#xff08;或者不足&#xff09;呢&#xff1f;一、大量的可用软件及免费软件Linux 系统上有着大量的可用软件&#xff0c;且绝大多数是免费的&#xff0c…

2021年第十二届蓝桥杯软件类省赛python组“回路计算“问题

说明 这一题我不会做&#xff0c;看了官方给出的标准答案之后才明白&#xff0c;我把我学到的思路写下来。 题目 蓝桥学院由21栋教学楼组成&#xff0c;教学楼编号1到21。对于两栋教学楼a和b,当a和b互质时&#xff0c;a和b之间有一条走廊直接相连&#xff0c;两个方向皆可通…

CRM之线索管理的demo搭建方法

1、简介 1.1、案例简介 本文将介绍&#xff0c;如何搭建CRM-线索管理。 1.2、应用场景 CRM-线索管理应用完整记录所有线索资料&#xff0c;合理的对线索进行领取、分配、退回、跟进&#xff0c;实现线索管理智能化。 2、设置方法 2.1、表单搭建 1&#xff09;新建主表【新…