sql - Inner Join x Exists - 有区别吗
问题描述
我在 MySQL 数据库上有两个表:
mysql> select * from employee;
+------+---------+
| id | name |
+------+---------+
| 2 | Olavo |
| 3 | Ricardo |
| 1 | Ricardo |
+------+---------+
3 rows in set (0,00 sec)
mysql> select * from works_for;
+-------------+--------------+
| employee_no | company_name |
+-------------+--------------+
| 2 | Luz |
| 1 | Vale |
+-------------+--------------+
2 rows in set (0,00 sec)
我需要知道这两个查询之间是否有区别。在哪种情况下我应该使用每一个?
select e.name
from employee e inner join
works_for w
on (e.id=w.employee_no);
select e.name
from employee e
where exists (select 1 from works_for w where w.employee_no=e.id);
解决方案
这两个查询都为您提供了相同的结果。
Join
为您提供从两个表中获取数据的功能。试试下面的查询来理解。select * from employee e inner join works_for w on (e.id=w.employee_no);
EXISTS or IN
可以使用条件或子查询来检查主表中的数据是否在子查询中提供的表中可用。不管Join
,它仅从主表中获取您的记录。尝试以下查询以了解select * from employee e where exists (select 1 from works_for w where w.employee_no=e.id);
也使用Join
or aSubquery
取决于您的要求和查询性能。Join
与子查询相比,可为您提供良好的性能。
推荐阅读
- javascript - 如何更改 Sweet Alert 2 中聚焦/按下按钮的颜色?
- c# - C#:如何理解这个内存转储的结果
- java - 如何在 Jdeveloper 12c 中将自定义摆动组件添加到数据控件面板?
- php - 获取每个用户发送给用户的最新消息
- java - 为什么我在 jButton1MouseClicked 处收到 java.lang.NullPointerException 并访问 $300?
- xml - 在 XML/Xpath 中转义引号的具体问题
- c - 如何在没有 CubeMX 的 STM32F3 上实现 PWM?
- assembly - MASM & Java 从二维数组中获取值
- c++ - “&varname == varname”是什么意思?
- python - 为什么要在连接到 SQL 后在 python 中使用函数 cursor 和 connection close?