Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чичкань.docx
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆
      1. 12.3. Використання мови sql для вибору інформації з таблиці

Вибірка даних здійснюється за допомогою оператора SELECT, який є найчастіше використовуваним оператором мови SQL. Синтаксис оператора SELECT має такий вигляд:

SELECT [ALL/DISTINCT] <список атрибутів>/*

FROM <список таблиць>

[WHERE <умова вибірки>]

[ORDER BY <список атрибутів>]

[GROUP BY <список атрибутів>]

[HAVING <умова>]

[UNION<вираз з оператором SELECT>]

У квадратних дужках вказуються елементи, які можуть в запиті бути відсутніми.

Ключове слово ALL означає, що результатом будуть всі рядки, що задовольняють умові запиту, в тому числі і однакові рядки. DISTINCT означає, що в результуючий набір не включаються однакові рядки. Далі йде список атрибутів вихідної таблиці, які будуть включені в таблицю-результат. Символ * означає, що в таблицю-результат включаються всі атрибути вихідної таблиці.

Обов'язковим ключовим словом є слово FROM, за ним слідують імена таблиць, до яких здійснюється запит.

У реченні з ключовим словом WHERE задаються умови вибірки рядків таблиці. У таблицю-результат включаються лише ті рядки, для яких умова, вказана в реченні WHERE, набуває значення істина.

Ключове слово ORDER BY задає операцію впорядкування рядків таблиці-результату за вказаним списком атрибутів.

У реченні з ключовим словом GROUP BY задається список атрибутів групування (роз'яснення цього і наступного ключового слова буде представлене трохи пізніше).

У реченні HAVING задаються умови, що накладаються на кожну групу.

Окремо відзначимо, що ключові слова FROM, WHERE, ORDER BY використовуються аналогічним чином і в інших операторах маніпулювання даними мови SQL.

Розглянемо реалізацію запитів для конкретного прикладу, представленого в лекції 8 (див. мал. 8.1)

Видати список всіх студентів.

SELECT *

FROM student

або

SELECT id_st, surname

FROM student

Відмітимо, що якщо додати до даного запиту речення ORDER BY surname, то список буде впорядкований по прізвищу. За замовчуванням мається на увазі, що сортування проводиться за зростанням. Якщо необхідне впорядкування за спаданням, після імені атрибуту додається слово DESC.

Видати список оцінок, які отримав студент з кодом "1".

SELECT id_st, mark

FROM mark_st

Where id_st = 1

Видати список код студентів, які отримали на іспитах хоч би одну двійку або трійку.

У реченні WHERE можна записувати вираз з використанням арифметичних операторів порівняння (<, >, і т. д.) і логічних операторів (AND, OR, NOT) як і у звичайних мовах програмування.

SELECT id_st, mark

FROM mark_st

WHERE ( MARK >= 2 ) AND ( MARK <= 3 )

Разом з операторами порівняння і логічними операторами для складання умов у мові SQL (із-за специфіки сфери застосування) існують ряд спеціальних операторів, які, як правило, не мають аналогів в інших мовах. Ось ці оператори:

  • IN – входження в деяку множину значень;

  • BETWEEN – входження в деякий діапазон значень;

  • LIKE – перевірка на збіг (спів падіння) із зразком;

  • IS NULL – перевірка на невизначене значення.

Оператор IN використовується для перевірки входження в деяку множину значень. Так, запит

SELECT id_st, mark

FROM mark_st

WHERE mark IN (2,3)

дає той же результат, що і вищезгаданий запит (виведе ідентифікатори всіх абітурієнтів, що отримали хоч би одну двійку або трійку на іспитах).

Того ж результату можна добитися, використовуючи оператора BETWEEN:

SELECT id_st, mark

FROM mark_st

WHERE mark BETWEEN 2 AND 3

Видати список всіх студентів, прізвища яких починаються з букви А.

У цьому випадку зручно використовувати оператора LIKE.

Оператор LIKE застосовується виключно до символьних полів і дозволяє встановлювати, чи відповідає значення поля зразку. Зразок може містити спеціальні символи:

_ (символ підкреслення) – заміщає будь-який одиночний символ;

% (знак відсотку) – заміщає послідовність будь-якої кількості символів.

SELECT id_st, surname

FROM student

WHERE surname LIKE 'А%'

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

  • MIN – мінімальне значення у стовпці;

  • MAX – максимальне значення у стовпці;

  • SUM – сума значень у стовпці;

  • AVG – середнє значення у стовпці;

  • COUNT – кількість значень у стовпці, відмінних від NULL.

Наступний запит підраховує середнє серед всіх балів, отриманих студентами на іспитах.

SELECT AVG(mark)

FROM mark_st

Природно, можна використовувати агрегатні функції спільно з реченням WHERE:

SELECT AVG(mark)

FROM mark_st

WHERE id_st = 100

Даний запит обчислить середній бал студента з кодом 100 за результатами всіх складених ним іспитів.

SELECT AVG(mark)

FROM mark_st

WHERE id_ex = 10

Даний запит вирахує середній бал студентів за результатами складання іспиту з кодом 10.І ще окрім розглянутих механізмів мова SQL надає потужний апарат для обчислення агрегатних функцій не для всієї таблиці результатів запиту, а для різних значень по групах. Для цього в SQL існує спеціальна конструкція GROUP BY, призначена для вказівки того стовпця, по значеннях якого проводитиметься групування. Так, наприклад, ми можемо обчислити середній бал по всіх іспитах для кожного студента. Для цього досить виконати наступний запит:

SELECT id_st, AVG(mark)

FROM mark_st

GROUP BY id_st

Все це, як завжди, може бути поєднано з реченням WHERE. При цьому, не вдаючись до тонкощів виконання запиту усередині СУБД, можна вважати, що спочатку виконується вибірка тих рядків таблиці, які задовольняють умовам з реченням WHERE, а потім проводиться групування і агрегація.

Наведемо запит, який обчислює середній бал по оцінках, отриманих на іспиті з кодом 100, для кожного студента.

SELECT id_st, AVG(mark)

FROM mark_st

WHERE id_ex = 100

GROUP BY id_st

Відмітимо, що групування може проводитися більше ніж по одному полю.

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

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

SELECT 'Середній балл=', AVG(mark)

FROM mark_st

WHERE id_ex = 10

У результаті цього запиту користувач побачить не просто деяке число, а число з супроводжуючим пояснюючим текстом.