Джон, вы используете синтаксис неявного соединения cf ansi SQL '89.
ГДЕ ПРИСОЕДИНЯЙТЕСЬ
SELECT Ssn, FName, LName, Address
FROM EMPLOYEE, DEPARTMENT
WHERE Dno = Dnumber
AND Dname = 'Research'
Вы не должны никогда использовать это, потому что это чертовски запутанно.
И это вызывает много ошибок, потому что это cross join
, если вы не будете осторожны.
Следующий синтаксис с использованием явных объединений cf ANSI SQL '92, который намного понятнее.
SELECT Ssn, FName, LName, Address
FROM EMPLOYEE
inner join DEPARTMENT on (employee.dnumber = department.dno)
WHERE Dname = 'Research'
Это также отвечает, почему вы не можете пропустить dnumber = dno
, , потому что это условие соединения
подзапрос
Подзапрос - это действительно соединение другими способами.
В общем, вы должны избегать подзапроса, потому что соединение происходит быстрее (90% времени)
Некоторым людям легче понять подзапросы. Я бы сказал, что если вы не вступаете в грок, то держитесь подальше от SQL!
Тем не менее, иногда вы делаете что-то сложное или странное для объединения, и тогда подзапрос является опцией.
Возвращаясь к вашему вопросу: , потому что подзапрос действительно является соединением, иными словами, вам необходимо это условие соединения, чтобы сделать соединение: -).