Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

Join (SQL)



План:


Введення

Правильний заголовок цієї статті - JOIN . Він показаний некоректно через технічні обмеження.

JOIN - оператор мови SQL, що дозволяє з'єднувати записи з двох таблиць реляційної бази даних. Входить в розділ FROM оператора SELECT і окремо від нього не використовується.

Оператор JOIN є реалізацією операції з'єднання реляційної алгебри.


1. Опис оператора

 SELECT  FIELD  [  , ...  n  ]  FROM  Table1  {  INNER  |  {  LEFT  |  RIGHT  |  FULL  }  OUTER  |  CROSS  }  JOIN  Table2  ON  <  condition  > 

У більшості СУБД при вказівці слів LEFT, RIGHT, FULL слово OUTER можна опустити. Слово INNER також у більшості СУБД можна опустити.

У загальному випадку СУБД при виконанні з'єднання перевіряє умову condition. Для CROSS JOIN умова не вказується.

Для перехресного з'єднання (декартова твори) CROSS JOIN в деяких реалізаціях SQL використовується оператор "кома" (,):

 SELECT  FIELD  [  , ...  n  ]  FROM  Table1  ,  Table2 

2. Види оператора JOIN

Оператор JOIN може використовуватися з різними опціями:

  • inner join (за замовчуванням)
  • outer join
    • left outer join
    • right outer join
    • full outer join
  • cross join

Для пояснень будуть використовуватися такі таблиці:

Люди, що проживають в містах (таблиця Person)

Name CityId
Андрій 1
Леонід 2
Сергій 1
Григорій 4

Міста (таблиця City)

Id Name
1 Москва
2 Санкт-Петербург
3 Казань

2.1. INNER JOIN

Об'єднує дві таблиці, де кожен рядок обох таблиць в точності відповідає умові. Якщо для рядка однієї таблиці не знайдено відповідності в іншій таблиці, рядок не включається в набір.

 SELECT  *  FROM  Person  INNER  JOIN  City  ON  Person  .  CityId  =  City  .  Id 
Person.Name Person.CityId City.Id City.Name
Андрій 1 1 Москва
Леонід 2 2 Санкт-Петербург
Сергій 1 1 Москва

Вибір по первинному ключу і індексу позитивно позначається на швидкості вибірки.


2.2. OUTER JOIN

Приєднання таблиці з необов'язковим присутністю запису в таблиці. Також як і у випадку з inner join, умова по індексованих полях і первинному ключу прискорює всі види outer join'ов.

2.2.1. LEFT OUTER JOIN

До лівої таблиці приєднуються всі записи з правої, відповідні умові (за правилами inner join), плюс все не ввійшли записи з лівої таблиці, поля правої таблиці заповнюються значеннями NULL.

 SELECT  *  FROM  Person  LEFT  OUTER  JOIN  City  ON  Person  .  CityId  =  City  .  Id 
Person.Name Person.CityId City.Id City.Name
Андрій 1 1 Москва
Леонід 2 2 Санкт-Петербург
Сергій 1 1 Москва
Григорій 4 NULL NULL

2.2.2. RIGHT OUTER JOIN

Аналогічно left outer join, але застосовується для правої таблиці.

До правої таблиці приєднуються всі записи з лівої, відповідні умові (за правилами inner join), плюс все не ввійшли записи з правої таблиці, поля лівої таблиці заповнюються значеннями NULL.

 SELECT  *  FROM  Person  RIGHT  OUTER  JOIN  City  ON  Person  .  CityId  =  City  .  Id 
Person.Name Person.CityId City.Id City.Name
Андрій 1 1 Москва
Сергій 1 1 Москва
Леонід 2 2 Санкт-Петербург
NULL NULL 3 Казань

2.2.3. FULL OUTER JOIN

До лівої таблиці приєднуються всі записи з правої, відповідні умові (за правилами inner join), плюс все не ввійшли записи з правої таблиці, поля лівої таблиці заповнюються значеннями NULL і плюс всі не увійшли записи з лівої таблиці, поля правої таблиці заповнюються значеннями NULL

 SELECT  *  FROM  Person  FULL  OUTER  JOIN  City  ON  Person  .  CityId  =  City  .  Id 
Person.Name Person.CityId City.Id City.Name
Андрій 1 1 Москва
Сергій 1 1 Москва
Леонід 2 2 Санкт-Петербург
NULL NULL 3 Казань
Григорій 4 NULL NULL

2.3. CROSS JOIN

Всі можливі сполучення з обох таблиць. Як вже говорилося вище, умова для цього типу оператора JOIN не вказується.

 SELECT  *  FROM  Person  CROSS  JOIN  City 

або

 SELECT  *  FROM  Person  ,  City 
Person.Name Person.CityId City.Id City.Name
Андрій 1 1 Москва
Андрій 1 2 Санкт-Петербург
Андрій 1 3 Казань
Леонід 2 1 Москва
Леонід 2 2 Санкт-Петербург
Леонід 2 3 Казань
Сергій 1 1 Москва
Сергій 1 2 Санкт-Петербург
Сергій 1 3 Казань
Григорій 4 1 Москва
Григорій 4 2 Санкт-Петербург
Григорій 4 3 Казань

Цей вид з'єднання потрібно використовувати з обережністю, час виконання зростає пропорційно добутку кількості записів з'єднуються таблиць і найчастіше містить надлишкову інформацію.


Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
SQL
Having (SQL)
PL / SQL
Rollback (SQL)
Commit (SQL)
Create (SQL)
Intersect (SQL)
Union (SQL)
Truncate (SQL)
© Усі права захищені
написати до нас
Рейтинг@Mail.ru