русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Прості запити й правила їхнього виконання


Дата добавления: 2015-07-09; просмотров: 539; Нарушение авторских прав


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

Для розміщення декількох запитів разом й об'єднання їхнього висновку використають команду 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

-----------

Поляков

Старова

Гриценко

Котенко

Нагорний

Поляков

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

SELECT SPAM

FROM STUDENTS

UNION

SELECT TFAM

FROM TEACHERS;

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

------------

Поляков

Старова

Гриценко

Котенко

Нагорний

Викулина

Костыркин

Казанко

Позднякова

Загарийчук

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

 

SELECT 'Студент ' SFAM

FROM STUDENTS

UNION

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

FROM TEACHERS;

результат цього запиту наступний:

------------------------------------------------

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

Студент Старова

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

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

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

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

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

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

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

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

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

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

SELECT 'Студент ' SFAM

FROM STUDENTS

UNION'

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

FROM TEACHERS

ORDER BY 2 ASC;

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

-----------------------------------------------------

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

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

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

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

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

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

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

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

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

Студент Старова

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

Крім того, при виконанні об'єднання більш ніж двох запитів, можна використати круглі дужки для того, щоб визначити порядок оцінки. Тобто замість просто запиту

query A UNION query В UNION query З;

можна вказати

(query A UNION query В)UNION query З;

або

query A UNION (query В UNION query З);

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



<== предыдущая лекция | следующая лекция ==>
Сортування результатів запиту | Особливості багатотабличних запитів


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.7 сек.