
- •2. Типи даних
- •3. Вибірка, або читання даних
- •3.1. Синтаксис оператора select
- •3.2. Використовування умов пошуку для відбору рядків
- •Лекція № тема. Отримання підсумкових даних план
- •1. Агрегатні функції та їх використання
- •2. Сортування результатів запиту
- •Лекція № тема. Прості запити і правила їх виконання план
- •1. Однотабличні запити
- •2. Особливості багатотабличних запитів
- •3. Об'єднання таблиць
- •2. Використовування вкладених запитів
- •3412 Поляків Анатолій Олексійович
- •3412 Поляків Анатолій Олексійович 25.50
- •Лекція № тема: Внесення змін в базу даних. Способи створення баз даних. План:
- •Внесення змін в базу даних.
- •1.1 Додавання інформації в базу даних.
- •1.2. Видалення даних.
- •1.3. Заміна існуючих даних.
- •2.1. Створення баз даних
- •2.2. Створення таблиць.
- •2.3. Модифікація (зміна) таблиць.
- •2.4. Видалення таблиць.
- •2.5. Індекси.
- •2.6. Визначення умов перевірки.
2. Особливості багатотабличних запитів
Найважливішою особливістю запитів SQL є їх здатність визначати зв'язки між декількома таблицями і виводити інформацію з них в термінах цих зв'язків. Такі операції називаються об'єднанням, яке є одним з видів операцій в реляційних БД - адже це є основою реляційного підходу до зберігання даних в таблицях. Використовуючи об'єднання, відбувається безпосереднє скріплення інформації з будь-яким номером таблиці, і. таким чином, створюються зв'язки між порівнянними частинами даних.
При багато табличному запиті, таблиці, представлені у вигляді списку в пропозиції FROM, відділяються один від одного комами. Предикат запиту може посилатися до будь-якого стовпця будь-якої зв'язаної таблиці і, отже, може використовуватися для зв'язку між ними. Звичайно предикат порівнює значення в стовпцях різних таблиць, щоб визначити, чи задовольняє WHERE встановленій умові. До цього імена таблиць в запитах опускалися, тому запрошувалася тільки одна таблиця одночасно. Навіть при запиті з декількох таблиць допускається опускати їх імена, якщо, звичайно, вони різні Тепер же виникає необхідність використовування імен стовпців і таблиць, оскільки в багато табличному запиті можуть виникати неоднозначності.
Припустимо необхідний поставити у відповідність викладачу учбові предмети, які він веде. Фактично SQL доведеться вибирати з таблиці викладачів відповідний йому код і, проглядаючи таблицю предметів, здійснювати пошук відповідного коду. Це можна реалізувати наступним запитом:
SELECT TEACHERS.TFAM, PREDMET.PNAME
FROM TEACHERS, PREDMET
WHERE TEACHERS . TNUM = PREDMET.TNUM;
Висновок цього запиту представлений нижче: TFAM PNAME
Никуліна Фізика
Костирккгн Хімія
Казанко Математика
Позднякова Економіка
Загарійчух Філософія
Оскільки поле TNUM є і в таблиці викладачів, і в таблиці предметів, то імена таблиць повинні використовуватися як префікси, хоча це необхідне тільки у тому випадку, коли два або більш полів мають одне і те ж ім'я. Проте у будь-якому випадку включати ім'я таблиці в запити з об'єднанням зручно для кращого розуміння і несуперечності одержуваних результатів.
При виконанні багато табличного запиту, SQL досліджує кожну комбінацію рядків двох або більш можливих таблиць і перевіряє ці комбінації по їх предикатах. Якщо комбінація проводить таке значення, яке робить предикат вірним, то значення буде вибрано для висновку.
У попередньому прикладі був встановлений зв'язок між двома таблицями в об'єднанні, але, взагалі кажучи, ці таблиці, вже були сполучені через поле TNUM. Цей зв'язок називається поляганням довідкової цілісності, і, використовуючи таке об'єднання в багато табличному запиті, можна витягувати дані в термінах цього зв'язку. Значить в розглянутому прикладі об'єднання стовпці використовуються для визначення предиката запиту, при цьому TNUM стовпці видалені з висновку для обох таблиць, оскільки і без цього зрозуміло, які викладачі ведуть той або інший учбовий предмет.
У свою чергу, об'єднання в багато табличних запитах, які використовують предикати, засновані на рівності, називаються об'єднаннями по рівності. Об'єднання по рівності це самий загальний вид об'єднання, проте існують і інші види об'єднань - фактично можна використовувати будь-якого з реляційних операторів. Прикладом іншого виду об'єднання може служити наступний запит:
SELECT TEACHERS.TFAM, PREDMET.PNAME
FROM TEACHERS, PREDMET
WHERE TEACHERS.TFAM < PREDMET.PNAME
AND TEACHERS.TFAM BETWEEN 'К' AND 'З < ;
TFAM PNAME
Костиркин Фізика
Костиркин Хімія
Костиркин Математика
Костиркин Філософія
Костиркин Економіка
Казанко Фізика
Казанко Хімія
Казанко Математика
Казанко Філософія
Казанко Економіка
Познякова Фізика
Познякова Хімія
Познякова Філософія
Познякова Економіка
У даному випадку запит навряд чи матиме практичне значення - з його допомогою виводиться інформація про викладачів, прізвище яких за абеткою знаходиться раніше, ніж найменування учбового предмету з таблиці PREDMET. при цьому вибираються викладачі з прізвищем, яке укладене між буквами До і З.
Допускається також створювати запити, об'єднуючі більше дві таблиць. Наприклад, необхідно вивести список оцінок, виставлених тим або іншим викладачем. Тоді запит об'єднуватиме відразу три таблиці:
SELECT TEACHERS.TFAM, USP.OCENKA
FROM TEACHERS, PREDMET, USP
WHERE TEACHERS.TNUM = PREDMET.TNUM
AND PREDMET.PNUM = USP.PNUM;
У результаті буде одержано:
TFAM OCENKA
Никуліна 5
Казанко 4
Казанко 4
Позднякова 3
Загарійчук 5
Таким чином, при об'єднанні таблиць, очевидно, добре є видимим логіка зв'язку між даними і можна більше не обмежуватися погляданням однієї таблиці в кожний момент часу. Крім того, об'єднання дозволяє робити складні порівняння між будь-якими полями будь-якого числа таблиць і використовувати одержані результати для того, щоб вирішувати - яку інформацію хотілося б бачити.