我是所有这些sql语句的新手,我对连接概念的全部功能非常了解....
所以我有一个数字可以快速显示概念
这里我有两个表Table-A和Table-B
我只需要知道如何分别获得这三种颜色。
与sql语句类似,仅在蓝色区域中获取内容,但不在绿色区域中获取内容。
请帮我解决这些问题。
非常感谢你们......
答案 0 :(得分:2)
INNER JOIN
在每个表中至少返回一个匹配项。
LEFT JOIN
返回'left'表中的所有行(基本上是FROM
语句中指定的行),无论是否匹配,如果没有匹配,则返回{{1}或类似的。
NULL
与RIGHT JOIN
相反,因此返回“右”表中的所有行(基本上是在单词LEFT JOIN
之后和JOIN
之前指定的行)无论是否匹配,如果没有匹配,则返回ON
或类似的匹配。
NULL
就像FULL JOIN
和LEFT JOIN
一样,其中返回了两个表中的所有记录,它将显示来自两个表的匹配和非匹配记录
你的图表对我来说是诚实的是混淆了它的彩色圆圈而不是数据表,所以我无法将它与连接的概念相匹配但是......
假设你有表RIGHT JOIN
包含有关颜色(id,name,rgb,hex)和包含人(id,name,age,favourite_colour)的表a
的数据。 b
字段包含表favourite_colour
中记录(颜色)的id
。您可以说表格a
在上述字段中与表格b
有多对一关系。现在要获得(加入)表b
中所有人喜欢的颜色,我们可以做类似
a
如果表SELECT a.*, b.* FROM a LEFT JOIN b ON b.id = a.favourite_colour;
中的某个人没有喜欢的颜色,那么会返回a
,如果您使用了NULL
,则只能获得喜欢颜色的人的记录,如果您有用户INNER JOIN
,无论是否有人喜欢,您都可以获得所有颜色,如果您使用过RIGHT JOIN
,那么您会看到所有人都喜欢的颜色匹配,所有人都没有匹配最喜欢的颜色和所有不喜欢的颜色。
希望这个帮助: - )
修改:在DOK对该问题的评论中阅读了link provided这些圈子是有道理的:)
答案 1 :(得分:1)
et blue和red是两个表
要检索绿色:
SELECT * FROM blue
INNER JOIN red
ON blue.name = red.name;
要检索蓝色:
SELECT * FROM blue
LEFT OUTER JOIN red
ON blue.name = red.name
WHERE red.id IS null;
要检索红色:
SELECT * FROM blue
LEFT OUTER JOIN red
ON blue.name =red.name
WHERE blue.id IS null
答案 2 :(得分:0)
让蓝色和红色成为两个表
检索绿色: select * from blue intersect select * from red;
检索蓝色; select * from blue减去select * from red;
检索红色; select * from red minus select * from blue;