Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет вказівки до лаб з SQL.doc
Скачиваний:
8
Добавлен:
07.05.2019
Размер:
811.01 Кб
Скачать

Завдання для самостійної роботи

1. Напишіть запит з EXISTS, що дозволяє вивести дані про всіх студентів, що навчаються у вузах, які мають рейтинг вище 300

2. Напишіть попередній запит, використовуючи з'єднання.

3. Напишіть запит з EXISTS, що вибирає відомості про всіх студентів, для яких у тому ж місті, де живе студент, існують університети, у яких він не вчиться.

4. Напишіть запит, що вибирає з таблиці SUBJECT дані про назви предметів навчання, екзамени з яких здані більш ніж одним студентом.

3.9. Лабораторна робота №9

Тема: Оператори порівняння з множиною значень IN, ANY, ALL

Мета роботи: набути практичні навички використання операторів порівняння з множиною значень IN, ANY, ALL при роботі з реляційною базою даних.

Порядок виконання роботи

1. Ознайомитися з теоретичними положеннями до лабораторної роботи.

2. Виконати всі наведені приклади в середовище СУБД ACCESS.Для цього необхідно:

  • завантажити СУБД ACCESS;

  • виконати режим відкриття бази даних «ВНЗ SQL»;

  • у вікні БД «ВНЗ SQL» вибрати вкладку «Запити»;

  • в діалоговому вікні вказати режим «Додати таблицю» і вибрати необхідні дані;

  • на панелі інструментів вибрати пункт меню «Вид» і вказати режим роботи SQL;

  • в поточному діалоговому вікні ввести текст запиту в форматі SQL;

  • виконати введений запит, для чого натиснути кнопку «Запуск» (!) на панелі інструментів;

  • отриманий результат виконання запиту занести в звіт та перевірити на відповідність умовам прикладу;

  • зберегти створений запит, надавши йому власне ім’я.

3. Виконати індивідуальне завдання (дивись завдання для самостійної роботи). Номери індивідуальних завдань видаються викладачем.

4. Результати виконання індивідуальних завдань занести у звіт.

5. Захистити звіт.

Теоретичні відомості

Оператори порівняння з множиною значень мають наступний зміст.

IN

Дорівнює кожному зі значень, отриманих у внутрішньому запиті.

NOT IN

Не дорівнює жодному зі значень, отриманих у внутрішньому запиті.

= ANY

Те ж, що й IN. Відповідає логічному оператору OR.

> ANY,

> = ANY

Більше, ніж (або більше або дорівнює) будь-яке отримане число. Еквівалентно > або > = для найменшого отриманого числа.

< ANY,

< = ANY

Менше, ніж (або менше або дорівнює) будь-яке отримане число. Еквівалент < або < = для найбільшого отриманого числа.

= ALL

Дорівнює всім отриманим значенням. Еквівалентно логічному оператору AND

> ALL,

> = ALL

Більше, ніж (або більше або дорівнює) всі отримані числа. Еквівалент > або > = для найбільшого отриманого числа.

<ALL,

< = ALL

Менше, ніж (або менше або дорівнює) всі отримані числа. Еквівалентно < або < = найменшого отриманого числа

Варто мати на увазі, що в деяких СУБД підтримуються не всі із цих операторів.

Приклад 1. Вибрати відомості про студентів, що проживають у місті, де розташований університет, у якому вони вчаться.

SELECT *

FROM STUDENT S

WHERE CITY = ANY

(SЕLECT CITY

FROM UNIVERSITY U

WHERE U.UNIV_ID = S.UNIV_ID);

Приклад 2. Виконати інший варіант цього запиту.

SELECT *

FROM STUDENT S

WHERE CITY IN

(SELECT CITY

FROM UNIVERSITY U

WHERE U.UNIV_ID = S. UNIV_ID) ;

Приклад 3. Вибрати дані про ідентифікатори студентів, у яких оцінки перевищують величину, принаймні, однієї з оцінок, отриманих ними ж 6 жовтня 2008 року.

SELECT DISTINCT STUDENT_ID

FROM EXAM_MARKS

WHERE MARK > ANY

(SELECT MARK

FROM EXAM_MARKS

WHERE EXAM DATE = '06/10/2008')

Оператор ALL, як правило, ефективно використовується з нерівностями, а не з рівностями, оскільки значення дорівнює всім, котре повинне вийти в цьому випадку в результаті виконання підзапиту, може мати місце, тільки якщо всі результати ідентичні. Така ситуація практично не може бути реалізована, тому що, якщо підзапит генерує множину різних значень, то ніяке одне значення не може бути рівним відразу всім значенням у звичайному сенсі. В SQL вираз < > ALL реально означає нерівно жодному з результатів підзапиту.

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

SELECT *

FROM UNIVERSITY

WHERE RATING > ALL

(SELECT RATING

FROM UNIVERSITY

WHERE CITY = 'Вінниця' ) ;

Приклад 5. У цьому запиті замість ALL можна використати ANY (проаналізуйте, як у цьому випадку зміниться зміст наведеного запиту):

SELECT *

FROM UNIVERSITY

WHERE NOT RATING > ANY

(SELECT RATING

FROM UNIVERSITY

WHERE CITY = 'Вінниця');

Використання COUNT замість EXISTS

При відсутності NULL-значень оператор EXISTS може бути використаний замість ANY і ALL. Також замість EXISTS і NOT EXISTS можуть бути використані ті ж самі підзапити, але з використанням COUNT(*) в конструкції SELECT.

Приклад 6. Виконати запит:

SELECT *

FROM UNIVERSITY A

WHERE NOT EXISTS

(SELECT *

FROM UNIVERSITY В

WHERE A.RATING > = B.RATING

AND B.CITY = 'Миколаїв');

Приклад 7. Виконати запит, який може бути представлений в наступному вигляді:

SELECT *

FROM UNIVERSITY A

WHERE 1 >

(SELECT COUNT(*)

FROM UNIVERSITY В

WHERE A.RATING > = B.RATING

AND B.CITY = 'Миколаїв');