Мова структурованих запитів SQL. Розробка SQL – запитів

Для цього необхідно виконати команду «Сервис» - «параметри запуска» - та в полі «вывод формы» вибрати кнопкову форму.

Рис.5.2.97.

 

 

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

- який обсяг продажів за останній тиждень, місяць, рік?

- чи збільшився обсяг продажів?

- яких товарів продано найбільше?

- які товари приносять найбільший прибуток?

- обсяг продажів яких товарів падає?

- скільки продано постійним покупцям?

- як продажі розподіляються за регіонами?

Більш 90% запитів SQL, що зустрічається, засновані на запиті Select (запит на вибірку). Запити Select …into (запити на створення таблиці), Insert …into (запити на додаання записів), Delete (запити на вилучення записів), Update (запити на поновлення таблиці) будуються аналогічно запитам на вибірку у MS Access.

Структура запиту на вибірку (інструкція Select).

SELECT [ALL | DISTINCT | DISTINCTROW] [TOP n [PERCENT]] список_полів

FROM ім.‘я_таблиць

[WHERE критерій_відбору]

[ORDER BY стобпці_сортування [ ASC | DESC ]];

Предикати ALL | DISTINCT | DISTINCTROW використовуються для обмеження числа записів, що повертаються.

ALL – відбираються всі записи, відповідним умовам, заданим в інструкції SQL. Наведені нижче інструкції SQL еквівалентні; вони повертають всі записи з таблиці «Продаж»:

SELECT ALL FROM [Продаж] ORDER BY [Товар];

DISTINCT – виключає записи, що містять значення, що повторюються у вибраних полях. Наприклад в таблиці «Продаж» є з однаковими назвами товарів. Якщо декілька записів містять значення «Шафа» в полі «Товар», тоді наступна інструкція SQL поверне тільки одну з них:

SELECT DISTINCT [Товар] FROM [Продаж] ;

Результат виконання інструкції SQL, що містить предикат DISTINCT, є неоновлюваним і не відбиває наступні зміни, внесені іншими користувачами.

DISTINCTROW опускає дані, основані цілком на записах, що повторюються. Наприклад, для відбору товару з таблиці «Продаж» тільки один раз запишемо рядок SQL такого змісту

 

SELECT DISTINCTROW [Товар] FROM [Продаж] ORDER BY [Товар];

TOP n [PERCENT] повертає n(n%) перших записів з всіх, що відбираються запитом. Наступна інструкція SQL дозволяє отримати список 25 назв товарів 2010 року:

SELECT TOP 25 [Товар] FROM [Продаж] WHERE РІК=2010 ORDER BY [Товар];

Список_полів – імена полів, з яких повинні бути відібрані дані. Якщо декілька полів, вони відділяються комами.

FROM ім.‘я_таблиць – визначють імена таблиць із яких запит повинен відібрати дані. Якщо у список_полів включені поля із декількох таблиць, у параметрі ім.‘я_таблиць повинні бути вказані всі таблиці через кому.

Припустимо, що поле «Відділ» міститься у таблицях «Співробітники» і «Керівники». Наступна інструкція SQL відбире поле «Відділ» з таблиці «Співробітники» і поле «Керівник» з таблиці «Керівники»:

SELECT Співробітники. Відділ, Керівники.Керівник

FROM Співробітники INNER JOIN Керівники

WHERE Співробітники. Відділ=Керівники.Керівник;

У випадку, якщо імена полів або таблиць містять пробіли або символи національних алфавітів, що не підтримуються MS Access, імена слід брати у квадратні дужки []. Пропуск дужок в інших випадках не є помилковою.

WHERE критерій_відбору – визначає умову відбору вказаних таблиць. Параметр критерій_відбору є вираз з текстовим оператором типу Like для текстових полів або числовим оператором типу >= для чисових полів. Компонент WHERE не обов‘язковий.

ORDER BY стобпці_сортування – визначає порядок сортування записів за вказаними полями. Використовуючи ключові слова ASC або DESC, можно визначити сортування по зростанню і по зменшенню відповідно.

Якщо необхідно визначити суму, середне або статистичні дані групи записів з загальним значенням атрибуту до оператора SQL додається інструкція GROUP BY разом з HAVING.

SELECT [ALL | DISTINCT | DISTINCTROW]

статистична_функція ( ім.‘я_поля) as заголовок_поля [, список_полів]

FROM імена_таблиць

[WHERE умови_відбору]

GROUP BY умова_групування

[HAVING умова_для_результату]

[ORDER BY стобпці_сортування ;

 

У списку полів список_полів є і статистична функція статистична_функція з ім‘ям одного із полів таблиці (ім‘я_поля) в якості аргумента. Поле, використане як аргумент статистичної функції, повинно мати дані числового типу. Інші ключові слова і параметри SQL, необхідні для створення цього запиту, описані нижче.

AS заголовок_поля. Визначає заголовок стовпця з результатом набору записів. У бланку запиту Access такий заголовок створюється за допомогою запису

заголовок_поля:статистична_функція(ім‘я_поля)

у рядку Field (Поле) структури запиту.

GROUP BY умова_групування. Визначає стовпчик, по значенням якого записи об‘єднуються у групи, до кожного із яких застосовується статистична функція. У режимі конструктора запиту SQL GROUP BY відповідає Group By (Групування) в рядку Total(Групова операція) потрібного поля.

HAVING умова_для_результату. Одна або декілька умов накладаємих на значення стовпця заголовок_поля, отриманих після виконання групування і застосування статистичної функції статистична_функція.

WHERE умова_відборую. Умова для відбору початкових записів перед виконанням групування і з застосуванням статистичної функції.

Приклад:

SELECT Товар,SUM(Вартість) AS Сума

FROM Продаж

WHERE Країна=”Україна”

AND Реалізація BETWEEN #01/1/2010# AND #31/12/2010#

GROUP BY Товар

HAVING SUM(Вартість)>500

ORDER BY SUM(Вартість) DESC;

Результат запиту буде з двох свпців: Товар і Сума для виробника України за період 2010 рок.

Дані будуть відсортовані у порядку зменьшення Вартості продукції.

Створення зв‘язків за допомогою SQL. Для створення зв‘язків між двома або більшою кількістю таблиць і їх об‘єднанням за допомогою інструкції SQL використовується структура JOIN…ON, яка визначає таблицю підключення і зв‘язки між полями.

SELECT [ALL | DISTINCT | DISTINCTROW] список_полів

FROM

ім‘я_таблиці {INNER| LEFT|RIGHT} JOIN зв‘язана_таблиця

[ім‘я_таблиці {INNER| LEFT|RIGHT} JOIN зв‘язана_таблиця

ON умова_зв‘язку]

ON умова_зв‘язку

[WHERE умови_відбору]

[ORDER BY стобпці_сортування ;

 

Ім‘я_таблиці {INNER| LEFT|RIGHT} JOIN зв‘язана_таблиця. Вказує ім‘я двох зв‘язаних таблиць (справа і зліва від команди JOIN) і тип їх об‘єднання. При цьому замість параметру зв‘язана_таблиця також моде стояти конструкція JOIN…ON, вкладена таблиця. Таким чином перша таблиця об‘єднується з об‘єднанням другої і третьої. Замість імені третьої таблиці знову може стояти об‘єднання таблиць і т.д.

ON умова_зв‘язку. Описує два поля і зв‘язок між ними. Одно поле знаходиться у таблиці ім‘я_таблиці, а друге – в таблиці зв‘язана_таблиця. Вираз умова_зв‘язку задаєтьяс операторами порівняння значень полів (=, >, <, <=, >=, <>) і повертає значення True або False.

 

Приклади запитів.

Запит на виборку студентів за номером групи:

SELECT Студенти.[Код студента], Студенти.Прізвище, Студенти.Ім’я, Студенти.[По-батькові], Студенти.[Дата народження], Студенти.[Номер групи], Студенти.Телефон, Студенти.Стипендія

FROM Студенти

WHERE (((Студенти.[Код студента])=[Введіть номер групи]));

 

Запит на вибір дисциплін по групі з таблиць дисципліни і оцінки:

SELECT Студенти.[Номер групи], Дисципліни.[Назва дисципліни], Оцінки.Оцінки

FROM Дисципліни INNER JOIN (Студенти INNER JOIN Оцінки ON Студенти.[Код студента] = Оцінки.[Код студента]) ON Дисципліни.[Код дисципліни] = Оцінки.[Код дисципліни];

Рис.5.2.98.

SELECT Студенти.Прізвище, Студенти.Ім’я, Студенти.[По-батькові], Студенти.[Номер групи], Дисципліни.[Назва дисципліни], Оцінки.Оцінки

FROM Дисципліни INNER JOIN (Студенти INNER JOIN Оцінки ON Студенти.[Код студента] = Оцінки.[Код студента]) ON Дисципліни.[Код дисципліни] = Оцінки.[Код дисципліни]

WHERE (((Студенти.[Номер групи])=[Введіть номер групи]) AND ((Дисципліни.[Назва дисципліни])=[Введіть назву дисципліни]));

Рис.5.2.99.

Запит на створення таблиці:

SELECT Студенти.Прізвище, Студенти.Ім’я, Студенти.[По-батькові], Студенти.[Номер групи], Sum(Оцінки.Оцінки) AS [Sum-Оцінки] INTO [Студенты-отличники]

FROM Студенти INNER JOIN Оцінки ON Студенти.[Код студента] = Оцінки.[Код студента]

GROUP BY Студенти.Прізвище, Студенти.Ім’я, Студенти.[По-батькові], Студенти.[Номер групи]

HAVING (((Sum(Оцінки.Оцінки))=20));

Рис.5.2.100.

Запит на знищення:

DELETE Студенти.Прізвище, Студенти.Ім’я, Студенти.[По-батькові], Студенти.[Номер групи]

FROM Студенти

WHERE (((Студенти.Прізвище)="Перлов") AND ((Студенти.Ім’я)="Кирило") AND ((Студенти.[По-батькові])="Миколайович") AND ((Студенти.[Номер групи])=152));

 

Запит на оновлення:

UPDATE Викладачі SET Викладачі.Зарплата = [Зарплата]*1.1

WHERE (((([Викладачі].[Зарплата])<"І")>500));

 

Перехресний запит:

TRANSFORM Avg([Дисципліна оцінки групи].Оцінки) AS [Avg-Оцінки]

SELECT [Дисципліна оцінки групи].[Назва дисципліни], Avg([Дисципліна оцінки групи].Оцінки) AS [Итоговое значение Оцінки]

FROM [Дисципліна оцінки групи]

GROUP BY [Дисципліна оцінки групи].[Назва дисципліни]

PIVOT [Дисципліна оцінки групи].[Номер групи];

 

Рис.5.2.101.