--1 Obtenir la liste des 10 villes les plus peuplées en 2012

SELECT
    ville_slug
FROM
    villes
ORDER BY
    ville_population_2012 DESC
LIMIT
    10
;


--2 Obtenir la liste des 50 villes ayant la plus faible superficie
SELECT
    ville_slug,
    ville_surface
FROM
    villes
ORDER BY
    ville_surface ASC
LIMIT
    50
;


--3 Obtenir la liste des départements d’outres-mer, c’est-à-dire ceux dont le numéro de département commencent par “97”
SELECT
    departement_nom
FROM
    departements
WHERE
    departement_code
LIKE
    '97%'
;


--4 Obtenir le nom des 10 villes les plus peuplées en 2012, ainsi que le nom du département associé
SELECT
    ville_slug,
    departement_nom
FROM
    villes V
JOIN 
    departements D ON V.departement_id = D.departement_id
ORDER BY
    ville_population_2012 DESC
LIMIT
    10
;


--5 Obtenir la liste du nom de chaque département, associé à son code et du nombre de commune au sein de ces département, en triant afin d’obtenir en priorité les départements qui possèdent le plus de communes
SELECT
    D.departement_id,
    D.departement_nom,
    D.departement_code,
    COUNT(*) AS nombre_commune
FROM
    villes V
JOIN
    departements D ON V.departement_id = D.departement_id
GROUP BY
    D.departement_id
ORDER BY
    nombre_commune DESC
;


--6 Obtenir la liste des 10 plus grands départements, en terme de superficie
SELECT
    D.departement_id,
    D.departement_nom,
    SUM(ville_surface) AS supperficie
FROM
    villes V
JOIN
    departements D ON V.departement_id = D.departement_id
GROUP BY
    D.departement_id
ORDER BY
    supperficie DESC
LIMIT 10;


--7 Compter le nombre de villes dont le nom commence par “Saint”
SELECT
    COUNT(*) AS nombre_villes_debut_par_saint
FROM
    villes V
WHERE
    V.ville_nom_reel
LIKE
    'Saint%'
;


--8 Obtenir la liste des villes qui ont un nom existants plusieurs fois, et trier afin d’obtenir en premier celles dont le nom est le plus souvent utilisé par plusieurs communes
SELECT
    V.ville_nom,
    COUNT(*) AS occurence
FROM
    villes V
GROUP BY
    V.ville_nom
HAVING
    COUNT(*) > 1
ORDER BY
    occurence DESC
;



--9 Obtenir en une seule requête SQL la liste des villes dont la superficie est supérieur à la superficie moyenne (17.25737493077501)
SELECT
    V.ville_id,
    V.ville_nom,
    V.ville_surface
FROM
    villes V
WHERE
    V.ville_surface > (
        SELECT
            AVG(ville_surface)
        FROM
            villes
    )
ORDER BY
    V.ville_nom ASC
;


--10 Obtenir la liste des départements qui possèdent plus de 2 millions d’habitants
SELECT
    D.departement_nom,
    SUM(ville_population_2012) AS la_population
FROM 
    departements D
JOIN
    villes V ON V.departement_id = D.departement_id
GROUP BY
    D.departement_nom
HAVING
    SUM(ville_population_2012) > 2000000
;


--11 Remplacez les tirets par un espace vide, pour toutes les villes commençant par “SAINT-” (dans la colonne qui contient les noms en majuscule)
SELECT
    V.departement_id,
    REPLACE(V.ville_nom, '-', ' ')
FROM 
    villes V
WHERE
    V.ville_nom
LIKE
    'SAINT-%'
ORDER BY
    V.ville_nom ASC
;

--Procedure 

DELIMITER //
CREATE PROCEDURE replace_all_dashes_by_spaces_for_villes_saint ()
BEGIN
    UPDATE villes V
    SET V.ville_nom = REPLACE(V.ville_nom, '-', ' ')
    WHERE
        V.ville_nom
    LIKE
        'SAINT-%'
    ;
END //
DELIMITER ;

--Trigger
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE| DELETE }
ON table_name FOR EACH ROW
trigger_body;




