Νέο - Έγγραφο κειµένου (3) ΕΡΓΑΣΤΗΡΙΟ 2 (27/11/2007) ΕΞΕΤΑΖΟΜΕΝΕΣ ΑΣΚΗΣΕΙΣ
1. ?Να βρεθούν τα ονόµατα των πελατών που έχουν ενοικιάσει τουλάχιστον µία κασέτα? Select
distinct ΠΕΛΑΤΗΣ.Όνοµα
From
ΠΕΛΑΤΗΣ inner join ΕΝΟΙΚΙΑΣΗ on ΕΝΟΙΚΙΑΣΗ.IDΠελάτη = ΠΕΛΑΤΗΣ.ID;
2. ?Να βρεθούν τα ονόµατα των πελατών που δεν έχουν ενοικιάσει ούτε µία κασέτα? (να µην χρησιµοποιηθεί ο τελεστή̋ NOT IN). Select
ΠΕΛΑΤΗΣ.Όνοµα
From
ΠΕΛΑΤΗΣ left outer join ΕΝΟΙΚΙΑΣΗ on ΕΝΟΙΚΙΑΣΗ.IDΠελάτη = ΠΕΛΑΤΗΣ.ID
Where ΕΝΟΙΚΙΑΣΗ.IDΠελάτη IS NULL;
3. ?Να βρεθούν οι κωδικοί των συντελεστών που έχουν συµµετάσχει σε τουλάχιστον 2 ταινίε̋? (να µην χρησιµοποιηθεί ο τελεστή̋ COUNT). Select
distinct ΤΣ1.IDΣυντελεστή
From
ΤΣ as ΤΣ1, ΤΣ as ΤΣ2
Where
ΤΣ1.IDΣυντελεστή = ΤΣ2.IDΣυντελεστή and ΤΣ1.IDΤαινία̋ <> ΤΣ2.IDΤαινία̋;
Να λύσετε µόνο µία (1) από τι̋ 2 επόµενε̋: 4. ?Να βρεθούν οι τίτλοι των ταινιών για τι̋ οποίε̋ είτε δεν υπάρχει κασέτα, είτε υπάρχει κασέτα και δεν έχει ενοικιαστεί ποτέ? (να µην χρησιµοποιηθεί ο τελεστή̋ NOT IN). Select
Τίτλο̋
From
ΤΑΙΝΙΑ left outer join ΚΑΣΕΤΑ on ΚΑΣΕΤΑ.IDΤαινία̋ = ΤΑΙΝΙΑ.ID left outer join ΕΝΟΙΚΙΑΣΗ on ΕΝΟΙΚΙΑΣΗ.IDΚασέτα̋ = ΚΑΣΕΤΑ.ID
Where ΕΝΟΙΚΙΑΣΗ.IDΚασέτα̋ IS NULL; Σελίδα 1
Νέο - Έγγραφο κειµένου (3)
5. ?Να βρεθούν οι πελάτε̋ µε επίθετο ίδιο µε αυτό κάποιου συντελεστή ταινία̋?. Select
ΠΕΛΑΤΗΣ.Όνοµα
From
ΠΕΛΑΤΗΣ, ΣΥΝΤΕΛΕΣΤΗΣ
Where ΣΥΝΤΕΛΕΣΤΗΣ.Όνοµα like ('%' + ΠΕΛΑΤΗΣ.Όνοµα + '%');
3
Εργαστήριο 4/12/2007
1. ?Να βρεθεί ο αριθµό̋ των ταινιών που έχει συµµετάσχει ο Alfred Hitchcock. Σηµείωση: Οι ταινίε̋ στι̋ οποίε̋ έχει συµµετάσχει µε περισσότερου̋ από ένα ρόλου̋, να προσµετρούνται µία µόνο φορά.? Select count(distinct ΤΣ.IDΤαινία̋) From ΤΣ inner join ΣΥΝΤΕΛΕΣΤΗΣ on ΤΣ.IDΣυντελεστή = ΣΥΝΤΕΛΕΣΤΗΣ.ID Where ΣΥΝΤΕΛΕΣΤΗΣ.Όνοµα = 'Alfred Hitchcock';
2. ?Για κάθε ταινία (τίτλο̋), να βρεθεί ο αριθµό̋ διαφορετικών τύπων κασέτα̋ (VHS ή DVD) που περιέχει την ταινία. Στο αποτέλεσµα να εµφανίζονται και οι ταινίε̋ για τι̋ οποίε̋ δεν υπάρχει κασέτα?. Select ΤΑΙΝΙΑ.Τίτλο̋, count(ΚΑΣΕΤΑ.Τύπο̋) From ΤΑΙΝΙΑ left outer join ΚΑΣΕΤΑ on ΚΑΣΕΤΑ.IDΤαινία̋ = ΤΑΙΝΙΑ.ID Group By ΤΑΙΝΙΑ.ID, ΤΑΙΝΙΑ.Τίτλο̋;
3. ?Να βρεθούν οι κωδικοί των κασετών που είναι τύπου VHS και έχουν ενοικιασθεί περισσότερε̋ από µία φορέ̋?: Select ΚΑΣΕΤΑ.ID From ΚΑΣΕΤΑ inner join ΕΝΟΙΚΙΑΣΗ on ΚΑΣΕΤΑ.ID = ΕΝΟΙΚΙΑΣΗ.IDΚασέτα̋ Σελίδα 2
Νέο - Έγγραφο κειµένου (3) Where ΚΑΣΕΤΑ.Τύπο̋ = 'VHS' Group by ΚΑΣΕΤΑ.ID Having count(*) > 1;
4
1. Να βρεθούν οι τίτλοι των ταινιών που δεν έχουν ενοικιασθεί ποτέ. (Να µην χρησιµοποιηθεί outer join):
Select
Τίτλο̋
From
ΤΑΙΝΙΑ
where
not exists (select ΚΑΣΕΤΑ.IDΤαινία̋
from
ΕΝΟΙΚΙΑΣΗ inner join ΚΑΣΕΤΑ on ΕΝΟΙΚΙΑΣΗ.IDΚασέτα̋ = ΚΑΣΕΤΑ.ID where
IDΤαινία̋ = ΤΑΙΝΙΑ.ID);
2. Να βρεθεί το όνοµα του Συντελεστή που έχει συµµετάσχει στι̋ περισσότερε̋ ταινίε̋.
Select Όνοµα From ΣΥΝΤΕΛΕΣΤΗΣ where ID in (select IDΣυντελεστή from ΤΣ Group by IDΣυντελεστή Σελίδα 3
Νέο - Έγγραφο κειµένου (3) Having count(IDΤαινία̋) >= all (Select
count(*)
From ΤΣ Group by IDΣυντελεστή ) )
3. Να βρεθεί ο κωδικό̋ τη̋ κασέτα̋ µε τη δεύτερη µεγαλύτερη ποσότητα. Στο αποτέλεσµα να εµφανίζεται µόνο ο κωδικό̋ αυτό̋. (Υπόδειξη: η κασέτα µε τη δεύτερη µεγαλύτερη ποσότητα είναι αυτή που συµµετέχει στο top2 τη̋ κατάταξη̋ ω̋ προ̋ την ποσότητα, αλλά δεν συµµετέχει στο top1.)
create view T2 as (select top 2 ID from ΚΑΣΕΤΑ order by Ποσότητα desc)
create view T1 as (select top 1 ID from ΚΑΣΕΤΑ order by Ποσότητα desc)
select ID from T2 where ID not in (select ID from T1);
drop view T2; drop view T1;
Σελίδα 4