MySQL数据库 数据库基本操作(四):表的增删查改(下)

1. 联合查询

注:联合查询是面试中的重点,只要考到sql,大多数情况下都考的是联合查询,而且联合查询也是我们学习中的难点.

1.1 笛卡尔积

在实际开发中,数据往往来自不同的表,所以要多表联合查询.多表查询是对多张表的数据笛卡尔积.
它们是两张表的各行数据通过全排列得到的.
在这里插入图片描述
注意:关联表查询可以对关联表使用别名.

1.2 内连接

操作目的:查询许仙同学的成绩.

1.2.1 一般写法

连接步骤:

  1. 先确定要查询的信息都来自于哪些表.
  2. 针对这两个表进行笛卡尔积.select * from student,score;
    在这里插入图片描述
    在上述结果中,我们发现表中有好多都是无效的数据.所以我们要加上一些连接条件(where限制条件)来去掉一些无效数据.连接条件一般用主键来连接.
  3. 加上连接条件,去掉无效数据.select * from student,score where student.id = score.student_id;,使得学生表中的id与成绩表中的学生id对应.
    在这里插入图片描述
  4. 再根据其他数据,补充其他限制条件,比如查询"许仙"同学的成绩.select * from student,score where student.id = score.student_id and student.name='许仙';
    在这里插入图片描述
  5. 把不必要的列去掉.select student.id,student.name,score.score from student,score where student.id = score.student_id and student.name='许仙';
    在这里插入图片描述

1.2.2 join写法

  1. 对两张表进行笛卡尔积.select * from student join score;
    在这里插入图片描述
  2. 加上连接条件.select * from student join score on student.id = score.student_id;
    在这里插入图片描述
  3. 指定其他条件. select * from student join score on student.id = score.student_id and student.id=4;
    在这里插入图片描述
    4 去掉不必要的列.select student.id,student.name,score.score from student join score on student.id = score.student_id and student.id=4;
    在这里插入图片描述

1.3 外连接

外连接分为左外连接和右外连接,如果联合查询,右面的表完全显示,我们说是右外连接,反之则是左外连接.与内连接不同的地方是对于空值/不存在的值,内连接是直接去掉,而外连接会将不保留的一列置为空.需要注意的一点是,外连接因为会涉及到左右的问题,所以只能用join写法来完成.
语法:

  • 左外连接:select 字段名 from 表名1 left join 表名2 on 连接条件
  • 右外连接:select 字段名 from 表名1 right join 表名2 on 连接条件
    eg:select * from student left join score on student.id=score.student_id;
    在这里插入图片描述
    在这里插入图片描述
    在这里我们可以看到,在成绩表中没有id为8同学的成绩,就是"老外学中文"的成绩,所以在外连接的联合查询中,我们直接把"老外学中文"的成绩置为空.我们再来对比一下内连接的结果:
    在这里插入图片描述
    可见在内连接的联合查询中,直接把"老外学中文"的成绩给去掉了.
    其实在日常开发中,外连接比较常用,我们结合实际场景来考虑,如果说某个同学缺考,我们不可以把这个同学的名字直接除掉,我们就是应该把他的成绩置为空.
    右外连接的原理相同,我们不再赘述.
    下面我们通过一张图来形象的展示内连接和外连接的结果集:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.4 自连接

自连接是指在同一张表中连接自身进行查询.就是把自己复制一份出来,自己和自己连接.但是这里需要注意的一点是,由于是表自己和自己连接,所以要给表起别名,否者分不清两张表那张是那张.
案例:
显示所有"计算机原理"比"Java"成绩高的同学.

  1. select * from score as s1,score as s2 where s1.student_id = s2.student_id;第一步,匹配学生id.
    在这里插入图片描述

  2. select * from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id=3 and s2.course_id=1 and s1.score>s2.score;把s1中的成绩筛选到只剩"计算机原理"的成绩,s2中的成绩筛选到只剩"Java"的成绩,之后再在最后加上限制条件,s1表的成绩大于s2表的成绩,就是"计算机原理"的成绩大于"Java"成绩的人.

在这里插入图片描述
自连接的作用其实在这里被体现的淋漓尽致:原本两门课的成绩在不同的行中,在这里通过自连接使得不同行中的数据到了不同的列中,列与列之间是可以直接进行比较的.

1.5 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询.

1.5.1 单行子查询

指的是子查询返回的结果集合是一行数据.
eg: 查询不想毕业的同班同学
select * from student where class_id=(select class_id from student where name='不想毕业');
在这里插入图片描述
当然也可以分为两步查询,首先查询不想毕业同学的class_id,之后再使用查询出的class_id去查询该班中有哪些同学.

1.5.2 多行子查询

指的是子查询的结果返回是多行数据,需要注意的是,由于返回的结果是一个不止有一个元素的集合,所以我们不可以在子查询中使用=,而是使用in关键字来判断查询的数据在不在子查询的集合中.
eg:查询语文或者英文的成绩.
select * from score where course_id in (select id from course where name='语文' or name='英文');
在这里插入图片描述

1.6 合并查询

在实际应用中,为了合并多个select的执行结果.可以使用union,union all. 使用union和union all时候,前后查询的结果集中,字段要一致.否者合不上.

  • union
    该操作用于取得两个结果集中的并集,在使用该操作符的时候,会自动去掉结果集中的重复行.
    eg: 查询id小于3,或者名字为"英文"的课程.
    select * from course where id<3 union select * from course where name='英文';
    在这里插入图片描述
    当然这句话也可以用or实现
    select * from course where id<3 or name='英文';
    在这里插入图片描述
    既然使用or就可以实现,那么我们为什么偏要引入联合查询呢?答案是联合查询的结果可以来自不同的表,而or的结果只可以来自同一张表.
  • union all
    该操作用于查询到两个结果集的并集,在使用该操作符的时候,不会去掉重复的元素.
    select * from course where id<=6 union all select * from course where name='英文';
    在这里插入图片描述
    union和union all的区别只在是否去掉重复元素.
    在这里插入图片描述

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

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

相关文章

摩尔信使MThings之数据网关:Modbus转MQTT

由于现场设备和物联网云平台采用了不同的通信协议&#xff0c;而为了实现它们之间的互操作性和数据交换&#xff0c;需要进行协议转换。 MQTT作为一种轻量级的、基于发布/订阅模式的通信协议&#xff0c;适用于连接分布式设备和传感器网络&#xff0c;而MODBUS协议则常用于工业…

ISG立式管道离心泵(管道增压泵)

一、设计特征 ISG立式管道离心泵是一种高效的水泵&#xff0c;它采用立式单级或多级离心泵的设计&#xff0c;使得电机轴与泵轴直接连接&#xff0c;减少了传输损失。该泵的主要部件包括电机、泵体、叶轮、轴封及泵盖等。与传统卧式泵相比&#xff0c;ISG泵占地面积小&#xff…

像用户一样测试:别掉链子

“掉链子”是一句俗语&#xff0c;比喻在关键时刻出故障&#xff0c;或者重要的事情本该做好却没做好。 “掉链子”的说法来自于自行车&#xff1a;在骑行过程中&#xff0c;链条通过链轮传送&#xff0c;带动车轮滚滚向前。当链条从链轮上脱落&#xff0c;就无法进行传动&…

k8s部署efk

环境简介&#xff1a; kubernetes: v1.22.2 helm&#xff1a; v3.12.0 elasticsearch&#xff1a; 8.8.0 chart包&#xff1a;19.10.0 fluentd: 1.16.2 chart包&#xff1a; 5.9.4 kibana: 8.2.2 chart包&#xff1a;10.1.9 整体架构图&#xff1a; 一、Elasticsearch安装…

跨境电商选品思路:12个方法和爆品法则(完结篇)

不管你是做亚马逊、速卖通、Shopee 、Lazada、美客多、eBay、SHEIN、Temu、Tiktok、shopify等跨境电商平台的卖家&#xff0c;选品思路一定要清楚&#xff0c;选到好品才是成为爆品的基础。店雷达继续给各位跨境商家分享12个大数据选品场景思路&#xff0c;错过其他选品场景思路…

建设智慧公厕有什么好处?@光明源,都有哪些功能?

在城市化进程不断加快的今天&#xff0c;智慧公厕作为城市基础设施的重要组成部分&#xff0c;正逐渐受到各地政府和管理者的重视。那么&#xff0c;建设智慧公厕到底有哪些好处&#xff1f;它们又都涉及哪些功能呢&#xff1f;让我们一起来探讨一下。 首先&#xff0c;建设智…

初学python记录:力扣1600. 王位继承顺序

题目&#xff1a; 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点&#xff0c;这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序&#xff0c;第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) &#xff0c;给定一个人…

基于SpringBoot+Vue+Mysql的图书管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

[leetcode]只出现一次的数字Ⅲ

题目&#xff1a; 给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1&…

Tiktok矩阵系统是什么?——Tiktok矩阵系统的优势、功能、及应用场景的介绍

摘要 Tiktok作为全球现象级的短视频平台,其发展前景日益明朗。 Tiktok全世界有多少用户? TikTok作为全球性的社交媒体平台,其用户数量一直在持续增长。根据最新的数据,预计到2024年,TikTok的用户数量将达到数十亿,覆盖全球范围内的各个年龄段和地区。具体来说,根据Ti…

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…

HarmonyOS4.0 ArkUI构建布局

一、线性布局 属性说明&#xff1a; justifyContent&#xff1a;设置子元素在主轴方向的对齐方式 参数&#xff1a;FlexAlign枚举 alignItems&#xff1a;设置子元素在交叉轴方向的对齐方式 参数&#xff1a; Row容器使用VerticalAlign枚举Column容器使用HorizontalAlign枚举 …

k8s的ca以及相关证书签发流程

k8s的ca以及相关证书签发流程 1. kube-apiserver相关证书说明2. 生成CA凭证1.1. 生成CA私钥1.2. 生成CA证书 2. 生成kube-apiserver凭证2.1. 生成kube-apiserver私钥2.2. 生成kube-apiserver证书请求2.3. 生成kube-apiserver证书 3. 疑问和思考4. 参考文档 对于网站类的应用&am…

springboot 整合 mybatis(配置版)

代码及配置整合 创建实体类,与数据库对应 创建 mapper、service 和 controller @AutowiredUserService userService;@ResponseBody@GetMapping("/user")public com.vazquez.bootstudy.model.User getById(@RequestParam("id") Long id) {return userServ…

计算机网络:数据链路层 - CSMA/CD协议

计算机网络&#xff1a;数据链路层 - CSMA/CD协议 媒体接入控制CSMA/CD协议截断二进制指数退避算法帧长与帧间间隔信道利用率 媒体接入控制 如图所示&#xff0c;这是一根同轴电缆&#xff0c;有多台主机连接到这根同轴电缆上&#xff0c;他们共享这根传输媒体&#xff0c;形成…

LeetCode-347. 前 K 个高频元素【数组 哈希表 分治 桶排序 计数 快速选择 排序 堆(优先队列)】

LeetCode-347. 前 K 个高频元素【数组 哈希表 分治 桶排序 计数 快速选择 排序 堆&#xff08;优先队列&#xff09;】 题目描述&#xff1a;解题思路一&#xff1a;哈希表记录出现次数&#xff0c;然后用最小堆取&#xff0c;因为每次都是弹出最小的&#xff0c;剩下的一定是K…

CentOS7安装MySQL8.0教程

环境介绍 操作系统&#xff1a;Centos7.6 MySQL版本&#xff1a; 8.0.27 只要是8.0.*版本&#xff0c;那就可以按照本文说明安装 一、安装前准备 1、卸载MariaDB 安装MySQL的话会和MariaDB的文件冲突&#xff0c;所以需要先卸载掉MariaDB。 1.1、查看是否安装mariadb rpm -…

SQL注入利用学习-Union联合注入

联合注入的原理 在SQL语句中查询数据时&#xff0c;使用select 相关语句与where 条件子句筛选符合条件的记录。 select * from person where id 1; #在person表中&#xff0c;筛选出id1的记录如果该id1 中的1 是用户可以控制输入的部分时&#xff0c;就有可能存在SQL注入漏洞…

自媒体内容创作助手:7款必备ai写作工具一览! #学习方法#科技#其他

这些工具不仅可以快速生成高质量的文本内容&#xff0c;还可以根据用户的需求进行个性化定制。它们可以帮助我们节省大量的时间和精力&#xff0c;让我们更加专注于创意和细节的打磨。本文将为大家详细介绍几个AI写作工具&#xff0c;让你在写作领域更上一层楼。 1.七燕写作 这…

【随笔】Git 高级篇 -- 撤销变更 reset | revert(十四)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…