MySQL:数据库的查询与连接

news2024/12/23 9:27:15

目录

1.复合查询

1.1 多表查询(联合查询)

1.2 join on (inner join)

1.3 自连接

1.4 子查询

1.5 合并查询

2.内外连接

3.关于高内聚、低耦合


1.复合查询

1.1 多表查询(联合查询)

什么是多表插叙?实际开发中往往数据来自不同的表,我们需要同时查询多个表之间的数据~

多表查询的基本执行过程:笛卡尔积 

 笛卡尔积通过排列组合得到,列数就是两个表列数之积,行数就是两个表行数之积

 仔细观察,笛卡尔积里面的结果,很多是无效的数据,只有一部分是有意义的~

因此我们要把无意义的数据去掉~

如何去掉这一些元素呢?我们通过观察可以发现,有意义的数据都是学生的名字和ID、ID和班级相匹配的数据,我们就需要通过限制条件来筛选这一些结果:

select * from student,class where classID = classID;

但是此时你可能会有疑问:怎么出现了classID = classID?是不是不对?运行过后确实发现这样的写法是不行的

 这个时候SQL出现了报错:模糊定义

为了解决这个问题,我们需要引入 .  成员访问运算符来完成,类似于Java中的引用

1.成员访问运算符可以把表视为是数据库的成员

2.成员访问运算符可以把列名视为是表的成员

select * from student,class where student.classID = class.classID;

 我们再对条件稍加修改,便得到了学生名字和班级名字的表:

那么我们就得到了联合查询的步骤:

1.计算笛卡尔积

2.引入连接条件

3.加入必要的条件

4.把不必要的列去掉

1.2 join on (inner join)

select * from student join score on student.id = score.student_id;
select * from student inner join score on student.id = score.student_id;

这两种写法跟上面的写法效果是相同的,但是from多个表只能实现内连接,而join on既能实现内连接,也能实现外连接。这里关于内外连接先不细说,这部分内容等到之后再讲~

1.3 自连接

自己和自己进行笛卡尔积,就叫做自连接

这个操作不是一个通用的解决方案,而是特殊问题的特殊处理方式

自连接的作用就是把行转成列

SQL中无法针对行与行之间,使用条件比价,但是有的需求里,又需要进行 行与行 比较

所以就可以使用自连接,把行转成列

那么如何用自连接来完成呢?刚刚不是说是自己和自己进行笛卡尔积吗,那么我们就会想到这样的方式:

 但是它提示二名字重复了,不是唯一的,所以我们就需要起别名来完成:

select * from score as s1,score as s2;

这样就完成了一个自连接的操作

请注意:自连接会产生大量的无效数据,所以我们仍然需要通过一层层的筛选条件来把想要得到的数据来筛选出来~

1.4 子查询

子查询,本质上就是套娃,把多个SQL语句合成一个了~实际开发中,子查询要慎用。

因为子查询可能会构造出非常复杂,非常不好理解的语句,对于代码的可读性,是毁灭性的打击,对于SQL的执行效率,也可能是毁灭性的打击~

什么是子查询?一行代码就能解释清楚:

select name from student where class_id = 
(select class_id from student where name = zhangsan) 
and name != zhangsan;

在这个代码中间又嵌套了一层SQL语句,外层SQL语句查询的是内层SQL语句返回的结果

把一个查询,作为另一个查询的一部分条件~

同时要注意,内层查询的结果是存放在内存中,如果太大了的话内存就放不下~

1.5 合并查询

合并查询关键字:

union

union all 

作用是可以同时查询两个表的相关结果~

他们的区别仅仅是:union是进行过去重操作的,而union all则是不去重,保留多份~

在这张图里看到,union可以对两个表进行同时查询,只要是查询结果的列是匹配的就行~

但是如果是or的话,就只能对一个表进行查询~

2.内外连接

内连接和外连接,大多数情况下没什么区别,但如果要连接的两个表不是一一对应,内连接和外连接就有区别了~

在我们之前所有的学习中,学习的都是内连接

 我们重点讲一下外连接:

关键字:left/right join 

在上面的代码中,仅仅需要加入一个left/right就会让查询结果大不相同:

 也就是说:查询所有学生的成绩,在这个左/右表中,如果这个学生没有成绩,也要将学生的个人信息显示出来,这就是左/右外连接

3.关于高内聚、低耦合

什么叫耦合?

在编程中,耦合描述了模块之间的关联关系是不是比较强,关联关系越强、越复杂,那么耦合程度就越高,就越不好~

为什么呢?写代码的时候,我们会希望耦合比较低,如果两个模块之间关联比较密集,就可能导致修改一个模块,就会影响到另外一个模块,关联大,工作量大,也就容易出错了~

那什么又是内聚呢?把有关联的代码写到一起,就是高内聚~

SQL的基本用法,到这里也就告一段落了~期待后面更加精彩的学习~

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

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

相关文章

网络安全管理员证书有什么用?2023证书怎么考?证书报考条件?

网络安全管理员是做什么工作的呢?现如今,网络高速发展,带动了很多行业的兴起,比如说电商行业,今天已经步入到足不出户即可购物的时代了,当然网络也是一把“双刃剑”,带来了好处的同时&#xff0…

Sui Move Object讲解

要了解Sui的独特特性,首先要了解Sui中以对象为中心的数据模型。 Sui的设计初衷是重新定义数字资产所有权的可能性。重新设计的一个基本部分 — — Sui是以对象为中心的数据模型,也是Sui和其他Layer 1区块链之间的一个显著区别。 其他L1如何处理资产所有…

day8 - 使用不同的滤波核进行图像降噪

本期主要介绍用于图像平滑处理的滤波,分别是方框滤波、均值滤波、中值滤波、高斯滤波,比较不同滤波的效果;并了解自定义滤波器进行图像处理。 完成本期内容,你可以: 会使用方框滤波、均值滤波、中值滤波、高斯滤波进行…

实时聊天组合功能,你了解吗?

你有兴趣安装实时聊天组合功能吗?如果您选择了SaleSmartly(ss客服),您的实时聊天插件可以不仅仅只是聊天通道,还可以有各种各样的功能,你不需要包含每一个功能,正所谓「宁缺勿滥」,功…

Windows主机中构建适用于K8S Operator开发环境

基于 win 10 打造K8S应用开发环境 一、wsl子系统安装 在cmd命令行终端或powershell中操作 1.1 确认windows操作系统版本 1.2 开启wsl功能 1.3 wsl配置 PS C:\Users\cpf> wsl提示:适用于 Linux 的 Windows 子系统没有已安装的分发版。可以通过访问 Microsoft St…

使用canvas给图片添加水印

上接文章“图片处理” canvas元素其实就是一个画布,我们可以很方便地绘制一些文字、线条、图形等,它也可以将一个img标签里渲染的图片画在画布上。 我们在上传文件到后端的时候,使用input标签读取用户本地文件后得到的其实是一个Blob对象&a…

Redis7实战加面试题-基础篇(Redis持久化,Redis事务,Redis管道,Redis发布订阅)

Redis持久化 RDB (Redis DataBase) RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使…

HCIA-ARP、MAC、交换机工作原理

目录 万能数据转发模型 ARP协议:地址解析协议 以太网帧的交换 IP地址和Mac地址的区别: 以太网交换机介绍: 交换机的工作原理: ​编辑交换机处理数据的三种方式: Mac表和ARP表的区别: 万能数据转发模…

自定义注解和@Target、@Retention注解的使用

说明:注解可以理解为另一种形式的配置,可用于在类上、方法上等,标志是“”,如重写方法上的“Override”就是一种注解。这里我通过一个实例,来介绍自定义注解和java元注解(Target、Retention)的使…

案例20:Java物流管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

ChatGPT全球最大开源平替OpenAssistant:基于Pythia和LLaMA微调而来

论文地址:https://drive.google.com/file/d/10iR5hKwFqAKhL3umx8muOWSRm7hs5FqX/view 项目地址:https://github.com/LAION-AI/Open-Assistant 数据集地址:https://huggingface.co/datasets/OpenAssistant/oasst1 体验地址:http…

Hiredis的基本使用

目录 前言 一.hiredis的安装 二.同步API 2.1.连接Redis数据库 2.1.1 无超时时间,阻塞等待连接 2.1.2 设置超时时间,阻塞等待连接。 2.1.3 非阻塞,不管连接与否,立即返回。 2.2.执行命令 2.2.1 返回执行上下文 2.2.2 没有返回执…

伪类元素的用法总结

1:自闭标签不适用伪类元素 自闭合标签 1. 一般标签   由于有开始符号和结束符号&#xff0c;因此可以在内部插入其他标签或文字。 <p>“绿叶&#xff0c;给你初恋般的感觉。”</p> 2. 自闭合标签   由于只有开始符号而没有结束符号&#xff0c;因此不可以在内…

2023-05-24:为什么要使用Redis做缓存?

2023-05-24&#xff1a;为什么要使用Redis做缓存&#xff1f; 答案2023-05-24&#xff1a; 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处。 假设你在超市里买了一箱啤酒&#xff0c;如果你需要每次想喝啤酒就去超市购买&#xff0c;无疑会浪费很多时间和精力…

vue+element纯手工完美模拟实现小米有品网站

一、预览 小米有品官网&#xff1a;小米有品 本作品demo预览地址&#xff1a;点击预览 二、效果图对比 1.官方效果截图&#xff1a; 2.作者实现的demo效果图&#xff1a; 首页&#xff1a; 上新精选&#xff1a; 商品详情&#xff1a; 购物车&#xff1a; 登录&#xff1a; …

【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering(分离对比协同过滤)

【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering&#xff08;分离对比协同过滤&#xff09; 文章目录 【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering&#xff08;分离对比协同过滤&#xff09;1. 来源2. 介绍3. 模型方法3.1…

最小生成树 Prim算法实现(c语言代码)

【问题描述】 城市之间的公路交通可以用一个无向图表示。如下图所示&#xff1a; 顶点表示城市、边表示城市之间有公路相连&#xff0c;边上的权值表示城市之间的公路长度。 编程解决以下问题&#xff1a; &#xff08;1&#xff09;输入城市信息和城市之间公路的信息&…

2023最新SRC漏洞挖掘快速上手攻略!

前言 随着网络安全的快速发展&#xff0c;黑客攻击的手段也越来越多样化&#xff0c;因此SRC漏洞挖掘作为一种新的网络安全技术&#xff0c;也在不断发展和完善。那么&#xff0c;作为一个网安小白如果想要入门SRC漏洞挖掘&#xff0c;需要掌握哪些知识呢&#xff1f;以下是本…

Vue3入门

前言 在Vue 3提供的丰富的基础配置和插件生态系统之下&#xff0c;它是一种适用于多场景开发的前端框架&#xff0c;包括web应用程序、移动应用和桌面应用。使用Vue 3&#xff0c;您可以快速高效构建出具有优秀用户体验的应用程序。 准备工作 首先&#xff0c;我们需要安装V…

运营-15.涉及促销活动的计算原则

1.是否 参与促销活动 如果商品参加促销活动&#xff0c;则在订单结算的时候显示已经参加的活动&#xff0c;否 则不显示&#xff1b; 2.是否 满足促销条件 如果有参加某个活动&#xff0c;则还要判断是否满足活动的条件&#xff0c;比如满200减 10&#xff0c;但是商品价格不足…