Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Особливості мови SQL.doc
Скачиваний:
4
Добавлен:
16.08.2019
Размер:
651.78 Кб
Скачать

Лекція № тема. Прості запити і правила їх виконання план

    1. Однотабличні запити

    2. Особливості багатотабличних запитів.

3. Об'єднання таблиць

1. Однотабличні запити

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

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

SELECT SFAM, SIMA, SOTCH FROM STUDENTS

WHERE SFAM BETWEEN 'K' AND 'C' UNION

SELECT TFAM, TIMA, TOTCH FROM TEACHERS WHERE TFAM BETWEEN 'К' AND 'С';

Результати цього запиту показані нижче:

Каеанко Віталій Володимирович Костиркин Олег Володимирович

Познякова Любов Олексіївна

Котенко Анатолій Миколайович

Нагірний Євгеній Васильович

Поляків Анатолій Олексійович

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

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

Варто звернути увагу на той факт, що UNION автоматично виключатиме дублікати рядків з висновку. Якщо, наприклад, в таблиці STUDENTS з'явиться ще один студент з прізвищем Поляків, то запит

SELECT SFAM FROM STUDENTS

Поляків

Старова

Гріценко

Котенко

Нагірний

Поляків

Тут є дублювання значень SFAM = Поляків, тому що не вказано, щоб SQL усунув дублікати. Проте при використовуванні UNION в комбінації цього запиту з йому подібним в таблиці викладачів, надмірна інформація буде усунена.

SELECT SFAM

FROM STUDENTS UNION

SELECT TFAM FROM TEACHERS;

дає наступні результати без дублювання прізвища Поляків:

Поляків

Старова

Гріценко

Котенко

Нагірний

Никуліна

Костиркин

Казанко

Позднякова

Загарійчук

Іноді виникає необхідність вставляти константи і вирази в пропозиції SELECT, що використовуються з UNION, що є корисною можливістю. Очевидно, що константи і вирази, що використовуються, повинні зустрічати сумісні типи даних. Це властивість корисно, наприклад, щоб відобразити коментарі, вказуючі на те, який запит вивів даний рядок. Модифікуємо попередній запит таким чином:

SELECT 'Студент ' SFAM

FROM STUDENTS

UNION

SELECT 'Викладач' TFAM

FROM TEACHERS;

висновок цього запиту наступний:

Студент Поляків

Студент Гріценко

Студент Котенко

Студент Нагірний

Викладач Никуліна

Викладач Костиркин

Викладач Казанко

Викладач Позднякова

Викладач Загарійчук

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

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

SELECT 'Студент ' SFAM

FROM STUDENTS UNION

SELECT 'Викладач ' TFAM

FROM TEACHERS ORDER 2 ASC;

Висновок цього запиту буде наступний:

Викладач Никуліна Студент Гріценко Викладач Загарійчук Викладач Казанко Викладач Костиркин Студент Котенко Студент Нагірний Викладач Позднякова Студент Поляків Студент Старова Допускається упорядковувати висновок за допомогою декількох полів, одне усередині іншого і указувати фрази ASC або DESC для кожного, так само. як це робиться для одиночних запитів. Необхідно помітити, що номер 2 в пропозиції ORDER указує, який стовпець з пропозиції SELECT буде впорядкований, оскільки стовпці об'єднання - це стовпці висновку, а значить, вони не мають імен і повинні визначатися по номеру.

Крім того, при виконанні об'єднання більш ніж двох запитів, можна використовувати круглі дужки для того, щоб визначити порядок оцінки. Тобто замість просто запиту query А UNION query В UNION query З; можна вказати (query А UNION query В) UNION query З; або query А UNION (query В UNION query З); Це може принципово вплинути на результати запиту, оскільки об'єднання здійснюється спочатку усередині дужок, а потім - зовні. У такий спосіб, наприклад, запити можуть бути скомбіновані для видалення одних дублікатів і залишення інших.