MySQL 中内连接是在交叉连接的结果集上返回满足条件的记录;而外连接先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。

外连接更加注重两张表之间的关系。按照连接表的顺序,可以分为左外连接和右外连接。

左外连接又称为左连接,在 FROM 子句中使用关键字 LEFT OUTER JOIN 或者 LEFT JOIN,用于接收该关键字左表(基表)的所有行,并用这些行与该关键字右表(参考表)中的行进行匹配,即匹配左表中的每一行及右表中符合条件的行。

在左外连接的结果集中,除了匹配的行之外,还包括左表中有但在右表中不匹配的行,对于这样的行,从右表中选择的列的值被设置为 NULL,即左外连接的结果集中的 NULL 值表示右表中没有找到与左表相符的记录。

在 tb_students_info 表和 tb_departments 表中查询所有学生,包括没有学院的学生,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT name,dept_name-> FROM tb_students_info s-> LEFT OUTER JOIN tb_departments d-> ON s.dept_id = d.dept_id;
+--------+-----------+
| name   | dept_name |
+--------+-----------+
| Dany   | Computer  |
| Jane   | Computer  |
| Jim    | Computer  |
| Henry  | Math      |
| John   | Math      |
| Green  | Chinese   |
| Thomas | Chinese   |
| Susan  | Economy   |
| Tom    | Economy   |
| Lily   | NULL      |
+--------+-----------+
10 rows in set (0.03 sec)

结果显示了 10 条记录,name 为 Lily 的学生目前没有学院,因为对应的 tb_departments 表中并没有该学生的学院信息,所以该条记录只取出了 tb_students_info 表中相应的值,而从 tb_departments 表中取出的值为 NULL。

右外连接又称为右连接,在 FROM 子句中使用 RIGHT OUTER JOIN 或者 RIGHT JOIN。与左外连接相反,右外连接以右表为基表,连接方法和左外连接相同。在右外连接的结果集中,除了匹配的行外,还包括右表中有但在左表中不匹配的行,对于这样的行,从左表中选择的值被设置为 NULL。

在 tb_students_info 表和 tb_departments 表中查询所有学院,包括没有学生的学院,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT name,dept_name-> FROM tb_students_info s-> RIGHT OUTER JOIN tb_departments d-> ON s.dept_id = d.dept_id;
+--------+-----------+
| name   | dept_name |
+--------+-----------+
| Dany   | Computer  |
| Green  | Chinese   |
| Henry  | Math      |
| Jane   | Computer  |
| Jim    | Computer  |
| John   | Math      |
| Susan  | Economy   |
| Thomas | Chinese   |
| Tom    | Economy   |
| NULL   | History   |
+--------+-----------+
10 rows in set (0.00 sec)

可以看到,结果只显示了 10 条记录,名称为 History 的学院目前没有学生,对应的 tb_students_info 表中并没有该学院的信息,所以该条记录只取出了 tb_departments 表中相应的值,而从 tb_students_info 表中取出的值为 NULL。

MySQL 外连接查询相关推荐

  1. MySQL—外连接查询

    举例:2个表:员工表和部门表 1.inner join - on 语句,查询所有的匹配信息 select * from emp e inner join dept d on e.deptno=d.de ...

  2. Mysql学习总结(25)——MySQL外连接查询

    2019独角兽企业重金招聘Python工程师标准>>> 1.左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样: 左外连 ...

  3. mysql限制查询/外连接查询和内连接查询/联合查询

    mysql查询之limit限制查询 作用:对查询结果起到限制条数的作用 语法:limit n,m n:代表起始条数值,默认为0:m代表取出的条数 应用场合:数据量过多时,起到限制作用 如图 mysql ...

  4. MySql 内连接,外连接查询方式区别

    MySql 内连接,外连接查询方式 CREATE TABLE `question_test` (`q_id` int(11) DEFAULT NULL,`q_name` varchar(10) DEF ...

  5. 新手:MySQL 左连接 右连接 内连接 全外连接查询数据

    A 表 tb_as B表 tb_pslos LEFT JOIN  左连接 SELECT a.iob_name,b.iob_name FROM tb_as a  LEFT JOIN tb_pslos b ...

  6. 【mysql】左外连接查询中 on 和 where 的区别

    论点 在使用 mysql 的左外连接(left join)查询时,驱动表(left join 左边的表),亦即数据需要全部被查出表的查询条件建议用 where 设定,被驱动表(left join 右边 ...

  7. Mysql数据库基本操作(六)多表查询-内连接查询,外连接查询

    数据准备 use mydb3 ; --创建部门表 create table if not exists dept3 ( deptno varchar (20) primary key , --部门号 ...

  8. mysql支不支持fulljoin_MySQL5中是否可以进行完整外连接查询(full join)?解决方法

    mysql5中是否可以进行完整外连接查询(full join)? 在MySQL5中建立如下表: create   table   table1(id1   int,name   varchar(10) ...

  9. 【MySQL联合查询】外连接查询详解

    外连接可以做什么 当我们在查询数据时,要求返回所操作表中至少一个表的所有数据记录,通过SQL语句"OUTER JOIN-ON"来实现.外连接数据查询语法形式如下: SELECT f ...

最新文章

  1. 下列哪些说法符合《阿里巴巴Java开发手册》
  2. tum robotics
  3. [Java] HashMap 源码简要分析
  4. 随时间的反向传播算法 BPTT
  5. java导入lang_为什么java.lang不需要导放
  6. java httpurlconnection 设置编码_java – 通过HttpURLConnection发送UTF-8字符失败
  7. java string to bit_Java Convert String to Binary
  8. 计算机excel图表y轴怎么改,excel图表横坐标轴修改?excel图表里,请问怎么设定X,Y轴...
  9. 【VBScript恶搞代码】电脑自爆警告
  10. 总结Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fitting
  11. Revit二次开发——新建墙类型
  12. 使用现有在线翻译服务进行代码翻译的体验
  13. [个人小记]U盘文件超过4g怎么办?
  14. 据说这是一堂价值300万元的课。有空看下,不要错过
  15. python教程cos_Python爬虫入门教程 12-100 半次元COS图爬取
  16. 【面试题记录】2020前端秋招笔试面试题目记录
  17. 2021银4 各大厂前端面试题分享
  18. blog群发王(价值1980元)源代码提供 1
  19. yocto,poky,qemu
  20. martin fowler_Martin Kleppmann的大型访谈:“弄清楚分布式数据系统的未来”

热门文章

  1. python数据库自动重连_python mysql断开重连的实现方法
  2. Windows7系统资源怎么看?
  3. android 怎么刷机,android系统怎么刷机
  4. List.addAll方法的入参不能为null
  5. loadrunner支持php包吗,Loadrunner自带的WebTours
  6. java 类 加载 初始化_java中类的初始化和加载
  7. stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法
  8. android有关医疗实现功能,基于Android的智能医疗监测系统的设计与实现_问答库
  9. ul 原点显示_web前端开发学习教程,CSS HTML - ul li列表原点如何相连
  10. Android adb 启动APP