Давайте посмотрим только на ваши! = Сравнения. Внутренний выбор возвращает все записи, которые не равны '09E ...' и не равны '60F ...'
Затем вы запрашиваете все записи, которых нет в этом списке. Поэтому каждая запись в этом результате должна иметь либо «09E ...», либо «60F ...»
Затем вы добавляете предложение WHERE в конце, которое исключает все записи, которые равны '09E ...' и '60F ...'. Это оставляет вас ни с чем.
Рассмотрим этот пример:
create table Emp ( ID varchar(30), Name varchar(30) )
insert into Emp ( ID, Name ) values
('314', 'Peter'),
('09E', 'Fred' ),
('ELD', 'Wally'),
('60F', 'Mary' ),
('AOK', 'Alice')
-- List rows other than IDs 09E and 60F
select * from Emp where ID != '09E' and ID !='60F'
-- Result is:
-- ID Name
-- 314 Peter
-- ELD Wally
-- AOK Alice
-- List rows that are NOT in the result set shown above
select * from Emp
where ID not in ( select ID from Emp where ID != '09E' and ID !='60F' )
-- Result is:
-- ID Name
-- 09E Fred
-- 60F Mary
-- List all the rows above, but exclude 09E and 60F
select * from Emp
where ID not in ( select ID from Emp where ID != '09E' and ID !='60F' )
and ID != '09E' and ID != '60F'
-- Result is empty
-- You've excluded all the records from the last results.
Также нужно быть осторожным, добавляя два члена вида X = A и X = B
create table Job ( Position varchar(30) )
insert into Job ( Position ) values
( 'CEO' ),
( 'Technician' ),
( 'Electrician' ),
( 'Manager' ),
( 'Secretary' )
select * from Job
where Position = 'Technician'
and Position = 'Manager'
-- Result set is empty
Вы можете подумать, что результат должен иметь две строки. Но рассмотрим второй ряд. Position = 'Technician' - это true, а Position = 'Manager' - false. Но вы запрашиваете только записи, в которых первое верно, а второе также верно.