
- •Практичні завдання
- •2.Робота із запитами Теоретичні відомості
- •Практичні завдання
- •3. Функції маніпулювання даними Теоретичні відомості
- •Практичні завдання
- •Теоретичні відомості
- •Практичні завдання
- •5. Об’єднання таблиць Теоретичні відомості
- •Практичні завдання
- •7. Представлення Теоретичні відомості
- •Практичні завдання
- •8. Індекси. Зовнішній ключ Теоретичні відомості
- •Практичні завдання
- •9. Транзакції Теоретичні відомості
- •Практичні завдання
- •10. Проектування власної бази даних MySql
7. Представлення Теоретичні відомості
Представлення (views — в’ювери) — це віртуальні таблиці. На відміну від звичайних таблиць, що містять дані, представлення містить запит, який видає дані динамічно, коли представлення використовується. Найкраще зрозуміти призначення представлень можна на прикладі. Припустимо, треба дізнатися з бази даних студенти скільки студентів платної форми навчання навчається на спеціальності “практична психологія”. Для цього достатньо виконати
наступний запит:
SELECT sp.Name as Name, count(*) as cnt FROM students AS st
LEFT JOIN speciality AS sp ON (sp.ID=st.speciality_ID)
WHERE st.paid=1 and sp.Name LIKE ’%Практична психологія%!group by sp.Name
Якщо згодом потрібно буде дізнатися кількість платників на іншому факультеті, то достатньо буде змінити останню умову LIKE в цьому запиті. Будь-якій іншій людині, якій потрібні такі дані, слід написати такий запит, а для цього треба добре знати структуру бази Univerі вміти використовувати оператори об’єднання таблиць. Тепер уявіть, якщо б ви мали можливість оформити загальний запит (без умови LIKE) в окрему таблицю Spec_paid(платники по спеціальностях), то запит про кількість платників на спеціальності “практична психологія”
виглядав би так:
Select * from spec_paid
WHERE Name LIKE ’%Практична психологія%’
Саме в таких ситуаціях і використовуються представлення.Spec_ paidє представленням і тому воно не має реальних стовпців чи даних,інакше це була б таблиця, яку потрібно було щоразу обновлювати при внесенні нового студента платної форми навчання. На відміну від звичайної таблиці Specpaidмістить не дані, а запит, який виконується при звертанні до Specpaid.
Синтаксис
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { користувачіCURRENT USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW назва_представлення[(список стовпців)]
AS конструкція_Seleсt
[WITH [CASCADED | LOCAL] CHECK OPTION]
Практичні завдання
Примітка. Завдання виконувати в базі даних univer.
Створити представлення, яке дозволить дізнатися про кількість студентів платної форми навчання в залежності від вибраної спеціальності:
Переходимо до БД univer та створюємо представлення. Для цього заходимо в пунк меню SQL та вписуємо наступне:
CREATE VIEW spec_paid AS
SELECT sp.Name as Name, count(*) as cnt FROM students AS st
LEFT JOIN speciality AS sp ON (sp.ID=st.speciality_ID)
WHERE st.paid=1 group by sp.Name;
Використовуючи створене представлення, дізнатися про кількість студентів платної форми навчання для довільної спеціальності.
Після того як ми створили представлення, переходимо в новостворене представлення - spec_paid і вводимо запит щоб дізнатися про кількість студентів платної форми навчання.
SELECT *
FROM spec_paid
WHERE name = 'Програмні системи'
LIMIT 0, 30
Створити представлення stud для таблиці students, яке відображає студентів одного факультету.
Щоб створити це представлення, переходимо назад до БД univer та в SQL запиті пишемо:
create view stud as
select st.id as Number, st.name as Name, st.course as Course, fa.name as Faculty from students as st
left outer join faculty as fa on (fa.id=st.faculty_id)
where st.faculty_id=3;
Використовуючи представлення stud, дізнатися скільки студентів навчається на четвертому курсі.
Перейти в новостворене представлення stud, та ввести запит щоб дізнатися скільки студентів навчається на 4-тому курсі.
SELECT *
FROM stud
WHERE course='4'
LIMIT 0, 30