浅析SQL中的JOIN用法

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

前言

  近期在操作数据库的时候,需要经多个表关联起来查询,在很多业务当中,也需要将多个表关联起来查询,相信第一个想法就是使用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;
复制代码

图片.png

图片.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相同的列的数据信息。 图片.png   可以得出如下图中红色部分就是INNER JOIN查询的数据信息。

图片.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没有数据也被列出了。 图片.png   可以通过图形化理解LEFT JOIN,即包含A表中的所有数据,和包含A表中与B表值相同的数据。

图片.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匹配的数据也被列出来了。 图片.png

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

图片.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;
复制代码

图片.png

结语

   好了,以上就是浅析SQL中的JOIN用法,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

   作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。

猜你喜欢

转载自juejin.im/post/7033403064010670111