Робочий аркуш «Бази даних і SQL» з відповідями

Безкоштовний робочий аркуш для друку «Бази даних і SQL»: 8 задач від легких до рівня іспиту, з ключем відповідей. Роздрукуйте його або збережіть як PDF.

Для викладачів: можна безкоштовно друкувати, копіювати й використовувати на заняттях. Кожен новий аркуш має нові значення і власні відповіді. Будемо вдячні за посилання на ExamProblems на сторінці вашого курсу.

Ім’я: ____________________   Дата: ____________

1.Легка

Що робить ROLLBACK у транзакції?

  1. AНазавжди зберігає всі зміни транзакції на диску
  2. BВидаляє таблицю
  3. CПовторює останню інструкцію
  4. DСкасовує зміни, зроблені від початку транзакції
2.Легка

INNER JOIN повертає:

  1. AУсі рядки з лівої таблиці, з NULL там, де збігу немає
  2. BУсі рядки з обох таблиць
  3. CЛише рядки зі збіжними значеннями в обох таблицях
  4. DРядки, що не збігаються
3.Легка

Що таке сурогатний ключ (surrogate key)?

  1. AШтучний ідентифікатор без бізнес-значення, як-от автоінкрементний id
  2. BКлюч, що посилається на іншу таблицю
  3. CКлюч, утворений з реальних даних, як-от адреса електронної пошти
  4. DКлюч, що використовується лише в представленнях
4.Середня

Студенти можуть відвідувати багато курсів, а курси мають багато студентів. Як це моделюють у таблицях?

  1. AСтовпцем зовнішнього ключа course_id у таблиці студентів, що вказує на курси
  2. BСписком id курсів, що зберігається в одному стовпці
  3. CПроміжною (зв’язувальною) таблицею із зовнішніми ключами і до студентів, і до курсів
  4. DОб’єднанням студентів і курсів в одну таблицю
5.Середня

Зовнішній ключ оголошено з ON DELETE CASCADE. Що відбувається, коли видаляють батьківський рядок?

  1. AЗовнішній ключ у дочірніх рядках автоматично встановлюється в NULL
  2. BВидалення завжди відхиляється
  3. CБатьківський рядок копіюється в архівну таблицю
  4. DДочірні рядки, що на нього посилаються, видаляються автоматично
6.Середня

Чому SELECT price * 2 AS double_price FROM t WHERE double_price > 10 не виконується в більшості баз даних?

  1. AПсевдоніми не можуть містити підкреслення
  2. BWHERE може порівнювати лише текстові стовпці
  3. CWHERE обчислюється перед списком SELECT, тож псевдоніма ще не існує
  4. DАрифметика не дозволена у списку SELECT
7.Складна

Чому після customers LEFT JOIN orders для підрахунку замовлень кожного клієнта використовують COUNT(o.id), а не COUNT(*)?

  1. ACOUNT(o.id) рахує лише різних клієнтів
  2. BCOUNT(*) ігнорує рядки зі значеннями NULL
  3. CCOUNT(*) не дозволено після з’єднання
  4. DCOUNT(*) рахує рядок, заповнений NULL, як 1 для клієнтів без замовлень
8.Складна

Як за багатоверсійного керування паралельністю (MVCC) читачі можуть не блокувати записувачів?

  1. AЧитачі бачать узгоджений знімок зафіксованих версій рядків, а записувачі створюють нові версії
  2. BЗапис заборонено, поки активний хоч один читач
  3. CЧитачі завжди чекають, доки всі записувачі зафіксують зміни
  4. DЧитачі безпосередньо читають незафіксовані дані

Ключ відповідей

  1. 1. D · Скасовує зміни, зроблені від початку транзакції
  2. 2. C · Лише рядки зі збіжними значеннями в обох таблицях
  3. 3. A · Штучний ідентифікатор без бізнес-значення, як-от автоінкрементний id
  4. 4. C · Проміжною (зв’язувальною) таблицею із зовнішніми ключами і до студентів, і до курсів
  5. 5. D · Дочірні рядки, що на нього посилаються, видаляються автоматично
  6. 6. C · WHERE обчислюється перед списком SELECT, тож псевдоніма ще не існує
  7. 7. D · COUNT(*) рахує рядок, заповнений NULL, як 1 для клієнтів без замовлень
  8. 8. A · Читачі бачать узгоджений знімок зафіксованих версій рядків, а записувачі створюють нові версії

Повні покрокові розв’язки: тренуйте цю тему на examproblems.com.