让我们说我有这个架构。
Boats
_____
bid
bname
Reserves
________
sid
bid
date
Sailors
_______
sid
sname
我知道内连接应该是关联的和可交换的,但我不能理解为什么。
鉴于查询:
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Boats) NATURAL INNER JOIN Reserves
我认为这应该返回null
,因为水手和船没有共同的领域,而:
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Reserves) NATURAL INNER JOIN Boats
应该返回水手的名字和他们保留的船名。
请告诉我为什么内连接应该是可交换的和关联的。
谢谢!
答案 0 :(得分:0)
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Boats) NATURAL INNER JOIN Reserves
我认为这应该从水手和船只返回null 没有共同的领域。 。
在PostgreSQL中,没有公共列的两个表之间的natural join表现得像交叉连接。
create table boats (
bid integer primary key,
bname varchar(15)
);
create table sailors (
sid integer primary key,
sname varchar(15)
);
insert into boats values (1, 'One'), (2, 'Two'), (3, 'Three');
insert into sailors values (1, 'One'), (2, 'Two'), (3, 'Three');
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Boats);
sname bname -- One One One Two One Three Two One Two Two Two Three Three One Three Two Three Three