Vous êtes sur la page 1sur 5

SELECT *

FROM communes;

SELECT *
FROM departements;

-- projection

SELECT nom,
pop
FROM communes;/* opérateurs union, intersection,différence
(les tables doivent avoir la meme structure) */

SELECT nom
FROM departements
INTERSECT
SELECT nom
FROM regions;

SELECT nom
FROM departements
UNION
SELECT nom
FROM regions;

SELECT nom
FROM departements
EXCEPT
SELECT nom
FROM regions;

-- produit cartésien

SELECT *
FROM departements,
regions;

SELECT d.nom AS département,


r.nom AS region
FROM departements AS d,
regions AS r;

-- jointures

SELECT c.nom AS commune,


d.nom AS département
FROM communes AS c
JOIN
departements AS d ON c.dep = d.id;/* La meme requete avec produit cartésien
suivi d'un sélection
En pratique la requete est équivalente à la jointure */

SELECT c.nom AS commune,


d.nom AS département
FROM communes AS c,
departements AS d
WHERE c.dep = d.id;
SELECT c.nom AS commune,
d.nom AS département,
r.nom AS région
FROM communes AS c
JOIN
departements AS d ON c.dep = d.id
JOIN
regions AS r ON d.reg = r.id;

SELECT c.nom AS commune,


d.nom AS département,
r.nom AS région
FROM communes AS c,
departements AS d,
regions AS r
WHERE c.dep = d.id
AND d.reg = r.id;

-- les fonctions d'agrégation et le regroupement par "group by"

SELECT count( * )
FROM communes;

SELECT min(pop)
FROM communes;

SELECT dep,
min(pop)
FROM communes
GROUP BY dep;

SELECT dep,
max(pop)
FROM communes
GROUP BY dep;

SELECT dep,
avg(pop)
FROM communes
GROUP BY dep;

SELECT sum(pop)
FROM communes;

SELECT dep,
sum(pop) AS population
FROM communes
GROUP BY dep
ORDER BY population DESC;

-- groupement avec sélection

SELECT dep,
count( * ) AS [nb communes de plus de 10000 habitants]
FROM communes
WHERE pop > 10000
GROUP BY dep;

-- La sélection sur des attributs agrégés ne peut se faire avec where mais avec
having (pourquoi????) la clause having est hors programme

SELECT dep,
d.nom,
sum(pop) AS p
FROM communes
JOIN
departements d ON dep = d.id
GROUP BY dep
HAVING p > 1000000
ORDER BY p DESC;

/* Requettes complexes, emboitées,...


Principe le résultat d'un select est une table
*/

-- having n'est à priori pas au programme. La requete précédente sans utiliser


having,
--avec une requete emboitée.
select * from
(SELECT dep,
d.nom as nom,
sum(pop) AS p
FROM communes
JOIN
departements d ON dep = d.id
GROUP BY dep)
WHERE p>1000000
ORDER BY p DESC
;
/*
liste des communes les moins peuplées dans chaque département
*/

SELECT d.nom AS departement,


c.nom AS [plus petite commune],
c.pop AS population
FROM communes AS c,
departements AS d,
(
SELECT dep,
min(pop) AS mini
FROM communes
GROUP BY dep
)
AS popminis
WHERE c.dep = d.id AND --condition de jointure c,d
popminis.dep = d.id AND--condition de jointure d popminis
c.pop = popminis.mini
;

/* liste des communes les plus peuplées dans chaque département


*/
SELECT d.nom AS departement,
c.nom AS [plus petite commune],
c.pop AS population
FROM communes c
JOIN
departements d ON c.dep = d.id,
(
SELECT dep,
max(pop) maxi
FROM communes
GROUP BY dep
)
AS popmaxis
WHERE c.pop = popmaxis.maxi AND
popmaxis.dep = d.id;

/* Le complémentaire
Départements dans lesquels il existe au moins
une commune de moins de 25 habitants */

SELECT d.nom
FROM departements AS d
JOIN
communes c ON d.id = dep
WHERE c.pop <= 25
GROUP BY dep;

-- une requete qui donne le meme résultat avec la clause distinct


SELECT distinct d.nom
FROM departements AS d
JOIN
communes c ON d.id = dep
WHERE c.pop <= 25;

/* Départements dans lesquels il n'existe aucune


commune de moins de 25 habitants */

SELECT d.nom
FROM departements AS d
EXCEPT
SELECT d.nom
FROM departements AS d
JOIN
communes c ON d.id = dep
WHERE c.pop <= 25
GROUP BY dep;

/*Villes de nom identique dans des départements différents.


On veut le nom de la ville et les noms des départments */

SELECT c1.nom AS commune,


d1.nom AS dept1,
d2.nom AS dept2
FROM communes AS c1,
departements AS d1,
communes AS c2,
departements as d2
WHERE c1.dep = d1.id AND --jointure
c2.dep = d2.id AND --jointure
c1.nom = c2.nom AND
c1.dep <> c2.dep;

/* Départements ne possédant aucune ville dont le nom est commun


avec celui d'une ville d'un autre département
*/

Vous aimerez peut-être aussi