【MySQL】表的表里连接

[复制链接]
发表于 2025-5-25 15:59:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目录

一、内连接
二、外连接
(一)左外连接
(二)右外连接


一、内连接

        在【MySQL】复合查询-CSDN博客一文中提到的大多都是内连接。
  1. select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
复制代码
        内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开辟过程中利用的最多的连接查询。
        例如:显示SMITH的名字和部分名称:
  1. mysql> select ename, dname from emp, dept where emp.deptno = dept.deptno and ename = 'SMITH';
  2. +-------+----------+
  3. | ename | dname    |
  4. +-------+----------+
  5. | SMITH | RESEARCH |
  6. +-------+----------+
  7. 1 row in set (0.01 sec)
复制代码
        实际可以利用尺度的内连接写法:
  1. mysql> select ename, dname from emp inner join dept on emp.deptno = dept.deptno and ename = 'SMITH';
  2. +-------+----------+
  3. | ename | dname    |
  4. +-------+----------+
  5. | SMITH | RESEARCH |
  6. +-------+----------+
  7. 1 row in set (0.00 sec)
复制代码
二、外连接

        外连接分为左外连接和右外连接,左右分别指得是以哪个表为主。为方便阐明创建两张表:
  1. mysql> create table stu(
  2.     -> id int,
  3.     -> name varchar(30)
  4.     -> );
  5. Query OK, 0 rows affected (0.02 sec)
  6. mysql> insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
  7. Query OK, 4 rows affected (0.00 sec)
  8. Records: 4  Duplicates: 0  Warnings: 0
  9. mysql> create table exam (id int, grade int); -- 成绩表
  10. Query OK, 0 rows affected (0.02 sec)
  11. mysql> insert into exam values(1, 56),(2,76),(11, 8);
  12. Query OK, 3 rows affected (0.00 sec)
  13. Records: 3  Duplicates: 0  Warnings: 0
  14. mysql> select * from stu;
  15. +------+------+
  16. | id   | name |
  17. +------+------+
  18. |    1 | jack |
  19. |    2 | tom  |
  20. |    3 | kity |
  21. |    4 | nono |
  22. +------+------+
  23. 4 rows in set (0.00 sec)
  24. mysql> select * from exam;
  25. +------+-------+
  26. | id   | grade |
  27. +------+-------+
  28. |    1 |    56 |
  29. |    2 |    76 |
  30. |   11 |     8 |
  31. +------+-------+
  32. 3 rows in set (0.00 sec)
复制代码
(一)左外连接

        如果团结查询,左侧的表完全显示我们就说是左外连接。
  1. select 字段名 from 表名1 left join 表名2 on 连接条件
复制代码
        案例:查询全部门生的成绩,如果无成绩也要将个人信息进行显示:
  1. mysql> select * from stu left join exam on stu.id = exam.id;
  2. +------+------+------+-------+
  3. | id   | name | id   | grade |
  4. +------+------+------+-------+
  5. |    1 | jack |    1 |    56 |
  6. |    2 | tom  |    2 |    76 |
  7. |    3 | kity | NULL |  NULL |
  8. |    4 | nono | NULL |  NULL |
  9. +------+------+------+-------+
  10. 4 rows in set (0.00 sec)
复制代码
(二)右外连接

        如果团结查询,右侧的表完全显示我们就说是右外连接。
  1. select 字段名 from 表名1 right join 表名2 on 连接条件
复制代码
        案例:将把全部的成绩都显示出来,即使这个成绩没有门生与它对应,也要显示出来:
  1. //右外连接
  2. mysql> select * from stu right join exam on stu.id = exam.id;
  3. +------+------+------+-------+
  4. | id   | name | id   | grade |
  5. +------+------+------+-------+
  6. |    1 | jack |    1 |    56 |
  7. |    2 | tom  |    2 |    76 |
  8. | NULL | NULL |   11 |     8 |
  9. +------+------+------+-------+
  10. 3 rows in set (0.00 sec)
  11. //左外连接
  12. mysql> select * from exam left join stu on exam.id=stu.id;
  13. +------+-------+------+------+
  14. | id   | grade | id   | name |
  15. +------+-------+------+------+
  16. |    1 |    56 |    1 | jack |
  17. |    2 |    76 |    2 | tom  |
  18. |   11 |     8 | NULL | NULL |
  19. +------+-------+------+------+
  20. 3 rows in set (0.00 sec)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-10 01:37 , Processed in 0.079780 second(s), 30 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表