天涯论坛

 找回密码
 立即注册
搜索
查看: 63|回复: 0

「每日一道面试题」Mysql内连接与外连接

[复制链接]

2996

主题

182

回帖

9920万

积分

论坛元老

Rank: 8Rank: 8

积分
99209276
发表于 2024-8-4 10:49:20 | 显示全部楼层 |阅读模式

Mysql内连接与外连接

Mysql 查找能够分为内连接与外连接,同期,外连接能够分为左外连接、右外连接与全外连接。

Mysql内连接与外连接区别

内连接:指连接结果仅包括符合连接要求的行,参与连接的两个表都应该符合连接要求

外连接:连接结果不仅包括符合连接要求的行同期包括自己不符合要求的行。包含左外连接、右外连接和全外连接。

左外连接:左边表数据行所有保存,右边表保存符合连接要求的行。

右外连接:右边表数据行所有保存,左边表保存符合连接要求的行。

全外连接:左外连接 union 右外连接,Mysql 中暂不支持。

数据准备

创建表

咱们首要创建课程表,详细建表语句如下:

# 创建课程表 CREATE TABLEcourse(id int, name varchar(40), url varchar(128) );

接着,咱们创建学生表,详细建表语句如下:

# 创建学生表 CREATE TABLE student( id int, name varchar(40), course_id int );

插进数据

首要咱们先在课程表插进数据,详细语句如下:

# 插进课程信息 INSERT INTO course(id, name, url)values(1, "python", "https://haicoder.net/python/python-tutorial.html"); INSERT INTO course(id, name, url)values(2, "golang", "https://haicoder.net/golang/golang-tutorial.html"); INSERT INTO course(id, name, url)values(3, "java", "https://haicoder.net/java/java-development.html"); INSERT INTO course(id, name, url)values(4, "javascript", "https://haicoder.net/javascript/javascript-tutorial.html");

接着,咱们在学生表插进数据,详细语句如下:

# 插入学生信息 INSERT INTO student(id, name, course_id)values(1, "jobs", 1); INSERT INTO student(id, name, course_id)values(2, "gates", 3); INSERT INTO student(id, name, course_id)values(3, "jack", 5);

最后,咱们运用 SELECT 语句,查看创建好的表的数据,首要,查看课程表的数据,详细语句如下:

SELECT * FROM course;

执行完毕后,如下图所示:

接着,咱们再次查看学生表的数据,详细语句如下:

SELECT * FROM student;

执行完毕后,如下图所示:

内连接

语法

INNER JOIN ON

图解

内连接组合两个表中的记录,返回相关字段相符的记录,便是返回两个表的交集(暗影)部分,如下图所示:

案例

咱们运用内连接查找,执行如下语句:

SELECT * FROM student as stu inner join course as cou onstu.course_id=cou.id;

执行完毕后,如下图所示:

咱们能够看到,内连接,只是查找出了两个表都有的数据,即,student 表里面有一条 id 为 3 的记录,其 course_id 为 5 在 course 表里面 id 为 5 的数据,因此呢,该条记录未被查找出来,同期,在 course 表里面有条 id 为 4 的记录,但在 student 表里面 course_id 为 4 的记录,因此 course 表里面的该条记录未被查找出来。

内连接还有一种隐式的写法,即不必须表示的指定 INNER JOIN 关键字,详细语法如下:

SELECTstu.id stu_id, stu.name stu_name, cou.id cou_id, cou.name cou_name, cou.url cou_urlFROM student stu, course cou WHERE stu.course_id=cou.id;

执行完毕后,如下图所示:

咱们看到,一样实现了内连接的功能。

左外连接

语法

LEFT JOIN ON LEFT OUTER JOIN ON

left join 是 left outer join 的简写,它的全叫作是左外连接,是外连接中的一种。

图解

左(外)连接,左表的记录将会所有暗示出来,而右表只会表示符合搜索要求的记录。右表记录不足的地区均为 NULL,如下图所示:

案例

咱们运用内连接查找,执行如下语句:

SELECT * FROM student as stu LEFT OUTER JOIN course as cou on stu.course_id=cou.id;

执行完毕后,如下图所示:

咱们能够看到,左外连接 student 表里面 id 为 3 的记录,其 course_id 为 5,但 course_id 为 5 的记录在 course 表里面是不存在的,此时,咱们用的是左外连接,因此呢能够查出该条记录,但 course 表里面的字段的值都是 NULL。

右外连接

语法

RIGHT JOIN ON RIGHT OUTER JOIN ON

right join 是 right outer join 的简写,它的全叫作是右外连接,是外连接中的一种。

图解

右(外)连接,右表的记录将会所有暗示出来,而左表只会表示符合搜索要求的记录。左表记录不足的地区均为 NULL,如下图所示:

案例

咱们运用内连接查找,执行如下语句:

SELECT * FROM student as stu RIGHT OUTER JOIN course as cou onstu.course_id=cou.id;

执行完毕后,如下图所示:

咱们能够看到,右外连接 course 表里面 id 为 2 和 4 的记录,虽然在 student 表里面 course_id 字段与其对应,但被查出来了,其 student 表里面的字段都为 NULL。





上一篇:连接器的连接关键点:电缆连接
下一篇:Excel VBA+ADO+SQL入门教程016:多表连接查询(下)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 15:13 , Processed in 0.108632 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.