mysql内连接和外连接的区别(内连接和外连接详解)
Mysql内连接与外连接,Mysql 查询可以分为内连接与外连接,同时,外连接也可以分为左外连接、右外连接与全外连接。
Mysql内连接与外连接区别
内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
全外连接:左外连接 union 右外连接,Mysql 中暂不支持。
数据准备创建表
我们首先创建课程表,具体建表语句如下:
# 创建课程表CREATE TABLE course( 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 on stu.course_id=cou.id;
执行完毕后,如下图所示:
我们可以看到,内连接,只是查询出了两个表都有的数据,即,student 表里面有一条 id 为 3 的记录,其 course_id 为 5 在 course 表里面没有 id 为 5 的数据,因此,该条记录未被查询出来,同时,在 course 表里面有条 id 为 4 的记录,但在 student 表里面没有 course_id 为 4 的记录,所以 course 表里面的该条记录未被查询出来。
内连接还有一种隐式的写法,即不需要显示的指定 INNER JOIN 关键字,具体语法如下:
SELECT stu.id stu_id, stu.name stu_name, cou.id cou_id, cou.name cou_name, cou.url cou_url FROM student stu, course cou WHERE stu.course_id=cou.id;
执行完毕后,如下图所示:
我们看到,同样实现了内连接的功能。
左外连接语法
LEFT JOIN ONLEFT 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 ONRIGHT OUTER JOIN ON
right join 是 right outer join 的简写,它的全称是右外连接,是外连接中的一种。
图解
右(外)连接,右表的记录将会全部表示出来,而左表只会显示符合搜索条件的记录。左表记录不足的地方均为 NULL,如下图所示:
案例
我们使用内连接查询,执行如下语句:
SELECT * FROM student as stu RIGHT OUTER JOIN course as cou on stu.course_id=cou.id;
执行完毕后,如下图所示:
我们可以看到,右外连接 course 表里面 id 为 2 和 4 的记录,虽然在 student 表里面没有 course_id 字段与其对应,但也被查出来了,其 student 表里面的字段都为 NULL。
原文地址:https://tangjiusheng.cn/it/656.html
- mongodb和mysql的区别(mongodb和mysql哪个好)
- mysql workbench使用教程图解(workbench连接数据库操作)
- mysql数据库基础知识(新手请收藏好)
- 数据库sql server和mysql的区别大吗(sql server和mysql哪个好)
- navicat连接mysql步骤(手把手教会你navicat连接mysql)
- mysql怎么启动服务器(分享两种启动方法)
- MySQL入门必会的MySQL命令
- 数据库创建表的方式有哪几种(mysql创建数据表的2种方式)
- mysql删除数据库命令(教你mysql删除数据库方法)
- PostgreSQL和MySQL的区别(PostgreSQL和MySQL详细的对比)