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。
|