Помощь в учёбе, очень быстро...
Работаем вместе до победы

Соединение в запросе нескольких таблиц

РефератПомощь в написанииУзнать стоимостьмоей работы

Можно было бы даже дополнить этот запрос финансовой таблицей для определения ежемесячных смет для каждого отдела. Select d. dept_name, e. emp_ last_ паше from emp e, dept d where d. dept_no = e. dept_no order by d. dept_no; Where c. start_date between '01-JAN-2003'and '31-DEC-2003'; DEPT_ NAME MONTH_NAME. Where tl. emp_id = t2. supervisor_emp_id order by 1,2; Supervisor subordinat brunner brown… Читать ещё >

Соединение в запросе нескольких таблиц (реферат, курсовая, диплом, контрольная)

Если бы всегда можно было выбирать нужные данные только из одной таблицы (как это было сделано в предыдущих примерах), вам не пришлось бы читать всю эту книгу. В большинстве случаев, в одном запросе нужно выбирать данные из нескольких таблиц. В качестве общего правила можно указать, что чем меньше запросов должна выполнить прикладная программа, тем более эффективно она будет работать.

Можно выбирать данные из нескольких таблиц, указав их во фразе FROM и используя фразу WHERE для определения условия соединения или связи между таблицами. Например, для создания отчета, в котором будут распечатаны все отделы и их служащие, используйте следующий запрос:

select d. dept_name, e. emp_ last_ паше from emp e, dept d where d. dept_no = e. dept_no order by d. dept_no;

DEPT_ NAME EMPJLASTJNAME.

ACCOUNTING ADAMS.

ACCOUNTING HERS HEY.

ACCOUNTING ANDERSON.

ACCOUNTING RACCIO.

HOSPITAL SERVICES BRUNNER.

HOSPITAL SERVICES HEIMER.

HOSPITAL SERVICES BROWN.

HOSPITAL SERVICES SMITH.

BROADCASTOPERATIONS JONES.

BROADCAST OPERATIONS 0 ' BRIEN.

BROADCAST OPERATIONS GLARDINA.

CONSULTINGSERVICES FULLER.

CONSULTINGSERVICES LUNDY.

CONSULTINGSERVICES BEECHER.

CONSULTINGSERVICES MITTLER.

CONSULTINGSERVICES CANNELL.

CONSULTINGSERVICES NEUMANN.

CONSULTINGSERVICES ZAFLAN.

CONSULTINGSERVICES NEWTON.

SALES FARRELL.

SALES MATTEO.

SALES SIM.

SALES ANNUNZIATO.

QUALITY CONTROL GOLDSMITH.

QUALITY CONTROL QUALITY CONTROL.

SMOTHERS.

SMYTHE.

В этом примере связь между двумя таблицами определена с использованием в каждой таблице номера отдела. Номер отдела определен как первичный ключ для таблицы DEPT. Две таблицы могут быть соединены с использованием ссылки на внешний ключ из таблицы ЕМР. Данное условие представляет связь «главныйподчиненный» (или «родительский-дочерний»)между двумя таблицами. Это наиболее распространенный способ, посредством которого могут быть соединены таблицы. При этом данные становятся связанными отношением «один ко многим» .

Без задания условия соединения данные таблицы соединились бы в виде декартова произведения, когда все строки в одной таблице соединены со всеми строками в другой таблице. Например, если в каждом из пяти отделов работает 100 служащих, то в результате должно было получиться 500 строк. В этом случае декартово произведение было бы нежелательным результатом. Однако в некоторых ситуациях получение декартова произведения может привести к резкому повышению производительности. Например, если несколько запросов возвращают только одну строку, можно оформить их соединение посредством декартова произведения, чтобы в одном запросе получить одну строку. Этот метод значительно повышает производительность.

Декартово произведение можно также использовать для подготовки матрицы записей, когда требуется соединить все строки двух таблиц. В следующем примере этот тип запроса в календарной таблице для каждого отдела вырабатывает по одной строке для каждого месяца:

select d. dept name, c. month name.

from dept d, calendar c.

where c. start_date between '01-JAN-2003'and '31-DEC-2003'; DEPT_ NAME MONTH_NAME.

ACCOUNTING JANUARY.

ACCOUNTING FEBRUARY.

ACCOUNTING MARCH.

ACCOUNTING APRIL.

ACCOUNTING MAY.

ACCOUNTING JUNE.

ACCOUNTING JULY.

ACCOUNTING AUGUST.

ACCOUNTING SEPTEMBER.

ACCOUNTING OCTOBER.

ACCOUNTING NOVEMBER.

ACCOUNTING DECEMBER.

PERSONNEL JANUARY.

PERSONNEL FEBRUARY.

Можно было бы даже дополнить этот запрос финансовой таблицей для определения ежемесячных смет для каждого отдела.

Помимо возможности соединять в запросе несколько таблиц можно также присоединить таблицу к самой себе, select tl. emp last_name SUPERVISOR, t2. emp last name SUBORDINATE from emp tl, emp t2.

where tl. emp_id = t2. supervisor_emp_id order by 1,2;

SUPERVISOR SUBORDINAT BRUNNER BROWN.

BRUNNER HEIMER.

BRUNNER SMITH.

GIARDINA FULLER.

GIAROINA JONES.

GIARDINA NEWTON.

GIARDINA OBRIEN.

GOLDSMITH SMOTHERS.

GOLDSMITH SMYTHE.

LUNDY BEECHER.

LUNDY CANNELL.

LUNDY MITTLER.

LUNDY NEUMANN.

LUNDY ZAFIAN.

MATTEO ANNUNZIATO.

MATTEO FARRELL.

MATTEO SXM.

RACCIO ADAMS.

RACCIO ANDERSON.

RACCIO HERSHEY.

RUSSO RACCIO.

Используя вместо имени таблицы псевдоним, Oracle обрабатывает каждую таблицу так, как если бы она была отдельным объектом. Таким образом, предыдущий запрос выберет все имена руководителей для каждого служащего. В этом запросе обратите также внимание на фразу order by, столбцы в которой указаны в соответствии с их относительным положением в запросе, а не посредством явного объявления имен столбцов. Корпорация Oracle утверждает, что это соглашение в будущих выпусках RDBMS будет отменено, так что постарайтесь не использовать этот метод. Вместо этого, начиная с версии 7.2, в фразе order by можно указывать псевдоним столбца.

Показать весь текст
Заполнить форму текущей работой