Внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true.
Пример 33 демонстрирует, каким образом можно получить список сотрудников, состоящих в должности “вице-президент”, а также названия их отделов.
SELECT first_name, last_name, department
FROM employee, department WHERE job_code = "VP"
В примере 33 запрос (без соединения) возвращает неверный результат, так как имеющиеся между таблицами связи не задействованы. Исходя из этого, появляется дублирование информации в результирующей таблице. Правильный результат дает запрос с использованием операции соединения.
Пример 34 демонстрирует, каким образом можно получить аналогичную информацию без дублирования.
SELECT first_name, last_name, department
FROM employee, department WHERE job_code = "VP"
AND employee.dept_no = department.dept_no
В приведенном выше примере 34 запросе использовался способ непосредственного указания таблиц с помощью их имен. Возможен, а иногда и просто необходим, также способ указания таблиц с помощью алиасов (псевдонимов). При этом алиасы определяются в предложении FROM запроса SELECT и представляют собой любой допустимый идентификатор, написание которого подчиняется таким же правилам, что и написание имен таблиц. Потребность в алиасах таблиц возникает тогда, когда названия столбцов, используемых в условиях соединения двух или более таблиц, совпадают, а названия таблиц имеют длинные названия.
Внутренние соединения. В некоторых задачах необходимо получить информацию, выбранную особым образом только из одной таблицы. Для этого используются так называемые самосоединения, или рефлексивные соединения. Это не отдельный вид соединения, а просто соединение таблицы с собой с помощью алиасов. Самосоединения полезны в случаях, когда нужно получить пары аналогичных элементов из одной и той же таблицы.
Пример 35 демонстрирует, каким образом можно получить список пар отделов с одинаковыми годовыми бюджетами.
SELECT d1.department, d2.department, d1.budget
FROM department d1, department d2
WHERE d1.budget = d2.budget AND d1.dept_no < d2.dept_no