【MySQL】第十二弹---表连接详解:从内连接到外连接
- 人工智能
- 2025-09-15 01:54:02

✨个人主页: 熬夜学编程的小林
💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】【MySQL】
目录
1.表的内连和外连
1.1 内连接
1.2 外连接
1.2.1 左外连接
1.2.1 右外连接
1.3 实战OJ
1.表的内连和外连
表的连接分为内连和外连。
1.1 内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
语法:
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)使用内连接
# 方式一:使用and连接条件 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.01 sec) # 方式二:使用where条件(更好理解,先新建表再条件查询) 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.2 外连接外连接分为左外连接和右外连接。
1.2.1 左外连接如果联合查询,左侧的表完全显示我们就说是左外连接。
语法:
select 字段名 from 表名1 left join 表名2 on 连接条件案例:
新建两张表
学生表
# 创建学生表 mysql> create table stu (id int, name varchar(30)); Query OK, 0 rows affected (0.06 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.06 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.01 sec) # 插入数据 mysql> insert into exam values(1, 56),(2,76),(11, 8); Query OK, 3 rows affected (0.01 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) 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来学生表的内容要全部显示出来,使用左外连接。
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)在外连接中,有的信息直接打印,没有的信息使用NULL打印。
1.2.1 右外连接如果联合查询,右侧的表完全显示我们就说是右外连接。
语法:
select 字段 from 表名1 right join 表名2 on 连接条件;案例:
对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来把成绩表都打印出来,使用右外连接。
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)也可以使用左外连接,将成绩表作为左表。
mysql> select * from exam left join stu on exam.id = stu.id; +------+-------+------+------+ | id | grade | id | name | +------+-------+------+------+ | 1 | 56 | 1 | jack | | 2 | 76 | 2 | tom | | 11 | 8 | NULL | NULL | +------+-------+------+------+ 3 rows in set (0.00 sec) 1.3 实战OJRank Scores
Exchange Seats
【MySQL】第十二弹---表连接详解:从内连接到外连接由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【MySQL】第十二弹---表连接详解:从内连接到外连接”
上一篇
Sat-nerf深度损失