Cours BD - Chapitre IV: Langage de Manipulation de Données (LMD)

Page 1 sur 6Lecteur de document UniversityLib

Cours BD - Chapitre IV: Langage de Manipulation de Données (LMD)

Databases and SQL · course

Voir tous les documents en bases de données

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