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

 

Більшість БД, що працюють з 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    
Поляків Анатолій Олексійович у.е. 51.00
Старова Любов Михайлівна у.е. 34.00
Гриценко Володимир Миколайович у.е. 0.00
Котенко Анатолій Миколайович у.е. 0.00
Нагорний Євгеній Васильович У.е. 51.00

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

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

FROM STUDENTS GROUP BY STIP;

 

В результаті буде отримано:

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

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

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

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

SELECT * FROM STUDENTS ORDER BY SFAM ASC;

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

SNUM SFAM SIMA SOTCH  
Гриценко Володимир Миколайович 0.00
Котенко Анатолій Миколайович 0.00
Нагорний Євгеній Васильович 25.50
Поляків Анатолій Олексійович 25.50
Старова Любов Михайлівна 17.00

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

SELECT * FROM STUDENTS ORDER BY STIP DESC, SFAM ASC;

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

SNUM SFAM SIMA SOTCH  
Нагорний Євгеній Васильович 25.50
Поляків Анатолій Олексійович 25.50
Старова Любов Михайлівна 17.00
Гриценко Володимир Миколайович 0.00
Котенко Анатолій Миколайович 0.00

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