1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer

Лекція 7 - SQL, Select: Пов’язування таблиць та запитів – JOIN, UNION

Таблиці пов’язані за допомогою умови WHERE
Таблиці, пов’язані із власною копією
Таблиці пов’язані за допомогою оператора JOIN
Таблиці пов’язані за допомогою операторів LEFT JOIN, RIGHT JOIN, NATURAL JOIN
З’єднання операторів за допомогою UNION

Пов’язані таблиці

Часто для отримання результуючої інформації необхідно пов’язувати таблиці. Пов’язувані таблиці повинні входити в список FROM а умова зв’язку задається в частині WHERE.
Нехай потрібно вивести інформацію про предмети навчання, екзамен із яких проводився 10.01.2002 року:

SELECT DISTINCT sb.subj_id, subj_name, hour, semester 
    FROM subject sb, exam_marks em 
    WHERE sb.subj_id = em.subj_id  
    AND em.exam_date = ’2002-01-10’ ;  

В даному випадку для таблиць використані псевдоніми em sb, які спрощують звертання до їх атрибутів.

Таблиці, пов’язані із власною копією

Інколи таблицю необхідно пов’язувати із власною копією. Нехай потрібно подати інформацію про студентів, які отримують стипендію вище середньої по курсу, на якому вони навчаються :

SELECT DISTINCT student_id, surname, stipend 
  FROM student s1,  
    (SELECT kurs, AVG(stipend) AS avg_stip 
     FROM student s2 
     GROUP BY s2.kurs) s3 
  WHERE s1.kurs=s3.kurs AND s1.stipend > avg_stip;

Таблиці пов’язані за допомогою оператора JOIN

Використовувати оператор WHERE для зв’язування таблиць не завжди зручно, оскільки його обсяг при цьому значно зростає і важко відділити умови зв’язування та умови відбору записів. Тому для підвищення читабельності операторів для зв’язування таблиць зручно використовувати спеціальний оператор JOIN, в якому умова зв’язування записується після ключового слова ON.
В цьому випадку перший із наведених запитів, який повинен вивести інформацію про предмети навчання, екзамен із яких проводився 10.01.2002 року, матиме вигляд:

SELECT DISTINCT sb.subj_id, subj_name, hour, semester 
    FROM subject sb  JOIN exam_marks em 
    ON  sb.subj_id = em.subj_id  
   WHERE em.exam_date = ’2002-01-10’ ;  

Виведемо інформацію про результати екзаменів у зручному для читанні виді за допомогою операторів JOIN. При цьому зв’яжемо три таблиці:

SELECT DISTINCT surname, name, subj_name, mark, exam_date 
    FROM subject sb  JOIN exam_marks em ON  sb.subj_id = em.subj_id  
	                 JOIN student st ON em.student_id=st.student_id ;  
  

Таблиці пов’язані за допомогою операторів LEFT JOIN, RIGHT JOIN, NATURAL JOIN

Інколи потрібно виявити записи однієї таблиці, які не мають відповідників в іншій. При цьому використовують оператор LEFT (RIGHT) JOIN. Оператор LEFT JOIN розглядає ліву таблицю як базову і виводить всі її стрічки в результуючий запит. Із правої таблиці виводяться лише ті стрічки, які задовольняють умові зв’язування ON. Використаємо цей оператор для виявлення тих зареєстрованих в системі студентів, які не здавали жодного екзамена:

SELECT DISTINCT surname, name, subj_name, mark, exam_date 
    FROM student st  LEFT JOIN exam_marks em     ON  sb.subj_id = em.subj_id  
	WHERE exam_id IS  NULL ;

Дія оператора RIGHT JOIN аналогічна попередньому, однак в цьому випадку вже права таблиця розглядається як базова.
У випадку, коли таблиці пов’язуються по єдиному спільному для них атрибуту, можна використати оператор NATURAL JOIN, в якому не вказується умова зв’язування ON:

SELECT DISTINCT surname, name, subj_name, mark, exam_date 
    FROM student st  NATURAL LEFT JOIN exam_marks em     
	WHERE exam_id IS  NULL ;  
  

З’єднання операторів за допомогою UNION

Оператор UNION використовується для об’єднання двох або більше SQL-запитів. При цьому назви стовпчиків результуючої таблиці визначаються по першому запиту. Наприклад можна отримати в одній таблиці прізвища та ідентифікатори студентів та викладачів із Києва:

SELECT ‘ Студе нт ’ , surname, name, student_id 
  FROM student 
  WHERE city = ‘Київ’  
UNION 
SELECT ‘Викладач’ , surname, name, lecturer_id 
  FROM lecturer  
  WHERE  city= ‘Київ’  ;

 

Додати коментар


Захисний код
Оновити

Меню

  •  Facebook 

Обрати мову

Хто на сайті

На сайті 178 гостей та відсутні користувачі