T id_st, surnamestudent
WHERE surname LIKE А%
Дуже часто виникає необхідність провести обчислення мінімальних, максимальних або середніх значень в стовпцях. Так, наприклад, може знадобитися обчислити середній бал. Для здійснення подібних обчислень SQL надає спеціальні агрегатні функції: - мінімальне значення в стовпці; - максимальне значення в стовпці; - сума значень в стовпці; - середнє значення в стовпці; - кількість значень в стовпці, відмінних від NULL.
Наступний запит рахує середнє серед всіх балів, отриманих студентами на іспитах.
SELECT AVG (mark) mark_st
Природно, можна використовувати агрегатні функції спільно з пропозицією WHERE:
SELECT AVG (mark) mark_st
WHERE id_st=100
Даний запит обчислить середній бал студента з кодом 100 за результатами всіх зданих нею іспитів.
SELECT AVG (mark) mark_st
WHERE id_ex=10
Даний запит обчислить середній бал студентів за результатами складання іспиту з кодом 10.В додаток до розглянутих механізмам мова SQL надає потужний апарат для обчислення агрегатних функцій не для всієї таблиці результатів запиту, а для різних значень по групах. Для цього в SQL існує спеціальна конструкція GROUP BY, призначена для вказівки того стовпця, за значеннями якого буде проводитися угруповання. Так, наприклад, ми можемо обчислити середній бал по всіх іспитах для кожного студента. Для цього досить виконати наступний запит: id_st, AVG (mark)
FROM mark_stBY id_st
Все це, як звичайно, може бути поєднане з пропозицією WHERE. При цьому, не вдаючись у тонкощі виконання запиту внутріСУБД, можна вважати, що спочатку виконується вибірка тих рядків таблиці, які задовольняють умовам із пропозиції WHERE, а потім проводиться групування і агрегування.
Наведемо запит, який обчислює середній бал за оцінками, отриманим на іспиті з кодом 100, для кожного студента.
SELECT id_st, AVG (mark) mark_stid_ex=100
GROUP BY id_st
Зауважимо, що угруповання може виготовлятися більш ніж по одному полю.
Для запитів, що містять секцію GROUP BY, існує важливе обмеження: такі запити можуть включати як результату стовпці, по яких проводиться групування, і стовпці, які містять власне результати агрегування.
Для того щоб форматувати висновок, існують різні можливості SQL. Так, наприклад, допустимим є включення тексту в запит. Розглянемо приклад того, як це робиться:
SELECT Середній бал= raquo ;, AVG (mark) mark_st
WHERE id_ex=10
У результаті даного запиту користувач побачить не просто деяке число, а число, супровід пояснювальний текст.
Як правило, в тих випадках коли виникає необхідність вибирати інформацію з різних таблиць, вони тим чи іншим чином пов'язані один з одним, наприклад відносинами одна до багатьох або один до одного по деякому полю.
Розглянемо відповідну ER-діаграму на малюнку №3.
Малюнок №3.
У цьому прикладі теж присутні пов'язані таблиці. Розглянемо таблиці student, mark_st і exam_st.
Таблиця mark_st пов'язана з таблицею exam_st по полю id_ex.
Таблиця mark_st пов'язана з таблицею student по полю id_st.
Припустимо, потрібно роздрукувати список студентів з оцінками, які вони отримали на іспитах. Для цього необхідно виконати наступний запит: student.surname, mark_st.id_ex, mark_st.mark
FROM student, mark_ststudent.id_st=mark_st.id_st
Відзначимо наступні зміни в порівнянні з запитами до однієї таблиці.
У секції FROM вказані дві таблиці.
Так як таблиць стало більше однієї, з'явилася деяка неоднозначність при згадці полів. Так, у багатьох випадках невідомо, з якої таблиці зі списку FROM брати поле. Для усунення неоднозначності імена полів вказуються з префіксом - ім'ям таблиці. Ім'я таблиці від імені поля відокремлюється крапкою.
У пропозиції WHERE вказано умова з'єднання таблиць.
Неважко помітити, що використання префіксів-імен таблиць сильно захаращує запит. Для того щоб уникнути подібного захаращення, використовуються псевдоніми. Так, можна переписати попередній запит наступним чином:
SELECT E.surname, M.id_ex, M.markstudent E, mark_st ME.id_st=M. id_st
ВИКОРИСТАННЯ SQL ДЛЯ ВСТАВКИ, редагування та видалення даних в таблицю
Для додавання даних в таблицю в стандарті SQL передбачена команда INSERT. Розглянемо ряд прикладів запросов.INTO mark_st (1, 2, 5)
Даний запит вставляє в таблицю mark_st рядок, що містить значення, перераховані в списку VALUES. Якщо не потрібно вказувати значення якогось поля, можна присвоїти йому NULL:
INSERT INTO mark (1, 2, NULL)
У разі якщо необхідно використання для деяких полів значень за замовчуванням, SQL дозволяє явно вказати, які поля необхідно заповнити конкретними даними, а які - значеннями за замовчуванням:
INSERT INTO ...