首页 > 数据库 >【重学 MySQL】二十六、内连接和外连接

【重学 MySQL】二十六、内连接和外连接

时间:2024-09-12 23:25:41浏览次数:3  
标签:table2 二十六 table1 JOIN field common MySQL 连接

【重学 MySQL】二十六、内连接和外连接

在这里插入图片描述

在MySQL中,内连接和外连接是两种常见的表连接方式,它们在处理多个表之间的关系时发挥着重要作用。

内连接(INNER JOIN)

概念

内连接是连接操作中最常用的一种,它通过将两个表中满足连接条件的记录进行合并,返回匹配的结果。内连接只返回两个表中有匹配的行,并且只返回满足连接条件的列。

特点

  • 返回两个表中满足连接条件的记录集合。
  • 只包含在两个表中都存在的数据。
  • 如果两个表中有未匹配的行,则这些行将不会包含在结果中。

语法

SELECT columns
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

或者使用隐式内连接(不使用INNER JOIN关键字):

SELECT columns
FROM table1, table2
WHERE table1.common_field = table2.common_field;

示例

假设有两个表,一个是employees(员工表),另一个是departments(部门表),它们通过department_id字段关联。要查询所有员工及其所在部门的名称,可以使用内连接:

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;

外连接(OUTER JOIN)

外连接是连接操作中的另一种方式,它可以返回左表或右表中有未匹配的记录。外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN,但需要注意的是,MySQL原生并不直接支持FULL JOIN,但可以通过UNION操作模拟)。

1. 左外连接(LEFT JOIN)

概念

左外连接返回左表中所有的记录和满足连接条件的右表记录。如果右表中没有匹配的记录,则返回NULL值。

语法

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

示例

继续使用employeesdepartments表作为例子,要查询所有员工及其所在部门的名称,即使某些员工没有分配到部门(即部门表中没有对应的记录),也可以使用左外连接:

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

2. 右外连接(RIGHT JOIN)

概念

右外连接与左外连接相反,它返回右表中的所有记录和满足连接条件的左表记录。如果左表中没有匹配的记录,则返回NULL值。

语法

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

示例

要查询所有部门及其对应的员工名称(即使某些部门没有员工分配),可以使用右外连接:

SELECT departments.department_name, employees.name
FROM departments
RIGHT JOIN employees
ON departments.department_id = employees.department_id;

3. 全外连接(FULL JOIN,通过UNION模拟)

由于MySQL原生不支持全外连接,但可以通过结合左外连接和右外连接,并使用UNION操作来模拟全外连接的效果。

模拟语法

(SELECT columns FROM table1 LEFT JOIN table2 ON table1.common_field = table2.common_field)
UNION
(SELECT columns FROM table1 RIGHT JOIN table2 ON table1.common_field = table2.common_field);

需要注意的是,使用UNION时,应确保两个SELECT语句中的列数和数据类型相匹配,并且通常还需要使用UNION DISTINCT来去除重复的行(如果不需要去重,则可以使用UNION ALL)。

总结

内连接和外连接在MySQL中都是处理表之间关系的重要工具。内连接只返回匹配的记录,而外连接则返回匹配的记录以及未匹配的记录(通过NULL值表示)。通过合理使用这些连接方式,可以灵活地查询和处理多个表中的数据。

标签:table2,二十六,table1,JOIN,field,common,MySQL,连接
From: https://blog.csdn.net/weixin_43344151/article/details/142187664

相关文章

  • MySQL索引的深入学习与应用
    一、索引的基本概念 索引是数据库管理系统中用于加速数据检索的一种数据结构,其工作原理类似于书籍的目录,能够指引数据库系统快速定位到目标数据。通过减少数据扫描范围,索引显著提升了数据库的查询效率,特别是在处理大规模数据集时,效果尤为显著。索引数据通常存储在磁盘上......
  • mysql 使用binlog还原数据
    MySQL的二进制日志(BinaryLog,简称binlog)是MySQL数据库的一个重要功能,它记录了所有的修改数据库内容的操作(如INSERT、UPDATE、DELETE等),但不包括SELECT和SHOW这类操作。这些日志对于数据恢复、复制和数据审计等场景非常有用。1.确认binlog是否开启登录MySQL后,可以通过SH......
  • MySQL练习50道
    MySQL练习50道经典SQL练习题数据表介绍1.学⽣表Student(SId,Sname,Sage,Ssex)SId学⽣编号Sname学⽣姓名Sage出⽣年⽉Ssex学⽣性别2.课程表Course(CId,Cname,TId)CId课程编号Cname课程名称TId教师编号3.教师表Teacher(TId,Tname)TI......
  • MySQL安装
    MySql安装1、下载mysql安装包再mysql官方下载安装包2、删除依赖包#查找依赖包rpm-qa|grepmysqlrpm-qa|grepMySQLrpm-qa|grepmariadb#删除查询到的依赖包rpm-e--nodepsmariadb-libs-5.5.68-1.el7.x86_643、安装mysql#将安装包上传到linux中#my......
  • MySQL常用函数
    一、聚合函数1、max():计算指定列的最大值2、min():计算指定列的最小值3、count():计算指定列不为null的数据的数量4、sum():计算指定列的数值的和如果计算的列的类型不是数值类型,计算结果为05、avg():计算指定列的数值的平均值如果计算的列的类型不是数值类型,计算的结果......
  • Mysql--操作
    目录数据类型数据类型的属性1、整型2、浮点型(float和double)3、定点数(numeric等价于decimal)4、字符串(char,varchar,_text)5.二进制数据(xxxBLOB和xxxBINARY了解就行)6.日期时间类型7.位类型(bit)8.枚举(enum)9.集合(set)10.特殊的NULL类型基本操作DDL数据库管理create创建数据库sh......
  • MySQL数据库基础
    目录一、在Ubuntu系统下安装MySQL数据库1、更新软件源,在确保ubuntu系统能正常上网的情况下执行以下命令2、安装MySQL数据库及相关软件包4、配置数据库的字符集、开启网络连接5、创建数据库、创建新用户6、测试MySQL数据库二、数据库介绍1、为什么需要数据库2、什么是数据库3、数据......
  • spoon、mysql数据导入hive,分别使用hdfs导入,或者修改配置
    一、mysql通过hdfs导入到hive—spoon    首先要在要在主对象树里边ADD一个hadoop然后在文件安装位置找到这个next后会出现这个,然后就可以把这页面关闭然后新建项目选择这两个,如果没有选择选项,重启软件就会有了然后选择这几个文件从服务器hadoopetc的配置文......
  • mysql_getshell的几种方法
    mysql_getshell一、mysql的--os-shell利用原理--os-shell就是使用udf提权获取WebShell。也是通过intooufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件。此为sqlmap的一个命令,利用这条命令的先决条件:要求为数据库DBA,使用--is-dba查看当前网站连接的数......
  • 【MySQL】表的约束
    目录......