Практична роботи № 7
Тема: Вибірка даних з кількох таблиць
Мета: Навчитися будувати складні запити на вибирання даних з кількох таблиць. Навчитися об’єднувати запити та отримувати з бази даних необхідну інформацію.
1 Теоретичні відомості
Вибирання даних з кількох таблиць. При написанні запитів часто потрібна інформація для вибирання даних з кількох таблиць. Для цього таблиці необхідно зв’язати. Зв’язок — це відповідність між рядками двох таблиць; зв’язок між таблицями встановлюється по значеннях полів (тобто таблиці не можуть бути зв’язані "взагалі", вони обов’язково зв’язуються по деяких значеннях полів). Вибір полів, по яких проводиться зв’язування, визначає тип зв’язку: Є три типи зв’язків між таблицями:
один до багатьох;
багато до багатьох;
один до одного.
Найпоширенішим є зв’язок один до багатьох.
Для об’єднання таблиць по полях table1.id і table2.i d використовується оператор:
SELECT * FROM table1,table2 WHERE table1.id і = table2.id;
Приклади таблиць і запиту на їх зв’язок. Для прикладу розглянемо дві таблиці:
ГРУПА (КодГрупи, НаваГрупи, Курс, ЧислоСтудентів, ПрізвищеКуратора, ІмяКуратора);
СТУДЕНТИ(Код_Студента Прізвище_Студента Ім’я_Студента Код_Групи).
В таблиці ГРУПА первинним ключем є поле Код групи, а в таблиці СТУДЕНТИ – поле Код_Студента. Створимо структури цих таблиць:
Перевірка структур створених таблиць:
Наповнення таблиць:
Для реалізації зв’язку таблиці СТУДЕНТИ вчаться в групі (таблиця ГРУПИ) використовується команда:
SELECT * FROM СТУДЕНТИ, ГРУПИ
WHERE СТУДЕНТИ. Код_Групи = ГРУПИ. КодГрупи;
Запити на зв’язок таблиць по полях СТУДЕНТИ. Код_Групи і ГРУПИ. Код групи і результати їх виконання:
Запит з використанням даних з двох зв’язаних таблиць має такі особливості:
В виразі FROM вказані дві таблиці, так як запит буде одержувати інформацію з обох.
При об’єднанні інформації з декількох таблиць необхідно вказати, як рядки одної таблиці зв’язується з записами другої. Це просто, так як в обох таблицях є стовпець з іменами. Тут вираз WHERE використовується для співставлення записів з двох таблиць по значенням імен.
Так як стовпець Т1 присутній в обох таблицях, то потрібно явно вказати, яку таблиця мається на увазі. Це можна зробити, уточнивши поле іменем таблиці з іменем стовпця.
Таблицю також можна об’єднати саму з собою
mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
-> FROM t_name AS p1, t_name AS p2
-> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m";
+--------+------+--------+------+---------+
| name | sex | name | sex | species |
+--------+------+--------+------+---------+
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
| Buffy | f | Bowser | m | dog |
+--------+------+--------+------+---------+
В запиті вказуються псевдоніми імен таблиці, для звернення до стовпців і визначення, до якої з таблиць відноситься кожне посилання на стовпець.
Тепер можливо виконати запит з об'єднанням цих двох таблиць із ключем id (Всі небілі футболки, що належать людям, чиї імена починаються з 'Lilliana'):
SELECT s.* FROM persons p, shirts s
WHERE p.name LIKE 'Lilliana%'
AND s.owner = p.id
AND s.color <> 'white';
+---+------+---------+--------+
| id | style | color | owner |
+---+------+---------+--------+
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
+---+-------+--------+--------+
