0% ont trouvé ce document utile (0 vote)
62 vues38 pages

SQL Select

SQL est un langage complet permettant de définir, manipuler et contrôler les données d'une base de données relationnelle. Il inclut un langage de définition de données, de manipulation de données et de contrôle de données.

Transféré par

sofiene Dach
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
62 vues38 pages

SQL Select

SQL est un langage complet permettant de définir, manipuler et contrôler les données d'une base de données relationnelle. Il inclut un langage de définition de données, de manipulation de données et de contrôle de données.

Transféré par

sofiene Dach
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 38

(6) Structured Query Language

SQL

2019-2020
SQL: un Langage Complet

Origine: Conçu et implémenté au CR d’IBM

Langage permettant de définir, manipuler et contrôler les données d’une BD


relationnelle

C’est un langage complet:

 LDD: Langage de Définition de Données

 LMD: Langage de Manipulation de Données

 LCD: Langage de Contrôle de Données

2
SQL: un Langage Complet

 Langage de Définition de Données (LDD)


 Création de relations : CREATE TABLE
 Modification de relations: ALTER TABLE
 Suppression de relations: DROP TABLE

 Langage de Manipulation de Données (LMD)


 Insertion de tuples: INSERT
 Mise à jour des tuples: UPDATE
 Suppression de tuples: DELETE
 Sélection de tuples: SELECT

3
Schéma Relationnel de Référence

EMPLOYÉ (Prénom, Nom, N°SS, Date_Naissance, Adresse, Sexe,


Salaire, N°SS_Sup, #N°Serv, Grade)

SERVICE ( N°Serv, NomServ, N°SS_Dir)

PROJET (N°Proj, Nomproj, Emplacement, #N°Serv)

TRAVAILLER (N°SS, N°Proj, Nbr_heures)


SUR

4
LMD: commande SELECT

SELECT <LISTE D’ATTRIBUTS>


FROM NOM DE RELATION
WHERE CONDITION;

La clause «WHERE» est optionnelle. Lorsqu’elle ne figure pas, il s’agit d’effectuer


une projection simple.

5
LMD: commande SELECT

La condition peut être multiple. On peut utiliser les opérateurs «AND» et «OR »
pour des conditions multiples.

Exemples:
WHERE Salaire>1450 AND Sexe= ‘M’

Ou

WHERE (Salaire>1450 AND Sexe= ‘ M’) OR (Salaire>4450 AND Sexe= ‘F’)

6
SELECT: Expression de la Projection

« Donner les noms et adresses des employés ».

SELECT Nom, Adresse


FROM EMPLOYÉ;

 Les autres colonnes de la relation n’apparaîtront pas.

7
SELECT: Expression de la Sélection

« Donner tous les renseignements concernant les employés dont


le nom est Tounsi. »

SELECT *
FROM EMPLOYÉ
WHERE Nom= ‘‘Tounsi’’;

Taper * ou citer l’ensemble des colonnes de la table EMPLOYÉ

8
SELECT: Opérateurs de Comparaison

 {=, !=, <, <=, >, >=}: L'opérateur différent peut aussi s'écrire <>
 IS [NOT] NULL : Teste si le contenu d'une colonne est une valeur nulle
ou pas

 [NOT] IN (liste de valeur) : Teste si le contenu coïncide avec le


contenu de la liste qui suit entre parenthèses ou pas

 [NOT] BETWEEN v1 AND v2 : Teste si le contenu d'une colonne est


compris entre v1 et v2 ou pas

9
SELECT: Opérateurs de Comparaison

 [NOT] LIKE : Compare la valeur de la colonne et celle de la chaîne de


caractères qui suit en utilisant des caractères génériques :

% substitue 0 ou plusieurs caractères


_ substitue 1 seul caractère

10
Sous-requête indépendante, pouvant renvoyer
plusieurs lignes

La condition de sélection utilise l’opérateur IN ou un opérateur simple (=, <>, <,


>, …) précédé de ALL ou ANY:

 IN : la condition est vraie si elle est vérifiée pour une des valeurs renvoyées
par la sous-requête

 ALL : la comparaison est vraie si elle est vraie pour chacune des valeurs
renvoyées par la sous-requête

 ANY : la comparaison est vraie si elle est vraie pour au moins une des
valeurs renvoyées par la sous-requête.

◦Remarque : IN est équivalent à =ANY


11
Opérateurs de Comparaison

« Donner les noms des employés dont on ne connaît pas


l’adresse».
SELECT Nom
FROM EMPLOYÉ
WHERE Adresse IS NULL;

« Lister toutes les informations sur les employés habitant à Tunis,


Gafsa ou Jendouba »
SELECT *
FROM EMPLOYÉ
WHERE Adresse IN (‘‘Tunis’’, ‘‘Gafsa’’, ‘‘Jendouba’’);
12
Opérateurs de Comparaison

« Lister Les employés dont la date de Naissance est entre 06-


07-78 et 06-07-68 ».
SELECT *
FROM EMPLOYÉ
WHERE Date_Naissance BETWEEN ‘06-07-78’ AND ‘06-07-68’;

Lister les Noms et les Adresses des employés dont le nom commence par
un D
SELECT Nom, Adresse
FROM EMPLOYÉ
WHERE Nom LIKE ‘‘D%’’;
13
Projection + Sélection

« Donner les noms des employés qui habitent Bizerte »

SELECT Nom
FROM EMPLOYÉ
WHERE Adresse = ‘‘ Bizerte’’;

REMARQUE : dans la grande majorité des cas la projection et la sélection sont


associées.

14
Expression du Produit Cartésien

Le produit cartésien s’exprime d’une façon très simple : il suffit de citer les deux
relations qui participent au produit.

SELECT *
FROM R1, R2;

15
Expression de la Jointure

« Donner les noms des employés responsables d’un service »

SELECT Nom
FROM EMPLOYÉ, SERVICE
WHERE EMPLOYÉ.N°SS = SERVICE.N°SS_Dir ;

16
Expression de la Jointure

« Donner le nom des employés travaillant pour le service ‘‘Marketing’’ »

SELECT Nom
FROM EMPLOYÉ, SERVICE
WHERE EMPLOYÉ.N°Service = SERVICE.N°Service
AND NomServ= ‘‘Marketing’’;

AUTRE FORMULATION

SELECT Nom
FROM EMPLOYÉ
WHERE N°Service = (SELECT N°Service
FROM SERVICE
WHERE NomServ=‘‘Marketing’’);
17
Expression de Jointures Multiples

« Donner les noms des employés qui travaillent dans les projets sis à
‘‘Gafsa’’»
SELECT Nom
FROM EMPLOYÉ
WHERE N°SS IN (SELECT N°SS
FROM TRAVAILLER_SUR
WHERE N°Proj IN (SELECT N°Proj
FROM PROJET
WHERE Emplacement= ‘‘Gafsa’’));

AUTRE FORMULATION
SELECT Nom
FROM EMPLOYÉ, TRAVAILLER_SUR, PROJET
WHERE EMPLOYÉ.N°SS = TRAVAILLER_SUR.N°SS
AND TRAVAILLER_SUR.N°Proj = PROJET.N°Proj
AND PROJET.Emplacement = ‘‘Gafsa’’;
18
Auto-Jointure

 Il est nécessaire dans le cas d’auto-jointure de préciser un nom de variable après


le nom de la table : c’est l’alias qui différencie les différentes copies d’une même
table.

 Exemple:
ALTER TABLE EMPLOYÉ ADD Grade VARCHAR(12);
 La colonne Grade spécifie le grade de l’employé: ouvrier, cadre, technicien, etc.

19
Auto-Jointure

« Donner les noms des employés ouvriers qui gagnent plus


qu’un cadre. »

SELECT A.Nom
FROM EMPLOYÉ A, EMPLOYÉ M
WHERE A.salaire> M.salaire
AND A.GRADE = ‘‘ouvrier’’
AND M.GRADE = ‘‘cadre’’;

20
Élimination de Tuples Identiques

« Donner la liste des grades au sein de l’entreprise»

SELECT DISTINCT Grade


FROM EMPLOYÉ;

21
Les Opérateurs Ensemblistes: UNION

« Donner tous les Noms des projets auxquels participe un employé


dont le nom est « Tounsi », que ce soit comme simple employé ou
comme responsable du département en charge du projet»

SELECT DISTINCT NomProj


FROM PROJET, EMPLOYÉ, TRAVAILLER_SUR
WHERE Nom = ‘‘Tounsi’’
AND PROJET.N°Proj = TRAVAILLER_SUR.N°Proj
AND EMPLOYÉ.N°SS = TRAVAILLER_SUR.N°SS

UNION
SELECT DISTINCT NomProj
FROM EMPLOYÉ, SERVICE, PROJET
WHERE SERVICE.N°Service =PROJET.N°Service
AND EMPLOYÉ.N°SS = SERVICE.N°SS_Dir
AND Nom = ‘‘Tounsi’’;
22
Les Opérateurs Ensemblistes

On utilise INTERSECT pour l’Intersection, et


MINUS pour la différence.

23
Tri de Résultat

ORDER BY permet de présenter les résultats triés par ordre ascendant (ASC) [par
défaut] ou descendant (DESC).

« Donner le nom des cadres par ordre alphabétique et ordre décroissant


de grade ».

SELECT Nom
FROM EMPLOYÉ
WHERE Grade = ‘‘Cadre’’
ORDER BY Nom ASC, Grade DESC;

24
Fonctions d’Agrégat

 AVG : détermine la moyenne


 SUM : calcule la somme
 MIN : renvoie le minimum des valeurs
 MAX : renvoie le maximum
 COUNT(*) : nombre de lignes

25
Fonctions d’Agrégat: Exemples

« Trouver le nombre des employés de la ville de Tabarka »

SELECT COUNT (*) AS Nombre


FROM EMPLOYÉ
WHERE Adresse = ‘‘Tabarka’’ ;

« Trouver le salaire moyen des salaires des employés »

SELECT AVG(Salaire) AS Moyenne des Salaires


FROM EMPLOYÉ ;

26
Fonctions d’Agrégat: Exemples

« Trouver les noms et les salaires des employés qui gagnent le


plus dans l'entreprise »
SELECT Nom, Salaire
FROM EMPLOYÉ
WHERE Salaire = Max(Salaire);

Il faut une sous-interrogation car MAX(Salaire) n'est pas au même


niveau de regroupement que le simple Salaire :

SELECT Nom, Salaire


FROM EMPLOYÉ
WHERE Salaire = (SELECT MAX(Salaire)
FROM EMPLOYÉ );
27
Fonctions d’Agrégat: Exemple

« Donner les noms des cadres qui gagnent plus que la


moyenne des salaires des employés ».

SELECT Nom
FROM EMPLOYÉ
WHERE Grade = ‘‘Cadre’’
AND Salaire > (SELECT AVG(Salaire)
FROM EMPLOYÉ);

28
Classification du Résultat

On appelle groupe un ensemble de lignes, résultat d’une requête, qui ont une
valeur commune dans une ou plusieurs colonnes.
Cela se fait à l’aide de la clause GROUP BY.

Un ordre SELECT avec une clause GROUP BY rend une ligne résultat pour
chaque groupe

29
Classification du Résultat: Exemples

« Donner la somme des salaires par grade »

SELECT SUM(Salaire), Grade


FROM EMPLOYÉ
GROUP BY Grade ;

« Donner les noms des projets par emplacement»


SELECT NomProj, Emplacement
FROM PROJET
GROUP BY Emplacement ;
30
Classification Conditionnelle du Résultat

On peut, après un GROUP BY introduire une sélection pour éliminer quelques


groupes ne vérifiant pas une condition

« Trouver le nombre d’heures effectuées par employé en éliminant les


employés dont le total est < 50 »

SELECT N°SS, SUM (nbr_heures)


FROM TRAVAILLER_SUR
GROUP BY N°SS

HAVING SUM(nbr_heures) >= 50;

31
Création d’Alias pour l’Affichage

SELECT NomServ As Nom Service


FROM SERVICE;

32
Sous-requête indépendante, renvoyant une seule ligne

« Donner la liste des employés (nom, adresse) ayant le même


salaire que l’employé de N°SS : 1435768998»

SELECT Nom, Adresse


FROM EMPLOYÉ
WHERE Salaire = (SELECT Salaire
FROM EMPLOYÉ
WHERE N°SS=1435768998);

33
Sous-requête indépendante, renvoyant plusieurs ligne

« Donner les N°SS des employés dont le salaire dépasse le salaire de


tous les employés appartenant au service 4»

SELECT N°SS
FROM EMPLOYÉ
WHERE Salaire > ALL (SELECT Salaire
FROM EMPLOYÉ
WHERE N°Service=4);

34
Sous-requête synchronisée avec la requête principale

« Donner les noms des responsables des services dont le salaire est
supérieur à celui des employés de même grade »

SELECT A.Nom
FROM EMPLOYÉ A, SERVICE
WHERE A.N°SS = SERVICE.N°SS_Dir
AND A.Salaire > (SELECT Salaire
FROM EMPLOYÉ B
WHERE A.Grade= B.Grade);

35
L’Opérateur [NOT] EXISTS

Résultat de la sous-requête assimilé à une valeur logique


On veut savoir si le résultat contient ou non des données (est un ensemble
vide ou non)  Les valeurs n'ont aucun intérêt.
Avec EXISTS, le résultat est VRAI si le résultat de la sous-requête est non
vide, FAUX sinon et inversement avec NOT EXISTS.

36
L’Opérateur [NOT] EXISTS: Exemples

« Donner les noms des Services ayant au moins un employé de grade


Technicien».

SELECT NomServ AS Nom Service


FROM SERVICE
WHERE EXISTS ( SELECT *
FROM EMPLOYÉ
WHERE EMPLOYÉ.N°Service = SERVICE.N°Service
AND GRADE= ‘‘Technicien’’);

37
L’Opérateur [NOT] EXISTS: Exemples

« Donner les N°SS des employés les moins âgés».

SELECT N°SS
FROM EMPLOYÉ A
WHERE NOT EXISTS (SELECT *
FROM EMPLOYÉ B
WHERE B.Date_Naissance < A.Date_Naissance);

38

Vous aimerez peut-être aussi