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)


http://appro.mit.jyu.fi/2000/yhteistoiminta/tietokannat/luennot/luento9/index.html
© Tommi Lahtonen ()<URL: http://www.iki.fi/hazor/>
4.10.2000 14:39:35