JOIN
(и его варианты) являются операторами в предложении FROM
.Так что ваши запросы просто не имеют смысла.Вы используете оператор вне предложения SQL, где это имеет смысл.
Каждый запрос может записываться как:
select model, price
from (SELECT model, price FROM PC) p NATURAL JOIN
(SELECT model FROM Product WHERE maker ='B') b;
Однако я считаю NATURAL JOIN
мерзость, потому что она сопоставляет столбцы по именам , а не по явным отношениям внешнего ключа.Это использование немного лучше, чем в большинстве случаев.Код явно выбирает столбцы, поэтому код изолирован от «неожиданных» столбцов, которые портят логику.
Однако, на мой взгляд, это проще и понятнее:
select p.model, p.price
from pc p join
product pr
on p.model = pr.mode
where pr.maker = 'B';
Иexists
может быть еще яснее:
select p.model, p.price
from pc p join
where exists (select 1
from product pr
where p.model = pr.model and pr.maker = 'B'
);