【MySQL】表的内连和外连

案例表

  • 员工表emp
    在这里插入图片描述

  • 部门表dept

在这里插入图片描述

  • 薪水表salgrade
    在这里插入图片描述

表的笛卡尔积

在mysql中,笛卡尔积是指两个表没有指定任何连接条件的连接结果。两个表的笛卡尔积为这两个表所有行的组合,即每个表中的每一行都会与另一个表的每一行进行组合,产生一个包括两个表所有组合情况的结果集。(可也以不止两个表)

笛卡尔积的大小:例如表A有n行,表B有m行,那表AB的笛卡尔积的结果集为n*m行。

案例:将dept表与emp表进行无条件连接
在这里插入图片描述
from后面接需要连接的表,用逗号隔开。

表的内连接

内连接是SQL中常用的连接类型之一,用于将两个表中满足条件的行合并成一个结果集。内连接返回两个表中在连续条件上匹配的行,并且只包含匹配的行。其中如果两个内连的表是同一张表,我们称之为自连接。
语法:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
  • inner join表示内连接,inner可省略。
  • on 后面跟匹配条件,表示从两个表的笛卡尔积中进行条件筛选。也可以用where代替。

下面用实际案例来学习内连接:

  • 案例:显示名字叫SMITH的员工的部门名称
    sql语句:
select ename,dname from dept join emp on dept.deptno=emp.deptno where ename='SMITH';

在这里插入图片描述

表的外连接

跟内连接不一样的是,外连接能返回两个表匹配或者不匹配的行。跟详细地,外连接又分为左外连接和右外连接。

左外连接

左外连接返回左表的所有行,包括右表中与左表条件匹配地行。如果左表的某一些行在右表没有与之匹配的行不,则右表的列会显示null。左表表示最靠近from的表。简单来说,左外连接就是以左表为核心,去看右表有没有与之匹配的,没有就显示NULL.
语法:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

上面语法中,table1表示左表,table2表示右表。

准备表数据:

-- 建两张表
create table stu (id int, name varchar(30)); -- 学生表
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (id int, grade int); -- 成绩表
insert into exam values(1, 56),(2,76),(11, 8);

在这里插入图片描述

  • 案例:查询所有学生的成绩,如果这个学生没有成绩,也要将这个学生的信息显示出来
    因为要有所有学生,考虑以学生表为左表与成绩表进行左外连接。
    sql语句:
select * from stu left join exam on stu.id=exam.id;//为了避免歧义,stu.id表示stu表中的id字段

在这里插入图片描述

右外连接

含义和左外连接类似,只不过是以右表为主,如果左表没有与之条件匹配的行,合并后该行的左表信息显示NULL。

  • 案例:对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来
    要显示所有的成绩,以成绩表为主,考虑右外连接
    sql语句:
select * from stu right join exam on exam.id=stu.id;

在这里插入图片描述

相关推荐

  1. 2024-06-14 10:28:04       43 阅读
  2. mysql视图查询案例

    2024-06-14 10:28:04       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 10:28:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 10:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 10:28:04       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 10:28:04       20 阅读

热门阅读

  1. 计算机网络-子网掩码的计算

    2024-06-14 10:28:04       7 阅读
  2. oracle块跟踪

    2024-06-14 10:28:04       5 阅读
  3. 关于ReactV18的页面跳转传参和接收

    2024-06-14 10:28:04       6 阅读
  4. go grpc安装protobuf

    2024-06-14 10:28:04       8 阅读
  5. Golang的json解析--Gjson库的使用举例

    2024-06-14 10:28:04       7 阅读
  6. 计算机视觉的详细学习计划

    2024-06-14 10:28:04       6 阅读
  7. 正则表达式

    2024-06-14 10:28:04       4 阅读
  8. Android11 后台启动Activity

    2024-06-14 10:28:04       9 阅读
  9. c#数组的使用

    2024-06-14 10:28:04       7 阅读
  10. 对于机器学习的回答

    2024-06-14 10:28:04       4 阅读
  11. Android FirebaseApp.initializeApp(this)无法初始化

    2024-06-14 10:28:04       5 阅读