Cours BD
Chapitre IV
Langage de Manipulation de Données (LMD)
I. Extraction des données
L'instruction SELECT en SQL possède six clauses différentes, dont seules les deux premières sont obligatoires. Elles sont données ci-dessous, dans l'ordre dans lequel elles doivent apparaître quand elles sont utilisées SELECT [DISTINCT] <attribut(s)> |* FROM <table(s)> [WHERE <condition> [GROUP BY <attribut(s) de regroupement> [HAVING <condition >] [ORDER BY <attribute(s)>[ASC|DESC]];
Partie optionnelle
Partie obligatoire
La clause – SELECT
L'instruction SELECT en SQL permet d'extraire des données d'une base de données. attribut(s): définit l’attribut ou les attributs de la relation résultat. DISTINCT : permet d’éliminer les doublons du résultat.
La clause FROM : La clause FROM donne la liste des tables participantes à
l'interrogation.
Exemple : Soit la table Employe suivante : Employe (idEmp, nom, prenom, salaire, service, genre, datecontrat)
1. Donner le nom, le prénom et le salaire des employés.
SELECT nom, prenom, salaire FROM Employe ;
2. Donner tous les employés.
SELECT * FROM Employe ; Récupérer toutes les colonnes de tous les enregistrements
3. Donner le nom des différents services
SELECT DISTINCT service FROM Employe ; Supprimer les doublons SELECT DISTINCT service, genre FROM Employe ; multicolonnes
SELECT DISTINCT
La clause WHERE
La clause SQL WHERE est utilisée pour spécifier une condition lors de l'extraction des données d'une seule table ou de plusieurs tables associées. Syntaxe: SELECT colonne1, colonne2,..., colonnen FROM nom_table WHERE [condition] ;
Opérateurs de comparaison
Exemples
4. Donner le prénom des employés dont le genre est masculin.
SELECT prenom FROM Employe WHERE genre=’M’ ;
1
Cours BD
Chapitre IV
5. Donner le prénom des employés dont le salaire est supérieur à 2000DT.
SELECT prenom FROM Employe WHERE salaire>20000 ;
6. Donner l’identifiant et le prénom des employés dont leur date de contrat inférieure ou
égale à 2012-10-13.
SELECT idEmp, prenom FROM Employe WHERE datecontrat<=’2012-10-13’;
Publicité
Comparaisons à NULL
La valeur NULL n’est pas comparable, on ne peut pas la mettre directement après les signes = et !=. Exemples
7. Donner l’identifiant et le prénom des employés qui ne sont affectés à aucun service.
SELECT idEmp, prenom FROM Employe WHERE service IS NULL;
Clause BETEWEEN ….AND 8. Donner le nom des employés dont le salaire est compris entre 1200 et 3500.
SELECT nom FROM Employe WHERE salaire BETWEEN 1200 AND 3500 ;
Clause IN 9. Donner le nom des employés dont le salaire est égal à 1200 ou égal à 5000 (pas entre
les deux).
SELECT nom FROM Employe WHERE salaire IN (1200, 5000) ;
10. Donner le prénom des employés dont le service est marketing ou informatique (pas les
deux).
SELECT prenom FROM Employe WHERE service IN (‘marketing’, ‘informatique’) ;
Opérateur de comparaison LIKE
Le prédicat LIKE permet de faire des comparaisons sur des chaînes grâce à des caractères appelés caractères jokers. Deux types de caractères génériques sont utilisés pour filtrer les résultats :
% : Utilisé pour faire correspondre zéro, un ou plusieurs caractères. (Longueur
variable)
_ : Utilisé pour correspondre exactement à un caractère. (Longueur fixe)
Exemples :
11. Donner le prénom des employés dont le nom commence par la lettre D.
SELECT prenom FROM Employe WHERE nom LIKE ‘D%’;
12. Donner le prénom des employés dont le nom contient la lettre E.
SELECT prenom
2
Cours BD
Chapitre IV
FROM Employe WHERE nom LIKE ‘%E%’;
13. Donner le prénom des employés dont le nom contient la lettre m en avant dernière
position.
SELECT * FROM Employes WHERE Nom LIKE "%m_"; Opérateurs logiques, arithmétiques et concatenation 14. Donner le nom et le prénom des employés hommes et dont le salaire est supérieur à
1200.
SELECT nom,prenom FROM Employe WHERE genre=’M’ AND salaire>12000;
15. Donner le nom et le prénom des employés hommes ou dont le salaire est supérieur à
1200.
Publicité
SELECT nom,prenom FROM Employe WHERE genre=’M’ OR salaire>12000;
16. Donner l’identifiant des employés qui sont affectés à des services.
SELECT idEmp FROM Employe WHERE service IS NOT NULL;
17. Donner les identifiants des employés dont le salaire annuel est supérieur à 12000.
SELECT idEmp FROM Employe WHERE salaire*12>12000;
18. Donner le nom complet des employés
SELECT CONCAT(nom,’ ‘,prenom) AS NomComplet FROM Employe ; fonction relative à MySql
Clause ORDER BY
L’instruction ORDER BY dans SQL est utilisée pour trier les données extraites par ordre croissant ou décroissant selon une ou plusieurs colonnes.
Par défaut, ORDER BY trie les données par ordre croissant. On utilise le mot-clé DESC pour trier les données par ordre décroissant et le
mot-clé ASC pour trier par ordre croissant.
Syntaxe: SELECT liste-colonnes FROM nom_table [WHERE condition] [ORDER BY colonne1, colonne2, .. ] [ASC | DESC];
19. Donner le nom et le prénom des employés par ancienneté
SELECT nom,prenom FROM Employe ORDER BY datecontrat ASC;
II. Fonctions d’agrégation
La fonction d'agrégation SQL est utilisée pour effectuer les calculs sur plusieurs lignes d'une seule colonne d'une table. Elle retourne une valeur unique. La norme ISO définit cinq fonctions d'agrégation : COUNT( ), SUM( ), AVG( ), MIN( ) et MAX( ).
3
Cours BD
Chapitre IV
COUNT( )
La fonction COUNT est utilisée pour compter le nombre de lignes dans une table de base de données. La fonction COUNT utilise COUNT(*) qui renvoie le nombre de toutes les lignes d'une table spécifiée. COUNT(*) considère les doublons et Null. Exemples:
20. Donner le nombre de services. la valeur NULL n’est pas comptabilisée
SELECT COUNT(DISTINCT service) AS NbreService FROM Employe;
21. Donner le nombre des employés. SELECT COUNT(*) AS NbreEmploye FROM Employe; SUM( )
La fonction SUM renvoie la somme de toutes les valeurs de la colonne spécifiée. Exemple :
22. Donner la somme des salaires des employés
SELECT SUM(salaire) FROM Employe ; MIN( )
La fonction MIN est utilisée pour déterminer la plus petite valeur de toutes les valeurs sélectionnées d'une colonne. Exemple :
23. Donner le plus faible salaire.
SELECT MIN(salaire) FROM Employe ; MAX( )
La fonction MAX renvoie la plus grande valeur de toutes les valeurs sélectionnées d'une colonne. Exemple :
24. Donner le salaire le plus élevé.
SELECT MAX(salaire) FROM Employe ;
Publicité
III. Groupement : GROUP BY-HAVING
GROUP BY
La clause GROUP BY en SQL permet d’organiser des données identiques en groupes à l’aide de certaines fonctions. C'est-à-dire si une colonne particulière a les mêmes valeurs dans différentes lignes, elle organisera ces lignes dans un groupe.
Syntaxe :
SELECT colonne1, colonne2, ... colonneN, fonction_agregation (nom_colonne) FROM tables [WHERE conditions] GROUP BY colonne1, colonne2, ... colonneN; Remarque :
4
Cours BD
Chapitre IV
colonne1, colonne2,...colonneN spécifie les colonnes(ou expressions) qui ne sont pas encapsulées dans une fonction d'agrégation et doivent être incluses dans la clause GROUP BY. Exemple :
25. Donner le nombre d’employés appartenant à chaque service.
SELECT service, COUNT(*) AS NbreEmploye FROM Employe GROUP BY service ; le GROUP BY porte sur une colonne sélectionnée
HAVING
On utilise la clause HAVING pour poser des conditions afin de décider quel groupe fera partie de l'ensemble des résultats finaux. Syntaxe : SELECT colonne1, colonne2, ... colonneN, fonction_agregation (nom_colonne) FROM tables [WHERE conditions] GROUP BY colonne1[, colonne2, ... colonneN] HAVING condition ; Exemple :
26. Donner les services dont la moyenne des salaires est supérieure à 15000
SELECT service, AVG(salaire) Moyenne FROM Employe Requête erronée WHERE AVG(salaire)>15000 GROUP BY service
WHERE est un filtrage en entrée avant tout autre calcul, la fonction d’agrégation AVG( ) n’est pas encore calculée : pas de fonction d’agrégation dans un WHERE
Solution : utiliser un filtrage en sortie : HAVING
SELECT service, AVG(salaire) Moyenne FROM Employe GROUP BY service HAVING Moyenne>15000 ; IV. Jointures Les jointures permettent d’extraire des données issues de plusieurs tables. La jointure est utilisée pour combiner des colonnes de deux tables ou plus en utilisant des valeurs communes aux deux tables. Généralement, la comparaison fait intervenir une clé étrangère d’une table avec une clé primaire d’une autre table. Plusieurs types de jointures sont définis selon la nature de la condition de sélection. Exemples : Soient les deux tables suivantes : Employe (idEmp, nomEmp, prenomEmp, salaire, genre, datecontrat, #idDirec, #idServ ) Service (idServ, nomServ)
27. Donner le nom et le prénom des employés avec pour chacun d'eux, le nom de son
service.
SELECT employe.nomEmp, employe.prenomEmp, service.nomServ FROM employe, service
5
Cours BD
Chapitre IV
WHERE employe.idServ = service.idServ; condition de jointure
28. Donner pour chaque service, son nom ainsi que le nombre d’employés qu’il contient.
SELECT Employe.idServ, nomServ, count(idEmp) NbreEmploye FROM Employe, Service WHERE Employe. idServ =Service.idServ GROUP BY Employ.idServ ;
29. Donner le nom et le prénom des employés ainsi que le nom et le prénom de leur
directeur correspondant.
SELECT CONCAT(e1.nomEmp,' ', e1.prenomEmp) emp, CONCAT(e2.nom,' ', e2.prenom) dir FROM employe e1, employe e2 e1 et e2 sont des alias de tables WHERE e1.idDirec = e2.idEmp; jointure réflexive
6