Інструкції SQL та їх приклади
Інструкції SQL поділяються на такі категорії: • інструкції Мови Визначення Даних (DDL- data definishion language); • інструкції Мови Маніпулювання Даними (DML- data manipulation language).
Інструкції DDL використовуються для створення, зміни, вилучення об'єктів бази даних, зміни імен схеми бази даних, вилучення даних. Створення таблиць. Для створення таблиць використовується інструкція CREATE TABLE. Наприклад, інструкція створення таблиці ПРАЦІВНИКИ буде мати такий вигляд: CREATE TABLE ПРАЦІВНИКИ ([ТАБЕЛЬНИЙ НОМЕР] DOUBLE, [ПРІЗВИЩЕ] TEXT (20), [ПОСАДА] TEXT (15), [ОКЛАД] FLOAT); Додавання та вилучення полів. За допомогою команди ALTER TABLE можна додавати, вилучати та змінювати поля. Для додавання поля використовується параметр ADD COLUMN, для вилучення стовпчика — DROP COLUMN. Наприклад, для додавання у таблицю ПРАЦІВНИКИ поля ДОМАШНЯ АДРЕСА типа TEXT довжиною ЗО символів потрібно записати інструкцію такого вигляду: ALTER TABLE ПРАЦІВНИКИ ADD COLUMN [ДОМАШНЯ АДРЕСА] TEXT (ЗО); Для змінення поля спочатку необхідно його вилучити, а потім -додати. Наприклад, необхідно збільшити розмір поля ПОСАДА до 25 символів: ALTER TABLE ПРАЦІВНИКИ DROP COLUMN [ПОСАДА]; ALTER TABLE ПРАЦІВНИКИ ADD COLUMN [ПОСАДА ] TEXT (25); Створення та вилучення індексів. Індекс можна створити зи допомогою інструкцій CREATE TABLE, CREATE INDEX та ALTER TABLE. Під час створення індексу необхідно задавати його тип, який може приймати такі значення: • UNIQUE — визначає поле або декілька полів (складений індекс) як унікальний ключ; • PRIMARY KEY — визначає поле або набір полів як первинний ключ; • FOREIGN KEY — визначає поле або декілька полів як зовнішній ключ. Наприклад, для таблиці ТАБЕЛЬ необхідно створити первинний індекс за полями МІСЯЦЬ та ТАБЕЛЬНИЙ НОМЕР різними методами:
a) під час створення таблиці: CREATE TABLE ТАБЕЛЬ ([МІ СЯЦЬ] INTEGER,[ТАБЕЛЬНИЙ НОМЕР] DOUBLE, [КІЛЬ КІСТЬ ВІДПРАЦЬОВАНИХ ДНІВ] DOUBLE, CONSTRAINТ ІНДЕКС_МІС_ТАБ PRIMARY KEY ([МІСЯЦЬ], [ТАБЕЛЬНИМ НОМЕР])); b) створення індексу для існуючої таблиці за допомогою інструкції CREATE INDEX: CREATE PRIMARY KEY INDEX ІНДЕКС_МІС_ТАБ ON ТАБЕЛЬ ([МІСЯЦЬ], [ТАБЕЛЬНИЙ Ho МЕР]); (Потрібно пам'ятати, що таблиця може мати тільки один індекс типу PRIMARY KEY) c) додавання індексу до існуючої таблиці за допомогою інструкції ALTER TABLE: ALTER TABLE ТАБЕЛЬ ADD CONSTRAINT ІНДЕКС_МІС_ТАБ PRIMARY KEY ([МІСЯЦЬ], [ТАБЕЛЬНИЙ НОМЕР]); Інструкції DML використовуються для вибирання, додавання, вилучення та модифікації записів у таблицях. Вибирання записів. Інструкція SELECT вибирає записи з бази даних у тимчасовий об'єкт RECORDSET. Ці записи надалі можна виводити на екран, вилучати, змінювати та використовувати у звітах. Формат інструкції SELECT: SELECT [предикат] <список полів або виразів> FROM <таблиці>[ IN <зовнішня база даних>] [WHERE <умова вибирання записів>] [GROUP BY <список полів>] [HAVING <критерій>] [ORDER BY <список полів>] [WITH OWNERACCESS OPTION ]; Предикат використовується для обмеження кількості записів, що вибираються, і може приймати такі значення: ALL (всі записи), DISTINCT (записи, значення в яких повторюються, вибираються один раз) або ТОР (вибирає задану кількість перших записів). За замовчанням використовується значення ALL. Замість списку полів може задаватися символ «*», що означає вибрати всі поля із заданої таблиці. Полю або виразу можна надати нову назву таким чином: <ім'я поля(вираз)> AS <назва> (наприклад, АДРЕСА AS ДОМАШНЯ АДРЕСА; КІЛЬКІСТЬ* ЦІНА AS ВАРТІСТЬ). Речення FROM використовується для задання таблиць, з яких вибираються записи. Якщо треба вибрати поля з кількох таблиць, перед їх іменами потрібно задавати ім'я таблиці з символом «.» (наприклад, ТАБЕЛЬ.ТАБЕЛЬНИЙ НОМЕР). Речення WHERE визначає умову відбирання записів з бази даних. Якщо WHERE відсутнє, вибираються всі записи заданих таблиць. Наприклад, для того, щоб вибрати записи за місяці 1-ий, 2-ий, 3-ий можна записати: WHERE МІСЯЦЬ BETWEEN 1 AND 3.
Приклад 1. Вибрати всі поля всіх записів таблиці ТАБЕЛЬ: SELECT * FROM ТАБЕЛЬ Приклад 2. Визначити прізвища перших трьох працівників, котрі мають більший оклад, ніж інші: SELECT TOP 3 Працівники.Прізвище FROM Працівники ORDER BY Працівники.Оклад DESC; У цьому прикладі DESC означає сортування записів у порядку зменшення значень. Приклад 3. Визначити КІЛЬКІСТЬ ВІДПРАЦЬОВАНИХ ДНІВ працівника з табельним номером 1234 у 2 місяці: SELECT Табель.[Кількість відпрацьованих днів] FROM Табель WHERE (((Табель.Місяць)=2) AND ((Табель.[Табельний номер])=1234));
Речення GROUP BY дозволяє з'єднати записи з однаковими значеннями заданих полів (таких як МІСЯЦЬ, ТАБЕЛЬНИЙ НОМЕР) в один запис. Якщо в інструкцію SELECT додати агрегатну функцію SQL (SUM, AVG, тощо), для кожного запису створюється підсумкове значення. Наприклад, необхідно визначити суми окладів по кожній посаді. На рис. 10.141 відображено інструкцію запиту та результат його виконання.
Речення HAVING є необов'язковим і визначає, які згруповані записи повинні бути вибрані інструкцією SELECT з реченням GROUP BY. Наприклад, необхідно визначити суми окладів по посадах «Секретар» та «Економіст». У цьому випадку запит буде мати такий вигляд: SELECT Працівники.Посада, SUМ([Оклад]) AS [Сума окладів] FROM Працівники GROUP BY Працівники.Посада HAVING ПОСАДА="Економіст" OR ПОСАДА="Секретар"; Параметр WITH OWNERACCESS OPTION дає змогу користувачам, котрі не мають доступу до початкових таблиць, переглядати дані запиту. Для створення запитів на основі кількох таблиць речення FROM має такий формат: FROM <таблиця1> <тип з'єднання> <таблиця2> ON <таблиця1>.<поле>=<таблиця2>.<поле>. Тип з'єднання може приймати такі значення: · INNER JOIN — з'єднуються записи з двох таблиць, в яких зустрічаються однакові значення у полі, яке є спільним для обох таблиць; · LEFT JOIN — з'єднуються всі записи з першої таблиці і тільки ті записи з другої таблиці, в яких значення спільного поля збігаються; · RIGHT JOIN з'єднуються всі записи з другої таблиці і тільки ті записи з першої таблиці, в яких значення спільного поля збігаються;
Наприклад, з таблиць РОБОЧІ ДНІ, ПРАЦІВНИКИ та ТАБЕЛЬ треба вибрати записи за місяць, значення якого запрошується під час виконання запиту та в яких нарахована заробітна плата >700. У запит включити лише такі поля: МІСЯЦЬ, ПРІЗВИЩЕ, НАРАХОВАНО (розрахункове поле). Виконати сортування записів по полям МІСЯЦЬ та ПРІЗВИЩЕ. Інструкція SQL для розв'язання цієї задачі буде мати такий вигляд: SELECT Табель.Місяць, Працівники.Прізвище, [Працівники]![Оклад]/[Робочі дні]![Кількість робочих днів]*[Табель]![Кількість відпрацьованих днів] AS НАРАХОВАНО FROM [Робочі дні] RIGHT JOIN (Працівники RIGHT JOIN Табель ON Працівники.[Табельний номер] = Табель.[Табельний номер]) ON [Робочі дні].Місяць = Табель.Місяць WHERE (((Табель.Місяць)=[Уведіть номер місяця]) AND (([Працівники]![Оклад]/[Робочі дні-]![Кількість робочих днів]* [Табель]'.[Кількість відпрацьованих днів])>700)) ORDER BY Табель.Місяць, Працівники.Прізвище;
Читайте также: Завдання 3. Створити запит з розрахунком всередині інструкції Select. Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|