返回顶部
分享到

Mysql表的内联和外联区别

Mysql 来源:互联网 作者:佚名 发布时间:2025-11-23 09:17:46 人浏览
摘要

表的连接分为内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面文章的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法 1 selec

表的连接分为内连和外连

内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面文章的查询都是内连接,也是在开发过程中使用的最多的连接查询。

语法

1

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

案例

  1. 显示SMITH的名字和部门名称

用之前的方法

1

2

3

4

5

6

7

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)

用标准内连接

1

2

3

4

5

6

7

mysql> select ename, dname from emp inner join dept on emp.deptno=dept.deptno and ename='SMITH';

+-------+----------+

| ename | dname    |

+-------+----------+

| SMITH | RESEARCH |

+-------+----------+

1 row in set (0.00 sec)

两种方式混合使用,更好的区分笛卡尔积和筛选条件

1

2

3

4

5

6

7

mysql> select ename, dname from emp inner join dept on emp.deptno=dept.deptno where ename='SMITH';

+-------+----------+

| ename | dname    |

+-------+----------+

| SMITH | RESEARCH |

+-------+----------+

1 row in set (0.00 sec)

外连接

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

左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接。

语法

1

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

案例

前期准备:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

mysql> create table stu (id int, name varchar(30));-- 学生表

Query OK, 0 rows affected (0.03 sec)

mysql> desc stu;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| name  | varchar(30) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

mysql> insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');

Query OK, 4 rows affected (0.01 sec)

Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from stu;

+------+------+

| id   | name |

+------+------+

|    1 | jack |

|    2 | tom  |

|    3 | kity |

|    4 | nono |

+------+------+

4 rows in set (0.00 sec)

mysql> create table exam (id int, grade int); -- 成绩表

Query OK, 0 rows affected (0.02 sec)

mysql> desc exam;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id    | int(11) | YES  |     | NULL    |       |

| grade | int(11) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

2 rows in set (0.00 sec)

mysql> insert into exam values(1, 56),(2,76),(11, 8);

Query OK, 3 rows affected (0.00 sec)

Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from exam;

+------+-------+

| id   | grade |

+------+-------+

|    1 |    56 |

|    2 |    76 |

|   11 |     8 |

+------+-------+

3 rows in set (0.00 sec)

  1. 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

1

2

3

4

5

6

7

8

9

10

mysql> select * from stu left join exam on stu.id=exam.id;

+------+------+------+-------+

| id   | name | id   | grade |

+------+------+------+-------+

|    1 | jack |    1 |    56 |

|    2 | tom  |    2 |    76 |

|    3 | kity | NULL |  NULL |

|    4 | nono | NULL |  NULL |

+------+------+------+-------+

4 rows in set (0.00 sec)

右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接。

语法

1

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

案例

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

1

2

3

4

5

6

7

8

9

mysql> select * from stu right join exam on stu.id=exam.id;

+------+------+------+-------+

| id   | name | id   | grade |

+------+------+------+-------+

|    1 | jack |    1 |    56 |

|    2 | tom  |    2 |    76 |

| NULL | NULL |   11 |     8 |

+------+------+------+-------+

3 rows in set (0.00 sec)

练习

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

运用左外连接

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

mysql> select dept.deptno, dname, ename from  dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;

+--------+------------+--------+

| deptno | dname      | ename  |

+--------+------------+--------+

|     10 | ACCOUNTING | CLARK  |

|     10 | ACCOUNTING | MILLER |

|     10 | ACCOUNTING | KING   |

|     20 | RESEARCH   | JONES  |

|     20 | RESEARCH   | SMITH  |

|     20 | RESEARCH   | ADAMS  |

|     20 | RESEARCH   | SCOTT  |

|     20 | RESEARCH   | FORD   |

|     30 | SALES      | MARTIN |

|     30 | SALES      | ALLEN  |

|     30 | SALES      | JAMES  |

|     30 | SALES      | BLAKE  |

|     30 | SALES      | WARD   |

|     30 | SALES      | TURNER |

|     40 | OPERATIONS | NULL   |

+--------+------------+--------+

15 rows in set (0.00 sec)

运用右外连接

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

mysql> select dept.deptno, dname, ename from emp right join dept on dept.deptno=emp.deptno order by dept.deptno asc;

+--------+------------+--------+

| deptno | dname      | ename  |

+--------+------------+--------+

|     10 | ACCOUNTING | CLARK  |

|     10 | ACCOUNTING | MILLER |

|     10 | ACCOUNTING | KING   |

|     20 | RESEARCH   | JONES  |

|     20 | RESEARCH   | SMITH  |

|     20 | RESEARCH   | ADAMS  |

|     20 | RESEARCH   | SCOTT  |

|     20 | RESEARCH   | FORD   |

|     30 | SALES      | MARTIN |

|     30 | SALES      | ALLEN  |

|     30 | SALES      | JAMES  |

|     30 | SALES      | BLAKE  |

|     30 | SALES      | WARD   |

|     30 | SALES      | TURNER |

|     40 | OPERATIONS | NULL   |

+--------+------------+--------+

15 rows in set (0.00 sec)

?? 写在最后:以上内容是我在学习以后得一些总结和概括,如有错误或者需要补充的地方欢迎各位大佬评论或者私信我交流!!!


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • MySQL的REPLACE 函数用途与语句介绍

    MySQL的REPLACE 函数用途与语句介绍
    MySQL 的REPLACE有两个不同的用途,分别是: REPLACE()函数:用于字符串替换。 REPLACE INTO语句:用于插入或替换整行记录(类似INSERT INTO ... ON
  • Mysql表的内联和外联区别
    表的连接分为内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面文章的查询都是内连接,也是
  • MySQL CTE (Common Table Expressions)的介绍
    CTE (Common Table Expression,公共表表达式) 是 MySQL 8.0 引入的重要特性,它允许在查询中创建临时命名结果集,提高复杂查询的可读性和可维护性
  • SQL Server中的WITH(NOLOCK)介绍
    SQL Server 中的 WITH (NOLOCK) 详解 一、WITH (NOLOCK) 的本质 WITH (NOLOCK) 是 SQL Server 中的表提示(Table Hint),等同于 READUNCOMMITTED 隔离级别,它指示 SQ
  • MySQL强制使用特定索引的操作
    在MySQL中,你可以通过多种方式强制查询使用特定的索引,这在优化查询性能时非常有用,特别是当查询优化器没有选择最佳索引时。 1. 使
  • Navicat数据表的数据添加,删除及使用sql完成数据的

    Navicat数据表的数据添加,删除及使用sql完成数据的
    Navicat数据表数据添加,删除及使用sql完成数据添加 选中操作的表 右击----打开表(或者直接双击也行) 则出现如下界面,查看左下角 从左到右
  • 从入门到精通MySQL数据库索引(实战案例)
    一、索引是什么?能干嘛? 类比理解:索引就像书的目录。比如你想查《哈利波特》中 伏地魔 出现的页数,不用逐页翻书,直接看目录找
  • MySQL中DISTINCT去重的核心注意事项
    DISTINCT 六大注意事项 1. 作用范围:所有 SELECT 字段 1 SELECT DISTINCT a, b FROM table; -- 对(a,b)组合整体去重 误以为只作用于第一个字段: 1 2 -- 错误
  • MySQL中日期相减的完整指南(最新推荐)
    MySQL 中日期相减的完整指南 在 MySQL 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等)。 1. 使用
  • MySQL中的LIMIT语句及基本用法
    MySQL 中的 LIMIT 语句 LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率。 1. LIMIT 语法 1 2 3 4 5 SELECT 列名1, 列名
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计