Читайте также:
|
|
Внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true.
SELECT first_name, last_name, department
FROM employee, department
WHERE job_code = "VP"
получить список сотрудников, состоящих в должности "вице-президент", а также названия их отделов
FIRST_NAME | LAST_NAME | DEPARTMENT |
Robert | Nelson | Corporate Headquarters |
Mary S. | MacDonald | Corporate Headquarters |
Robert | Nelson | Sales and Marketing |
Mary S. | MacDonald | Sales and Marketing |
Robert | Nelson | Engineering |
Mary S. | MacDonald | Engineering |
Robert | Nelson | Finance |
Mary S. | MacDonald | Finance |
Этот запрос ("без соединения") возвращает неверный результат, так как имеющиеся между таблицами связи не задействованы. Отсюда и появляется дублирование информации в результирующей таблице. Правильный результат дает запрос с использованием операции соединения:
SELECT first_name, last_name, department
получить список сотрудников, состоящих в должности "вице-президент", а также названия их отделов
FIRST_NAME | LAST_NAME | DEPARTMENT |
Robert | Nelson | Engineering |
Mary S. | MacDonald | Sales and Marketing |
В вышеприведенном запросе использовался способ непосредственного указания таблиц с помощью их имен. Возможен (а иногда и просто необходим) также способ указания таблиц с помощью алиасов (псевдонимов). При этом алиасы определяются в предложении FROM запроса SELECT и представляют собой любой допустимый идентификатор, написание которого подчиняется таким же правилам, что и написание имен таблиц. Потребность в алиасах таблиц возникает тогда, когда названия столбцов, используемых в условиях соединения двух (или более) таблиц, совпадают, а названия таблиц слишком длинны...
Замечание 1: в одном запросе нельзя смешивать использование написания имен таблиц и их алиасов.
Замечание 2: алиасы таблиц могут совпадать с их именами.
получить список сотрудников, состоящих в должности "вице-президент", а также названия их отделов
FIRST_NAME | LAST_NAME | DEPARTMENT |
Robert | Nelson | Engineering |
Mary S. | MacDonald | Sales and Marketing |
А вот пример запроса, соединяющего сразу три таблицы:
SELECT first_name, last_name, job_title,
department
FROM employee e, department d, job j
WHERE d.mngr_no = e.emp_no
AND e.job_code = j.job_code
AND e.job_grade = j.job_grade
AND e.job_country = j.job_country
получить список сотрудников с названиями их должностей и названиями отделов
FIRST_NAME | LAST_NAME | JOB_TITLE | DEPARTMENT |
Robert | Nelson | Vice President | Engineering |
Phil | Forest | Manager | Quality Assurance |
K. J. | Weston | Sales Representative | Field Office: East Coast |
Katherine | Young | Manager | Customer Support |
Chris | Papadopoulos | Manager | Research and Development |
Janet | Baldwin | Sales Co-ordinator | Pacific Rim Headquarters |
Roger | Reeves | Sales Co-ordinator | European Headquarters |
Walter | Steadman | Chief Financial Officer | Finance |
В данном примере последние три условия необходимы в силу того, что первичный ключ в таблице JOB состоит из трех полей - см. рис.1.
Мы рассмотрели внутренние соединения с использованием стандарта ANSI-89. Теперь опишем новый (ANSI-92) стандарт:
SELECT first_name, last_name, department
FROM employee e JOIN department d
ON e.dept_no = d.dept_no
AND department = "Customer Support"
WHERE last_name starting with "P"
получить список служащих (а заодно и название отдела), являющихся сотрудниками отдела "Customer Support", фамилии которых начинаются с буквы "P"
Дата добавления: 2014-12-15; просмотров: 111 | Поможем написать вашу работу | Нарушение авторских прав |