- •Загальні відомості
- •Поняття відношень
- •Реляційна база даних „успішність”
- •Операції реляційної алгебри
- •Теоретико-множинні операції ра
- •Операції, властиві тільки ра
- •Реляційне числення
- •Квантор існування. З'єднання
- •Квантор загальності. Ділення
- •Типи даних
- •Створення простого запиту в sql
- •Групування даних
- •Багатотабличні запити
- •Природне з'єднання
- •Тета-з'єднання
- •Зовнішнє з'єднання
- •Використання оператора join в інструкції from
- •Операції реляційної алгебри в sql-92
- •Підзапити у sql
- •Способи включення підзапиту в запит
- •Особливості синтаксису включення підзапиту
- •Підзапит в цільовому списку
- •Підзапити в інструкції where. Некорельований підзапит
- •Корельовані підзапити
- •Квантор існування в підзапитах
- •Оператори all, any, some
- •Оператори модицікації даних
- •Мова опису даних
- •Представлення
- •Висновок
- •Лабораторний практикум Лабораторна робота № 1
- •Лабораторна робота № 2
- •Контрольні завдання по sql
- •Бібліографічний список
Типи даних
У РМД розрізняють поняття базового типу даних і поняття домену. Однак більшість сучасних реалізацій SQL не використовують поняття домену безпосередньо. Полю приписується тільки один з базових типів. Правда, часткова реалізація поняття домену в багатьох сучасних СУБД закладена можливістю визначення обмежень і правил на значення даних у полі, але за семантичною стороною питання як і раніше стежить користувач СУБД, оскільки для операцій порівняння СУБД завжди враховує тільки базовий тип поля.
Більш того, визначення самих базових типів даних є областю, в якій більшість комерційних СУБД проявляють свою індивідуальність. Зазвичай допускається зберігання символьних, числових даних, бітових рядків, спеціалізованих числових даних (таких, як "гроші"), а також спеціальних "темпоральних" даних (дата, час, часовий інтервал). Реальні назви типів та їх визначення сильно залежать від конкретної СУБД.
Створення простого запиту в sql
Запит - це питання, яке прикладна програма задає БД і отримує відповідь у вигляді набору записів, що відповідають певним критеріям і містять інформацію з вибраних полів. Запити не припускають тривалого зберігання одержуваних даних. Відповідні набори даних (таблиці, не обов'язково є відношеннями), якщо не вказано протилежне, завжди є динамічними структурами. Їх також називають DYNASET.
За вилучення інформації з БД відповідає оператор SELECT, який, крім цього, здатний виконувати ще масу функцій. Його повний вид може бути описаний таким чином:
SELECT [ALL | DISTINCT] select_list [INTO [new_table_name]]
[FROM <table_name | view_name> [(optimizer_hints)]
[[, <table_name2 | View_name2> [(optimizer_hints)]
[..., <table_name16 | View_name16> [(optimizer_hints)]]]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
[ORDER BY clause]
[COMPUTE clause]
Простий запит SQL заснований на трьох ключових словах оператора SELECT: SELECT (визначає список полів DYNASETS), FROM (вказує таблиці-джерела), WHERE (визначає умови відбору).
SELECT *
У своїй найпростішої формі SELECT надає всі дані з таблиці:
SELECT * FROM <ТАБЛИЦЯ>
Проекція
Вибір декількох полів з таблиці здійснюється простим переліченням. Крім того, DYNASET містить поля в тому порядку, в якому вони вказані в списку, так що для перестановки полів таблиці місцями (сортування полів) досить вказати в SELECT необхідний порядок проходження.
SELECT <ім'я поля1>, <ім'я поля2>, ... FROM <ТАБЛИЦЯ>
Іноді між стовпцями необхідна вставка деякого рядка з фіксованим значенням.
Запит: Вивести прізвища студентів та їх адреси, розділені фразою "проживає за адресою".
Рішення:
SELECT СПрізв, 'проживає за адресою', САдреса FROM СТУДЕНТ.
Результат:
СПрізв |
|
САдреса |
Іваненко І. І. |
проживає за адресою |
А1 |
Іваненко І. І. |
проживає за адресою |
А2 |
Петрова П. П. |
проживає за адресою |
А3 |
Андрєєва О. О. |
проживає за адресою |
А4 |
Синтаксис:
SELECT column_name | 'string literal' [, column_name | 'string_literal' ...] FROM table_name
Ім'я будь-якого стовпця в DYNASET може не збігатися з ім'ям відповідного поля вихідної таблиці.
Рішення (2):
SELECT ПІБ = СПрізв, 'проживає за адресою', Адреса = САдреса
FROM СТУДЕНТ.
Результат:
СПрізв |
|
САдреса |
Іваненко І. І. |
проживає за адресою |
А1 |
Іваненко І. І. |
проживає за адресою |
А2 |
Петрова П. П. |
проживає за адресою |
А3 |
Андрєєва О. О. |
проживає за адресою |
А4 |
Синтаксис:
SELECT columnheading = columnname [, column_name ...] FROM tablejiame SELECT column_name column_heading [, column_name ...] FROM table_name
Оскільки в результаті операції вертикальної проекції може з'явитися набір записів,який не буде відношенням (що містить однакові рядки), то в SQL для усунення з результуючого набору повторюваних рядків використовується ключове слово DISTINCT:
Синтаксис:
SELECT {DISTINCT | ALL} <цільовий список> FROM <ТАБЛИЦЯ>. За замовчуванням використовується ключове слово ALL.
Обчислення та поля, що обчислюються
Оператор SELECT допускає використання в цільовому писку полів, що обчислюються.
Запит. Нехай оцінка, яку отримав студент, має бути переведена в бали деякого рейтингу = оцінка*100. Обчислити бал, отриманий студентом за кожний екзамен.
Рішення.
SELECT ID_Stud, Оцінка*100 FROM УСПІШНІСТЬ
Більш того, якщо потребується обчислити значення якогось виразу, який не пов'язаний з БД, використовується оператор SELECT:
Приклад: SELECT exp(0) повертає значення 1.
Синтаксис будь-якого арифметичного оператора цілком традиційний , різниця лиш в тому, що в якості операндів чи параметрів функцій може виступати ім’я стовпця. Різні реалізації SQL мають велику кількість вбудованих функцій для роботи з базовими типами даних. Коротко згадаємо можливості, які часто зустрічаються буз конкретизації синтаксису.
• Робота з числовими даними: модуль, елементарну математичні, тригонометричні функції, перетворення градусів у радіани і навпаки, функції округлення, відокремлення цілої частини і інше.
• Робота з символьними даними: злиття строк, отримання ASCII коду, отримання позиції першого включення підстроки та деякі інші функції пов’язані з позиціонуванням символів у стоці, перетворення нижнього регістра в верхній та навпаки і таке інше.
• Робота за даними типу ДАТА: отримання поточної дати, збільшення будь-якої частини дати на задане число, обчислення кількості днів у заданому проміжку, отримання символьного анагола місяця, дня тижня да деякі іншу
• Системні функції: отримання імені таблиці чи стовпця, першого ненульового елемента, ключа таблиці чи БД та багато інших.
Вибірка
Для задання умови вибірки в операторі SELECT використовується ключове слово WHERE
Синтаксис:
SELECT <ЦІЛЬВИЙ СПИСОК> FROM <ТАБЛИЦЯ> WHERE <БУЛЕВИЙ ВИРАЗ>
При формуванні умови на горизонтальну проекцію <БУЛЕВИЙ ВИРАЗ> будується з одного або більше логічних виразів, які дають оцінку TRUE або FALSE для кожного запису. В якості операндів можуть використовуватись імена полів, константи або параметри. В якості логічних операндів SQL підтримує наступні:
порівняння (=, <>, (!=), >=, <=, !>, !<);
булеві (“AND”, “OR”, “NOT”);
(NOT) LIKE – використовується для пошуку підстрочки у строчці
(NOT) IN – визначає, чи знаходиться значення в наборі даних;
(NOT) BETWEEN [початок інтервалу] AND [кінець інтервалу] – використовується для визначення, чи потрапило значення в даний діапазон
IS (NOT) NULL – визначає наповненість поля (перевіряє чи присвоєно значення полю можна тільки цим оператором)
Вираз LIKE допускає наступні шаблони та регулярні вирази:
% (*) – будь-яка кількість символів, включаючи нульову;
_(?) – будь-який одиничний символ;
[ ] – будь-який одиничний символ з перелічених в дужках (перелічення без пропусків та інших розділювачів, допускається вказування інтервалу, наприклад, А-С= від А до С);
[^ ] - будь-який одиничний символ з перелічених в дужках не має зустрічатися у строчці (перелічення без пропусків та інших розділювачів, допускається вказування інтервалу).
Приклади використання LIKE:
LIKE ‘N%’ будь яка строчка, що починається з символу N
LIKE ‘%A%’ будь яка строчка, що містить А
LIKE ‘___tion’ будь яке слово з семи літер, що закінчується на tion
LIKE ‘[cf]%’ будь яка строчка,що починається з с або f
LIKE '[s-v]%ing' будь яка строчка, що починається з літери s, t, u, v та закінчується на ing
LIKE 'M[Af]%' будь яка строчка, що починається на М за якою не слідує літера f.
Результат порівняння з полем, яке містить предикат NULL, який означає, що значення не визначено, завжди дає FALSE. Наприклад, якщо поле Оцінка в деякому записі не має значення, то результат любого порівняння
Оцінка<5; Оцінка>5; Оцінка=5
буде хибним. Більш того, запис
Оцінка=NULL, (Оцінка!=NULL)
Не коректна. Порівняння з NULL виконується за допомогою спеціального оператора IS (NOT IS).
Запит: Вивести підсумки здачі іспитів на оцінку нижче, ніж 4.
Рішення: SELECT * FROM УСПІШНІСТЬ WHERE Оцінка <4
Запит: Вивести результати складених іспитів.
Рішення:SELECT * FROM УСПІШНІСТЬ WHERE Оцінка BETWEEN 3 AND 5
Запит: Вивести інформацію про Іваненкоа І.І. і Петрову П.П. (оскільки не уточнюється номер Іваненкоа І. І., то виведуться відомості про всіх, наявних в БД Іваненкоих І. І.)
Рішення: SELECT * FROM СТУДЕНТ WHERE СПрізв IN ('Іваненко І.І.', 'Петрова П.П.')
Запит: Вивести результати іспитів з курсів «бази даних» і «бази знань».
Рішення: SELECT * FROM УСПІШНІСТЬ WHERE КУРС LIKE '% Баз%'
Запит: Вивести інформацію про студентів, які не мають консультантів.
Рішення: SELECT * FROM СТУДЕНТ WHERE Консультант IS NULL
Сортування рядків
Отриманий DYNASET можна відсортувати по одному або декільком ключам.
Синтаксис:
SELECT <цільовий список> FROM <ТАБЛИЦЯ>