MySQL(六)—— 连接查询

写了这么久SQL 你也许还不知道natural join 在数据库操作中,连接(JOIN)是一种非常重要的操作,它允许我们从两个或多个表中提取相关联的数据。 MySQL提供了多种连接类型,其中是一个特殊的连接方式。是MySQL JOIN中的一种,它会自动寻找两个表中具有相同名称的列,并在这些列上执行等值连接(INNER JOIN)。这意味着,使用时,你不需要显式指定连接条件,MySQL会根据列名自动匹配。在较早的MySQL版本中就已经存在,包括MySQL 5.0及之前的版本。 然而,由于它的一些潜在问题,如可读性和维护性问题,MySQL 8.0开始不再推荐使用,并 阅读详情

目录

连接查询分类

交叉连接

内连接

外连接

自然连接


连接查询

连接查询: 将多张表(可以大于2张)进行记录的连接(按照某个指定的条件进行数据拼接): 最终结果是: 记录数有可能变化, 字段数一定会增加(至少两张表的合并)

连接查询的意义: 在用户查看数据的时候,需要显示的数据来自多张表.

连接查询: join, 使用方式: 左表 join 右表

左表: 在join关键字左边的表

右表: 在join关键字右边的表

连接查询分类

SQL中将连接查询分成四类: 内连接,外连接,自然连接和交叉连接

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

交叉连接

交叉连接: cross join, 从一张表中循环取出每一条记录, 每条记录都去另外一张表进行匹配: 匹配一定保留(没有条件匹配), 而连接本身字段就会增加(保留),最终形成的结果叫做: 笛卡尔积.

基本语法: 左表 cross join 右表; 等价于(from 左表,右表)

查看表tb1和表tb2中的数据,后面操作不更新数据

-- 交叉连接
select * from tb1 cross join tb2;

select * from tb1,tb2;

 

笛卡尔积没有意义: 应该尽量避免(交叉连接没用) , 交叉连接存在的价值: 保证连接这种结构的完整性

内连接

内连接: [inner] join, 从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.

基本语法

左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是代表相同的业务含义(如tb1.author = tb2.author) 

inner关键字可以省略,只使用join;效果一样。

-- 内连接
SELECT * FROM tb1 INNER JOIN tb2 ON tb1.author = tb2.author;
SELECT * FROM tb1 JOIN tb2 ON tb1.author = tb2.author;

字段别名以及表别名的使用: 在查询数据的时候,不同表有同名字段,这个时候需要加上表名才能区分, 有时表名太长, 通常可以使用别名.

-- 别名
SELECT * FROM tb1 as a INNER JOIN tb2 as b ON a.author = b.author;
SELECT * FROM tb1 as a JOIN tb2 as b ON a.author = b.author;

内连接可以没有连接条件: 没有on之后的内容,这个时候系统会保留所有结果(笛卡尔积)

-- 没有on之后的内容
SELECT * FROM tb1 as a INNER JOIN tb2 as b;
SELECT * FROM tb1 as a JOIN tb2 as b;

 内连接还可以使用where代替on关键字(where没有on效率高)

-- where关键字代替on关键字
SELECT * FROM tb1 as a INNER JOIN tb2 as b where a.author = b.author;
SELECT * FROM tb1 as a JOIN tb2 as b where a.author = b.author;

外连接

外连接: outer join, 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能比配,正确保留; 不能匹配,其他表的字段都置空NULL.

外连接分为两种: 是以某张表为主: 有主表

Left join: 左外连接(左连接), 以左表为主表,LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。

Right join: 右外连接(右连接), 以右表为主表,RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。

基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

左连接

-- 左连接 左表为主表
select * from tb1 as a left join tb2 as b on a.author = b.author;

 右连接

-- 右连接 右表为主表
select * from tb1 as a right join tb2 as b on a.author = b.author;

虽然左连接和右连接有主表差异, 但是显示的结果: 左表的数据在左边,右表数据在右边., 左连接和右连接可以互转.

自然连接

自然连接: natural join, 自然连接, 就是自动匹配连接条件: 系统以字段名字作为匹配模式(同名字段就作为条件, 多个同名字段都作为条件).

自然连接: 可以分为自然内连接和自然外连接.

自然内连接: 左表 natural join 右表;

-- 自然连接
select * from tb1 natural join tb2;

 自然外连接: 左表 natural left/right join 右表;

-- 自然左外连接
select * from tb1 natural left join tb2;

其实, 内连接和外连接都可以模拟自然连接: 使用同名字段,合并字段 

左表 left/right/inner join 右表 using(字段名); -- 使用同名字段作为连接条件: 自动合并条件

-- 外链接模拟自然外链接 using()
select * from tb1 left join tb2 using(author);

 

多表连接: A表 inner join B表 on 条件 left join C表 on条件 ...

执行顺序: A表内连接B表,得到一个二维表, 左连接C表形成二维表...

Zabbix Trigger actions访问出现500 本篇博客详细介绍了Zabbix访问'Trigger actions'出现的错误状况,访问界面出现500,并提供了解决方案。 阅读详情

相关推荐

DRM驱动架构浅析-上(DRM基础概要与U-Boot阶段驱动解析)

本文主要探讨了Rockchip平台的DRM显示驱动架构及其在U-Boot阶段的实现。

一路寒风身如絮,命海沉浮客独行 1761

mysql学习十一之自然连接,内自然连接,左外自然连接,右外自然连接,两道面试题

一、什么是自然连接 通过mysql自己判断完成连接过程,不需要指定连接条件,mysql会根据多个表内的相同字段作为连接条件。 二、自然连接的分类 自然连接分为两种:内自然连接(natural join)和外自然连接,其中外自然连接又分为左外自然连接(natural left join)和右外自然连接(rnatural right join)。注意:自然连接没有判断语句。 三、自然连接的语法...

公子&小白的博客 6680

Qt6导入QtChart绘制图表(添加组件)

我在按照大佬们的说明添加QtChart时发现,我的电脑上并不能正确的添加QtChart并编译通过,所以在综合了两位大佬的说明又自己探索了一番后,正确编译通过,分享出来,以便同志们节省一些时间。

Nuaa0719301zyx的博客 2950

SQL中 JOIN 的两种连接类型:内连接(自然连接、自连接、交叉连接)、外连接(左外连接、右外连接、全外连接)

3、内连接要求相等的分量,不一定是公共属性,自然连接要求相等的分量必须是公共属性;自然外连接分为自然左外连接和自然右外连接.匹配条件也是由系统自动指定.在MySQL中,可通过求左外连接与右外连接的合集来实现全外连接。自然内连接其实就是内连接,这里的匹配条件是由系统自动指定.2、内连接不把重复的属性除去,自然连接要把重复的属性除去;4、内连接不把重复的属性除去,自然连接要把重复的属性除去。–自然内连接 natural inner join。1、自然连接一定是内连接,内连接不一定是自然连接;

heshihu2019的博客 5565

单细胞分析实录(12): 如何推断肿瘤细胞

公众号后台回复20210418,获取本文的测试数据 1. 回顾 前面我已经讲解了inferCNV的基本用法,这一节继续学习:如何推断肿瘤细胞。本文应该是到目前为止,全网最详细的帖子(之一)。 关于肿瘤细胞的推断,比如研究上皮细胞起源的肿瘤,我见过的一些做法如下 简单粗暴型:将来源肿瘤病灶的所有上皮细胞都看成是肿瘤细胞 看CNV:将来源于肿瘤病灶的上皮细胞和参考细胞比较,将那些有明显CNV的细胞看作肿瘤细胞 看表达特征:考虑到有的肿瘤细胞可能没有CNV层面的变化,有的文章会根据肿瘤与正常的表达谱来区分是.

TOP生物信息 1万+

Unity游戏开发客户端面经——设计模式(初级)

Unity游戏开发客户端面经 之 设计模式 篇

Sea3752的博客 9427

mysql用join_图说MySQL的几种join连接

MySQL联表查询可以说是使用MySQL必须面对的问题,而且在实际的工作中,使用比较多的查询大概也是联表查询。虽然,经常使用联表查询,但是你真的清楚其中的机制吗?带着这个问题,下面让我们进入本文的主题——图说MySQL的几种join连接。基本概念连接(join)就是将多个表中的字段根据匹配条件进行横向的拼接。左表:在语法上位于join左边的表,叫左表。右表:在语法上位于join右边的表,叫右表。图...

weixin_30733115的博客 442

Xshell 连接 kali 虚拟机教程

启动ssh服务,启动后重新查看ssh服务状态,如下图active(running)正常。至此便可以直接使用Xshell登录kali系统了。至此虚拟机已经可以上网。-查看ssh服务状态。

qq_40726937的博客 2219

SQL 等值连接(内连接)、自然连接(Out join,Left join,Right join)的区别

连接join 是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。 连接运算中有两种最为重要也最为常用的连接,一种是等值连接,一种是外连接。 等值连接 关系R与关系S 等值连接后的结果 自然连接(natural join) 自然连接是一种特殊的等值连接。比较两幅图就可以看出,自然连接在结果中把重复的属性列去掉。 一般的连接操作是从行的角度进行运算,但是自然连接还需...

淡泊以明志,宁静以致远 1万+

【软件系统架构】系列五:TCP/IP 协议栈

TCP/IP协议栈是现代网络通信的核心框架,采用分层架构设计,包含应用层、传输层、网络层和网络接口层四层结构。应用层提供HTTP、FTP等用户服务接口;传输层通过TCP/UDP实现端到端通信;网络层负责IP寻址和路由选择;网络接口层处理物理数据传输。数据在传输过程中经历层层封装,从应用层报文最终转换为物理层的比特流。该协议栈通过三次握手建立连接、数据传输、四次挥手断开连接的流程,确保可靠通信。作为互联网的基础,TCP/IP协议栈具有跨平台、标准化和可扩展的特点,广泛应用于各类网络设备和嵌入式系统中。

moton2017的博客 2160

执行HDevelop项目

这一节,我们讲述的是如何用HDevEngine加载和执行一个HDevelop项目。代码部分来源于示例程序exec_program(源文件exec_program.cpp),检测塑料零件边界上的毛刺。1.Step 1:初始化首先,我们包含HALCON/C++和HDevEngine头文件以及命名空间。注意到在这个示例程序中,HDevEngine头文件已经包含在my_hdevoperatorimpl中,所

Z's Palace 2994

MySQL进阶六:连接查询

目录 连接查询JOIN 含义 笛卡儿乘积现象 分类 按年代分类 按功能分类 一、sql92 1、等值连接 1) 为表起别名 2) 两个表的顺序可以交换 3) 插入筛选 4) 加入分组 5) 加入排序 6) 实现三表连接 2、非等值连接 3、自连接 二、sql99 语法 1、内连接 语法 特点 1) 调换位置 2) 添加筛选 3) 分组+筛选 4)...

猫ER 2062

Python画柱状图(双柱状图,三柱状图)且显示对应数值

使用python实现双柱状图和三柱状图,并且在柱状图形的顶部显示对应数值;

yue200403的博客 1万+

MySql进阶六:连接查询

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

ajaonfpas的博客 223

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL查询语句(六)——全连接与左连接查询

介绍全连接和左连接查询

Sudley的博客 955

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL实验六:多表连接和子查询复习

外连接返回左表或右表的所有行,即使右表或左表中没有匹配的行,也会返回NULL值。如果子查询返回单个值,那么“=”和IN都可以使用,但IN在语义上更清晰,因为它明确表示列的值可以是子查询结果集中的任何一个值。同样,如果右表中的行在左表中没有匹配的行,那么左表的列将显示为NULL。在数据库管理和操作中,多表连接和子查询是两种非常强大的技术,它们可以帮助我们从多个表中提取和处理复杂的数据。这个查询首先通过子查询找到张青平的学号,然后在另一个子查询中找到他选修的所有课程编号,最后通过这些课程编号获取课程名称。

Argonaut_的博客 939

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL基础(六)-----子查询和连接查询

子查询简而言之就是在一个查询里面再嵌套一个或者多个查询语句; 连接查询指的就是将多个表或者单个表连接在一起进行查询

leen的博客 5007

mysql实验六多表连接查询

实验六 多表连接查询 一、用SQL命令做连接、嵌套查询操作。将SQL命令写在作业本上。 (1)查询“张天”同学所有已学课程的课程号、课程名、成绩及相应学分。 方法一: select sc.cno,cname,credit,grade from student,course,sc where course.cno=sc.cno and student.sno=sc.sno and sname='张天' 方法二:select sc.cno,cname,credit,grade From student inn

有时间可以指导毕业设计,可以私聊我。一个热爱编程的smallCuteMonkey,可以私信我 1786

mysql(六)连接查询

#连接查询 又称为多表查询 /* 笛卡尔乘积现象:表1 m行, 表2 n行。 结果 m*n行 原因是:没有有效的连接条件 分类: SQL92: SQL99: 支持内连接和外连接(左外和右外)+交叉连接 按功能分类: 内连接: 等值连接 非等值连接 自连接 外连接: 左外连接 右外连接

one-rabbit的博客 150

mySQL笔记(六):连接查询

#进阶6:连接查询 /* 含义:又称多表查询,当查询的字段来自多个表时 笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分类: 按年代分类: sql92标准:仅仅支持内连接 sql99标准【推荐】:支持内连接、外连接(左外和右外)、交叉连接 按功能分类: 内连接: 等值连接 非等值连接 自连接 ...

管几页 211

Mysql查询相关知识(进阶五:分组查询,进阶六 连接查询)

前言上次说到了MySQL的查询进阶三和四,这次继续讨论查询的相关的知识链接: https://pan.baidu.com/s/1a_wstxPVhxeliZkt6-BTiw提取码: gaj8进阶五:分组查询语法select 分组函数,列(要求出现在group by的后面)from 表【where 筛选条件】group by 分组的列表【oder by 子句】注意:查询列表必须特殊,要求是分组函数和group by后出现的字段特点1.分组查询中的筛选分为两类。

2401_83817689的博客 1094

mysql8基础(六)子查询与多表连接查询

建表: CREATE TABLE no6( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), age TINYINT, money INT, tel CHAR(11) ); 插入数据: INSERT INTO no6 VALUES(NULL,'张三',30,2000,13565234121),(NULL,'李四',23,1000,13814526352),(NULL,'王五',40,8000,13913656352),(NULL,'赵六',

作为一个长者,有必要记录下人生经验 501

Mysql数据库基本操作(六)多表查询-内连接查询,外连接查询

数据准备 use mydb3 ; --创建部门表 create table if not exists dept3 ( deptno varchar (20) primary key , --部门号 name varchar (20 )--部门名字 ); --创建员工表 create table if not exists emp3 ( eid varchar (20) primary key , --员工编号 ename varchar(20), --员工名字 age int, --员工年龄 dept_i

weixin_42445051的博客 4860

手把手教你mysql(六)连接查询

手把手教你mysql(六)连接查询   一: 前言 CREATE DATABASE  IF NOT EXISTS `db_book2` DEFAULT CHARACTER SET GBK;   USE `db_book2`;   DROP TABLE IF EXISTS `t_book`;   CREATE TABLE `t_book` (   `id` INT(11) PRI

倾城之恋的专栏 1748

mysql学习笔记(六):连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 笛卡尔积现象:表1又m行,表2又n行,结果=m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分类: 按年代分类: sql92标准:仅仅支持内连接 sql99标准【推荐】;支持内连接+外连接(左外和右外)+交叉连接 按功能分类: 内连接: ###等值连接 ###非等值连接 ###自连接 外连接: ###左外连接...

Hi_alan的博客 376
上一篇: MySQL(五)—— 数据高级操作
下一篇: MySQL(七)—— 外键使用
爱做呢!~
博客等级 码龄10年 88粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值