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

Лекція 6 - SQL, Select: Вкладення запитів та пов’язування таблиць

Вкладений запит в умові WHERE
Вкладений запит в умові HAVING
Оператор Exist у вкладених запитах
Оператори IN, Any, All у вкладених запитах

Вкладений запит в умові WHERE

SQL допускає вкладання допоміжного запиту в основний. При цьому допоміжний запит береться в дужки і виконується в першу чергу. Зовнішній запит оперує результуючою таблицею допоміжного запиту.
Наприклад подамо оцінки всіх студентів із Тернополя

 SELECT * 
  FROM exam_marks 
  WHERE student_id = 
    ( SELECT student_id
     FROM student 
     WHERE city = ‘Тернопіль’ );

Вкладений запит в умові HAVING

Підзапити можна використовувати для відбору груп за умовою HAVING. Нехай потрібно встановити кількість предметів навчання з оцінкою, яка перевершує середнє значення оцінки студента з ідентифікатором “12”:

SELECT COUNT(DISTINCT subj_id), mark 
  FROM exam_marks 
  GROUP BY mark 
  HAVING mark > 
    ( SELECT AVG(mark) 
     FROM exam_marks 
     WHERE student_id = 12);

Оператор Exist у вкладених запитах

Оператор подає істинне значення, якщо множина значень, яку генерує підзапит непуста. Виконання оператора Exist при появі першого запису у підзапиті, тим самим економлячи обчислювальні витрати. При цьому в підзапиті використовувати групування не можна. Наприклад, нехай потрібно подати ідентифікатори предметів навчання, по яких екзамени здавалися більш ніж одним студентом

 SELECT DISTINCT subj_id 
  FROM exam_marks em1 
  WHERE EXISTS            
    ( SELECT * 
     FROM exam_marks em2 
     WHERE em1.subj_id = em2. subj_id
     AND em1.student_id < > em2.student_id);

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

Оператори IN, Any, All у вкладених запитах

Оператори =IN, =ANY істинні, коли є співпадіння хоча б із одним значенням внутрішнього запиту, якому вони передують.
=NOT IN істинне, коли нема спів падіння із жодним значенням, отриманим у запиті.
> ANY, > = ANY істинні коли значення більше або більше-рівне довільного значення внутрішнього запиту.
< ANY, < = ANY істинні коли значення менше або менше -рівне довільного значення внутрішнього запиту
= ALL істинний, коли значення рівне всім значенням внутрішнього запиту. Така ситуація може спостерігатися, коли внутрішній запит повертає лише одне значення.
<> ALL істинний, коли значення не рівне жодному значенню внутрішнього запиту.
> ALL, > = ALL істинні, коли значення більші або більші-рівні всіх значень внутрішнього запиту
< ALL, < = ALL істинні, коли значення менші або менші-рівні всіх значень внутрішнього запиту
Слід враховувати, що коли результат внутрішнього запиту пустий, то оператори (=, >, <) ALL приймають істинне значення, а аналогічні оператори із ANY – хибне.

Нехай потрібно вибрати дані про студентів, які проживають в містах де розташований університет, в якому вони навчаються

SELECT  * 
  FROM student s  
  WHERE city IN            
   (SELECT city 
     FROM university u 
        WHERE u.univ_id = s.univ_id);

Запит, що вибирає назви університетів з рейтингом вищим, ніж рейтинг довільного університету в Тернополі

SELECT * 
  FROM university  
  WHERE rating > ALL   
 ( SELECT rating 
   FROM university 
   WHERE city = ‘Тернопіль’ );

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


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

  •  Facebook 

Обрати мову

Хто на сайті

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