Zagnieżdżanie zapytań i wyszukiwanie danych w dwóch tabelach

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4287 razy

Drodzy Czytelnicy, jak zapewne już wiecie, życie to nie jest bajka tak więc czas zakasać rękawy i zapoznać się z nieco trudniejszymi zapytaniami zagnieżdżonymi i sposobem wyszukiwania danych w dwóch tabelach. Zanim jednak, to najpierw konieczne jest utworzenie w istniejącej już bazie danych library nie jednej a dwóch dodatkowych tabel:

Ponieważ tabele w tej chwili świecą pustkami, wrzućmy do nich niezwłocznie kilka rekordów danych. Dla tabeli users:

insert into users (name, surname) value ('Adam', 'Kowalski'), ('Zenon', 'Pietrucha'), ('Grzegoż', 'Brzęczyszczykiewicz'), ('Leon', 'Zawodowiec'), ('Ania', 'Kopała');

I dla tabeli rent, ale (uwaga, uwaga) z wykorzystaniem polecenia SELECT wewnątrz polecenia INSERT:

insert into rent (id_book, id_user) value ((select id from books where title='Rio Anaconda'), (select id from users where surname = 'Kowalski')), ((select id from books where title='Odyseja kosmiczna 2010'), (select id from users where surname = 'Kowalski')), ((select id from books where title='Odyseja kosmiczna 2001'), (select id from users where surname = 'Zawodowiec'));

Spójrzmy teraz, jak wspaniale wygląda nasza tabelka rent:

mysql> select * from rent;
+----+---------+---------+
| id | id_user | id_book |
+----+---------+---------+
|  1 |       1 |      12 |
|  2 |       1 |       9 |
|  4 |       4 |       8 |
+----+---------+---------+
3 rows in set (0.00 sec)

mysql>

No cóż, szału nie ma, ale takie jest życie. Nie ma co płakać, czas wyświetlić wszystkie książki, jakie wypożyczył użytkownik o nazwisku Kowalski. Zapytanie będzie wyglądało tak:

SELECT books.title, books.author FROM books, rent WHERE rent.id_book = books.id AND rent.id_user = (SELECT id FROM USERS WHERE surname = 'Kowalski');

I cóż my tu u licha mamy? Nie dość, że wykorzystane zostało zagnieżdżone polecenie SELECT to nawiązane zostało połączenie pomiędzy dwiema tabelami: books i rent.

Wynik powyższego zapytania wpisanego w konsoli będzie wyglądał następująco:

mysql> select books.title, books.author from books, rent where rent.id_book = books.id and rent.id_user = (select id from users where surname = 'Kowalski');
+------------------------+-----------------+
| title                  | author          |
+------------------------+-----------------+
| Rio Anaconda           | W. Cejrowski    |
| Odyseja kosmiczna 2010 | Arthur C. Clark |
+------------------------+-----------------+
2 rows in set (0.00 sec)

mysql>