在试图理解半连接的概念以及它与传统连接有何不同时,我遇到了困难.我已经试过一些文章了,但对解释不满意,有人能帮我理解一下吗?

推荐答案

简单的例子.让我们使用LEFT OUTER JOIN Select 有成绩的学生:

SELECT DISTINCT s.id
FROM  students s
      LEFT JOIN grades g ON g.student_id = s.id
WHERE g.student_id IS NOT NULL

现在,左半连接也是如此:

SELECT s.id
FROM  students s
WHERE EXISTS (SELECT 1 FROM grades g
              WHERE g.student_id = s.id)

后者通常更高效(取决于具体的DBMS和查询优化器).

Database相关问答推荐

为什么即使我的索引覆盖了 Select 中的所有列,但仍存在Heap Fetch?

MongoDB事务,回调API方法

如何使授权服务器与外部数据库保持同步?

如何正确创建mongo模型和客户端?

DynamoDB 扫描 - 具有相同分区键的项目按顺序返回

无法初始化数据库,出现错误无法连接到`host=db user=database=`:拨号错误(dial tcp xxxx: connect: connection refused)

生产中的超大型 Mnesia 表

PostgreSQL WHERE IN LIKE 查询

数据库模式 - location

如何将 MySQL Workbench 连接到 Amazon RDS?

Laravel 5 从 URL 获取 ID

如何在 MongoDB 和 PostgreSQL for GIS 之间进行 Select ?

使用 jQuery 动态填写表单值

是否有一个 postgres 命令来列出/删除所有materialized视图?

从 postgresql 转储文件填充 MySQL 数据库

PDO SQL 状态00000但仍然错误?

从 CSV 文件填充 Android 数据库?

是否有任何支持协议缓冲区的数据库?

Windows phone 7 的本地 Sql 数据库支持

用于 sql 表中的状态列的类型