Mysql从入门到精通day3————记一次连接查询的武装渗透

server/2025/3/31 6:45:17/

一.内连接查询

概念:内连接是最普遍的连接类型,要求构成连接每一部分的每个表都匹配,不匹配的行将被排除

分类:内连接包括相等连接和自然连接,相等连接最为常见,就是使用等号运算符根据每个表共有列的值匹配两个表中的行,这种情况最后的结果集只包含参加连接的表中与指定字段相符的行,自然连接会消除相等连接结果中的重复属性列而且自然连接根据相同的列名自动连接不是必须要显式指定连接条件(如A=B),而相等连接需要指定条件,也就是说自然连接是去掉重复列的特殊的等值连接,等值连接中不要求属性值完全相同,而自然连接要求必须是相同的属性组(属性名可以不同)即值域必须相同。
下面我们来看一个例子:
在这里插入图片描述

如图所示我们先建立一个图书信息表,内容包含图书id(int类型),图书名(可变字符串类型),作者(可变字符串类型),价格(可变浮点数类型),总页数(int类型),然后我们查看一下表结构如上图所示
在这里插入图片描述
然后我们再建立一个图书借阅表,包含图书id(int型),借出时间(数据库日期类型)归还时间(数据库日期类型),是否归还(布尔型),建立的表结构如上图所示,下面就是开始往表中插入值

在这里插入图片描述
先是给图书借阅表插入值,这里有两个误区警示

误区1:我们在插入多组值时中间要用逗号分隔,否则会报错

误区2:我们注意ERROR行提示的Duplicate entry for primary,key意思是主键的值重复,这是重点,我们给图书的id设置了主键属性,那么图书的id值就不能重复,因为主键有唯一表示性,所以我们如果手滑一不小心把id的值设为相同的,插入操作就会失败,这也是小编实践过程中的教训

然后是插入图书信息表的内容**(注意windows系统不区分大小写,linux系统区分大小写)**
在这里插入图片描述
表的内容有了,下面就开始我们的内连接操作:
在这里插入图片描述
我们进行一次等值查询,以两个表中的图书id为等值条件,我们不难发现我们往图书信息表中插入了四条数据,但是有一本书的数据在图书借阅表中没有,因此连接的时候id不对等所以只返回了三本书的信息

深度思考:上例的等值连接是不是自然连接?
显然不是,因为两个表中的id属性列的值域不同,借阅表的值域是7,8,9而信息表的值域是7,8,9,10所以不是自然连接,下图是一个自然连接的实例:
在这里插入图片描述
在这里插入图片描述
由于SNO属性列的值域相同所以是自然连接并且不会删除重复的列

二.外连接查询

概念:外连接是指使用outer join关键字(outer可省略)将两个表连接起来,外连接生成的结果集不仅包含符合连接条件的行数据,而且包括左表(左外连接时的表),右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行

左外连接(left join):将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除了内连接的数据还包括左表中不符合条件的数据,并在右表的相应列中添加NULL值

右外连接(right join):将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除了内连接的数据还包括右表中不符合条件的数据,并在左表的相应列中添加NULL值

基本语法格式:

SELECT 字段名称 FROM 表名1 LEFT/RIGHT JOIN 表名2 ON 表名1.字段名1=表名2.属性名2

我们还是以上面内连接建立的图书表分析:
<1>左外连接
在这里插入图片描述
这里要注意先选择数据库再查询否则会报错,我这里的数据库是libarary

<2>右外连接
在这里插入图片描述
<3>全外连接(MYSOL暂时不支持,这种外查询意义也不大)

我们对比左外连接和右外连接的查询结果可以发现内连接的查询结果和左外连接的查询结果一致,这是由于图书借阅表(左表)在图书信息表(右表)中一定有与之对应的数据,反过来图书信息表在图书借阅表中有一条id为10的书的信息没有,所以右连接的查询结果会出现最后一行为空(NULL)

**总结:

左连接,左对右,左没右,右加NULL;
右连接,右对左,右没左,左加NULL;

简单点说就是左连接能列出左边关系所有的元组,右连接能列出右边关系所有的元组,我们的例子中左连接列出了借阅表(左表)的所有元组,而外连接列出了信息表(右表)的所有元组(我们要查询的列)**

三.复合条件连接查询(AND)

我们在内连接查询的基础上再加上判断归还字段是否等于0的条件
在这里插入图片描述
如果在右外连接上加入ifback等于0的条件,那么借阅表中的ifback等于1的地方(bookid,ifback)也会变为NULL因为不符合条件,这是外连接和内连接的不同地方,读者注意体会**
在这里插入图片描述

如图所示,我们筛选出了ifback=0的所有元组,查询更为精准

下期预告:SOL子查询的讲解


http://www.ppmy.cn/server/178961.html

相关文章

破解云端依赖!如何通过Flowise搭建私有化的端到端AI开发环境

文章目录 前言1. Docker安装Flowise2. Ubuntu安装Cpolar3. 配置Flowise公网地址4. 远程访问Flowise5. 固定Cpolar公网地址6. 固定地址访问 前言 想象一下&#xff0c;当你的同事还在为那些繁琐的工作流程头疼时&#xff0c;你已经用上了超火的 Flowise&#xff0c;轻松搭建复杂…

Linux进程地址空间/进程控制

前景提要&#xff1a;一个程序的运行必不可少的两张表&#xff1a;1.命令行参数表&#xff1b;2.环境变量表 常量区和代码是只读的&#xff0c;在堆区里面地址是向上走&#xff0c;而栈区地址是向下走的&#xff0c;中间是有一个共享区的 例如&#xff1a;这个就会运行错误&am…

数据库基础知识点(系列一)

1&#xff0e;数据库的发展历史分哪几个阶段&#xff1f;各有什么特点&#xff1f; 答&#xff1a;数据库技术经历了人工管理阶段、文件系统阶段和数据库系统三个阶段。 1&#xff09;人工管理阶段 这个时期数据管理的特点是&#xff1a; 数据由计算或处理它的程序自行携带…

C++List模拟实现|细节|难点|易错点|全面解析|类型转换|

目录 1.模拟代码全部 2.四大块代码理解 1.最底层&#xff1a;ListNode部分 2.第二层&#xff1a;ListIterator部分 3.第三层&#xff1a;ReserveListIterator部分 4最终层&#xff1a;List 1.模拟代码全部 using namespace std; template<class T> struct ListNode …

Enhancing Zero-shot Text-to-Speech Synthesis with Human Feedback论文学习

借助人类反馈增强零样本文本到语音合成 Abstract In recent years, text-to-speech (TTS) technology has witnessed impressive advancements, particularly with large-scale training datasets, showcasing human-level speech quality and impressive zero-shot capabilit…

Java高频面试之集合-15

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;解决哈希冲突有哪些方法&#xff1f; 1. 开放寻址法&#xff08;Open Addressing&#xff09; 核心思想&#xff1a;当哈…

WordPress 性能优化技术指南:打造快速加载的网站

WordPress 是全球最流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;以其灵活性和易用性深受用户喜爱。然而&#xff0c;随着网站内容和功能的增加&#xff0c;加载速度可能会变慢&#xff0c;影响用户体验和搜索引擎排名。在2025年的数字化环境中&#xff0c;网站性…

others-rustdesk远程

title: others-rustdesk远程 categories: Others tags: [others, 远程] date: 2025-03-19 10:19:34 comments: false mathjax: true toc: true others-rustdesk远程, 替代 todesk 的解决方案 前篇 官方 服务器 - https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-o…