我认识的人,+是指外部连接

SELECT *
FROM email a,email_types b
WHERE a.user_id  (+)     =10
  AND a.email_id(+)=b.email_enum;

SELECT *
FROM email a,email_types b
WHERE a.user_id      =10
  AND a.email_id(+)=b.email_enum;

a.user_id (+) = 10的含义是什么?这等于a.user_id =10,还是它们有不同的含义?
这两个查询有什么区别?
a.user_id (+) =10与哪个列匹配。值10与b表的列匹配吗?

最佳答案

最好通过将Oracle语法转换为标准SQL来解释:

SELECT *
FROM email a,email_types b
WHERE a.user_id  (+)     =10
  AND a.email_id(+)=b.email_enum;

相当于:
SELECT *
FROM email_types b
  LEFT JOIN email a ON a.email_id = b.email_enum AND a.user_id = 10;

这意味着“在电子邮件类型和电子邮件之间执行外部连接,但只考虑email表中user_id等于10的行”。它将返回email_types中的所有行和user_id = 10中的所有匹配电子邮件(如果有),如果该用户没有电子邮件,则不考虑email表中的任何行。
如果从(+)列的原始查询条件中删除user_id运算符,则它相当于:
SELECT *
FROM email_types b
  LEFT JOIN email a
         ON a.email_id = b.email_enum
WHERE a.user_id = 10;

由于外部联接表上的条件,将导致内部联接。

关于sql - 查询的含义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30749002/

10-11 22:31
查看更多