0% ont trouvé ce document utile (0 vote)
66 vues17 pages

Introduction au Langage SQL

Le document décrit le langage SQL, y compris ses capacités de définition, de manipulation et de contrôle de données. Il explique diverses commandes SQL comme CREATE TABLE pour créer des tables et spécifier des contraintes. Le document contient des informations sur les types de données SQL et les commandes de langage de définition de données.

Transféré par

Ghofyy Slatenia
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)
66 vues17 pages

Introduction au Langage SQL

Le document décrit le langage SQL, y compris ses capacités de définition, de manipulation et de contrôle de données. Il explique diverses commandes SQL comme CREATE TABLE pour créer des tables et spécifier des contraintes. Le document contient des informations sur les types de données SQL et les commandes de langage de définition de données.

Transféré par

Ghofyy Slatenia
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

Faculté des Sciences Économiques et de Gestion de Tunis Introduction à SQL

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

1
CHAPITRE
Structured Query Language Langage permettant de définir, manipuler et contrôler les données
d’une BD relationnelle
SQL
 C’est un langage complet:

 LDD: Langage de Définition de Données


Mme Saida Akkari

 LMD: Langage de Manipulation de Données

 LCD: Langage de Contrôle de Données


2023-2024
2

SQL: Langage Complet Schéma Relationnel de référence


 Langage de Définition de Données (LDD)
Création de relations : CREATE TABLE EMPLOYÉ (Prénom, Nom, N°SS, Date_Naissance, Adresse, Sexe, Salaire,
N°SS_Sup, #N°Serv)
Modification de relations: ALTER TABLE
Suppression de relations: DROP TABLE SERVICE ( N°Serv, NomServ, N°SS_Dir)

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


 Langage de Manipulation de Données (LMD)
TRAVAILLER SUR (N°SS, N°Proj, Nbr_heures)
Insertion de tuples: INSERT
Mise à jour des tuples: UPDATE
Suppression de tuples: DELETE
Sélection de tuples: SELECT

3 4

1
LDD: commande CREATE SCHEMA LDD: commande CREATE TABLE
Le Schéma permet de regrouper des tables et d’autres constructions  Commande qui permet de créer une table
appartenant à la même application de BD.
◦ terminologie SQL: relation  table, attribut  colonne

CREATE SCHEMA nom-schema AUTHORIZATION nom-utilisateur ;

Le privilège qui permet de créer des schémas, des tables et d’autres


constructions doit être explicitement accordé aux comptes
utilisateurs appropriés par le DBA.

Exemple:
CREATE SCHEMA ENTREPRISE AUTHORIZATION 3SADMIN ;

5 6

LDD: commande CREATE TABLE LDD: commande CREATE TABLE


Types de Données et Domaines des attributs en SQL Types de Données et Domaines des attributs en SQL

Numérique: comprend Chaîne de Caractères: sont


lesnombres entiers de différentes tailles : INTEGER ou INT et de longueur fixe: CHAR(n) ou CHARACTER(n) où n est le nbre de
SMALLINT caractères
ou
Lesnombres (réels) à virgule flottante de différentes précisions: de longueur variable: VARCHAR(n) ou CHAR VARYING(n) où n est le
FLOAT ou REAL et DOUBLE PRECISION nbre maximal de caractères

On peut déclarer des formats de nombres avec DECIMAL(i,j) ou Si l’on se sert d’un type de chaîne à longueur fixe pour enregistrer une chaîne plus
NUMERIC(i,j) où i, la précision, est le nombre de chiffres décimaux et courte, celle-ci est complétée par des caractères vierges sur la droite.

j, l’échelle, est le nombre de chiffres après la virgule.

7 8

2
LDD: commande CREATE TABLE LDD: commande CREATE TABLE
Types de Données et Domaines des attributs en SQL Types de Données et Domaines des attributs en
SQL
Booléen: a les valeurs TRUE ou FALSE (respectivement « vrai » ou
« faux »)
Types binaires: ils permettent de stocker des données de type
binaire telles que des images
BYTE type binaire de longueur fixe (1 à 1000 octets)
Date et Heure: BYTE VARYING type binaire de longueur variable (1 à 1000 octets)
Le type DATE compte 10 positions et ses composants sont ANNÉE, BYTE LONG type binaire de longueur variable (1 à 2 Go)
MOIS et JOUR sous la forme AAAA-MM-JJ.

Le type TIME a au min 8 positions et ses composants sont HEURE,


MINUTE et SECONDE sous la forme HH:MM:SS.

9 10

LDD: commande CREATE TABLE LDD: commande CREATE TABLE


Types de Données et Domaines des attributs en SQL Spécification des contraintes de base en SQL
Spécifications des contraintes sur les attributs et de leur valeur
Il est possible de spécifier directement le type de données de chaque par défaut
attribut
Il est possible de spécifier une contrainte NOT NULL pour interdire la
NOM VARCHAR(10) valeur NULL.

ou on peut déclarer un nom de domaine et se servir de ce nom avec Cette contrainte est toujours spécifiée implicitement pour des
la spécification des attributs. Cela facilite la modification du type de attributs qui font partie de la clé primaire d’une relation.
données d’un domaine utilisé par de nombreux attributs dans un
schéma. Elle peut être spécifiée pour tout attribut (hors clé) dont il est
obligatoire que les valeurs ne soient pas NULL.
CREATE DOMAIN NOM_TYPE AS VARCHAR(10)
11 12

3
LDD: commande CREATE TABLE LDD: commande CREATE TABLE
Spécification des contraintes de base en SQL Spécification des contraintes de base en SQL
Spécifications des contraintes sur les attributs et de leur valeur Spécifications des contraintes sur les attributs et de leur valeur
par défaut par défaut

Autre contrainte avec la clause CHECK qui permet de restreindre les OU


valeurs d’un attribut ou d’un domaine. CREATE DOMAIN N°Ser_type AS INTEGER CHECK (N°Ser_type > 0 AND
N°Ser_type < 10)
Exemple:
On peut, ensuite, utiliser le domaine N°Ser_type crée en tant que
N°Gouvernorat INTEGER NOT NULL CHECK (N°Gouvernorat > 0 AND type de tous les attributs qui renvoient à un numéro de service (de la
N°Gouvernorat < 24) table EMPLOYÉ, PROJET et SERVICE)

13 14

LDD: commande CREATE TABLE LDD: commande CREATE TABLE


Spécification des contraintes de base en SQL CREATE TABLE EMPLOYÉ
Spécifications des contraintes de clé et d’intégrité référentielle (N°SS CHAR(8) NOT NULL,
Nom VARCHAR(15) NOT NULL,
Prénom VARCHAR(15) NOT NULL,
 La clause PRIMARY KEY désigne le ou les attributs qui forment la
Date_Naissance DATE,
clé primaire d’une relation. Adresse VARCHAR(30),
Sexe CHAR,
Exemple: Salaire DECIMAL(10,2),
N°Service INT PRIMARY KEY; N°SS_SUP CHAR(8),
N°Service INT NOT NULL,

 L’intégrité référentielle est spécifiée avec la clause FOREIGN KEY. PRIMARY KEY (N°SS),
FOREIGN KEY (N°SS_SUP) REFERENCES EMPLOYÉ(N°SS),
FOREIGN KEY (N°Service) REFERENCES SERVICE (N°Service));
15 16

4
LDD: commande CREATE TABLE LDD: commande CREATE TABLE
CREATE TABLE SERVICE CREATE TABLE PROJET
(N°Service INT NOT NULL, (N°Proj INT NOT NULL,
NomServ VARCHAR(15) NOT NULL, NomProj VARCHAR(15) NOT NULL,
N°SS_Dir CHAR(8) NOT NULL, Emplacement VARCHAR(13)
N°Service INT NOT NULL,
PRIMARY KEY (N°Service),
PRIMARY KEY (N°Proj),
FOREIGN KEY (N°SS_Dir) REFERENCES EMPLOYÉ(N°SS) ; )
FOREIGN KEY (N°Service) REFERENCES SERVICE (N°Service) ; )

17 18

LDD: commande CREATE TABLE LDD: commande DROP [TABLE|SCHEMA]


CREATE TABLE TRAVAILLER SUR
 DROP permet de supprimer des éléments du schéma qui portent un
(N°SS CHAR(8) NOT NULL, nom tels que des tables, des domaines, etc.
N°Proj INT NOT NULL,
Nbre_Heures DECIMAL(3,1) NOT NULL,  Elle permet aussi de supprimer la totalité d’un schéma via la
commande DROP SCHEMA.
PRIMARY KEY (N°SS, N°Proj),
FOREIGN KEY (N°SS) REFERENCES EMPLOYÉ(N°SS),

FOREIGN KEY (N°Proj) REFERENCES PROJET(N°Proj) ;)

19 20

5
LDD: commande DROP [TABLE|SCHEMA] LDD: commande DROP [TABLE|SCHEMA]
Le comportement de cette commande peut être précisé à l’aide de 2 DROP TABLE permet de supprimer une relation devenant inutile à
options: CASCADE et RESTRICT. l’intérieur d’un schéma

DROP SCHEMA ENTREPRISE CASCADE; Exemple:

Supprimer le schéma de la BD ENTREPRISE avec toutes ses tables, DROP TABLE AYANTDROIT [RESTRICT|CASCADE];
domaines et autres éléments. Avec l’option RESTRICT: la table n’est détruite que si elle n’est pas
référencée par une contrainte (des définitions des clés étrangères dans
une autre relation) ou une vue.

DROP SCHEMA ENTREPRISE RESTRICT;


Avec l’option CASCADE: toutes les contraintes ainsi que toutes les
Le schéma n’est supprimé que s’il ne contient pas d’éléments, s’il
vues qui référencent la table sont automatiquement supprimées avec
en contient, la commande DROP n’est pas exécutée.
la table elle-même.
21 22

LDD: commande ALTER TABLE LDD: commande ALTER TABLE


Ajouter une colonne: ADD
Supprimer une colonne: DROP
Pour ajouter un attribut destiné à permettre le suivi des missions des
Pour supprimer l’attribut Adresse des employés dans la relation EMPLOYÉ
employés dans la relation EMPLOYÉ du schéma ENTREPRISE
ALTER TABLE EMPLOYÉ DROP Adresse [CASCADE|RESTRICT]
ALTER TABLE ENTREPRISE.EMPLOYÉ ADD Mission VARCHAR(12)
Elle est utilisée pour éliminer les données ainsi que la structure d’une colonne
(de même pour la table)

Modifier le type de données d’une colonne: MODIFY


Supprimer uniquement des données
ALTER TABLE Nom_table MODIFY Nom_colonne Type_de_données
Il est possible de supprimer uniquement les données en conservant la
structure de la table grâce à la clause TRUNCATE.
TRUNCATE TABLE Nom_table
23 24

6
LDD: commande RENAME TABLE LMD: commande INSERT
La commande RENAME TABLE permet de renommer une table: Elle permet d’ajouter un tuple à une relation
INSERT INTO <nom table> [nom de colonne, …]
RENAME TABLE Ancien_Nom TO Nouveau_Nom; VALUES (valeur, …)
|<Instruction SELECT>)

Exemple 1:

INSERT INTO EMPLOYÉ


VALUES(“Ahmed”, “Ben Saleh”, 1239873215, 16-03-71, “Tunis”, ‘M’,
1670, 987321554, 4);
//Insérer toutes les informations d’un employé

25 26

LMD: commande INSERT LMD: commande INSERT


Exemple 2: Exemple 3: Pour créer une table temporaire contenant le nom, le
nombre d’employés et le total des salaires pour chaque service:
INSERT INTO EMPLOYÉ (Prénom, Nom, N°SS, N°Service)
VALUES(“Ahmed”, “Ben Saleh”, 1239873215, 4); CREATE TABLE SERVICE_INFO
(NomServ VARCHAR(15),
//Insérer une partie des informations d’un employé Nbre_Empl INT,
Total_Sal DECIMAL(7,3));

INSERT INTO SERVICE_INFO (NomServ, Nbre_Empl, Total_Sal)


SELECT NomServ, COUNT(*), SUM(Salaire)
FROM Service, EMPLOYÉ
WHERE Service.N°service=EMPLOYÉ.N°Service
GROUP BY Nomserv;

27 28

7
LMD: commande DELETE LMD: commande DELETE
Elle permet de supprimer des tuples d’une relation Exemple 3:
Exemple 1: DELETE FROM EMPLOYÉ
WHERE N°Service IN (SELECT N°Service
DELETE FROM EMPLOYÉ
FROM SERVICE
WHERE Nom=“Ben Saleh”; WHERE NomService=“Recherche”);
 Supprimer tous les employés qui portent le nom “Ben saleh”
 Supprimer tous les employés travaillant pour le service “Recherche”

Exemple 2: Exemple 4:
DELETE FROM EMPLOYÉ
DELETE FROM EMPLOYÉ;
WHERE N°SS=1325467685;  Supprimer tous les employés de la table EMPLOYÉ
 Supprimer l’employé ayant le N°SS 1325467685
29 30

LMD: commande UPDATE LMD: commande UPDATE


Elle sert à modifier les valeurs des attributs d’un ou de plusieurs tuples Exemple 2:
sélectionnés
UPDATE EMPLOYÉ
Exemple 1: SET Salaire=Salaire*1.1
UPDATE PROJET WHERE N°Service IN (SELECT N°Service
SET Emplacement=‘Gafsa’, N°Service=5 FROM SERVICE
WHERE N°Proj=10; WHERE NomServ=“Recherche”);

 Modifier l’emplacement et le N°Service responsable du projet N°10


et leur donner respectivement les valeurs “Gafsa” et 5.  Attribuer une augmentation de 10% aux salaires des employés qui
travaillent pour le service Recherche.
Exemple 2:
UPDATE EMPLOYÉ
SET Salaire=Salaire*1.1;
 Attribuer une augmentation de 10% aux salaires de tous les employés
31 32

8
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.

33 34

LMD: commande SELECT Expression de la projection


La condition peut être multiple. On peut utiliser les opérateurs «AND» « Donner les noms et adresses des employés ».
et «OR » pour des conditions multiples.
SELECT Nom, Adresse
Exemples: FROM EMPLOYÉ;
WHERE Salaire>1450 AND Sexe= ‘M’  Les autres colonnes de la relation n’apparaîtront pas.

Ou
ATTENTION : l’opérateur relationnel n’est qu’une recopie
WHERE (Salaire>1450 AND Sexe= ‘ M’) OR (Salaire>1450 AND Sexe= ‘F’) d’informations : il n’y a pas de destruction physique (sur le disque)
des informations contenues dans la relation initiale.

35 36

9
Expression de la Sélection Opérateurs de Comparaison
{=, !=, <, <=, >, >=}. L'opérateur différent peut aussi s'écrire
« Donner tous les renseignements concernant les
<>
employés dont le nom est Tounsi. »
IS [NOT] NULL : Teste si le contenu d'une colonne est une valeur
SELECT * nulle ou pas
FROM EMPLOYÉ
WHERE Nom= ‘Tounsi’;
[NOT] IN (liste de valeur) : Teste si le contenu coïncide avec le
contenu de la liste qui suit entre parenthèses ou pas
Taper * ou citer l’ensemble des colonnes de la table EMPLOYÉ

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


est compris entre v1 et v2 ou pas
37 38

Sous-requête indépendante, pouvant


Opérateurs de Comparaison renvoyer plusieurs lignes
[NOT] LIKE : Compare la valeur de la colonne et celle de La condition de sélection utilise l’opérateur IN ou un opérateur simple
la chaîne de caractères qui suit en utilisant des caractères (=, <>, <, >, …) précédé de ALL ou ANY:
génériques :
IN : la condition est vraie si elle est vérifiée pour une des valeurs
% substitue 0 ou plusieurs caractères renvoyées par la sous-requête

_ substitue 1 seul caractère 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


39 40

10
Opérateurs de Comparaison: Exemples Opérateurs de Comparaison: Exemples
« Donner les noms des employés dont on ne connaît pas « Lister Les employés dont la date de Naissance est
l’adresse». entre 06-07-78 et 06-07-68 ».
SELECT Nom SELECT *
FROM EMPLOYÉ FROM EMPLOYÉ
WHERE Adresse IS NULL; WHERE Date_Naissance BETWEEN ‘06-07-78’ AND ‘06-07-68’;

« Lister toutes les informations sur les employés habitant à Lister les Noms et les Adresses des employés dont le nom
Tunis, Gafsa ou Jendouba » commence par un D
SELECT * SELECT Nom, Adresse
FROM EMPLOYÉ FROM EMPLOYÉ
WHERE Adresse IN (‘Tunis', ‘Gafsa', ‘Jendouba'); WHERE Nom LIKE ‘D%‘;
41 42

Projection + Sélection Expression du produit cartésien


Le produit cartésien s’exprime d’une façon très simple : il suffit de
« Donner les noms des employés qui habitent Bizerte » citer les deux relations qui participent au produit.

SELECT *
SELECT Nom
FROM R1, R2;
FROM EMPLOYÉ
WHERE Adresse = ‘ Bizerte’;

REMARQUE : dans la grande majorité des cas la projection et la


sélection sont associées.

43 44

11
Expression de la jointure naturelle et de la
théta-jointure Jointure et sélection simultanée
« Donner le nom des employés travaillant pour le service ‘Marketing’ »
SELECT Nom
« Donner les noms des employés responsables d’un service » FROM EMPLOYÉ, SERVICE
WHERE EMPLOYÉ.N°Service = SERVICE.N°Service
AND NomServ= ‘Marketing’;
SELECT Nom
AUTRE FORMULATION
FROM EMPLOYÉ, SERVICE
SELECT Nom
WHERE EMPLOYÉ.N°SS = SERVICE.N°SS_Dir ; FROM EMPLOYÉ
WHERE N°Service IN (SELECT N°Service
FROM SERVICE
WHERE NomServ=‘Marketing’);
45 46

Jointures multiples Auto-jointure


« Donner les noms des employés qui travaillent dans les Il est nécessaire dans le cas d’auto-jointure de préciser un nom de
projets sis à ‘Gafsa’» variable après le nom de la table : c’est l’alias qui différencie les
SELECT Nom
FROM EMPLOYÉ différentes copies d’une même table.
WHERE N°SS IN SELECT N°SS
FROM TRAVAILLER_SUR
WHERE N°Proj IN SELECT N°Proj Exemple:
FROM PROJET
ALTER TABLE EMPLOYÉ ADD Grade VARCHAR(12);
WHERE Emplacement= ‘Gafsa’;
La colonne Grade spécifie le grade de l’employé: ouvrier, cadre,
AUTRE FORMULATION
SELECT Nom technicien, etc.
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’;
47 48

12
Autojointure Suppression des tuples identiques
« Donner les noms des employés ouvriers qui gagnent « Donner la liste des grades au sein de l’entreprise»
plus qu’un cadre. »

SELECT A.Nom SELECT DISTINCT Grade


FROM EMPLOYÉ A, EMPLOYÉ M FROM EMPLOYÉ;
WHERE A.salaire> M.salaire
AND A.GRADE = « ouvrier »
AND M.GRADE = « cadre »;

49 50

Les opérateurs ensemblistes : l’UNION Les opérateurs ensemblistes


« Donner tous les N° des projets auxquels participe un employé
On utilise INTERSECT pour l’Intersection, et
dont le nom est « Tounsi », que ce soit comme simple employé
ou comme responsable du département en charge du projet» MINUS pour la différence.

SELECT DISTINCT N°Proj


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 N°Proj
FROM EMPLOYÉ, SERVICE, PROJET
WHERE SERVICE.N°Service =PROJET.N°Service
AND EMPLOYÉ.N°SS = SERVICE.N°SS_Dir
AND Nom =« Tounsi »;
51 52

13
Tri de Résultat Fonctions d’agrégat
ORDER BY permet de présenter les résultats triés par ordre ascendant
(ASC) [par défaut] ou descendant (DESC).
◦ AVG : détermine la moyenne
« Donner le nom des cadres par ordre alphabétique et ordre ◦ SUM : calcule la somme
décroissant de grade ».
◦ MIN : renvoie le minimum des valeurs
◦ MAX : renvoie le maximum
SELECT Nom
◦ COUNT(*) : nombre de lignes
FROM EMPLOYÉ
WHERE Grade = «Cadre»
ORDER BY Nom ASC, Grade DESC;

53 54

Fonctions d’agrégat: Exemples Fonctions d’agrégat: Exemples


« Trouver les noms et les salaires des employés qui
« Trouver le nombre des employés de la ville de Tabarka » gagnent le plus dans l'entreprise »
SELECT Nom, Salaire
SELECT COUNT (*) AS Nombre
FROM EMPLOYÉ
FROM EMPLOYÉ
WHERE Salaire = Max(Salaire);
WHERE Adresse = ‘Tabarka’ ;
Il faut une sous-interrogation car MAX(Salaire) n'est pas au même
niveau de regroupement que le simple Salaire :
« Trouver le salaire moyen des salaires des employés »
SELECT Nom, Salaire
SELECT AVG(Salaire) AS Moyenne des Salaires FROM EMPLOYÉ
FROM EMPLOYÉ ; WHERE Salaire = (SELECT MAX(Salaire)
FROM EMPLOYÉ );
55 56

14
Classification du Résultat Classification du Résultat: Exemples

« Donner les noms des cadres qui gagnent plus que la


On appelle groupe un ensemble de lignes, résultat d’une requête, moyenne des salaires des employés ».
qui ont une valeur commune dans une ou plusieurs colonnes.
Cela se fait à l’aide de la clause GROUP BY. SELECT Nom
FROM EMPLOYÉ
Un ordre SELECT avec une clause GROUP BY rend une ligne
résultat pour chaque groupe WHERE Grade = ‘ Cadre’
AND Salaire > (SELECT AVG(Salaire)
FROM EMPLOYÉ);

57 58

Classification du Résultat: Exemples Classification conditionnelle du Résultat


On peut, après un GROUP BY introduire une sélection pour éliminer
« Donner la somme des salaires par grade » quelques groupes ne vérifiant pas une condition

SELECT SUM(Salaire), Grade « Trouver le nombre d’heures effectuées par employé en


éliminant les employés dont le total est < 50 »
FROM EMPLOYÉ
GROUP BY Grade ; SELECT N°SS, SUM (nbr_heures)
FROM TRAVAILLER_SUR
« Donner les noms des projets par emplacement»
GROUP BY N°SS
SELECT NomProj, Emplacement
HAVING SUM(nbr_heures) >= 50;
FROM PROJET
GROUP BY Emplacement ;
59 60

15
Sous-requête indépendante, renvoyant une
Création d’Alias pour l’affichage seule ligne
« Donner la liste des employés (nom, adresse) ayant le
même salaire que l’employé de N°SS : 1435768998»
SELECT NomServ As Nom Service
FROM SERVICE;
SELECT Nom, Adresse
FROM EMPLOYÉ
WHERE Salaire = (SELECT Salaire
FROM EMPLOYÉ
WHERE N°SS=1435768998);

61 62

Sous-requête indépendante, pouvant Sous-requête synchronisée avec la requête


renvoyer plusieurs lignes principale

« Donner les N°SS des employés dont le salaire dépasse le « Donner les noms des responsables des services dont le salaire
salaire de tous les employés appartenant au service 4» est supérieur à celui des employés de même grade »

SELECT N°SS SELECT A.Nom


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

63 64

16
L’opérateur 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.

65 66

L’opérateur EXISTS L’opérateur EXISTS


« Donner les noms des Services ayant au moins un employé de « Donner les N°SS des employés les moins âgés».
grade Technicien».

SELECT NomServ AS Nom Service SELECT N°SS


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

67 68

17

Vous aimerez peut-être aussi