当前位置: 首页 > news >正文

MySQL中表的外连接和内连接

内连接和外连接

​ 表的连接分为内连接和外连接,内连接就是将需要连接的表形成笛卡尔积筛选;外连接分为左外连接和右外连接,左外连接为左侧的表需要完全显示,右外连接为右侧的表现需要完全显示。

文章目录

    • 内连接和外连接
      • 内连接
      • 外连接
        • 左外连接
        • 右外连接

内连接

​ 内连接实际上就是使用where子句对两种表形成的笛卡尔积进行筛选,前面文章(MySql中表的复合查询-CSDN博客)中介绍的查询都是内连接查询,在实际开发项目中用得最多的也是内连接查询。

​ 语法:

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

​ 显示SMITH的名字和部门名称,如下:

mysql> select ename, dname from emp, dept where emp.deptno = dept.deptno and ename = 'SMITH';
+-------+----------+
| ename | dname    |
+-------+----------+
| SMITH | RESEARCH |
+-------+----------+
1 row in set (0.00 sec)-- 使用标准的内连接写法
mysql> select ename, dname from emp inner join dept on dept.deptno = emp.deptno and ename = 'SMITH';
+-------+----------+
| ename | dname    |
+-------+----------+
| SMITH | RESEARCH |
+-------+----------+
1 row in set (0.00 sec)

外连接

​ 外连接分为左外连接和右外连接

左外连接

​ 在联合查询中,左侧的表完全显示就为左外连接。

​ 语法:

select 字段名 from 表名1 left join 表名2 on 连接条件;

​ 案例如下:
在这里插入图片描述

​ 如上所示创建的两张表。

​ 查询所有学的成绩,若这个学生没有成绩,也要将该学生的个人信息显示出来,如下:

mysql> select stu.id, name, grade from stu left join exam on exam.id = stu.id;
+------+------+-------+
| id   | name | grade |
+------+------+-------+
|    1 | jack |    56 |
|    2 | tom  |    76 |
|    3 | kity |  NULL |
|    4 | nono |  NULL |
+------+------+-------+
4 rows in set (0.00 sec)
右外连接

​ 联合查询中,右侧的表完全显示就是右外连接。

​ 语法:

select 字段 from 表名1 right join 表名2 on 连接条件;

​ 对stu和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与其对应,也要显示,如下:

mysql> select stu.id, name, grade from stu right join exam on exam.id = stu.id;
+------+------+-------+
| id   | name | grade |
+------+------+-------+
|    1 | jack |    56 |
|    2 | tom  |    76 |
| NULL | NULL |     8 |
+------+------+-------+
3 rows in set (0.00 sec)

​ 列出部门名称和这些部门的员工信息,同时列出没有员工的部门,如下:

select dname, emp.* from dept left join emp on dept.deptno = emp.deptno;select dname, emp.* from emp right join dept on dept.deptno = emp.deptno;
http://www.lryc.cn/news/472460.html

相关文章:

  • Ubuntu 上安装 Redmine 5.1 指南
  • 从变量的角度理解 Hooks , 变得更简单了
  • LabVIEW Modbus通讯稳定性提升
  • (8) cuda分析工具
  • C语言 | Leetcode C语言题解之第517题超级洗衣机
  • Java多线程编程基础
  • 刷代随有感(134):单调栈——下一个更大元素I(难点涉及哈希表与单调栈的结合)
  • Linux云计算 |【第五阶段】CLOUD-DAY5
  • 被上传文件于后端的命名策略
  • 哈希表 算法专题
  • unity3d————[HideInInspector]
  • Soanrquber集成Gitlab 之 导入Gitlab项目
  • 论区块链技术及应用
  • GPT避坑指南:如何辨别逆向、AZ、OpenAI官转
  • Qt 文本文件读写与保存
  • Linux基础环境搭建(CentOS7)- 安装Scala和Spark
  • SpringBoot 下的Excel文件损坏与内容乱码问题
  • 官宣下代GPU存在缺陷,50系显卡或将迎来涨价
  • 使用pytorch实现LSTM预测交通流
  • C/C++(八)C++11
  • 使用three.js 实现 自定义绘制平面的效果
  • 玩转Docker | 使用Docker部署捕鱼网页小游戏
  • 第2章 Android App开发基础
  • 通过 SYSENTER/SYSEXIT指令来学习系统调用
  • Nginx开发实战——网络通信(一)
  • w外链如何跳转微信小程序
  • 获取平台Redis各项性能指标
  • STM32 HAL 点灯
  • 【http作业】
  • WPF+MVVM案例实战(十一)- 环形进度条实现