Luento 9
Sekalaista + Multimedia-, paikka- ja oliotietokannat
Avainkenttien keksiminen (demo 4)
SQL
/*
Haetaan lista niistä nauhoista joita on vuokrattu enintään kaksi kertaa
(Huom. mukaan saatava myös ne nauhat joita ei ole vuokrattu kertaakaan!).
Tehty kaksi eri versiota, toinen ulkoliitoksen avulla ja toinen ilman
ulkoliitosta.
*/
/* ulkoliitos */
SELECT TapeId
FROM tape LEFT OUTER JOIN rental ON rental.tapeid = tape.tapeid
GROUP BY TapeID
HAVING COUNT(*) <= 2
/* Edellisellä luennolla näytetty ylivaikeasti ajateltu versio :-P
Unohtakaa, NAPS!
*/
SELECT TapeID
FROM Tape T
WHERE NOT EXISTS (
SELECT R.TapeID
FROM Rental R
WHERE T.TapeID = R.TapeID
AND R.TapeID NOT IN (
SELECT TapeID
FROM Rental
GROUP BY TapeID
HAVING COUNT(*) <= 2
)
)
/* Parempi versio :) */
SELECT TapeID
FROM Tape T
WHERE T.TapeID NOT IN (
SELECT TapeID
FROM Rental
GROUP BY TapeID
HAVING COUNT(*) > 2
)
/* Muokataan edellisiä niin, että otetaan lopputulokseen mukaan
vuokrauskertojen lukumäärä. Ulkoliitos
*/
SELECT Tape.TapeId, COUNT(RentalID) AS LKM
FROM tape LEFT OUTER JOIN rental ON rental.tapeid = tape.tapeid
GROUP BY Tape.TapeID
HAVING COUNT(*) <= 2
/* ilman ulkoliitosoperaattoria */
SELECT Tape.TapeID, COUNT(*)
FROM Tape, Rental
WHERE Tape.TapeID = Rental.TapeID
GROUP BY Tape.TapeId
HAVING COUNT(*) <= 2
UNION
SELECT TapeID, 0
FROM Tape T
WHERE T.TapeID NOT IN (
SELECT TapeID
FROM Rental
)
Dynaaminen SQL
Luento 9 (1999)