我可以在一个或多个select语句中重写左连接语句

时间:2015-04-04 05:04:52

标签: sql oracle left-join

如果我有学生和他们的顾问 我想用它的顾问打印每个学生,即使谁也没有...所以我已经离开了学生..

select student_name,nvl(adviser_name,'null')
from student left join adviser 
on student.adv_id=adviser.adv_Id

现在这是一个左连接..我并不总是记得加入作为第一个解决方案>>>我总是将select语句作为第一选择,那么如何将以前的sql命令更改为单个或嵌套的select命令?

1 个答案:

答案 0 :(得分:1)

tldr;只需使用OUTER连接即可。

from x,y只是撰写from x cross join y的另一种方式;并且CROSS连接导致Cartesian product - 建立表之间关系的WHERE限制使其等效于具有等效连接ON条件的正常[INNER] JOIN。

  

..笛卡尔积是一种数学运算,它从多组中返回一组(或产品集或简称产品)。也就是说,对于集合A和B,笛卡尔乘积A×B是所有有序对(a,b)的集合,其中a∈A和b∈B

也就是说,与[OUTER] LEFT连接不同,CROSS连接不能“组成空白记录”,因为它们既不存在于A也不存在。

因此,必须合成(即,与包含的派生表连接)“丢失”记录之前(或之后,我认为)应用CROSS联接,这导致使用一个OUTER连接来创建派生表..

请参阅this answer了解可视化结果的图形(但非维恩图)方法;请注意,NULL是与OUTER连接一起引入;不是INNER或CROSS加入 - 或假装是INNER加入的CROSS加入。