Interroger, traiter et assurer la maintenance des bases de données
Jour 4 - Commandes SQL
# Objectifs du jour
Création du Mindmap
Correction de l'exercice 2.1
Commandes SELECT avec WHERE
Commandes SELECT avec opérateurs logiques
Combiner des enregistrements de plusieurs tables (JOIN)
Commandes pour données agrégées (GROUP BY et HAVING)
Fonctions d'agrégation comme COUNT, SUM, AVG, MIN, MAX, CONCAT, etc)
Ne pas oublier de démarrer Lanschool !
# Deux vérités, un mensonge
# Correction exercice
Voir le corrigé sur le Gitbook des consignes d'exercices
# Commandes SQL
Attention à l'ordre des éléments :
SELECT
colonne1 AS alias1,
colonne2 AS alias2,
fonction_aggregation(colonne3) AS alias3,
CONCAT('Texte ', colonne4) AS alias4
FROM table1
INNER JOIN table2 ON table1.cle_etrangere = table2.cle_primaire
WHERE condition1
AND condition2
AND colonne5 BETWEEN valeur1 AND valeur2
AND colonne6 IN (valeur3, valeur4, valeur5)
GROUP BY colonne1, colonne2
HAVING fonction_aggregation(colonne3) > valeur_seuil
ORDER BY colonne1 DESC, colonne2 ASC;
# Commandes SQL
SELECT colonne1, colonne2, ...
FROM table
ORDER BY colonne1 [ASC|DESC], colonne2 [ASC|DESC], ...;
Trie les résultats selon une ou plusieurs colonnes
ASC (ascendant) par défaut, DESC pour descendant
Exemple :
SELECT nom, age
FROM clients
ORDER BY nom ASC, age DESC;
# Commandes SQL
SELECT colonne1, colonne2, ...
FROM table
WHERE condition;
Permet de filtrer les résultats selon une condition
Opérateurs de comparaison (=
, !=
, <
, >
, <=
, >=
)
Exemple :
SELECT nom, age
FROM clients
WHERE age > 18;
Opérateurs logiques principaux
AND : les deux conditions doivent être vraies
OR : au moins une condition doit être vraie
NOT : inverse la condition
Exemple
# Commandes SQL
SELECT nom, age, pays
FROM clients
WHERE age > 18 AND (pays = 'France' OR pays = 'Belgique');
Opérateurs logiques principaux
LIKE
BETWEEN
IS NULL / IS NOT NULL
IN
# Commandes SQL
SELECT * FROM Employes
WHERE nom LIKE 'Du%';
Exemple LIKE
Résultat : Dupont, Durand, Dubois, Dufour
# Commandes SQL
SELECT * FROM Employes
WHERE age BETWEEN 30 AND 40;
Exemple BETWEEN
Résultat : Dupont (30), Dufour (35), Dubois (40)
SELECT * FROM Commandes
WHERE date_commande BETWEEN TO_DATE('2024-02-01','YYYY-MM-DD') AND TO_DATE('2024-03-15','YYYY-MM-DD');
Exemple BETWEEN avec dates
Résultat : Commande entre le 01.02.2024 et le 15.03.2024 (comprises)
# Commandes SQL
SELECT * FROM Employes
WHERE fk_departement IS NULL;
Exemple IS NULL
Résultat : Employés sans département assignés
SELECT * FROM Employes
WHERE fk_departement IS NOT NULL;
Exemple IS NOT NULL
Résultat : Employés avec un département assignés
# Commandes SQL
SELECT * FROM villes
WHERE nom_ville IN ('Lausanne', 'Genève');
Exemple IN
Résultat : Lausanne et Genêve uniquement
SELECT * FROM Employes
WHERE fk_ville IN (
SELECT pk_ville_emp
FROM villes
WHERE canton_vil = 'JU'
);
Exemple IN avec sous-requête
Résultat : Employés avec un département assignés
Exercice 3.1
Exercices sur les requêtes SQL
# Commandes SQL
Syntaxe de base
# Commandes SQL
SELECT colonnes
FROM table1
JOIN table2
ON table1.colonne = table2.colonne;
Types de JOIN
INNER JOIN : lignes correspondantes dans les deux tables
LEFT JOIN : toutes les lignes de la table de gauche
RIGHT JOIN : toutes les lignes de la table de droite
FULL JOIN : toutes les lignes des deux tables
Exemple
SELECT *
FROM clients
INNER JOIN commandes
ON clients.pk_cli = commandes.fk_cli;
UNION
Combine les résultats de deux requêtes
Élimine les doublons
UNION ALL
Combine les résultats sans éliminer les doublons
Plus rapide que UNION
Exemple
# Commandes SQL
SELECT nom, mail FROM clients
UNION
SELECT nom, mail FROM fournisseurs;
GROUP BY
Regroupe les lignes ayant les mêmes valeurs
Souvent utilisé avec des fonctions d'agrégation
HAVING
Filtre les résultats de GROUP BY
S'utilise à la place de WHERE pour les groupes
Exemple
# Commandes SQL
SELECT pays, COUNT(*) as nombre_pays_clients
FROM clients
GROUP BY pays
HAVING COUNT(*) > 10;
Principales fonctions
COUNT() : compte le nombre de lignes
SUM() : somme des valeurs
AVG() : moyenne des valeurs
MAX() : valeur maximale
MIN() : valeur minimale
Exemple
# Commandes SQL
SELECT
pays,
COUNT(*) as nombre_clients,
AVG(age) as age_moyen,
MAX(revenu) as revenu_max
FROM clients
GROUP BY pays;
Exercice 3.2
Exercices sur les requêtes SQL (JOIN, GROUP BY, etc)
# Commandes SQL
Merci de votre attention 😊
Bonne fin de journée !