Les fonctions de regroupement
Ordre général : SELECT FROM JOIN ON (WHERE) GROUP BY HAVING ORDER BY
GROUP BY
SELECT * FROM etudiants;
GROUP BY genre // Regroupement par sexe
COUNT() pour compter
SELECT genre, COUNT(genre) FROM etudiants GROUP BY genre;
Regroupement par âge et comptage
SELECT age, COUNT(*) FROM etudiants GROUP BY age;
(* représente le champ age du GROUP BY)
Moyenne d'âge par sexe
SELECT genre, AVG(age) FROM etudiants GROUP BY genre;
Maximum/minimum d'âge par sexe
SELECT genre, MAX(age) FROM etudiants GROUP BY genre;
Somme des âges par sexe
SELECT genre, SUM(age) FROM etudiants GROUP BY genre;
# HAVING
Conditions similaires à WHERE
SELECT * FROM employes WHERE age > 18;
Filtrage après regroupement
Moyenne d'âge par sexe avec filtre supérieur à 18 ans
SELECT genre, AVG(age) FROM etudiants GROUP BY genre HAVING AVG(age) = 18;
Moyenne de salaire par poste avec filtre supérieur à 5000
SELECT poste, AVG(salaire), COUNT(*) FROM employes GROUP BY poste HAVING AVG(salaire) > 5000;
SELECT SUM(salaire) FROM employes;
SELECT AVG(salaire) FROM employes;
SELECT MAX(salaire) FROM employes;
Tri décroissant des résultats HAVING
ORDER BY DESC/ASC
SELECT poste, AVG(salaire), COUNT(*) FROM employes
GROUP BY poste
HAVING AVG(salaire) > 5000
ORDER BY AVG(salaire) DESC;
SELECT poste, AVG(salaire), COUNT(*) FROM employes
GROUP BY poste
ORDER BY AVG(salaire) DESC;
Limite de lignes
SELECT poste, AVG(salaire), COUNT(*) FROM employes
GROUP BY poste
HAVING AVG(salaire) > 5000
ORDER BY AVG(salaire) DESC
LIMIT 3;
SELECT id, nom, salaire FROM employes ORDER BY salaire DESC;
SELECT id, nom, salaire FROM employes ORDER BY salaire DESC LIMIT 3;
Fonction IFNULL
WITH ROLLUP pour total général
SELECT IFNULL(poste, "Total"), COUNT(poste) FROM employes
GROUP BY poste WITH ROLLUP;
SELECT id_departement FROM etudiants;
SELECT IFNULL(id_departement, "1011") FROM etudiants;
DISTINCT pour éliminer les doublons
SELECT DISTINCT nom FROM employes;
Extraction de sous-chaîne
SELECT LEFT(salaire, 4) FROM employes;
SELECT RIGHT(salaire, 3) FROM employes;
SELECT SUBSTRING(salaire, 1, 4) FROM employes; // Caractères 1 à 4
Concaténation
SELECT CONCAT(salaire, nom) AS nom_salaire FROM employes;
SELECT NOW(); // Date et heure actuelles
SELECT * FROM departement; +----------+------------------+ | id_dep | nom_departement | +----------+------------------+ | 102 | Université de Shanghai | | 103 | Université de Zhejiang | | 101 | Tsinghua | | 105 | Institut Polytechnique | +----------+------------------+ SELECT * FROM departement JOIN etudiants ON ;
+----------+----------+--------------+ | id_etudiant | nom_etudiant | id_departement | +----------+----------+--------------+ | 1 | Zhang San | 101 | | 2 | Li Si | 102 | | 3 | Wang Wu | 103 | | 4 | Zhao Liu | 101 | | 5 | Sun Qi | 102 | | 6 | Xiao Hua | 103 | | 8 | Xiao Ce | 105 | | 9 | C Ersi | NULL | +----------+----------+--------------+
Index
Créés automatiquemant lors de la création de contraintes
SHOW KEYS FROM etudiants;
Les index sont comme un sommaire
id
Rehcerche partielle
Operateurs LIKE : _ = 1 caractère, % = n'importe quel nombre de caractères
SELECT nom FROM employes WHERE nom LIKE "_Hua";
SELECT nom FROM employes WHERE nom LIKE "%Hua%";