
- •Лабораторна робота № 1
- •Контрольні питання
- •Лабораторна робота № 2
- •Контрольні питання
- •Лабораторна робота № 3
- •Лабораторна робота № 4
- •Зміст роботи: створити запити мовою sql з використанням inner join, left join, ritgh join, union, з використанням group by, having, агрегатних функцій sum, min, max, avg, count
- •Лабораторна робота № 5.
- •Зміст роботи: створити запити мовою sql з використанням інструкцій insert, delete, update.
- •Лабораторна робота №6
- •Зміст роботи: створити підпорядковані запити мовою sql
- •Теоретичні відомості
- •Лабораторна робота № 7
- •Зміст роботи: створити підпорядковану форму в залежності від варианта завдання
- •Контрольні питання:
- •Варианти завдань
- •Лабораторна робота № 8
- •Зміст роботи: створити головну форму додатку, настроїти командні кнопки, захистити базу даних за допомогою пароля.
- •Варианти завдань
- •Література
- •Організація баз даних
Лабораторна робота №6
Тема: «Підпорядковані запити»
Мета: Навчити студентів створювати підпорядковані запити.
Зміст роботи: створити підпорядковані запити мовою sql
Форма звіту:
-
створені запити
-
протокол лабораторної роботи
Теоретичні відомості
Підпорядковані запити - це SELECT - запити упроваджені в тіло іншого SELECT - запиту. Зовнішній оператор SELECT використовує результат виконання внутрішнього оператора для визначення змісту остаточного результату всієї операції. Внутрішні запити можуть бути поміщені в пропозиції WHERE і HAVING зовнішнього оператора SELECT - в цьому випадку вони одержують назву підзапитів або вкладених запитів. Крім того, внутрішні оператори SELECT можуть використовуватися в операторах INSERT, UPDATE, DELETE.
Існує три типу підзапитів:
-
скалярний підзапит; повертає єдине значення.
-
строковий підзапит; повертає значення декількох стовпців таблиці, але у вигляді єдиного рядка.
-
табличний підзапит; повертає значення одного або більше стовпців таблиці, розміщені в більш ніж одному рядку. Табличний підзапит може використовуватися скрізь, де допускається указувати таблицю - наприклад, як операнд предиката IN.
Правила запису:
-
Текст підзапиту записується в круглих дужках.
-
У підзапитах не можна використовувати пропозицію ORDER BY.
-
У основному запиті не можна використовувати BETWEEN.
-
Підзапити, що повертають більше одного запису, можуть використовуватися тільки з багатозначними функціями.
-
Якщо підзапит є одним з двох операндів, що беруть участь в операції порівняння, то запит указується в правій частині порівняння.
Синтаксис вкладеного запиту нічим не відрізняється від синтаксиса головного запиту, і, отже, вкладений запит може, у свою чергу, містити підзапит.
Приклади.
1. Наступний запит повертає дату, на яку доводиться максимальна відпустка товарів
SELECT KOLVO, DATRASH
FROM RASHOD
WHERE KOLVO = (SELECT MAX (KOLVO) FROM RASHOD)
2. Ускладнимо попередній приклад. Визначити дату, коли з складу було відвантажено максимальну кількість товару, і реквізити покупця, який цей товар купив.
SELECT R.KOLVO, R.DATRASH, P.POKUP, P.GOROD, P.ADRES
FROM RASHOD R, POKUPATELI P
WHERE (R.POKUP = P.POKUP) AND KOLVO = (SELECT MAX (KOLVO) FROM RASHOD)
В порівнянні з попереднім прикладом в запит включено внутрішнє з'єднання таблиць RASHOD і POKUPATELI.
Розглянемо відношення Співробітники (таб_номер, ПІБ, оклад, номер_відділу)
3. Скласти список всіх співробітників, що мають оклад вищий за середній по підприємству.
SELECT ПІБ
FROM Співробітники
WHERE Оклад>(SELECT AVG(оклад)
FROM співробітники);
4. Одержати список співробітників, одержуючих оклад вище за хоч би одного співробітника відділу №1.
SELECT ПІБ
FROM Співробітники
WHERE Оклад>ANY (SELECT оклад
FROM співробітники
WHERE номер_відділу=1);
ANY - умова пошуку істинна, коли порівнюване значення знаходиться в потрібному відношенні хоча б з одним значенням, підзапитом, що повертається
5. Скласти список всіх співробітників, чий оклад більше окладу будь-якого співробітника відділу №2.
SELECT ПІБ
FROM Співробітники
WHERE Оклад>ALL (SELECT оклад
FROM співробітники
WHERE номер_відділу=2);
ALL указує, що умова пошуку буде істинна тоді, коли порівнюване значення знаходиться в потрібному відношенні зі всіма значеннями, що повертаються підзапитом
З табличними підзапитами використовуються ключові слова EXISTS і NOT EXISTS. Результат їх обробки є логічним значенням TRUE або FALSE. Для ключового слова EXISTS результат рівний TRUE тільки в тому випадку, якщо в повертаному підзапитом результуючій таблиці присутній хоч би 1 рядок. Інакше - буде значення FALSE. Для NOT EXISTS - навпаки. Тобто за ключовими словами EXISTS і NOT EXISTS перевіряється наявність рядків в таблиці підзапиту ( ця таблиця може містити довільне число стовпців).
Приклад. Скласти список всіх покупців, які хоча б один раз одержували товар зі складу.
SELECT P.POKUP
FROM POKUPATELI P
WHERE
EXISTS
(SELECT R.POKUP
FROM RASHOD R, POKUPATELI P
WHERE (R.POKUP = P.POKUP))
Приклад. Хай необхідно знайти в таблиці POKUPATELI покупця, у якого поле GOROD містить „Москва", і показати з таблиці RASHOD всі здійснені їм покупки товарів. Може бути написаний наступний помилковий запит:
SELECT R.KOLVO, R.DATRASH, R.POKUP, R.TOVAR
FROM RASHOD R
WHERE R.POKUP = (SELECT P.POKUP
FROM POKUPATELI P
WHERE P.GOROD= "Москва")
Помилка полягає в том, що стовпець GOROD містить неунікальне значення і таких покупців -,например, 2. Таким чином, одиничному значенню RASHOD.POKUP в умові пошуку вимагається поставити у відповідність (оператор „=") відразу два значення POKUPATELI.POKUP. Спроба виконання такого запиту викличе помилку. Тому якщо вкладений запит здатний повертати список значень, то знак рівності (=) в умові пошуку замінюється на вибір з декількох значень (IN).
SELECT R.KOLVO, R.DATRASH, R.POKUP, R.TOVAR
FROM RASHOD R
WHERE R.POKUP
IN
(SELECT P.POKUP
FROM POKUPATELI P
WHERE P.GOROD= “Москва”)
Контрольні питання
-
Що таке вкладений запит?
-
Коли використовуються підзапити?
-
Як включити до головного запиту вкладений запит?
-
Чому в деяких випадках невожливо використовувати знак рівності в запитах з вложеними запитами?
-
Коли використовуються оператор EXISTS?
Варианти завдань
Вариант 1
1. Отримати список видань, на які не підписалось жодного передплатника.
2. Отримати список видань, вартість номеру яких не перевищує середню вартість номерів всіх типів видань.
Вариант 2
-
Отримати назви незамовлених виробів.
-
Отримати назви виробів, на які витрачається минимальна кількість метрів тканини.
Вариант 3
1. Отримати назву команди з максимальною кількістю персоналу.
2. Отримати прізвище найстарішого гравця.
Вариант 4
-
Отримати прізвище наймолодшого майстра.
-
Отримати прізвище майстра, який виробив максимальну кількість виробів.
Вариант 5
-
Знайти номер аудиторії з максимальною кількістю місць.
-
Отримати назву кафедри з мінімальною кількістю викладачів.
Вариант 6
-
Отримати назву найдорожчого виробу.
-
Отримати список виробів, які випускає фірма «Одеса_Люкс».
Вариант 7
-
Отримати назву книги, максимальна кількість екземплярів якої була випущена в 2007 році.
-
Отримати назву найдорожчої книги.
Вариант 8
-
Отримати назву найдорожчого товару.
-
Отримати номери накладних з максимальною кількістю одиниць вказаного товару.
Вариант 9
-
Отримати назву типа замовлень з мінімальною вартістю.
-
Отримати список виконавців, які не виконували замовлення в вересні поточного року.
Вариант 10
-
Отримати назву найдорожчого матеріалу.
-
Отримати назву об’єкта, на який витрачається мінімальна кількість цеглі.
Вариант 11
-
Отримати назву найдорожчої книги.
-
Які книги були замовлені в вересні поточного року мінімальним тиражем.
Вариант 12
-
Отримати назву відділу з мінімальною кількістю робітників.
-
Отримати ПІБ останнього прийнятого на роботу.
Вариант 13
-
Отримати ПІБ наймолодшого спортсмена.
-
Отримати назви видів спорту, на яких немає тренерів із званням «майстер спорту».
Вариант 14
-
Отримати дані про найдешевше авто.
-
Які авто не були продані в жовтні поточного року.
Вариант 15
-
Які кімнатні рослини не були замовлені?
-
Отримати назву найдорожчої рослини.
Вариант 16
-
На яких мовах не було доповідей?
-
Хто доповідав останнім на конференції?
Вариант 17
-
Отримати назву найдорожчого товару.
-
Товари яких категорій не куплялись в першому кварталі поточного року?
Вариант 18
-
Отримати ПІБ наймолодшого пацієнта.
-
Які лікарі не були на викликах у жовтні поточного року?
Вариант 19
-
У яких викладачів кафедри програмування не було видань в 2008 році?
-
Отримати ПІБ наймолодшого викладача.