MySQL联表查询

按功能分

  • 内连接
    • 等值连接
    • 非等值连接
    • 自连接
  • 外连接
    • 左外连接
    • 右外连接
    • 全外连接
  • 交叉连接

1. 内连接(INNER JOIN)

获取所有的员工名和其对应的部门名

SELECT e.last_name, d.department_name
FROM employees e INNER JOIN departments d
		ON e.department_id = d.department_id;

查询部门个数>3城市名部门个数

SELECT city, COUNT(1) 部门个数
FROM departments d INNER JOIN locations l
		ON d.location_id = l.location_id
GROUP BY city
HAVING 部门个数 > 3;

查询员工名、部门名、工种名,并按部门名排序【三表连接

SELECT last_name, department_name, job_title
FROM employees e INNER JOIN departments d 
		ON e.department_id = d.department_id
	INNER JOIN jobs j
		ON e.job_id = j.job_id
ORDER BY department_name DESC;

2. 外连接

作用:查询一个表有另一个表没有的记录

然后我们可以分别使用内连接和外连接分别连接beautyboys这两张表,查看结果的差异:

此时我们可以获得如下几张表:

在这里插入图片描述

然后我们可以分别使用内连接和外连接分别连接beautyboys这两张表,查看结果的差异:

内连接:

SELECT *
FROM beauty b INNER JOIN boys y
	ON b.boyfriend_id = y.id;

在这里插入图片描述

外连接(左外):

SELECT *
FROM beauty b LEFT JOIN boys y
	ON b.boyfriend_id = y.id;

在这里插入图片描述

可以发现,当左表(即beauty表)的boyfriend_id字段找不到boys表中对应的id进行连接时,它也仍会保留这一记录,而右表(即boys表)的记录则全部设置为Null。

一句话来说,就是左表的数据不管是否满足连接条件,都至少会保留在最终查询集的一条记录之中。

查找男朋友不在男神表的女神名【左外连接】:

SELECT `name`, boyName
FROM beauty b LEFT JOIN boys y
	ON b.boyfriend_id = y.id
WHERE y.id IS NULL;

右外连接

SELECT `name`, boyName
FROM boys y RIGHT JOIN beauty b
	ON b.boyfriend_id=y.id
WHERE y.id IS NULL;

在这里插入图片描述

查询没有联系女神男生

SELECT `name`, boyName
FROM beauty b RIGHT JOIN boys y
	ON b.boyfriend_id=y.id
WHERE b.id IS NULL;

查询哪个部门 没有员工

SELECT department_name, COUNT(*)
FROM departments d LEFT JOIN employees e
	ON d.department_id = e.department_id
GROUP BY department_name
HAVING COUNT(*)=0;

在这里插入图片描述

posted @   蜡笔小新Belief  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示