Структурированный язык запросов – SQL, страница 38
Результат этого запроса будет такой:
Гриценко Котенко 0.00
Нагорный Поляков 25.50
В частности, Гриценко предшествует Котенко в алфавитном порядке,
поэтому комбинация удовлетворяет обоим условиям предиката и появляется
в выводе. Если та же самая комбинация появляется в обратном порядке, т.е.
Котенко в псевдониме первой таблицы сравнивается с Гриценко во второй
таблице, то второе условие не выполняется. По аналогичной причине в вывод
не попадает сравнение с самим собой.
Если же возникла необходимость сравнения строк с ними же, то в
запросах стоит использовать < = вместо <.
Таким образом, можно использовать эту особенность SQL для
проверки определенных видов ошибок. Например, если считать, что учебный
предмет может вести только один преподаватель, то всякий раз в таблице
PREDMET необходима проверка на это условие. При этом каждый раз, когда
код предмета появляется в таблице PREDMET, он должен совпадать с
соответствующим номером преподавателя. Следующая команда будет
определять любые несогласованности в этой области:
SELECT FIRST.PNUM, FIRST.TNUM,
SECOND.PNUM, SECOND.TNUM FROM PREDMET FIRST, PREDMET
SECOND WHERE FIRST.PNUM = SECOND.PNUM AND FIRST.TNUM
<> SECOND.TNUM;
Вывода для данного примера не будет, т.к. данных, удовлетворяющих
предикату в рассматриваемой таблице нет. Логика этого запроса достаточно
проста: из таблицы будет выбираться очередная строка и запоминаться под
первым псевдонимом. После этого SQL начнет проверять ее в комбинации с
каждой строкой таблицы под вторым псевдонимом. Если комбинация строк
удовлетворяет предикату, то она выбирается для вывода, т.е. если будет
найден учебный предмет, у которого выяснится несовпадение номера
преподавателя в таблице под первым и вторым псевдонимом.
Объединение таблицы с собой - это наиболее часто встречающаяся
ситуация, когда используются псевдонимы, однако их можно использовать в
любое время для создания альтернативных имен для таблиц в запросе,
например, в случае, если таблицы имеют очень длинные и сложные имена.
Более того, допускается использовать любое число псевдонимов для одной
таблицы в запросе. Например, для назначения стипендии на следующий
семестр необходимо просмотреть все варианты комбинаций студентов с
разными размерами стипендии: 25.50. 17.00 и 0.00 у. е. Тогда такой запрос
будет выглядеть следующим образом: