如果我有学生和他们的顾问 我想用它的顾问打印每个学生,即使谁也没有...所以我已经离开了学生..
select student_name,nvl(adviser_name,'null')
from student left join adviser
on student.adv_id=adviser.adv_Id
现在这是一个左连接..我并不总是记得加入作为第一个解决方案>>>我总是将select语句作为第一选择,那么如何将以前的sql命令更改为单个或嵌套的select命令?
答案 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加入。