SQL Select
SQL Select
SQL Select
SQL
2019-2020
SQL: un Langage Complet
2
SQL: un Langage Complet
3
Schéma Relationnel de Référence
4
LMD: commande SELECT
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
6
SELECT: Expression de la Projection
7
SELECT: Expression de la Sélection
SELECT *
FROM EMPLOYÉ
WHERE Nom= ‘‘Tounsi’’;
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
9
SELECT: Opérateurs de Comparaison
10
Sous-requête indépendante, pouvant renvoyer
plusieurs lignes
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.
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
SELECT Nom
FROM EMPLOYÉ
WHERE Adresse = ‘‘ Bizerte’’;
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
SELECT Nom
FROM EMPLOYÉ, SERVICE
WHERE EMPLOYÉ.N°SS = SERVICE.N°SS_Dir ;
16
Expression de la Jointure
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
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
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
21
Les Opérateurs Ensemblistes: UNION
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
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).
SELECT Nom
FROM EMPLOYÉ
WHERE Grade = ‘‘Cadre’’
ORDER BY Nom ASC, Grade DESC;
24
Fonctions d’Agrégat
25
Fonctions d’Agrégat: Exemples
26
Fonctions d’Agrégat: Exemples
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
31
Création d’Alias pour l’Affichage
32
Sous-requête indépendante, renvoyant une seule ligne
33
Sous-requête indépendante, renvoyant plusieurs ligne
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
36
L’Opérateur [NOT] EXISTS: Exemples
37
L’Opérateur [NOT] EXISTS: Exemples
SELECT N°SS
FROM EMPLOYÉ A
WHERE NOT EXISTS (SELECT *
FROM EMPLOYÉ B
WHERE B.Date_Naissance < A.Date_Naissance);
38