- •Робота в субд Access з використанням sql
- •7.080203 Системний аналіз і управління
- •1 Лабораторна робота № 1
- •1.1 Теоретичні відомості
- •1.2 Створення таблиць бази даних
- •1.3 Контрольні питання
- •1.4 Індивідуальні завдання
- •2 Лабораторна робота №2
- •2.1 Створення запитів на вибірку
- •2.1.1 Використання умов у запитах
- •2.1.2 Створення обчислювальних полів
- •2.1.3 Запити з параметром
- •2.1.4 Пошук записів, що не мають зв'язаних в іншій таблиці
- •2.2 Контрольні питання
- •2.3 Індивідуальні завдання
- •3 Лабораторна робота №3
- •3.1 Використання підсумків у запитах
- •3.2 Перехресні запити
- •Выражение1: "Квартал " & Format( [dat] ;"q")
- •3.3 Контрольні питання
- •3.4 Індивідуальні завдання
- •4 Лабораторна робота №4
- •4.1 Запити на оновлення
- •4.2 Створення нової таблиці
- •4.3 Вставка даних з іншої таблиці
- •4.4 Вилучення даних з таблиці
- •4.5 Контрольні питання
- •4.6 Індивідуальні завдання
- •5 Лабораторна робота № 5
- •5.1 ІнструкціяSelect мовиSql
- •5.1.1 Розділ select
- •5.1.2 Розділ from
- •5.1.3 Розділ where
- •5.1.4 Розділ group by
- •5.1.5 Розділ having
- •5.1.6 Розділ order by
- •5.1.7 Оператор union
- •5.1.8 Розділ into
- •5.2 Інструкція insert
- •5.3 Інструкція update
- •5.4ІнструкціяDelete
- •5.5 Інструкція transform
- •5.6 Предикати
- •5.7 Контрольні питання
- •5.8 Індивідуальні завдання
- •Література
5.1.3 Розділ where
Тут вказується логічна умова, від виконання якої залежить чи ввійде запис до вибірки. Можна вказати декілька умов, об’єднаних логічними операторами AND, OR або іншими. WHERE в невеликих запитах може замінити конструкцію INNER JOIN, але це суттєво зменшує швидкість виконання запиту.
Задача 5.5. Вивести перелік заробітків, які знаходяться в межах від 30 грн. до 50 грн. (див. задачу 2.2)
SELECT tvidom.tn, tvidom.fio, tzarobitok.dat, tzarobitok.zar
FROM tvidom INNER JOIN tzarobitok
ON tvidom.tn = tzarobitok.tn
WHERE (((tzarobitok.zar)>=30 And (tzarobitok.zar)<=50)) ;
Задача 5.6. Створити запит про заробітки, які були нараховані в певному місяці. Номер місяця вводити як параметр.
PARAMETERS [Введіть номер місяця] Short ;
SELECT tvidom.tn, tvidom.fio, tzarobitok.dat, tzarobitok.zar
FROM tvidom INNER JOIN tzarobitok
ON tvidom.tn = tzarobitok.tn
WHERE (((Month([tzarobitok]![dat]))=[Введіть номер місяця]))
ORDER BY tzarobitok.dat;
Тип параметру вказують після службового слова PARAMETERS.
5.1.4 Розділ group by
Він використовується для підсумкових запитів В списку полів розділу SELECT без змін дозволяється використовувати імена тільки тих полів, які входять до розділу GROUP BY. Усі інші поля повинні бути використані як аргументи підсумкових функцій AVG(), MAX(), MIN(), SUM(), COUNT() або інших.
Задача 5.7. Створити запит про заробітки всіх робітників. Ця інструкція відповідає запиту для задачі 3.1.
SELECT tvidom.tn, tvidom.fio, Sum(tzarobitok.zar) AS [Усього],
Avg(tzarobitok.zar) AS [Середнє за день]
FROM tvidom LEFT JOIN tzarobitok ON tvidom.tn = tzarobitok.tn
GROUP BY tvidom.tn, tvidom.fio;
5.1.5 Розділ having
Він дуже схожий на розділ WHERE. В них однакові правила запису логічних умов. Але умови, задані в розділі WHERE, перевіряються для окремих записів перед угрупованням, а умови розділу HAVING перевіряються для груп записів після угруповання стовпців, вказаних в розділі GROUP BY і звичайно містять підсумкові функції.
Задача 5.8. Створити запит про заробітки тих робітників, які заробили більше 200 грн. (див. задачу 3.2)
SELECT tvidom.tn, tvidom.fio, Sum(tzarobitok.zar) AS [Усього]
FROM tvidom INNER JOIN tzarobitok
ON tvidom.tn = tzarobitok.tn
GROUP BY tvidom.tn, tvidom.fio
HAVING (((Sum(tzarobitok.zar))>200))
ORDER BY tvidom.fio;
Задача 5.9. Для кожного робітника підрахувати кількість днів, коли їхні заробітки становили більше 40 грн. (див. задачу 3.3)
SELECT tvidom.fio, Count(tzarobitok.zar) as [Кількість днів]
FROM tvidom INNER JOIN tzarobitok
ON tvidom.tn = tzarobitok.tn
WHERE (((tzarobitok.zar)>40))
GROUP BY tvidom.fio
ORDER BY tvidom.fio;
5.1.6 Розділ order by
В цьому розділі вказуються імена полів або їх номери в списку полів даного запиту (нумерація починається з 1). За замовчанням встановлений порядок сортування за зростанням (ASC). Для сортування за зменшенням використовується службове слово DESC.
5.1.7 Оператор union
Запит з використанням UNION можна створити тільки в режимі SQL. В результаті роботи створюється вибірка, яка містить рядки, що вибирає як перша, так і друга інструкція Select. Синтаксис:
Інструкція SELECT
UNION [ALL]
Інструкція SELECT
[ORDER BY …]
Кількість стовпців в обох інструкціях SELECT повинна бути однаковою. Типи даних в стовпцях повинні бути ідентичними. Імена стовпців беруться з першої інструкції SELECT. Якщо вказаний предикат ALL, то будуть виведені всі рядки обох запитів, інакше співпадаючі рядки виводитися не будуть. Інструкцій SELECT може бути декілька, тоді треба вживати круглі дужки. Упорядкування ORDER BY можна використати єдиний раз після останньої інструкції, воно діє на всю вибірку. В ньому треба використовувати номери стовпців або їхні імена з першої вибірки.
Задача 5.10. Створити запит на об'єднання інформації про всі заробітки робітників з таблиці arhiv та відомості за вказаний рік з таблиці tzarobitok. Рік задавати як параметр.
Архівна таблиця arhiv (див. задачу 4.3) містить поля fio, tn та pidrozdil з таблиці tvidom і поля dat та zar з таблиці tzarobitok. Спочатку виберемо дані за вказаний рік і приєднаємо до них інформацію з таблиці arhiv. Однакові рядки повторюватися не будуть, тому що не вказаний предикат ALL.
PARAMETERS [Введіть рік] Short ;
SELECT tvidom.pidrozdil AS [Підрозділ], tvidom.fio AS [Прізвище],
tvidom.tn AS [Табельний номер], tzarobitok.dat AS [Дата],
tzarobitok.zar AS [Заробіток]
FROM tvidom INNER JOIN tzarobitok ON tvidom.tn = tzarobitok.tn
WHERE (((Year([tzarobitok.dat]))=[Введіть рік]))
UNION
SELECT arhiv.pidrozdil, arhiv.fio, arhiv.tn, arhiv.dat, arhiv.zar
FROM arhiv
ORDER BY [Підрозділ], [Прізвище] ;