-- 1 - La liste des noms de personnes, avec les dates des r ́eservations qu’elles ont faites 
-- et les noms des restaurants ou` les r ́eservations ont  ́et ́e faites.

SELECT 
    *
FROM
    PERSONNE,
    RESTAURANT,
    RESERVATION
WHERE
    PERSONNE.idPersonne = RESERVATION.idPersonne
        AND RESTAURANT.idRestaurant = RESERVATION.idRestaurant;

-- 2 - La moyenne d'age, l’ˆage minimum, et l’ˆage maximum. 
-- Nommer ces colonnes Moyenne, Minimum, Maximum respectivement.

SELECT 
    AVG(age) as Moyenne,
    MIN(age) as Minimum,
    MAX(age) as Maximum
FROM
    PERSONNE;

-- 3 - Le nombre de restaurants.

SELECT 
    COUNT(idRestaurant)
FROM
    RESTAURANT;

-- 4 - Le nombre de r ́eservations par personne 

SELECT 
    idPersonne, COUNT(idRestaurant)
FROM
    RESERVATION
GROUP BY idPersonne;


-- et le nombre de r ́eservations par restaurant.

SELECT 
    idRestaurant, COUNT(idPersonne)
FROM
    RESERVATION
GROUP BY idRestaurant;

-- 5 - La somme des factures des r ́eservations au boudoir. 
-- La requˆete ne doit pas comporter l’identifiant du boudoir.

SELECT 
    SUM(facture)
FROM
    RESERVATION
WHERE
    idRestaurant = (SELECT 
            idRestaurant
        FROM
            RESTAURANT
        WHERE
            nomRestaurant = 'Le boudoir');


SELECT 
    SUM(facture)
FROM
    RESERVATION,
    RESTAURANT
WHERE
    RESERVATION.idRestaurant = RESTAURANT.idRestaurant
        AND nomRestaurant = 'Le boudoir';


-- 6 -- Les noms des personnes qui ont fait 
-- des reservations en fevrier 2013 a Casablanca.

SELECT 
    nomPersonne
FROM
    PERSONNE,
    RESTAURANT,
    RESERVATION
WHERE
    PERSONNE.idPersonne = RESERVATION.idPersonne
        AND RESTAURANT.idRestaurant = RESERVATION.idRestaurant
        AND dateR >= '2013-02-01'
		AND dateR <= '2013-02-28'
        AND ville = 'Casablanca'
;

-- 7 -- Les villes des restaurants ou` Samantha est partie.


SELECT 
     distinct ville
FROM
    PERSONNE,
    RESTAURANT,
    RESERVATION
WHERE
    PERSONNE.idPersonne = RESERVATION.idPersonne
        AND RESTAURANT.idRestaurant = RESERVATION.idRestaurant
        AND nomPersonne = 'Samantha'
;

-- 8 -- Les identifiants des personnes qui ont plus de 21 ans 
-- ou sont all ́es au restaurant “Le boudoir”.

SELECT 
    idPersonne
FROM
    PERSONNE
WHERE
    age > 21 

UNION  

SELECT 
    idPersonne
FROM
    RESTAURANT,
    RESERVATION
WHERE
    RESTAURANT.idRestaurant = RESERVATION.idRestaurant
        AND nomRestaurant = 'Le boudoir';

-- 9 -- Les noms des personnes qui ont fait au moins deux r ́eservations

SELECT 
    nomPersonne
FROM
    RESERVATION,
    PERSONNE
WHERE
    PERSONNE.idPersonne = RESERVATION.idPersonne
HAVING COUNT(idRestaurant) >= 2
    OR COUNT(dateR) >= 2;

-- 

SELECT distinct
    nomPersonne
FROM
    PERSONNE,
    RESERVATION R1,
    RESERVATION R2
WHERE
    R1.idPersonne = R2.idPersonne
        AND R1.idPersonne = PERSONNE.idPersonne
        AND (R1.idRestaurant <> R2.idRestaurant
        OR R1.dateR <> R2.dateR);

-- 10 -- Les noms des personnes plus ˆag ́ees que Ali.

SELECT 
    nomPersonne
FROM
    PERSONNE
WHERE
    age > (SELECT 
            age
        FROM
            PERSONNE
        WHERE
            nomPersonne = 'Ali');

-- OR

SELECT 
    P1.nomPersonne
FROM
    PERSONNE P1,
    PERSONNE P2
WHERE
    P2.nomPersonne = 'Ali'
        AND P1.age > P2.age;