Mitu-mitmele seos Põhitabeliteks asukohad ja turistid. Seosetabeliks kylastused asukohad (id, nimetus) turistid (id, eesnimi) kylastused (id, asukoha_id, turisti_id) * Koosta tabelid, asukoha_id ja turisti_id on võõrvõtmed (FOREIGN KEY). * Lisa igale poole mõned andmed. * Näita välja kõik külastused, st. loetelu asukohtade ja turistide paaridest. (Külastuste tabelis seovad numbrid, aga päring näitab nimed tekstina) * Näita välja ühe turisti kõik asukohad, kus ta käinud on. * Näita välja ühes asukohas käinud kõik turistid. * Näita välja asukohad, millel on uuritava asukohaga kasvõi üks ühine külastaja. * Näita välja asukohad, millel pole uuritava asukohaga ühki ühist külastajat. Asukohad (id, nimetus) Turistid (id, eesnimi) Kylastused (id, asukoha_id, turisti_id,) CREATE TABLE asukohad increment ID not primary key CREATE TABLE asukohad( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nimetus varchar(50)); Insert into asukohad (nimetus) values ('Tallinn'); Insert into asukohad (nimetus) values ('Paide'); Insert into asukohad (nimetus) values ('Praha'); Insert into asukohad (nimetus) values ('Lissabon'); Insert into asukohad (nimetus) values ('Viljandi'); Insert into asukohad (nimetus) values ('Riia'); +----+----------+ | id | nimetus | +----+----------+ | 1 | Tallinn | | 2 | Paide | | 3 | Praha | | 4 | Lissabon | | 5 | Viljandi | | 6 | Riia | +----+----------+ Turistid (id, eesnimi) CREATE TABLE turistid( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, eesnimi varchar (50)); Insert into turistid (eesnimi) values ('Juho'); Insert into turistid (eesnimi) values ('KRisti'); Insert into turistid (eesnimi) values ('Piia'); Insert into turistid (eesnimi) values ('Mati'); Insert into turistid (eesnimi) values ('Kalle'); +----+---------+ | id | eesnimi | +----+---------+ | 1 | Juho | | 2 | KRisti | | 3 | Piia | | 4 | Mati | | 5 | Kalle | +----+---------+ CREATE TABLE kylastused( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, asukoha_id INT, turisti_id INT, FOREIGN KEY(asukoha_id) REFERENCES asukohad(id), FOREIGN KEY(turisti_id) REFERENCES turistid(id) ); Insert into kylastused (asukoha_id, turisti_id) values (2, 3); Insert into kylastused (asukoha_id, turisti_id) values (1, 2); Insert into kylastused (asukoha_id, turisti_id) values (4, 2); Insert into kylastused (asukoha_id, turisti_id) values (1, 5); Insert into kylastused (asukoha_id, turisti_id) values (2, 4); Insert into kylastused (asukoha_id, turisti_id) values (1, 2); Insert into kylastused (asukoha_id, turisti_id) values (3, 3); Insert into kylastused (asukoha_id, turisti_id) values (1, 1); +----+------------+------------+ | id | asukoha_id | turisti_id | +----+------------+------------+ | 1 | 2 | 3 | | 2 | 1 | 2 | | 3 | 4 | 2 | | 4 | 1 | 5 | | 5 | 2 | 4 | | 6 | 1 | 2 | | 7 | 3 | 3 | | 8 | 1 | 1 | +----+------------+------------+ SELECT eesnimi, nimetus, asukoha_id, turisti_id FROM turistid, asukohad, kylastused Where kylastused.asukoha_id=asukohad.id and turisti_id=turistid.id; +---------+----------+------------+------------+ | eesnimi | nimetus | asukoha_id | turisti_id | +---------+----------+------------+------------+ | Piia | Paide | 2 | 3 | | KRisti | Tallinn | 1 | 2 | | KRisti | Lissabon | 4 | 2 | | Kalle | Tallinn | 1 | 5 | | Mati | Paide | 2 | 4 | | KRisti | Tallinn | 1 | 2 | | Piia | Praha | 3 | 3 | | Juho | Tallinn | 1 | 1 | +---------+----------+------------+------------+ * Näita välja asukohad, millel on uuritava asukohaga kasvõi üks ühine külastaja. SELECT DISTINCT (SELECT nimetus FROM asukohad WHERE asukohad.id=k2.asukoha_id) as koht FROM kylastused as k1, kylastused as k2 WHERE k1.asukoha_id=1 AND k2.turisti_id=k1.turisti_id AND NOT k1.asukoha_id=k2.asukoha_id; +------------+------------+ | turisti_id | asukoha_id | +------------+------------+ | 3 | 3 | +------------+------------+