У багатьох проектах база даних відіграє ключову роль у зберіганні даних про об’єкти та їхні дії. Одним із типових завдань є виведення поточного стану всіх пристроїв, що зберігаються в базі даних, після виконання операцій над ними. Розглянемо цю задачу на прикладі бази даних PieCloudDB, яка містить дві таблиці: Devices (пристрої) та Operations (операції).
Таблиця Devices містить дані про пристрої, такі як їхні ідентифікатори (device_id) та назви (device_name). Таблиця Operations зберігає інформацію про операції, проведені над пристроями, у тому числі ідентифікатор операції (operation_id), ідентифікатор пристрою (device_id) та саму операцію (operation).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
device_id device_name 1 A 2 B 3 C 4 D 5 E operation_id device_id operation 1 1 ON 2 1 OFF 3 2 ON 4 3 ON 5 5 ON 6 3 OFF |
Метою є виведення поточного стану всіх пристроїв після проведення операцій над ними. Для цього використовується SQL-запит з використанням операції INNER JOIN та підзапиту (subquery) для визначення останньої операції для кожного пристрою.
1 2 3 4 5 6 7 8 9 |
SELECT d.device_id, d.device_name, o.operation AS current_status FROM Devices d INNER JOIN ( SELECT device_id, MAX(operation_id) AS max_operation_id FROM Operations GROUP BY device_id ) latest_op ON d.device_id = latest_op.device_id INNER JOIN Operations o ON latest_op.max_operation_id = o.operation_id ORDER BY device_id |
Цей запит поверне наступні результати:
1 2 3 4 5 |
device_id device_name current_status 1 A OFF 2 B ON 3 C OFF 5 E ON |
Таким чином, ми отримали поточний стан кожного пристрою після виконання всіх операцій. Наприклад, пристрої A та E знаходяться у станах OFF та ON відповідно.