首页 > 解决方案 > 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);

标签: sqljoin

解决方案


这两个查询都为您提供了相同的结果。

  1. Join为您提供从两个表中获取数据的功能。试试下面的查询来理解。

    select *
    from employee e inner join
     works_for w
     on (e.id=w.employee_no);
    
  2. EXISTS or IN可以使用条件或子查询来检查主表中的数据是否在子查询中提供的表中可用。不管Join,它仅从主表中获取您的记录。尝试以下查询以了解

       select *
       from employee e
       where exists (select 1 from works_for w where w.employee_no=e.id);
    

也使用Joinor aSubquery取决于您的要求和查询性能。Join与子查询相比,可为您提供良好的性能。


推荐阅读