Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 2878 Лабораторна робота №5 на тему Створення запитів мовою SQL, Бази даних та інформаційні системи, ЗНТУ

Лабораторна робота №5 на тему Створення запитів мовою SQL, Бази даних та інформаційні системи, ЗНТУ

« Назад

Лабораторна робота №5 на тему Створення запитів мовою SQL

Мета роботи: вивчити деякі команди мови SQL та навчитися за їх допомогою створювати запити в Access.

5.1 Інструкція  SELECT  мови SQL

При створенні запитів в режимі конструктора автоматично ство­рюється інструкція на мові SQL. Її можна переглянути за допомогою меню і внести зміни. Оптимізатор запитів (QueryOptimizer) обробляє запит після запуску і будує найефективніший план його виконання. Оптимізатор може навіть змінити структуру запиту.

Інструкція Select має такі розділи:

SELECT перелік полів або виразів

INTO ім’я нової таблиці

FROM перелік таблиць, з яких вибрані поля

WHERE умови відбору записів

GROUP BY поля або вирази для угруповання даних

HAVING умови відбору записів після угруповання

UNION

ORDER BY перелік полів для сортування

Обов’язковими є тільки розділи SELECT та FROM. Інші розділи краще використовувати в тому порядку, в якому вони тут записані.

5.1.1 Розділ  SELECT

Він визначає потрібні для запиту поля та вирази. Полю можна надати нове ім’я – псевдонім (alias). Можна створювати обчислю­вальні поля. Синтаксис розділу:

SELECT [ ALL | DISTINCT | DISTINCTROW] <список полів > ;

  • ALL – використовується за замовчанням і дозволяє включати до запиту однакові рядки;

  • DISTINCT – аналізується результат вибірки, і з однакових значень виводиться лише одне, тобто всі рядки вибірки різні.

  • DISTINCTROW – кожен рядок вибірки буде створений з уні­кальної комбінації записів базовихтаблиць, але в залежності від того, які поля вибрані, може статися так, що вибірка матиме однакові ряд­ки. Параметр DISTINCTROW впливає на результат вибірки тільки тоді, коли використовувалась операція JOIN та до вибірки були вклю­чені не всі стовпці таблиць.

Задача 5.1. Створити запит на вибірку даних, до якого увійдуть усі відомості про робітника з таблиці tvidom.

SELECT  *  FROM  tvidom ;

Такий вигляд матиме інструкція SQL. Результати роботи запиту матимуть майже такий самий вигляд, як таблиця 1.6, тільки вибірка даних буде упорядкована за табельним номером. Access за замовчан­ням упорядковує дані за ключовим полем, якщо не вказаний якийсь інший варіант. Символ * використовується, якщо вибираються всі поля таблиці. Ім’я таблиці tvidom вказується у розділі FROM.

Задача 5.2. Вивести прізвища тих робітників, яким була нара­хована заробітна плата.

SELECT DISTINCT tzarobitok.tn

FROM tzarobitok;

Така інструкція створює вибірку табельних номерів з табли­ці tzarobitok. Але замість них виводяться прізвища, тому що в конструк­торі таблиці tzarobitok була використана підстанов­ка. Кожне прізвище виводиться лише один раз завдяки використанню ключового слова DISTINCT. Якщо його НЕ писати, то кожне прізвище буде виведено стільки разів, скільки воно зустрічається в таблиці.

5.1.2 Розділ  FROM

В цьому розділі через кому записуються імена або псевдоніми таблиць та представлень, з яких вибираються дані.

Якщо до запиту входить декілька таблиць, то треба вказувати типи їх з'єднання. Синтаксис:

Головна таблиця JOIN TYPE дочірня таблиця ON  умови зв’язку таблиць

ON умови зв’язку таблиць вказує які поля таблиць треба порів­нювати і яким чином. Найчастіше використовується оператор =. Інші оператори порівняння <, >, <=, >=, <> можна використовувати тільки в інструкції SQL, в режимі конструктора запитів це неможливо.

JOINTYPE – тип з'єднання таблиць. Можливі такі типи:

1) INNER JOIN – встановлюється за замовчанням. До запиту включаються лише ті записи з обох таблиць, в яких співпадають зна­чення відповідних полів.

Задача 5.3. Створити запит на вибірку даних, до якого увійдуть прізвище робітника, його табельний номер, дата та сума заробітку.

SELECT tvidom.tn, tvidom.fio, tzarobitok.dat, tzarobitok.zar

FROM tvidom INNER JOIN tzarobitok

 ON tvidom.tn = tzarobitok.tn

ORDER BY tzarobitok.dat ;

З обох таблиць відбираються тільки ті записи, у яких співпада­ють значення табельних номерів. Розділ ORDER BY забезпечує сорту­вання вибірки за датою. Інструкція відповідає запиту для задачі 2.1.

2) LEFT [OUTER] JOIN – до запиту включаються всі записи головної (лівої) таблиці, незалежно від того чи існують для них відпо­відні записи в дочірній (правій) таблиці. Якщо в правій таблиці немає даних для вибірки, в стовпці запиту їхнє місце вільне. Якщо в попередньому прикладі змінити тип зв’язку, то виведуться й прізвища тих робітників, які ще не працювали.

Задача 5.4. Знайти відомості про робітників, які ще не працю­вали, тобто їхні заробітки відсутні в таблиці tzarobitok.

SELECT tvidom.pidrozdil, tvidom.fio

FROM tvidom LEFT JOIN tzarobitok ON tvidom.tn = tzarobitok.tn

WHERE (((tzarobitok.tn) Is Null)) ;

Ця інструкція відповідає запиту для задачі 2.6. З таблиці tvidom спочатку вибираються всі записи, а потім розділ WHERE уточнює умову відбору.Умова Is Nullзалишає у виборці тільки ті записи з таб­лиці tvidom, які не мають зв’язаних з ними записів у таблиці tzarobitok.

3) RIGHT [OUTER] JOIN – до запиту включаються всі записи правої таблиці, незалежно від того чи існують для них відповідні за­писи в лівій таблиці.

4) FULL [OUTER] JOIN – в MS Access відсутній. В SQL Server до запиту ввійдуть усі записи з двох таблиць: ті, що задовольняють умові з’єднання, і ті, що не задовольняють.

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 [Підрозділ], [Прізвище] ;

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.

5.6 Предикати

Предикат EXISTS

Він перевіряє, що в підпорядкованому запиті існує бодай один рядок, який задовольняє умовам вибірки. В цьому випадку предикат приймає значення True (істина), а інакше – False (хибність). Немає значення, які саме значення повертає підпорядкований запит. Тому в підзапиті можна використовувати символ * замість конкретних полів. Використання підпорядкованих запитів – це не найкращий спосіб. Краще створювати запит на запиті.

Приклад 5.17. Вивести прізвища людей, яким була нарахована заробітна плата.

SELECT tvidom.fio FROM tvidom

WHERE

(((EXISTS (SELECT * FROM  tzarobitok

WHERE tvidom.tn = tzarobitok.tn)) = True));

Предикати SOME, ANY, ALL

Синтаксис:

Вираз знак порівняння [SOME | ANY | ALL]

(підпорядкований-запит)

Тип даних виразу повинен бути сумісним з типом даних стовп­ця, який повертає підпорядкований запит. Регістр при порівнянні не враховується.

  • ALL – результат приймає значення істина, якщо істинні всі порівняння виразу зі значеннями стовпця підзапиту;

  • SOME або ANY – результат приймає значення істина, якщо значення виразу співпадають бодай з одним зі значень, що повертає підзапит.

5.7 Контрольні питання

1. Яку структуру має команда SELECT ?

2. Які розділи команди SELECT є обов’язковими? Для чого вони призначені? Створення обчислювальних полів.

3. Створення запитів з кількох таблиць. Використання розділу JOIN. Які існують типи з'єднання таблиць?

4. Сортування даних вибірки.

5. Використання розділів GROUP  BY та HAVING.

6. Використання розділу  UNION.

7. Створення перехресного запиту.

8. Як створити нову таблицю для результатів вибірки за допомо­гою команди SELECT ?

9. Яка команда використовується для оновлення даних в таблиці?

10. Використання команди INSERT.

11. Вилучення даних з таблиці за допомогою SQL.

5.8 Індивідуальні завдання

  • Пояснити SQL – коди для всіх завдань свого варіанту з лабораторних робіт №№ 2 – 4.

  • Створити запити свого варіанту, використовуючи мову SQL.

Варіант 1

1. Об’єднати інформацію з архівної таблиці підсумків про про­даж добрив за місяць з даними за поточний місяць про продаж добрив, обсяг замовлення на які становив більше 200 тон.

2. Для вказаного виробника збільшити вартість однієї тони до­брива на 7%. Назву виробника вводити як параметр.

Варіант 2

1. Об’єднати дані архівної таблиці загальної вартості перевезень за січень минулого року з інформацією про перевезення в по­точному місяці. Упорядкувати вибірку за датою.

2. Створити нову таблицю з інформацією про замовлення на пев­ний вид транспорту. Вид транспорту вводити як параметр.

Варіант 3

1. Об’єднати інформацію з архівної таблиці про суми, сплачені в грудні минулого року, з даними про суми, сплачені в цьому році гостями, що зупинялися в готелях більше, ніж на 5 днів.

2. Створити перехресний запит, в якому для кожного рівня серві­су готелю та кожного типу номера підрахувати на скільки днів в середньому замовлявся номер.

Варіант 4

1. Об’єднати інформацію з архівної таблиці про поставки мате­ріалів за лютий минулого року з інформацією про поставки матеріалів за лютий місяць цього року.

2. Для кожного з матеріалів 9вказати назву) підрахувати загальну замовлену кількість.

Варіант 5

1. Об’єднати дані з архівної таблиці про всі сплачені в минулому році суми з інформацією про суми, сплачені в цьому році спо­живачами, які мають пільги. Упорядкувати вибірку за прізви­щем споживача.

2. Вилучити з архівної таблиці інформацію про сплачені спожи­вачами суми за минулий рік.

Варіант 6

1. Об’єднати дані з архівної таблиці про загальну вартість замов­лень за минулий рік для кожного з магазинів з інформацією про вартість замовлень для першого магазину в цьому році. Упорядкувати вибірку за назвою або кодом магазину.

2. Створити перехресний запит, в якому для кожного виробника та кожної назви продукції підрахувати середній обсяг замовле­ної партії.

Варіант 7

1. Об’єднати дані з архівної таблиці про загальну вартість замов­лень для одного з вузлів та інформацію про вартість замовлень для цього ж вузла в цьому році.

2. Вилучити з таблиці інформацію про замовлення, які вже вико­нані, тобто дата їхнього постачання вже минула.

Варіант 8

1. Об’єднати дані з архівної таблиці про загальну вартість прода­них квитків за останні 3 місяці минулого року з інформацією про вартість квитків, проданих в січні цього року. Упорядку­вати вибірку за назвою аеропорту призначення.

2. Створити нову таблицю з інформацією про продаж квитків працівникам авіасервісу в цьому році.

Варіант 9

1. Об’єднати дані з архівної таблиці про вартість лікування тих пацієнтів, що обслуговувались безкоштовно в минулому році, з інформацією про реальну вартість лікування в цьому році пацієнтів тієї ж пільгової категорії, які вже виписані з лікарні. Упорядкувати вибірку за прізвищем пацієнта.

2. До таблиці пацієнтів першої категорії добавити інформацію про пацієнтів другої пільгової категорії.

Варіант 10

1. Об’єднати дані з таблиці про замовлення, що вимагають допо­ставки, з інформацією про замовлення цього року, обсяг яких становить 1000 примірників та більше. Упорядкувати вибірку за прізвищем автора та назвою книги.

2. Збільшити вдвічі замовлену та відправлену кількість книг, які видані в цьому році.

Варіант 11

1. Об’єднати дані з архівної таблиці про продукцію, поставлену на склад в березні минулого року, з інформацією про продук­цію, поставлену в березні цього року. Упорядкувати вибірку за номером цеху.

2. Для кожної назви продукції підрахувати її загальну кількість, що зберігається на складі.

Варіант 12

1. Об’єднати дані з архівної таблиці про сплати абонентів, розмір яких становив більше 100 грн. на місяць, з інформацією про сплати абонентів, які мають пільги, за поточний місяць. Упо­рядкувати вибірку за номером телефону.

2. До таблиці з відомостями про абонентів однієї з пільгових категорій дописати відомості про абонентів ще однієї пільгової категорії. 

ЛІТЕРАТУРА

  1. Інформатика: Комп’ютерна техніка. Комп’ютерні технології. Посібник. /За ред. О.І.Пушкаря – К.: Видавничий центр "Академія", 2001. – 696с.

  2. В.А. Биллиг, М.И. Дехтярь. VBA и Office 2000. Офисное программирование. Москва, «Русская редакция» - 2002 г., 672 с.

  3. Васильев А., Андреев А. VBA в Office 2000: учебный курс. – СПб.: Питер, 2001. –432с.: ил.

  4. Вейскас Д. Эффективная работа с Microsoft Access. – СПб.: Питер, 1999. – 976 с.: ил.

  5. Кузьменко В.Г. VBA 2000. – М.: Издательство БИНОМ, 2000. – 408с.

  6. Санна П. Visual Basic для приложений. СПБ, BHV– 1999 г., 704 с.

  7. Аллен Тейлор. SQL для чайников. – К.: Диалектика

  8. Шкарина Л. Язык SQL: учебный курс. – СПб.: Питер, 2001. – 592с.

З повагою ІЦ "KURSOVIKS"!