Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Запит з використанням 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 [Підрозділ], [Прізвище];
5.1.8 Розділ INTO
Синтаксис: INTO нова таблиця
Результати запиту будуть записані в нову таблицю з вказаним іменем і потрібною структурою, яка створюється автоматично. Якщо таблиця з таким іменем вже існує, то вона буде вилучена.
Задача 5.11. Записати до нової таблиці відомості про загальні заробітки всіх робітників (див. задачі 3.1 та 4.2).
SELECT tvidom.tn AS [Табельний №], tvidom.fio AS Прізвище,
Sum(tzarobitok.zar) AS Сума,
Avg(tzarobitok.zar) AS [Середнє за день]
INTO itogo
FROM tvidom LEFT JOIN tzarobitok ON tvidom.tn = tzarobitok.tn
GROUP BY tvidom.tn, tvidom.fio
ORDER BY tvidom.fio;
5.2 Інструкція INSERT
Ця інструкція використовується для вставки нових рядків до існуючої таблиці. Таблиця з вказаним іменем повинна бути створена заздалегідь, або треба використовувати команду SELECT INTO.
Синтаксис команди:
INSERT INTO ім’я існуючої таблиці
SELECT тіло запиту
Вираз SELECT тіло запиту – це запит на вибірку з однієї або декількох таблиць, записаний за звичайними правилами.
Задача 5.12. Записати до архівної таблиці itogo, яка містить відомості про загальні заробітки всіх робітників (див. задачу 5.11) дані про заробітки робітників за період з 1.1.2006р. до 30.6.2006р.
INSERT INTO itogo
SELECT tvidom.tn AS [Табельний №], tvidom.fio AS Прізвище, (tzarobitok.zar) AS Сума,
(tzarobitok.zar) AS [Середнє за день]
FROM tvidom INNER JOIN tzarobitok ON tvidom.tn=tzarobitok.tn
WHERE tzarobitok.dat BETWEEN #1/1/2006# AND #6/30/2006#
ORDER BY tvidom.fio;
Дату запишемо в американському форматі в символах # і використаємо функцію BETWEEN для завдання проміжку дат.
Інструкція INSERT може використовуватися й для вставки конкретних значень до одного рядка. Тоді вона має вигляд:
Синтаксис команди:
INSERT INTO ім’я існуючої таблиці (перелік стовпців)
VALUES (перелік значень)
Можна не вказувати перелік стовпців, тоді значення будуть вставлені до всіх стовпців, починаючи з першого. Самі значення вказуються після ключового слова VALUES. Кількість стовпців в переліку та кількість значень повинні співпадати. Значення повинні мати той же тип, що й стовпці, до яких вони повинні бути вставлені. Не можна задавати значення стовпців–лічильників.
Задача 5.13. Вставити нові дані до таблиці tzarobitok.
INSERT INTO tzarobitok
Values (42, #02/02/2006#, 100)
В таблиці tzarobitok записанітабельний номер, дата роботи та заробіток. В цьому випадку перелік полів можна не вказувати.
INSERT INTO tzarobitok (tn, zar)
VALUES (42, 100)
Якщо за замовчанням в конструкторі таблиці встановлено, що дата роботи дорівнює поточній даті, то це поле буде заповнено. Якщо значення за замовчанням не визначено, це поле залишиться вільним.
5.3 Інструкція UPDATE
Ця інструкція виконує запит на оновлення даних в таблиці.
Синтаксис команди:
UPDATE ім’я таблиці
SET ім’я поля = вираз
WHERE критерій відбору
Зі слова SET починається блок, що визначає список полів, для яких виконуватимуться зміни. В одній команді дозволяється змінювати значення декількох полів. Вираз може містити константи, змінні та поля, навіть ті, що змінюються. Змінення до таблиці вносяться після виконання команди, тобто вираз використовує старі значення полів. Дані змінюються тільки в рядках, які задовольняють умовам, записаним після слова WHERE.
Приклад 5. 14. Робітникам, які мають дітей, збільшити нараховану суму на 20 грн.
Перший спосіб. Використаємо існуючий зв’язок по полю tn (табельний номер) між таблицями tvidom і tzarobitok. Обмеження на кількість дітей вкажемо в умові відбору WHERE
UPDATE tvidom INNER JOIN tzarobitok
ON tvidom.tn = tzarobitok.tn
SET tzarobitok.zar = [tzarobitok]![zar]+20
WHERE (((tvidom.ditej)>0));
Другий спосіб. Поле, для якого встановлений зв’язок між таблицями tvidom і tzarobitok, вкажемо в умові відбору WHERE.
UPDATE tzarobitok, tvidom
SET tzarobitok.zar = tzarobitok!zar+20
WHERE (((tzarobitok.tn)=[tvidom].[tn]) AND ((tvidom.ditej)>0));
5.4 Інструкція DELETE
Інструкція вилучає рядки з вказаної таблиці. Синтаксис:
DELETE [ список полів ]
FROM ім’я таблиці AS псевдонім
WHERE умови вибору
В список полів треба включати поля, які входять до умов вибору. Якщо в конструкції FROM вказане ім’я однієї таблиці і відсутній розділ WHERE, список полів можна не вказувати. Якщо в конструкції FROM вказуються імена декількох таблиць, то треба вказати, з якої саме таблиці вилучати дані. Якщо між таблицями встановлено зв’язок типу "один–до–одного", то можна вилучати дані з однієї з них. Якщо між таблицями встановлено зв’язок типу "один–до–багатьох", то можна вилучати дані тільки з боку "багатьох".
Задача 5.15. Вилучити з таблиці tzarobitok відомості про заробітки робітників за вказаний рік. Рік вводити як параметр.
PARAMETERS [Введіть рік] Short;
DELETE tzarobitok. *, Year([tzarobitok]![dat])
FROM tzarobitok
WHERE (((Year([tzarobitok]![dat]))=[Введіть рік]));
5.5 Інструкція TRANSFORM
Ця інструкція створює перехресний запит. Синтаксис:
TRANSFORM вираз із підсумковою функцією
Інструкція SELECT
PIVOT вираз
[ IN список заголовків стовпчиків ]
Вираз із підсумковою функцією вказує, які саме підсумки та для яких полів будуть знайдені і записані до клітинок таблиці.
Інструкція SELECT записується за звичайними правилами, але обов’язково повинна мати розділ GROUP BY. Значення полів, вибраних для угруповання, визначають заголовки підсумкових рядків. Їх може бути декілька.
PIVOT вираз – задає стовпець або вираз, значення якого використовуються для заголовків стовпчиків.
Список заголовків стовпчиків після слова IN пишеться через кому і може містити перелік значень в лапках, який визначає їхній вигляд та порядок. Конструкція IN – необов’язкова.
Задача 5.16. Створити перехресний запит, до якого увійдуть загальні суми заробітку по кварталах для кожного підрозділу.
TRANSFORM Sum(tzarobitok.zar) AS [сума]
SELECT tvidom.pidrozdil, Sum(tzarobitok.zar) AS [Загальна сума]
FROM tvidom INNER JOIN tzarobitok
ON tvidom.tn = tzarobitok.tn
GROUP BY tvidom.pidrozdil
PIVOT "Квартал " & Format([dat],"q");
Інструкція відповідає запиту 3.4, результати роботи – рис. 3.8.
Дата публикования: 2015-02-22; Прочитано: 262 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!