浅析SQL中的JOIN用法

简介: 浅析SQL中的JOIN用法

前言


  近期在操作数据库的时候,需要经多个表关联起来查询,在很多业务当中,也需要将多个表关联起来查询,相信第一个想法就是使用JOIN链接查询,那么你熟悉JOIN链接查询吗?


JOIN


  在编写SQL中,我们操作多个数据库表时总是使用JOIN进行链接。在实际开发中经常使用到JOIN进行数据库表联查。常用的方式有:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、OUTER JOIN等形式。下面将与实际集合起来进行相关数据演示。

  本次将以MySQL中两个数据库表进行演示。建表SQL语句如下:


CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `user_subject` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) DEFAULT NULL,
  `subject` varchar(255) DEFAULT NULL,
  `score` int(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4;


image.png


INNER JOIN


  INNER JOIN在SQL中是使用较多的内连接方式,也可以称作等值链接,主要作用是获取两个及两个以上表中相等的数据值。其语法格式一般为:


SELECT * FROM 表A AS a INNER JOIN 表B AS b ON a.id=b.uid


本次测试使用的SQL如下:


SELECT * FROM `user` as a INNER JOIN user_subject as b ON a.id=b.uid;

 通过INNER JOIN查询之后,可以发现user表中的小爱没有被查询到,user_subject表中的id为16、17、18的数据没有返回。表中只返回了user表中id与user_subject表中uid相同的列的数据信息。


image.png


 可以得出如下图中红色部分就是INNER JOIN查询的数据信息。



image.png


LEFT JOIN


  LEFT JOIN是左连接,主要作用是获取左表中的所有记录,即使在右表没有对应匹配的记录。其语法格式一般为:

SELECT * FROM 表A as a  LEFT JOIN  表B as b ON a.id=b.uid;


本次测试使用的SQL如下:


SELECT * FROM `user` as a  LEFT JOIN  user_subject as b ON a.id=b.uid;

 可以看到表user中的所有数据已经列出,而表user_subject中只有与user表相同值得数据被列出。而user表中的小度在表中user_subject没有数据也被列出了。


image.png


 可以通过图形化理解LEFT JOIN,即包含A表中的所有数据,和包含A表中与B表值相同的数据。


image.png


RIGHT JOIN


  RIGHT JOIN是右连接:与 LEFT JOIN 恰恰想反,用于获取右表中的所有记录,即使左表没有对应匹配的记录也会查询到。其语法格式一般为:


SELECT * FROM 表A as a  RIGHT JOIN 表B as b ON a.id=b.uid;


本次测试使用的SQL如下:


SELECT * FROM `user` as a  RIGHT JOIN user_subject as b ON a.id=b.uid;

  

通过执行测试SQL 可以看到,表user_subject中所有的数据都已经被列出,而表user中与表user_subject匹配的数据也被列出来了。


image.png



  可以通过图形化理解RIGHT JOIN,即包含B表中的所有数据,和包含B表中与A表值相同的数据。

image.png


FULL JOIN


   FULL JOIN是全连接,主要作用是只要其中一个表中存在匹配,则返回所在行的数据信息。 其语法格式一般为:


SELECT * FROM 表A as a  FULL JOIN 表B as b ON a.id=b.uid;


本次测试使用的SQL如下:


SELECT * FROM `user` as a  FULL JOIN user_subject as b ON a.id=b.uid;

image.png


结语


   好了,以上就是浅析SQL中的JOIN用法



目录
相关文章
|
3月前
|
SQL
SQL JOIN
【11月更文挑战第06天】
56 4
|
4月前
|
SQL 关系型数据库 MySQL
图解 SQL 里的各种 JOIN
用文氏图表示 SQL 里的各种 JOIN,一下子就理解了。
77 2
|
5月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
4月前
|
SQL 分布式计算 Java
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
68 3
|
5月前
|
SQL 存储 安全
SQL Server用法
SQL Server用法
145 1
|
5月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
95 1
|
7月前
|
JSON 数据格式 SQL
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
|
6月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `<rest>` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
86 0
|
6月前
|
SQL 存储 数据挖掘
"SQL JOIN大揭秘:解锁多表联合查询的终极奥义,从内到外,左至右,全连接让你数据世界畅通无阻!"
【8月更文挑战第31天】在数据库领域,数据常分散在多个表中,而SQL JOIN操作如同桥梁,连接这些孤岛,使数据自由流动,编织成复杂的信息网络。本文通过对比内连接、左连接、右连接和全连接的不同类型,并结合示例代码,展示SQL JOIN的强大功能。掌握JOIN技术不仅能高效查询数据,更是数据分析和数据库管理的关键技能。
160 0
|
7月前
|
SQL
SQL FULL OUTER JOIN 关键字
【7月更文挑战第17天】SQL FULL OUTER JOIN 关键字。
57 6