6/10/2016

Объединение таблиц

Cross Join


Оператор перекресного соединения (CROSS JOIN) соединяет две таблицы в одну. Порядок таблиц для оператора не важен поскольку оператор симетричен.


Пример 1.
 SELECT
  E.first_name, E.last_name, D.name
 FROM
  emp E, dept D;

  FIRST_NAME               LAST_NAME                 NAME 
 ------------------------ ------------------------- ---------------
 Carmen                   Velasquez                 Finance
 LaDoris                  Ngao                      Finance
 Midori                   Nagayama                  Finance
 Mark                     Quick-To-See              Finance
 Audry                    Ropeburn                  Finance
 ...                      ...                       ...
 Vikram                   Palet                     Administration
 Chad                     Newman                    Administration
 Alexander                Markarian                 Administration
 Eddie                    Chang                     Administration
 Radha                    Palet                     Administration
 Bela                     Dancs                     Administration
 Sylvie                   Schwartz                  Administration

Комментарий:
Результатом является 300 записей (25 записей с таблицы EMP умножить на 15 записей с таблицы DEPT ). Мы выбрали с таблицы EMP имена и фамилии работников, а с таблицы DEPT, названия департаментов и соединили эти две таблицы таким образом, что каждое название департамента приписано к кажному работнику.

Inner Join

Оператор внутренного соединения INNER JOIN. Порядок таблиц для оператора не важен, потому что является симетричным. Каждая строка первой таблицы сопоставляется с каждой строкой второй таблицы, в результате для получения соединенной таблицы проверяется условие соединения. Если условие истинно, в таблицу результатов добавляется соответствующая строка. 




Пример 2.
 SELECT
  emp.first_name, emp.last_name, dept.name
 FROM
  emp, dept 
 WHERE
  emp.dept_id = dept.id;

 FIRST_NAME               LAST_NAME                NAME
 ------------------------ ------------------------ ---------------
 Carmen                   Velasquez                Administration
 LaDoris                  Ngao                     Operations
 Midori                   Nagayama                 Sales
 Mark                     Quick-To-See             Finance
 Audry                    Ropeburn                 Administration
 Molly                    Urguhart                 Operations
 Roberta                  Menchu                   Operations
 Ben                      Biri                     Operations
 Antoinette               Catchpole                Operations
 Marta                    Havel                    Operations
 Colin                    Magee                    Sales
 Henry                    Giljum                   Sales
 Yasmin                   Sedeghi                  Sales
 Mai                      Nguyen                   Sales
 Andre                    Dumas                    Sales
 Elena                    Maduro                   Operations
 George                   Smith                    Operations
 Akira                    Nozaki                   Operations
 Vikram                   Palet                    Operations
 Chad                     Newman                   Operations
 Alexander                Markarian                Operations
 Eddie                    Chang                    Operations
 Radha                    Palet                    Sales
 Bela                     Dancs                    Operations
 Sylvie                   Schwartz                 Operations

Комментарий:
Соединяем таблицы по определенном условии (обычно первичный ключ в одной таблице с внешним ключем во второй).

Theta Join


В этом типе соединения применяется условие на входе отношения, а затем используется выбраные строки, которые будут объединены и включены в вывод. Этот тип соединения довольно редко используется на практике.



Пример 3
 SELECT
  E.title, J.name, E.first_name, E.last_name, J.salary_min||' --     '||J.salary_max „Interval”, E.salary
 FROM
 emp E, job J
 WHERE
  E.salary BETWEEN J.salary_min AND J.salary_max
 ORDER BY
  E.last_name;

 TITLE               NAME                 FIRST_NAME LAST_NAME Interval SALARY
 -----------------   ------------------   ---------- --------- -----------------
 Warehouse Manager   Stock Clerk          Ben        Biri      700 -- 1200  1100
 Warehouse Manager   Warehouse Manager    Ben        Biri      1000 -- 1500 1100
 Warehouse Manager   Sales Representative Antoinette Catchpole 1200 -- 1400 1300
 Warehouse Manager   Warehouse Manager    Antoinette Catchpole 1000 -- 1500 1300
 Stock Clerk         Stock Clerk          Eddie      Chang     700 -- 1200  800
 Stock Clerk         Stock Clerk          Bela       Dancs     700 -- 1200  860
 SalesRepresentative Warehouse Manager    Andre      Dumas     1000 -- 1500 1450
 SalesRepresentative Warehouse Manager    Henry      Giljum    1000 -- 1500 1490
 Warehouse Manager   Sales Representative Marta      Havel     1200 -- 1400 1307
 Warehouse Manager   Warehouse Manager    Marta      Havel     1000 -- 1500 1307
 Stock Clerk         Sales Representative Elena      Maduro    1200 -- 1400 1400
 Stock Clerk         Warehouse Manager    Elena      Maduro    1000 -- 1500 1400
 SalesRepresentative Sales Representative Colin      Magee     1200 -- 1400 1400
 SalesRepresentative Warehouse Manager    Colin      Magee     1000 -- 1500 1400
 Stock Clerk         Stock Clerk          Alexander  Markarian 700 -- 1200  850
 Warehouse Manager   Sales Representative Roberta    Menchu    1200 -- 1400 1250
 Warehouse Manager   Warehouse Manager    Roberta    Menchu    1000 -- 1500 1250
 VP, Sales           Sales Representative Midori     Nagayama  1200 -- 1400 1400
 VP, Sales           Warehouse Manager    Midori     Nagayama  1000 -- 1500 1400
 Stock Clerk         Stock Clerk          Chad       Newman    700 -- 1200  750
 VP, Operations      Warehouse Manager    LaDoris    Ngao      1000 -- 1500 1450
 Stock Clerk         Stock Clerk          Akira      Nozaki    700 -- 1200  1200
 Stock Clerk         Warehouse Manager    Akira      Nozaki    1000 -- 1500 1200
 Stock Clerk         Sales Representative Akira      Nozaki    1200 -- 1400 1200
 Stock Clerk         Stock Clerk          Vikram     Palet     700 -- 1200  795
 Stock Clerk         Stock Clerk          Radha      Palet     700 -- 1200  795
 VP, Finance         Warehouse Manager    Mark    Quick-To-See 1000 -- 1500 1450
 Stock Clerk         Stock Clerk          Sylvie     Schwartz  700 -- 1200  1100
 Stock Clerk         Warehouse Manager    Sylvie     Schwartz  1000 -- 1500 1100
 Stock Clerk         Stock Clerk          George     Smith     700 -- 1200  940
 Warehouse Manager   Stock Clerk          Molly      Urguhart  700 -- 1200  1200
 Warehouse Manager   Sales Representative Molly      Urguhart  1200 -- 1400 1200
 Warehouse Manager   Warehouse Manager    Molly      Urguhart  1000 -- 1500 1200
 President           President            Carmen     Velasquez 2000 -- 4000 2500

Комментарий: 
В примере отображается список сотрудников, их должности и заработная плата. Зароботная плата выбрана в результате ограниченния из таблицы JOB.

Self Join


Этот тип соединения отличается тем, что выборка выполняется из одной и той же таблице для нескольких условий.

Пример 4.
 SELECT
  E1.last_name, E1.title, E2.last_name, E2.title FROM
 emp E1, emp E2 WHERE
  E1.manager_id = E2.id;

 LAST_NAME      TITLE                    LAST_NAME             TITLE
 -------------- ------------------------ --------------------- ------------------
 Ngao           VP, Operations           Velasquez             President
 Nagayama       VP, Sales                Velasquez             President
 Quick-To-See   VP, Finance              Velasquez             President
 Ropeburn       VP, Administration       Velasquez             President
 Urguhart       Warehouse Manager        Ngao                  VP, Operations
 Menchu         Warehouse Manager        Ngao                  VP, Operations
 Biri           Warehouse Manager        Ngao                  VP, Operations
 Catchpole      Warehouse Manager        Ngao                  VP, Operations
 Havel          Warehouse Manager        Ngao                  VP, Operations
 Magee          Sales Representative     Nagayama              VP, Sales
 Giljum         Sales Representative     Nagayama              VP, Sales
 Sedeghi        Sales Representative     Nagayama              VP, Sales
 Nguyen         Sales Representative     Nagayama              VP, Sales
 Dumas          Sales Representative     Nagayama              VP, Sales
 Maduro         Stock Clerk              Urguhart              Warehouse Manager
 Smith          Stock Clerk              Urguhart              Warehouse Manager
 Nozaki         Stock Clerk              Menchu                Warehouse Manager
 Palet          Stock Clerk              Menchu                Warehouse Manager
 Newman         Stock Clerk              Biri                  Warehouse Manager
 Markarian      Stock Clerk              Biri                  Warehouse Manager
 Chang          Stock Clerk              Catchpole             Warehouse Manager
 Palet          Stock Clerk              Catchpole             Warehouse Manager
 Dancs          Stock Clerk              Havel                 Warehouse Manager
 Schwartz       Stock Clerk              Havel                 Warehouse Manager

Комментарий:
В первом столбце показываем фамилию сотрудников, во втором должность на которой работает, в третем столбце фамилия начальника и в четвертому должность на которой работает. Обратите внимание, что, когда в предложении WHERE изменить условие E2.manager_id = E1.id, получим в результате другую сортировку данных. В первых двух столбцах будут данные начальства а в остальных двох данные работников.

Outer Joins


Оператор внешнего соединения OUTER JOIN. Порядок таблиц для оператора важен, поскольку оператор не является симметричнымСуществуют три основных типа внешних соединений:
  • FULL Outer Joins
  • LEFT Outer Joins
  • RIGHT Outer Joins


FULL Outer Joins

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



Пример 5.
 SELECT D.id, D.name, E.first_name, E.last_name
 FROM dept D, emp E
 WHERE D.id = E.dept_id

 ID         NAME                  FIRST_NAME        LAST_NAME
 ---------- --------------------- ----------------- ---------------
 10         Finance               Mark              Quick-To-See
 31         Sales                 Midori            Nagayama
 31         Sales                 Colin             Magee
 32         Sales                 Henry             Giljum
 33         Sales                 Yasmin            Sedeghi
 34         Sales                 Mai               Nguyen
 34         Sales                 Radha             Palet
 35         Sales                 Andre             Dumas
 50         Administration        Carmen            Velasquez
 50         Administration        Audry             Ropeburn

Комментарий:
Ряды отношений, которые не имеют аналогов, удовлетворяющих условию вызова - не отображаются. В результате мы "теряем" информацию о роботниках которые не отнесены к конкретному отделу.

LEFT Outer Join

Левое внешнее соединение возвращает записи, которые пересекаются, наряду с записями с левой таблицы и не имеют каких-либо присвоеных записей из таблицы справа.







Пример 6.
 SELECT D.id, D.name, E.first_name, E.last_name
 FROM dept D, emp E
 WHERE D.id(+) = E.dept_id

 ID         NAME               FIRST_NAME           LAST_NAME
 ---------- ------------------ -------------------- -------------
 10         Finance            Mark                 Quick-To-See
 31         Sales              Midori               Nagayama
 31         Sales              Colin                Magee
 32         Sales              Henry                Giljum
 33         Sales              Yasmin               Sedeghi
 34         Sales              Mai                  Nguyen
 34         Sales              Radha                Palet
 35         Sales              Andre                Dumas
 50         Administration     Carmen               Velasquez
 50         Administration     Audry                Ropeburn
                               LaDoris              Ngao
                               Molly                Urguhart
                               Roberta              Menchu
                               Elena                Maduro
                               Akira                Nozaki
                               Chad                 Newman
                               Eddie                Chang
                               Sylvie               Schwartz
                               Bela                 Dancs
                               Alexander            Markarian
                               Vikram               Palet
                               George               Smith
                               Ben                  Biri
                               Antoinette           Catchpole
                               Marta                Havel

Комментарий:
В данном примере мы возвращаем все ряды отношений, которые удовлетворяют условие вызова и все остальные записи которые есть в таблице EMP.

RIGHT Outer Joins

Правое внешнее соединение по существу такое же, как левое, но с дополнением правой таблицы.






Пример 7.
 SELECT D.id, D.name, E.first_name, E.last_name
 FROM dept D, emp E
 WHERE D.id = E.dept_id(+)

 ID         NAME            FIRST_NAME           LAST_NAME
 ---------- --------------- -------------------- ----------------
 10         Finance         Mark                 Quick-To-See
 31         Sales           Midori               Nagayama
 31         Sales           Colin                Magee
 32         Sales           Henry                Giljum
 33         Sales           Yasmin               Sedeghi
 34         Sales           Mai                  Nguyen
 34         Sales           Radha                Palet
 35         Sales           Andre                Dumas
 41         Operations
 42         Operations
 43         Operations
 44         Operations
 45         Operations


Комментарий:
В данном примере мы возвращаем все ряды отношений, которые удовлетворяют условие вызова и все остальные записи которые есть в таблице DEPT.

Комментариев нет :

Отправить комментарий