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

2. Сортування результатів запиту

Більшість БД, працюючих з SQL, надає спеціальні засоби, що дозволяють удосконалювати висновок запитів.

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

SELECT SFAM, SIMA, SOTCH, STIP*2 FROM STUDENTS;

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

SFAM SIMA SOTCH

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

Старова Любов Михайлівна 34.00

Гріценко Володимир Миколайович 0.00

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

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

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

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

SELECT SFAM, SIMA, SOTCH, 'y.e.', STIP*2 FROM STUDENTS;

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

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

Старова Любов Михайлівна у.о. 34.00

Гріценко Володимир Миколайович у.о. 0.00

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

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

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

SELECT COUNT (DISTINCT SNUM), 'студ. одержують стипендію ', STIP ' у.о. '

FROM STUDENTS GROUP STIP;

У результаті буде одержано:

STIP

2 студ. одержують стипендію 0.00 у.о.

  1. студ. одержують стипендію 17.00 у.о.

  2. студ. одержують стипендію 25.00 у.о.

Некоректність висновку тексту для стипендії 17.00 не можна уникнути, не створивши складнішої конструкції для висновку. Якомога бачити, незмінний коментар для кожного рядка таблиці може бути дуже корисний, але він має ряд обмежень. Іноді корисно вивести один коментар для всього висновку в цілому або проводити свій власний коментар для кожного рядка, проте це забезпечують різні програми, використовуючі SQL і мають засоби генератора звітів.

Для впорядкування висновку полів таблиць SQL використовує команду ORDER, дозволяючи сортувати висновок запиту згідно значенням в тій або іншій кількості вибраних стовпців. Якщо указується декілька полів, то стовпці висновку упорядковуються один усередині іншого, при цьому можна визначати зростання (ASC) або убування (DESC) для кожного стовпця. За умовчанням встановлено зростання.

Як приклад використовуємо запит, що виводить таблицю з інформацією про студентів в алфавітному порядку прізвищ:

SELECT * FROM STUDENTS ORDER SFAM ASC;

SNUM SFAM SIMA SOTCH STIP

  1. Гріценко Володимир Миколайович 0.00

  2. Котеняті Анатолій Миколайович 0.00

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

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

  2. Старова Любов Михайлівна 17.00

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

SELECT * FROM STUDENTS

ORDER STIP DESC, SFAM ASC;

Результати запиту наступні:

SNUM SFAM SIMA SOTCH STIP

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

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

  2. Старова Любов Михайлівна 17.00

  3. Гріценко Володимир Миколайович О.00

  4. Котеняті Анатолій Миколайович 0.00

Аналогічним чином допускається використовувати ORDER BY відразу з будь-яким числом стовпців, проте поля, по яких відбувається впорядковування, повинні бути вказані в SELECT. Тому запит вигляду:

SELECT SNUM, STIP FROM STUDENTS ORDER SFAM ASC;

буде заборонений, оскільки поле SFAM не було вибраним полем, і GROUP не зміг його знайти для впорядкування висновку.

ORDER може використовуватися з GROUP BY для впорядкування груп, при цьому ORDER повинен бути останнім. Наприклад, виведемо вже розглянутий нами звіт про кількість студентів, одержуючи ту або іншу стипендію, але з впорядковуванням по убуванню розмірів їх стипендій:

SELECT COUNT (DISTINCT SNUM), 'студ. одержують стипендію ', STIP ' у.о.'

FROM STUDENTS GROUP STIP ORDER STIP DESC;

У результаті буде одержано:

STIP

2 студ. одержують стипендію 25.00 у.о.

  1. студ. одержують стипендію 17.00 у.о.

  2. студ. одержують стипендію 0.00 у.о.

Замість імен стовпців, можна указувати їх порядкові номери для вказівки поля, що використовується у впорядкуванні висновку. Ці номери можуть посилатися не на порядок стовпців в таблиці, а на їх порядок у висновку. Таким чином, поле, згадане в пропозиції SELECT першим, для ORDER має номер 1 незалежно від того, яким по порядку воно стоїть в таблиці. Наприклад, запит, що виводить інформацію про студентів в алфавітному порядку прізвищ, можна записати так:

SELECT SNUM, SFAM, SIMA FROM STUDENTS ORDER BY 2 ASC;

Висновок цього запиту приведений нижче: SNUM SFAM SIMA

  1. Гріценко Володимир

  2. Котенко Анатолій

  3. Нагірний Євгеній

  1. Поляків Анатолій

  2. Старова Любов

Основна мета ключового слова ORDER - дати можливість використовувати цю команду із стовпцями висновку так само. як і із стовпцями таблиці - адже іноді вимагається провести впорядковування висновку по стовпцях, вироблюваних агрегатною функцією, константами або виразами в пропозиції SELECT запиту. Наприклад, спробуємо розглянути звіт про кількість студентів, одержуючих ту або іншу стипендію, але з впорядковуванням по убуванню кількості студентів: SELECT COUNT (DISTINCT SNUM), 'студ. одержують стипендію ', STIP 'у.о.' FROM STUDENTS GROUP STIP ORDER 1 DESC;

У результаті буде наступний висновок:

STIP

2 студ. одержують стипендію 25.00 у.о.

2 студ. одержують стипендію 0.00 у.о.

1 студ. одержують стипендію 17.00 у.о. Отже, необхідно використовувати номер стовпця, оскільки стовпець висновку не має імені: і не можна використовувати саму агрегатну функцію.

Таким чином, використовуючи команду ORDER можна примусити запити упорядковувати висновок даних для підвищення зручності користування ними.