1

假设我有这个模式。

Boats
_____
bid
bname

Reserves
________
sid
bid
date

Sailors
_______
sid
sname

我知道内部连接应该是关联的和可交换的,但我无法真正理解为什么。

给定查询:

SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Boats) NATURAL INNER JOIN Reserves

我认为这应该返回null,因为 Sailors 和 Boats 没有共同的领域,而:

SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Reserves) NATURAL INNER JOIN Boats

应该返回水手的名字和他们保留的船的名字。

请告诉我为什么内部连接应该是可交换的和关联的。

谢谢!

4

1 回答 1

0
SELECT sname, bname
FROM (Sailors NATURAL INNER JOIN Boats) NATURAL INNER JOIN Reserves

我认为这应该返回 null 因为 Sailors 和 Boats 没有公共字段,. . .

在 PostgreSQL中,两个没有公共列的表之间的自然连接的行为类似于交叉连接。

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);
名字 bname
--
一一
一二
一三
二一
二 二
二三
三一
三二
三三
于 2014-11-08T16:39:03.507 回答