SlideShare une entreprise Scribd logo
1  sur  79
Télécharger pour lire hors ligne
Chapitre 4 (2ième partie)
Langages de consultation
des bases de données
relationnelles
GPA-775 Chapitre 4 - Langages de
consultation
2
Le langage SQL
SQL : Structured Query Language.
♦ conçu par IBM Research comme interface pour le SGBD
relationnel en expérimentation : SYSTEM R.
♦ standardisé en 1986 (ANSI) et normalisé en 92 (SQL2)
♦ est maintenant l'interface de plusieurs SGBDs
commerciaux: DB2 de IBM, SQL/DS, ORACLE, INGRES,
UNIFY, MS-Access, etc…
♦ contient des fonctions qui sont utilisées pour définir,
accéder et maintenir les BDR.
Ø DDL : Langage qui définit les composante de la base
de données (relations, attributs)
Ø DML : Langage qui manipule les données (ajout,
supression, modification)
GPA-775 Chapitre 4 - Langages de
consultation
3
Le langage SQL
SQL…
♦non-procédural… ???
Ø Spécifie ce qui doit être fait
Ø Non, comment cela doit être fait
♦possède des facilités pour
Øla définition de vues sur la BD
Øla création des index sur les relations
Øl'encapsulation des instructions SQL dans un langage
évolué (ex: C, C++, Pascal, PL/1)
GPA-775 Chapitre 4 - Langages de
consultation
4
Avantages et désavantages du SQL
Avantages
Ø permet de réduire les coûts de formation des programmeurs
(langage standardisé)
Ø permet de porter les applications sur différents environnements
logiciels et physiques, i.e.:
• la communication peut se faire à partir de différents systèmes
• permet aux usagers d'utiliser une interface commune.
Ø permet d'assurer que les applications auront une durée de vie
suffisante.
Désavantages
Ø SQL comporte des limitations technologiques qui ne permettent pas
de réaliser le plein potentiel du modèle relationnel.
• la créativité visant à procurer la meilleure solution peut être interdite par
une solution moins bonne mais bien définie par le standard,
GPA-775 Chapitre 4 - Langages de
consultation
5
Définition des données dans SQL (DDL)
SQL utilise les termes :
Ø table pour une relation;
Ø ligne pour une tuple;
Ø colonne pour un attribut.
SQL comporte 3 commandes pour la manipulation des tables.
Ø CREATE TABLE
Ø DROP TABLE
Ø ALTER TABLE
GPA-775 Chapitre 4 - Langages de
consultation
6
CREATE TABLE
Ø permet de spécifier une nouvelle relation en donnant:
• son nom
• et en spécifiant chacun de ses attributs
w son nom,
w son domaine de valeurs ou type de données
w ses contraintes sur l'attribut.
Remarque (pas dans les notes):
Ø Les relations créées sont dites tables de base.
Ø La relation et ses tuples sont créés et stockés comme un fichier par
le SGBD.
Ø Les attributs dans les relations de base sont ordonnés dans l'ordre
spécifié dans la commande CREATE TABLE, mais les lignes
(tuples) ne sont pas considérées comme ordonnées.
GPA-775 Chapitre 4 - Langages de
consultation
7
CREATE TABLE : les types de données
Les types numériques :
Ø Entier (INTEGER ou INT, SMALLINT)
Ø Réel (FLOAT, REAL)
Ø Nombres avec format spécifié(DECIMAL (i,j) ou NUMERIC(i,j) ou
NUMBER(i,j))
Les chaînes de caractères :
Ø Longueur fixe : CHAR (n); n nombre de caractères
Ø Longueur variable : VARCHAR(n), n : nombre maximal
La date et l’heure :
Ø Date (DATE avec le format AAAA-MM-JJ)
Ø Heure (TIME avec les format HH:MM:SS)
Ø Date et Heure combinées (TIMESTAMP)
GPA-775 Chapitre 4 - Langages de
consultation
8
CREATE TABLE : les contraintes
Ø Clé primaire de la table (PRIMARY KEY)
Ø Clé étrangère (FOREIGN KEY… REFERENCES)
• Permet de définir le lien d’une table avec une autre table.
• Garantit l’intégrité référentielle de la BD
w Ex : Nous ne pouvons effacé un tuple d’une table, s’il y a une table
contenant un tuple qui y est associé par une clé étrangère.
Ø colonne à valeurs uniques (UNIQUE)
• Chaque ligne de la table doit avoir une valeur différente ou NULL pour
cette colonne.
Ø Aucunes valeurs nulles (NOT NULL)
• SQL permet NULL comme valeur d'attribut, mais une contrainte NOT
NULL peut aussi être spécifiée. En général, on doit spécifier NOT
NULL sur la valeur de la clé primaire pour chaque relation.
GPA-775 Chapitre 4 - Langages de
consultation
9
Exemples de CREATE TABLE
CREATE TABLE EMPLOYEE
( FNAME VARCHAR (15) NOT NULL,
MINIT CHAR (1),
LNAME VARCHAR (15) NOT NULL,
SSN CHAR (9) NOT NULL,
BDATE CHAR (9),
ADDRESS VARCHAR (30),
SEX CHAR (1),
SALARY INTEGER,
SUPERSSN CHAR (9),
DNO INTEGER NOT NULL,
PRIMARY KEY (SSN),
FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN),
FOREIGN KEY (DNO) REFERENCES DEPARTEMENT (DNUMBER));
CREATE TABLE DEPARTMENT
( DNAME VARCHAR (15) NOT NULL,
DNUMBER INTERGER NOT NULL,
MGRSSN CHAR (9),
MGRSTARTDATE CHAR (9),
PRIMARY KEY (DNUMBER),
FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN),
UNIQUE (DNAME));
GPA-775 Chapitre 4 - Langages de
consultation
10
Exemples de CREATE TABLE
CREATE TABLE DEPT_LOCATIONS
( DNUMBER INTEGER NOT NULL,
DLOCATION VARCHAR (15) NOT NULL ,
PRIMARY KEY (DNUMBER, DLOCATION),
FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER));
CREATE TABLE PROJECT
( PNAME VARCHAR (15) NOT NULL,
PNUMBER INTEGER NOT NULL,
PLOCATION VARCHAR (15),
DNUM INTEGER NOT NULL ,
PRIMARY KEY (PNUMBER),
FOREIGN KEY (DNUM) REFERENCES DEPARTMENT (DNUMBER),
UNIQUE (PNAME));
CREATE TABLE WORKS_ON
( ESSN CHAR (9) NOT NULL,
PNO INTEGER NOT NULL,
HOURS DECIMAL (3,1) NOT NULL ,
PRIMARY KEY (ESSN, PNO),
FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN),
FOREIGN KEY (PNO) REFERENCES PROJECT (PNUMBER));
GPA-775 Chapitre 4 - Langages de
consultation
11
Exemples de CREATE TABLE
CREATE TABLE DEPENDENT
( ESSN CHAR (9) NOT NULL,
DEPENDENT _NAME CHAR (15) NOT NULL,
SEX CHAR (1),
BDATE CHAR (9),
RELATIONSHIP VARCHAR(8) ,
PRIMARY KEY (ESSN, DEPENDENT _NAME),
FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN));
• Pour de donner un nom aux contraintes, nous utilisons la
commande CONSTRAINT.
• L’avantage est qu’elle peut être détruite dans le futur et remplacer
par une nouvelle.
Exemple :
CREATE TABLE DEPT_LOCATIONS
( DNUMBER INTEGER NOT NULL,
DLOCATION VARCHAR (15) NOT NULL ,
CONSTRAINT DEP_LOC_PK PRIMARY KEY (DNUMBER, DLOCATION),
CONSTRAINT DNUM_FK FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT
(DNUMBER));
GPA-775 Chapitre 4 - Langages de
consultation
12
DROP TABLE
♦Permet de détruire une table de base quand elle est plus
nécessaire.
Exemple :
DROP TABLE DEPENDENT;
Remarque :
Si vous avez d’autres tables qui font référence à la table à
détruire, il faut détruire les références avant de détruire la
table.
GPA-775 Chapitre 4 - Langages de
consultation
13
ALTER TABLE
♦Permet d'ajouter une contrainte à une relation de base.
♦Permet d'ajouter un attribut à une relation de base.
ØLe nouvel attribut aura la valeur NULL dans tous les
tuples de la relation, juste après l'exécution de la
commande.
ØNOT NULL n'est pas permis pour ce nouvel attribut.
Exemple :
Pour garder la trace des fonctions des employés de la BD
COMPANY.
ALTER TABLE EMPLOYEE ADD JOB VARCHAR(12);
GPA-775 Chapitre 4 - Langages de
consultation
14
Manipulation des données dans SQL : DML
SQL possède plusieurs instructions pour effectuer
Øla recherche d'information,
Ødes consultations ,
Øde la manipulation de données…
dans une base de donnée.
Ces instructions sont :
ØSELECT
ØINSERT
ØDELETE
ØUPDATE
GPA-775 Chapitre 4 - Langages de
consultation
15
SELECT
Ø L’instruction de base pour effectuer la recherche d'information
Ø La forme de base est formée des 3 clauses:
SELECT <Liste d'attributs>: liste de noms d'attributs dont les valeurs
sont recherchées par la consultation.
FROM <Liste de tables>: liste de noms de relations nécessaires
pour traiter la consultation.
WHERE <Conditions>:Une expression logique qui identifie les
tuples recherchés par la consultation.
Remarques:
Ø L'instruction SELECT n'a aucune relation avec l'opération SELECTION de
l'algèbre relationnelle.
• SQL permet qu'une table possède une duplication de tuples.
Ø Lorsque la clause WHERE est omise, il n’y a aucune condition sur les
tuples. Tous les tuples spécifiés dans la clause FROM sont alors
sélectionnés.
• Ceci est équivalent à WHERE TRUE
GPA-775 Chapitre 4 - Langages de
consultation
16
Exemples avec SELECT
REQUÊTE 1 : Rechercher la date de naissance et l'adresse de l'employé
au nom de 'John B. Smith‘
R1 : SELECT BDATE, ADDRESS
FROM EMPLOYEE
WHERE FNAME = 'John' AND MINIT = 'B' AND LNAME = 'Smith'
1. implique seulement la relation EMPLOYEE listée dans la clause
FROM.
2. sélectionne les tuples de EMPLOYEE qui satisfont la condition
dans la clause WHERE,
3. fait une projection du résultat sur les attributs BDATE et
ADDRESS listés dans la cause SELECT.
Résultat de la consultation R1:
DBATE ADDRESS
09-JAN-55 731 Fondren, Houston, TX
GPA-775 Chapitre 4 - Langages de
consultation
17
Exemples avec SELECT
R1 est similaire à l'expression de l'algèbre relationnelle :
π<BDATE, ADDRESS> (σfname = 'John' AND MINIT='B' AND LNAME = 'Smith' (EMPLOYEE))
Øune consultation SQL simple est similaire à la paire
SELECTION-PROJECTION des opérations de l'algèbre
relationnelle.
Remarque: La seule différence est que dans le résultat d’une
consultation SQL, on peut avoir une duplication de tuples.
GPA-775 Chapitre 4 - Langages de
consultation
18
Exemples avec SELECT
REQUÊTE 2 : Rechercher le nom et l'adresse de tous les employés qui
travaillent pour le département 'Research'.
R2 : SELECT FNAME, LNAME, ADDRESS
FROM EMPLOYEE, DEPARTMENT
WHERE DNAME = 'Research' AND DNUMBER = DNO
Ø équivalente à la séquence SELECTION-PROJECTION-UNION des
opérations de l'algèbre relationnelle.
Ø DNAME = 'Research' est la condition de sélection
Ø DNUMBER = DNO est la condition de jointure.
Ø FNAME, LNAME, ADDRESS sont les colonnes de projection.
Résultat de la consultation R2:
FNAME LNAME ADDRESS
John
Franklin
Ramesh
Joyce
Smith
Wong
Narayan
English
731, Fondren, Houston, TX
638, Voss, Houston, TX
975, Fire Oak, Humble TX
5631, Rice, Houston, TX
GPA-775 Chapitre 4 - Langages de
consultation
19
Exemples avec SELECT
REQUÊTE 3 : Pour chaque projet situé à 'Stafford', lister le numéro de
projet, le numéro du département qui le contrôle et le nom, l'adresse et la
date de naissance du manager du département.
R3 : SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND
MGRSSN = SSN AND
PLOCATION = 'Stafford'
♦La condition de jointure DNUM = DNUMBER relie un projet au
département qui le contrôle et la condition de jointure MGRSSN = SSN
relie le département de contrôle à l'employé qui gère ce département.
♦la condition PLOCATION = 'Stafford' est la condition de sélection.
Résultat de la consultation R3:
PNUMBER DNU LNAME ADDRESS BDATE
10
30
4
4
Wallace
Wallace
291, Berry, Bellaire, TX
291, Berry, Bellaire, TX
20-JUN-31
20-JUN-31
GPA-775 Chapitre 4 - Langages de
consultation
20
SELECT : Noms identiques
Ø le même nom peut être utilisé pour plusieurs attributs pourvu que
ces attributs soient dans des relations différentes.
Ø Dans une requête, on préfixe le nom de la relation au nom de
l'attribut en les séparant par un '.‘ .
Exemple:
Ø Supposons que les attributs DNO et LNAME de la relation
EMPLOYEE sont nommés DNUMBER et NAME,
Ø et que l'attribut DNAME de DEPARTMENT est aussi nommé
NAME.
Pour éviter l'ambiguïté, la consultation R2 est reformulée en R2A :
R2A: SELECT FNAME, EMPLOYEE.NAME, ADDRESS
FROM EMPLOYEE, DEPARTMENT
WHERE DEPARTMENT.NAME='Research'
AND DEPARTMENT.DNUMBER = EMPLOYEE.DNUMBER
GPA-775 Chapitre 4 - Langages de
consultation
21
SELECT : Noms identiques
Ø Nous pouvons aussi utiliser un mécanisme d'alias.
Exemple : R2A peut être réécrite en R2B en réduisant les noms de
relations.
R2B: SELECT E.FNAME, E.NAME, E.ADDRESS
FROM EMPLOYEE E , DEPARTMENT D
WHERE D.NAME = 'Research'
AND D.DNUMBER = E.DNUMBER
GPA-775 Chapitre 4 - Langages de
consultation
22
SELECT : Noms identiques
L'ambiguïté apparaît aussi quand une consultation fait référence deux fois
à la même relation.
REQUÊTE 4 : Pour chaque employé, rechercher le nom et le prénom ainsi
que le nom et le prénom de son superviseur immédiat.
R4: SELECT E.FNAME, E.LNAME, S.FNANE, S.LNAME
FROM EMPLOYEE E S
WHERE E.SUPERSSN = S.SSN
Résultat de la requête 4:
E. FNAME E. NAME S. FNAME S. LNAME
John
Franklin
Alicia
Jennifer
Ramesh
Joyce
Ahmad
Smith
Wong
Zelage
Wallace
Narayan
English
Jabbar
Franklin
James
Jennifer
James
Franklin
Franklin
Jennifer
Wong
Borg
Wallace
Borg
Wong
Wong
Wallace
E et S sont
séparés par un
blanc et non
d'une virgule
E représente
EMPLOYEE
dans le rôle de
supervisé,
S représente
EMPLOYEE
dans le rôle de
superviseur.
la jointure se fait entre la
relation avec elle-même
en sélectionnant les tuples
qui satisfont la condition
E.SUPERSSN = S.SSN.
GPA-775 Chapitre 4 - Langages de
consultation
23
SELECT : Utilisation de ‘ * ’
Ø Permet de spécifier tous les attributs d’une table
Exemple: La consultation R6A représente le produit cartésien entre
EMPLOYEE et DEPARTMENT.
R6A : SELECT *
FROM EMPLOYEE, DEPARTMENT
Exemple: La consultation R7 retrouve toutes les valeurs d'attributs des
tuples EMPLOYEE qui travaillent pour le DEPARTMENT #5
R7: SELECT *
FROM EMPLOYEE
WHERE DNO = 5
Résultat de R7 :
FNAME MINIT LNAME SSN BDATE ADDRESS S SALARY SUPERSSN DNO
John
Franklin
Ramesh
Joyce
B
T
K
A
Smith
Wong
Narayan
English
123456789
333445555
666884444
453453453
09-JAN-55
08-DEC-45
15-SEP-52
31-JUL-62
731, Fondren, Houston, TX
638 Voss, Houston, TX
975, Fire Oak, Humble, TX
5631 Rice, Houston, TX
M
M
M
F
30000
40000
38000
25000
333445555
888665555
333445555
333445555
5
5
5
5
GPA-775 Chapitre 4 - Langages de
consultation
24
SELECT : L’instruction DISTINCT
Ø SQL n'élimine pas automatiquement les duplications dans les
résultats de consultations.
Ø Si on désire éliminer les duplications, on utilisera l’instruction
DISTINCT dans la clause SELECT.
Ex: Rechercher le salaire de chaque
employé. Les tuples identiques sont
dupliqués tel qu’illustré sur la figure.
R9 : SELECT SALARY
FROM EMPLOYEE
Résultat de R9:
S A L A R Y
30000
40000
25000
43000
38000
25000
25000
55000
Ex: Si on est intéressé par
seulement les salaires distincts, on
utilise la consultation R9A.
R9A: SELECT DISTINCT SALARY
FROM EMPLOYEE
Résultat de R9A:
S A L A R Y
3 0 0 0 0
4 0 0 0 0
2 5 0 0 0
4 3 0 0 0
3 8 0 0 0
5 5 0 0 0
GPA-775 Chapitre 4 - Langages de
consultation
25
SELECT : UNION, MINUS, INTERSECT
Certaines opérations de l'algèbre relationnelle peuvent être incorporées:
Ø UNION
Ø MINUS (différence)
Ø INTERSECT
Remarque : Par souci de compatibilité, les relations impliquées doivent avoir les
mêmes attributs apparaissant dans le même ordre.
Ex: Produire une liste de tous les # de projets impliquant un employé, dont le nom
est 'Smith' comme un travailleur ou un manager du département qui contrôle le
projet.
R10 :
( SELECT PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND MGRSSN = SSN AND LNAME = 'Smith')
UNION
( SELECT PNUMBER
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER = PNO AND ESSN = SSN AND LNAME = 'Smith' )
Le premier « select » retrouve les projets
impliquant 'Smith' comme manager du
département qui contrôle le projet.
le second retrouve
les projets
impliquant 'Smith'
comme travailleur
sur le projet.
GPA-775 Chapitre 4 - Langages de
consultation
26
SELECT : Consultations imbriquées et
comparaisons d'ensembles
Certaines consultations nécessitent que les valeurs existantes dans la BD
doivent être retrouvées puis utilisées dans la conditions de comparaison.
Ø l'imbrication avec des consultations complètes de type SELECT-
FROM, WHERE.
Ex: La consultation R10 est reformulée en R10A pour utiliser l'imbrication.
R10A: SELECT DISTINCT PNUMBER
FROM PROJET
WHERE PNUMBER IN
( SELECT PNUMBER
FROM PROJECT,DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND MGRSSN=SSN
AND LNAME='Smith' )
OR PNUMBER IN
( SELECT PNO
FROM WORKS_ON, EMPLOYEE
WHERE ESSN=SSN AND LNAME='Smith' )
1. La première consultation
imbriquée sélectionne les #
de projets dont 'Smith' est
impliqué comme manager.
2. La seconde consultation
imbriquée sélectionne les #
de projets dont 'Smith' est
impliqué comme travailleur.
3. Dans la
consultation
externe on
sélectionne le
tuple projet si la
valeur de
PNUMBER est
soit dans le 1er
résultat, soit
dans le second
GPA-775 Chapitre 4 - Langages de
consultation
27
SELECT : Consultations imbriquées et
comparaisons d'ensembles
On peut avoir plusieurs niveaux d'imbrication, pour différencier les attributs
dans les consultations, il faut suivre la règle suivante:
Règle : Une référence à un attribut non qualifié se rapporte à la relation
déclarée dans la consultation imbriquée la plus interne.
Exemple
R11: Retrouver le nom de chaque employé qui possède un dépendant
ayant le même prénom et le même sexe que lui.
R11 : SELECT E.FNAME, E.LNAME
FROM EMPLOYEE E
WHERE E.SSN IN ( SELECT ESSN
FROM DEPENDENT
WHERE ESSN = SSN
AND FNAME = NAME
AND SEX = E.SEX )
Résultat: FNAME LNAME
On doit qualifier
E.SEX car SEX
est un attribut
de EMPLOYEE
et de
DEPENDENT
GPA-775 Chapitre 4 - Langages de
consultation
28
SELECT : Consultations imbriquées et
comparaisons d'ensembles
Lorsqu’une condition de la clause WHERE d'une consultation imbriquée
fait référence aux attributs d'une consultation externe, on dit qu'elles sont
corrélées.
Ø la consultation imbriquée interne est évaluée une fois pour chaque
tuple dans la consultation externe.
Une consultation imbriquée de la forme SELECT, FROM, WHERE utilisant
= ou IN comme opérateur de comparaison peut être exprimée par une
consultation d’un seul bloc.
Ex: La consultation R11 est réécrite en R11A
R11A : SELECT E.FNAME, E.LNAME
FROM EMPLOYEE E, DEPENDENT D
WHERE E.SSN = D.ESSN AND
E.SEX = D.SEX AND
E.FNAME = D.NAME
GPA-775 Chapitre 4 - Langages de
consultation
29
SELECT : Fonction EXISTS
Ø utilisées en conjonction avec une consultation imbriquée corrélée.
• EXISTS(Q) : retourne TRUE s’il existe au moins un tuple dans le
résultat de la consultation Q.
• NOT EXISTS(Q) : retourne TRUE s’il n’y a pas de tuples dans le
résultat de la consultation Q.
Ex: La consultation R11 est reformulée en R11B
SELECT E.FNAME, E.LNAME
FROM EMPLOYEE E
WHERE EXISTS( SELECT *
FROM DEPENDENT
WHERE E.SSN=ESSN AND
SEX = E.SEX AND
E.FNAM = DEPENDENT.NAME )
Retrouver le nom
de chaque employé
qui possède un
dépendant ayant le
même prénom et le
même sexe que lui.
GPA-775 Chapitre 4 - Langages de
consultation
30
SELECT : Fonction EXISTS
R12 : Retrouver les noms des employés qui n'ont aucun dépendant.
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE NOT EXISTS( SELECT *
FROM DEPENDENT
WHERE SSN=ESSN)
R13 : Lister les noms des «managers» qui ont au moins un dépendant.
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE EXISTS( SELECT *
FROM DEPENDENT
WHERE SSN=ESSN )
AND
EXISTS( SELECT *
FROM DEPARTMENT
WHERE SSN=MGRSSN )
Vérifie que
l’employé a un
dépendant.
Vérifie que
l’employé est
un «managers».
GPA-775 Chapitre 4 - Langages de
consultation
31
SELECT : Fonction CONTAINS
Ø compare deux ensembles de valeurs. Il retourne TRUE si l'un
contient tous les éléments de l'autre.
Remarque: Ce n’est pas toutes les implantations commerciales de SQL
qui possèdent cet opérateur.
R14 : Retrouver le nom de chaque employé qui travaille sur tous les
projets contrôlés par le département #5.
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE ( ( SELECT PNO
FROM WORKS_ON
WHERE SSN=ESSN )
CONTAINS
( SELECT PNUMBER
FROM PROJECT
WHERE DNUM=5 ) )
1.Retrouve tous les
numéros de projets
par employé.
2.Retrouve tous les
numéros de projets du
département #5.
3. Conserve les
noms et prénoms
des employé qui
ont tous les
projets du
département #5.
GPA-775 Chapitre 4 - Langages de
consultation
32
SELECT : Fonction CONTAINS
On peut remplacer CONTAINS, par les fonctions EXISTS et NOT EXISTS.
La requête R14 peut être ré-écrite en R14A
SELECT LNAME, FNAME
FROM EMPLOYEE
WHERE NOT EXISTS( SELECT *
FROM WORKS_ON B
WHERE ( B.PNO IN ( SELECT PNUMBER
FROM PROJECT
WHERE DNUM=5
)
AND
NOT EXISTS( SELECT *
FROM WORKS_ON C
WHERE C.ESSN=SSN
AND
C.PNO=B.PNO )
)
Sélectionner chaque
employé pour lequel
il n'existe aucun
projet contrôlé par le
département 5 et
que cet employé ne
travaille pas dessus.
Sélectionne tout tuple de
WORKS_ON (B) dont PNO
désigne un projet contrôlé
par département 5…
…et où il n'y a aucun tuple WORKS_ON
(C) avec le même PNO et le même SSN
que celui de l'employé en considération
dans la consultation externe
GPA-775 Chapitre 4 - Langages de
consultation
33
SELECT : Ensembles explicites et NULL
Ensemble explicites
On peut utiliser un ensemble de valeurs explicites dans la clause
“WHERE” à la place d'une consultation imbriquée.
R15 : Retrouver les numéros de sécurité social de tous les employés qui
travaillent sur les projets #1, 2 ou 3.
SELECT DISTINCT ESSN
FROM WORKS_ON
WHERE PNO IN ( 1, 2, 3 )
Null
SQL permet de vérifier si une valeur est NULL. On utilise IS et ISNOT au
lieu des signes '=' et '<>‘.
R16: Retrouver les noms de tous les employés qui n'ont pas de
superviseurs.
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE SUPERSSN IS NULL
FNAME LNAME
James Borg
GPA-775 Chapitre 4 - Langages de
consultation
34
SELECT : Fonctions d'agrégation
Ø L'agrégation et le groupement sont nécessaires dans plusieurs
applications.
Ø SQL possède des primitives pour incorporer ces concepts:
• COUNT : le nombre de valeurs;
• SUM : la somme des valeurs;
• MAX : la valeur maximum;
• MIN : la valeur minimum;
• AVG : la valeur moyenne.
Remarque: Ces fonctions peuvent être utilisées dans la clause
SELECT seulement, ou dans la clause HAVING.
Exemples:
R17 : Trouver la somme des salaires de tous les employés, le salaire
maximum, le salaire minimum et le salaire moyen.
SELECT SUM(SALARY), MAX(SALARY),
MIN(SALARY), AVG(SALARY)
FROM EMPLOYEE
GPA-775 Chapitre 4 - Langages de
consultation
35
SELECT : Fonctions d'agrégation
R18 : Si on veut avoir les mêmes valeurs que la consultation précédente mais
seulement pour les employés du département 'Research':
SELECT SUM(SALARY), MAX(SALARY),
MIN(SALARY), AVG(SALARY)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND
DNAME='Research‘
R19 : Retrouver le nombre total d’employés dans la compagnie.
SELECT COUNT(*)
FROM EMPLOYEE
R20 : Retrouver le nombre d’employés dans le département 'Research'.
SELECT COUNT(*)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND
DNAME= 'Research'
Ici, «*» réfère aux tuples, alors COUNT(*) retourne le nombre de lignes retenues
par la condition de la requête.
Certains SQL ne
permettent pas plus
d'une fonction dans la
clause SELECT; dans
ce cas, on doit écrire 4
consultations.
GPA-775 Chapitre 4 - Langages de
consultation
36
SELECT : Fonctions d'agrégation
COUNT peut être utilisé pour compter les valeurs dans une colonne au
lieu des tuples.
Ex: Compter le nombre de valeurs “distinctes” de salaires dans la BD.
R21: SELECT COUNT (DISTINCT SALARY)
FROM EMPLOYEE
Les fonctions d’agrégation peuvent être utilisé pour sélectionner des tuples
particuliers. Il faut alors utiliser une consultation imbriquée corrélée avec la
fonction désirée.
Ex : Retrouver les noms des employés qui ont au minimum 2 dépendants.
R22: SELECT LNAME, FNAME
FROM EMPLOYEE
WHERE(SELECTCOUNT(*)
FROM DEPENDENT
WHERE SSN=ESSN ) > 2
GPA-775 Chapitre 4 - Langages de
consultation
37
SELECT : Fonctions GROUP BY
Ø Permet d’appliquer les fonctions d'agrégation aux sous-groupes
de tuples d’une relation, basés sur certaines valeurs d'attributs.
Ex: Pour chaque département, retrouver le numéro du département, le
nombre d'employés et leur salaire moyen.
R23 : SELECT DNO, COUNT(*),AVG(SALARY)
FROM EMPLOYEE
GROUP BY DNO
Attribut de
regroupement
FNAME MINIT LNAME SSN *** SALARY SUPERSSN DNO
John B Smith 123456789 30000 333445555 5
Franklin T Wong 333445555 40000 888665555 5
Ramesh K Narayan 666884444 38000 333445555 5
Joyce A English 453453453 25000 333445555 5
Alicia J Selaya 999887777 25000 987654321 4
Jennifer S Wallace 987654321 43000 888665555 4
Ahmad V Jabbar 987987987 25000 987654321 4
James E Bong 88866555
***
55000 null 1
Regroupement des tuples EMPLOYEE en se basant sur le DNO
DNO COUNT (*)
AVG
(SALARY)
5 4 33250
4 3 31000
1 1 55000
Résultat de R23
}
}
la clause SELECT inclut
seulement les attributs de
regroupement et les
fonctions à appliquer sur
chaque groupe de tuples.
2. Les fonctions
COUNT et AVG
sont appliquées
aux groupes
séparément.
1. Les tuples de la table
EMPLOYEE sont
divisés en groupes,
sur la base de la
valeur de DNO.
GPA-775 Chapitre 4 - Langages de
consultation
38
SELECT : Fonctions GROUP BY
Ø Nous pouvons utiliser une condition de jonction en conjonction avec
GROUP BY.
Ø Le groupement et les fonctions d’agrégations sont appliqués
seulement après la jonction des deux relations.
REQUÊTE 24: Pour chaque projet, retrouver le # du projet, le nom du
projet ainsi que le nombre d'employés qui travaillent sur ce projet.
R24 : SELECT PNUMBER, PNAME, COUNT(*)
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNUMBER, PNAME
GPA-775 Chapitre 4 - Langages de
consultation
39
SELECT : Clause HAVING
Ø Permet de retrouver les données pour seulement les groupes qui
satisfont certaines conditions.
Ø Ne s’utilise qu’avec la clause GROUP BY.
Ø Seuls les groupes qui satisfont la condition de HAVING seront
retrouvés.
Ex: Pour chaque projet sur lequel travaillent plus de deux employés,
retrouver le # du projet, le nom du projet et le nombre d'employés qui
travaillent sur ce projet.
R25 : SELECT PNAME, COUNT(*)
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNUMBER, PNAME
HAVING COUNT(*)>2
GPA-775 Chapitre 4 - Langages de
consultation
40
SELECT : Clause HAVING
C e s g r o u p e s n e s o n t
p a s s é l e c t i o n n é s p a r
l a c o n d i t i o n
« H A V I N G » d e R 2 5
P N A M E P N U M B E R * * * E S S N P N O H O U R S
P r o d u c t X 1 1 2 3 4 5 6 7 8 9 1 3 2 . 5
P r o d u c t X 1 4 5 3 4 5 3 4 5 3 1 2 0 . 0
P r o d u c t Y 2 1 2 3 4 5 6 7 8 9 2 7 . 5
P r o d u c t Y 2 4 5 3 4 5 3 4 5 3 2 2 0 . 0
P r o d u c t Y 2 3 3 3 4 4 5 5 5 5 2 1 0 . 0
P r o d u c t Z 3 6 6 6 8 8 4 4 4 4 3 4 0 . 0
P r o d u c t Z 3 3 3 3 4 4 5 5 5 5 3 1 0 . 0
C o m p u t e r i z a t i o n 1 0 3 3 3 4 4 5 5 5 5 1 0 1 0 . 0
C o m p u t e r i z a t i o n 1 0 9 9 9 8 8 7 7 7 7 1 0 1 0 . 0
C o m p u t e r i z a t i o n 1 0 9 8 7 9 8 7 9 8 7 1 0 3 5 . 0
R e o r g a n i z a t i o n 2 0 3 3 3 4 4 5 5 5 5 2 0 1 0 . 0
R e o r g a n i z a t i o n 2 0 9 8 7 6 5 4 3 2 1 2 0 1 5 . 0
R e o r g a n i z a t i o n 2 0 8 8 8 6 6 5 5 5 5 2 0 n u l l
N e w b e n e f i t s 3 0 9 8 7 9 8 7 9 8 7 3 0 5 . 0
N e w b e n e f i t s 3 0 9 8 7 6 5 4 3 2 1 3 0 2 0 . 0
N e w b e n e f i t s 3 0 9 9 9 8 8 7 7 7 7 3 0 3 0 . 0
A v a n t a p p l i c a t i o n d e l a c l a u s e “ H A V I N G ”
}
}
}
}
}
}
P N A M E P N U M B E R E S S N P N O H O U R S
ProductY 2 1 2 3 4 5 6 7 8 9 2 7.5
ProductY 2 4 5 3 4 5 3 4 5 3 2 20.0
ProductY 2 3 3 3 4 4 5 5 5 5 2 10.0
C o m p u t e r i z a t i o n 1 0 3 3 3 4 4 5 5 5 5 1 0 10.0
C o m p u t e r i z a t i o n 1 0 9 9 9 8 8 7 7 7 7 1 0 10.0
C o m p u t e r i z a t i o n 1 0 9 8 7 9 8 7 9 8 7 1 0 35.0
R e o r g a n i z a t i o n 2 0 3 3 3 4 4 5 5 5 5 2 0 10.0
R e o r g a n i z a t i o n 2 0 9 8 7 6 5 4 3 2 1 2 0 15.0
R e o r g a n i z a t i o n 2 0 8 8 8 6 6 5 5 5 5 2 0 null
N e w b e n e f i t s 3 0 9 8 7 9 8 7 9 8 7 3 0 5.0
N e w b e n e f i t s 3 0 9 8 7 6 5 4 3 2 1 3 0 20.0
N e w b e n e f i t s 3 0
* * *
9 9 9 8 8 7 7 7 3 0 30.0
A p r è s a p p l i c a t i o n d e l a c l a u s e “ H A V I N G ”
} P N A M E C O U N T
(*)
P r o d u c t Y 3
C o m p u t e r i z a t i o n 3
R e o r g a n i z a t i o n 3
N e w b e n e f i t s 3
R e s u l t a t d e R 2 5
( P N U M B E R n o n a f f i c h é )
}
}
}
GPA-775 Chapitre 4 - Langages de
consultation
41
SELECT : Clause HAVING
Note: les conditions de sélection dans la clause WHERE limitent les tuples
pour lesquelles les fonctions sont appliquées, tandis que la clause
HAVING limite les groupes en entier. On doit faire attention quand on
applique deux conditions.
Ex: Supposé qu'on veut compter le nombre total des employés ayant des
salaires supérieurs à 40 000$ dans chaque département, mais seulement
pour les départements ayant plus de 5 employés.
Supposons qu'on écrive la consultation incorrecte suivante :
SELECT DNAME, COUNT(*)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER=DNO AND SALARY > 40 000
GROUP BY DNAME
HAVING COUNT(*)>5
Attention: Cette consultation sélectionne seulement les départements qui
ont plus de 5 employés ayant un salaire de plus de 40 000$.
GPA-775 Chapitre 4 - Langages de
consultation
42
SELECT : Clause HAVING
La règle est :
• La clause WHERE est exécutée en premier pour sélectionner les
tuples individuellement,
• la clause HAVING est exécutée après, pour sélectionner les
groupes de tuples séparément.
Une façon d'écrire correctement la consultation précédente :
R26 : SELECT DNAME, COUNT(*)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER = DNO AND
SALARY > 40 000 AND
DNO IN( SELECT DNO
FROM EMPLOYEE
GROUP BY DNO
HAVING COUNT(*) > 5 )
GROUP BY DNAME
GPA-775 Chapitre 4 - Langages de
consultation
43
SELECT : Comparaison de chaînes
Ø Utilisé dans la clause WHERE
Ø L’instruction LIKE est utilisé comme opérateur de comparaison.
Ø % ou * : remplace une chaînes de caractères de longueur quelconque
Ø '_' ou ? : remplace un caractère arbitraire
Ex: Retrouver tous les employés dont l'adresse est dans Houston,Tx.
R27: SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE ADDRESS LIKE '% Houston,Tx% ’
Ex: Retrouver les employés qui sont nés durant les années 1950. On suppose que
'5' doit être le 9e caractère de la chaîne représentant la date de naissance qui a le
format JJ-MM-AAAA
R28 : SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE BDATE LIKE '_______5_'
Votre requêtes ne
fonctionnera plus en
2050!!!
Noter que le
“ % ” et le “ _ ”
font partie du
ANSI de SQL.
GPA-775 Chapitre 4 - Langages de
consultation
44
SELECT : OPERATEURS ARITHMETIQUES
Les opérateurs arithmétiques sont permis dans les consultations et
peuvent être appliqués aux valeurs numériques du résultat de la
consultation:
Ø +, - ,* , /
Ex: Supposé qu'on veut voir l'effet de donner à tous les employés qui
travaillent sur 'PRODUCT X' une augmentation de 10%.
SELECT FNAME, LNAME, 1.1*SALARY
FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE SSN=ESSN AND PNO=PNUMBER
AND PNAME = 'Product X ’
GPA-775 Chapitre 4 - Langages de
consultation
45
SELECT : Ordre de tri
Ø SQL permet de trier les tuples dans le résultat de la consultation sur la
base d'un ou plusieurs attributs,
Ø la clause se nomme ORDER BY
Ø Le tri est ascendant (ASC) par défaut et on utilise le mot clé DESC
si on désire un ordre descendant
Ex: Retrouver le liste des employés et les projets sur lesquels ils travaillent. La
liste doit être ordonnée par département et dans chaque département, ordonnée
alphabétiquement par nom.
R30 : SELECT DNAME, LNAME, FNAME, NAME
FROM DEPARTMENT, EMPLOYEE, WORKS_ON,
PROJECT
WHERE DNUMBER=DNO AND SSN=ESSN AND
PNO=PNUMBER
ORDER BY DNAME, LNAME, FNAME
Ex: Si on veut un ordre descendant sur DNAME et ascendant sur LNAME et
FNAME, la clause ORDER BY de R30 devient:
ORDER BY DNAME DESC, LNAME ASC, FNAME ASC
GPA-775 Chapitre 4 - Langages de
consultation
46
Sommaire des éléments d’une consultation SQL
Une consultation SQL contient jusqu'à 6 clauses. Mais seulement les
deux premières sont obligatoires . ( [ ] signifie optionnel)
SELECT <Liste d'attributs>
FROM <Liste de tables>
[WHERE <Conditions>]
[GROUP BY <Attributs de groupement>]
[HAVING <Condition groupe>]
[ORDER BY <Liste d'attributs>]
Liste des attributs ou
fonctions à retrouver
Spécifie toutes les relations
nécessaires dans la
consultation, mais pas celles
qui sont nécessaires dans les
consultations imbriquées.
Spécifie les
conditions pour
sélectionner les
tuples à partir
des relations.
Spécifie les attributs de
groupement.
Spécifie la condition sur les
groupes à sélectionner, et
non pas sur les tuples
individuelles
spécifie l'ordre d'affichage du
résultat de la consultation.
GPA-775 Chapitre 4 - Langages de
consultation
47
Sommaire des éléments d’une consultation SQL
Rappel:
ØLes fonctions d'agrégations : COUNT, SUM, MIN, MAX
et AVG sont utilisées en conjonction avec le
groupement.
ØUne consultation est évaluée en appliquant en 1er la
clause WHERE, ensuite GROUP BY et HAVING.
ØChaque SGBD possède des routines d'optimisation pour
réaliser une consultation.
ØEn général, il y a plusieurs façons de décrire la même
consultation en SQL.
GPA-775 Chapitre 4 - Langages de
consultation
48
INSERT
♦ utilisée pour ajouter un tuple à une relation.
♦ On doit spécifier le nom de la relation et la liste des valeurs du tuple.
1. Toutes les valeurs sont listées dans le même ordre que les attributs spécifiés
dans la commande CREATE TABLE.
U1 :INSERT INTO EMPLOYEE
VALUES( 'Richard', 'K', 'Marini', '653 298 653', '30-DEC-52',
'98 BAR FOREST, Katy, TX','M', 37 000, '987654321',4)
2. Certaines valeurs sont listées en spécifiant explicitement le nom des attributs
correspondants.
Ø Ainsi, les attributs à valeurs NULL sont ignorés.
U1A : INSERT INTO EMPLOYEE ( FNAME, LNAME, SSN )
VALUES ( 'Richard', 'Marini', '654 248 653')
GPA-775 Chapitre 4 - Langages de
consultation
49
INSERT
Il est important de garder l'intégrité référentielle.
Exemple: dans la consultation U2, SQL va réaliser l'insertion, même s'il n'y
a pas de département ayant le numéro 2 (DNUMBER=2). C'est sous la
responsabilité de l'utilisateur de vérifier si les contraintes sont violées. (À
moins d’avoir préalablement créé vos contraintes)
U2 : INSERT INTO EMPLOYEE ( FNAME, LNAME, SSN, DNO )
VALUES ( 'Robert', 'Hatcher','980760540', 2 )
Par contre, SQL va rejeter une commande d'insertion dans laquelle un
attribut déclaré NOT NULL ne reçoit pas de valeur. Ainsi, U2A sera rejeté
puisque l’attribut SSN a été déclaré NOT NULL.
U2A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO)
VALUES ( 'Robert', 'Hatcher', 2 )
Manque
SSN
GPA-775 Chapitre 4 - Langages de
consultation
50
INSERT
♦permet d'insérer des tuples multiples dans une relation en utilisant une
consultation qui s’occupe du chargement de la table.
Ex: Supposé qu'on veuille créer une table temporaire qui possède le nom,
le nombre d'employés et le salaire total de chaque département.
La table DEPTS_INFO est créée par U3A:
U3A: CREATE TABLE DEPTS_INFO( DEP_NAME VARCHAR(15),
NO_OF_EMPS INTEGER,
TOTAL_SAL INTEGER );
Elle est chargée par le résultat de la consultation U3B:
U3B: INSERT INTO DEPTS_INFO ( DEPT_NAME, NO_OF_EMPS,
TOTAL_SAL )
SELECT DNAME, COUNT(*), SUM(SALARY)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER = DNO
GROUP BY DNAME;
GPA-775 Chapitre 4 - Langages de
consultation
51
DELETE
La commande DELETE
Øpermet de supprimer des tuples d'une relation.
Øutilise la clause de sélection WHERE pour sélectionner
les tuples à supprimer.
ØLes tuples sont supprimés que d'une seule table à la
fois.
ØSi la clause WHERE est omise, tous les tuples de la
relation seront supprimés. Par contre, la table reste
dans la BD comme vide.
• Pour supprimer une table complètement, on doit utiliser la
commande DROP TABLE.
GPA-775 Chapitre 4 - Langages de
consultation
52
DELETE
Ex: Si on veut supprimer 1 ou plusieurs tuples de la relation
EMPLOYEE:
U4A : DELETE FROM EMPLOYEE
WHERE LNAME = 'Brown'
U4B : DELETE FROM EMPLOYEE
WHERE SSN='123456789'
U4C : DELETE FROM EMPLOYEE
WHERE DNO IN ( SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME = 'Research')
U4D : DELETE FROM EMPLOYEE
Détruit tous les
employés du
département
recherche.
Détruit tous les
tuples de la table
EMPLOYEE.
GPA-775 Chapitre 4 - Langages de
consultation
53
UPDATE
♦utilisée pour modifier les valeurs d'attributs d'un ou plusieurs
tuples sélectionnés.
♦la clause SET spécifie les attributs à modifier.
♦la clause WHERE sélectionne les tuples d'une relation à
modifier.
Ex: Changer le lieu et le # du département du projet #10 à
'Bellaire' et 5, respectivement.
U5 : UPDATE PROJECT
SET PLOCATION = 'Bellaire', DNUM=5
WHERE PNUMBER=10
GPA-775 Chapitre 4 - Langages de
consultation
54
UPDATE
♦Il est possible de modifier plusieurs tuples avec une seule
commande UPDATE.
Ex: Donner à tous les employés du département 'Research'
une augmentation de salaire de 10%.
Noter : Deux références à l'attribut SALARY sont nécessaires.
U6 : UPDATE EMPLOYEE
SET SALARY = SALARY * 1.1
WHERE DNO IN ( SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME = 'Research' )
GPA-775 Chapitre 4 - Langages de
consultation
55
Les vues
Ø Table virtuelle dérivée à partir d’autres tables (elle n’existe pas
physiquement)
Ex:Si on émet fréquemment des consultations qui recherchent le nom
de l'employé et les noms des projets sur lesquels il travaille…
Au lieu de spécifier à chaque fois la jonction de EMPLOYEE,
WORKS_ON et PROJECT;
nous pouvons définir une vue qui contient le résultat de ces
jonctions.
Les consultations peuvent maintenant se faire sur la vue, qui est
une seule table au lieu de deux jonctions impliquant 3 tables.
On appelle les tables EMPLOYEE, WORKS_ON, PROJECT : Tables de
définition de la vue...
Les autres tables sont des
tables de base ou des vues
précédemment définies.
GPA-775 Chapitre 4 - Langages de
consultation
56
Spécification des vues
CREATE VIEW
V1: CREATE VIEW WORKS_ON_1
AS SELECT FNAME, LNAME, PNAME, HOURS
FROM EMPLOYEE, PROJECT, WORKS_ON
WHERE SSN = ESSN AND PNO = PNUMBER;
La consultation des vues se fait de la même façon que les
autres tables.
Ex: Retrouver le nom et le prénom de tous les employés qui
travaillent sur le projet 'PROJECTX‘.
QV1: SELECT FNAME, LNAME
FROM WORKS_ON_1
WHERE PNAME = 'ProjectX';
Nom de la vue
Consultation
GPA-775 Chapitre 4 - Langages de
consultation
57
Spécifications des vues
Ø Si les attributs résultent de fonctions appliquées ou d’opérations
arithmétiques, nous devons spécifier les attributs de la vue.
V2 : CREATE VIEW DEPT_INFO ( DEPT_NAME,
NO_OF_EMPS,TOTAL_SAL)
AS SELECT DNAME, COUNT(*), SUM(SALARY)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER = DNO
GROUP BY DNAME;
NOTE : Une vue est toujours mise à jour. Si on modifie les tuples dans
les tables de base sur lesquelles la vue est définie, la vue reflète
automatiquement ces changements.
La vue n'est pas réalisée au moment de la définition de la vue, mais plutôt
au moment où on spécifie une consultation sur la vue.
Liste
d’attributs
GPA-775 Chapitre 4 - Langages de
consultation
58
Élimination des vues
DROP VIEW
Ex:
DROP VIEW WORKS_ON;
DROP VIEW DEPT_INFO;
GPA-775 Chapitre 4 - Langages de
consultation
59
Mise à jour sur une vue
La mise à jour d’une vue est compliquée et peut être ambiguë.
Ø Vue définie sur une seule table: la mise à jour peut correspondre à
la mise à jour de la table de base correspondante.
Ø Vue impliquant des jonctions: la mise à jour peut correspondre à la
mise à jour des tables de base, selon plusieurs façons.
Exemple: Transférer l’employé “John Smith” du projet “Product X” au
projet “Product Y”.
Si on considère la vue WORKS_ON_1, il s’agit de faire la mise à jour de
l'attribut PNAME de 'ProductX' à 'Product Y' lorsque l’employé “John
Smith” est impliqué.
UV1 : UPDATE WORKS_ON_1
SET PNAME = 'ProductY ’
WHERE LNAME = 'Smith' AND FNAME = 'John'
AND PNAME = 'ProductX ’
GPA-775 Chapitre 4 - Langages de
consultation
60
Mise à jour sur une vue
Cette mise à jour peut correspondre à différentes modifications sur les
relations de base.
a) UPDATE WORKS_ON
SET PNO = ( SELECT PNUMBER
FROM PROJECT
WHERE PNAME = 'ProductY' )
WHERE ESSN=( SELECT SSN
FROM EMPLOYEE
WHERE LNAME ='Smith’ AND
FNAME = 'John' )
AND
PNO = ( SELECT PNUMBER
FROM PROJECT
WHERE PNAME = 'ProductX' )
b) UPDATE PROJECT
SET PNAME = 'Product Y’
WHERE PNAME= 'ProductX‘
Modifie le tuple 'ProductX' dans
la relation PROJECT en
'ProductY’. Tous les employés
qui travaille pour le projet
ProductX vont être assignés
sur le projet ProductY.
relie 'John
Smith' au
tuple
'Product Y'
à la place
de
'ProductX'.
GPA-775 Chapitre 4 - Langages de
consultation
61
Mise à jour sur une vue
Certaines mises à jour de vue n'ont pas de sens.
Ex: Modifier l'attribut TOTAL_SAL dans DEPT_INFO.
UV2: UPDATE DEPT_INFO
SET TOTAL_SAL = 100 000
WHERE DNAME = 'Research';
NOTE : Le thème de mise à jour des vues est encore un domaine de
recherche très actif, notez que certains chercheurs ont défini des
algorithmes pour choisir qu’elle mise à jour sont les plus vraisemblables,
d’autres préfèrent avoir le choix de l'utilisateur.
Représente la somme
des salaires!
GPA-775 Chapitre 4 - Langages de
consultation
62
INDEX
Ø sont des chemins d'accès physiques; spécifiés sur certains attributs
nommés : Attributs d’indexation.
Ø permettent de rendre l'accès aux tuples plus efficace.
Ø font parties du DDL
Création d’index
Ex :
I1 : CREATE INDEX LNAME_INDEX
ON EMPLOYEE( LNAME );
Les index sont croissants sur les valeurs d'attributs indexés. Si on veut
désigner l'ordre décroissant: DESC.
I2 : CREATE INDEX NAME_INDEX
ON EMPLOYEE( LNAME ASC, FNAME DESC, MINIT );
GPA-775 Chapitre 4 - Langages de
consultation
63
INDEX
On peut aussi spécifier un attribut comme clé :
I3 : CREATE UNIQUE INDEX SSN_INDEX
ON EMPLOYEE( SSN );
Note : Spécifier une clé est recommandé avant que les tuples ne soient
insérées dans la relation, de telle façon que le système puisse renforcer la
contrainte.
L’option “CLUSTER” permet de spécifier un index de regroupement; ce qui
rend plus efficace les conditions de sélection et de jonction.
Ex: On veut que les enregistrements de EMPLOYEE soient indexés et
regroupés par le # de département.
I4 :CREATE INDEX DNO_INDEX
ON EMPLOYEE(DNO) CLUSTER;
GPA-775 Chapitre 4 - Langages de
consultation
64
INDEX
Élimination d’index
DROP INDEX
Ex: Pour supprimer l'index DNO_INDEX
I5 : DROP INDEX DNO_INDEX
Note : Attention de ne pas supprimer un index clé!
GPA-775 Chapitre 4 - Langages de
consultation
65
Intégration de SQL dans les langages évolués
SQL peut être utilisé en conjonction avec un langage évolué:
Ø C, C++, Pascal, COBOL, PLI.
Ex 1: A) Invocation SQL directe :
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE DNO = ‘5’;
B) Invocation à partir d’un programme
(Pro C/C++)
char fname[20], lname[20];
EXEC SQL SELECT FNAME , LNAME
INTO :fname, :lname
FROM EMPLOYEE
WHERE DNO = ‘5’;
Ici, les mots
réservés EXEC
SQL du langage
Pro C/C++ permet
l'appel d'une
fonction SQL.
Les variables sont
préfixées avec
“ : ”; Ce qui permet
de faire le lien
entre le langage
hôte et le SGBD
en introduisant le
résultat de la
consultation dans
ces variables.
GPA-775 Chapitre 4 - Langages de
consultation
66
Intégration de SQL dans les langages évolués
Ex 2: consultation SQL à partir d'un langage comme Pascal
Begin
writeln('entrez votre numéro d'assurance sociale:');
readln(numAssSociale);
$SELECT NOM, ADRESSE, SALAIRE
INTO %E.NOM, %E.ADRESSE, %E.SALAIRE
FROM EMPLOYÉ
WHERE NAS = %numAssSociale;
writeln (E.NOM, E.ADRESSE, E.SALAIRE);
Note :
• $ indique la commande SQL.
• Les variables Pascal sont préfixées de % dans la clause INTO.
GPA-775 Chapitre 4 - Langages de
consultation
67
Le langage QBE (Query By Example)
Caractéristiques:
Øa été mis au point dans les laboratoires de recherche de
la compagnie IBM.
Øfait partie du système de base de données DB2.
Øpossède une syntaxe bidimensionnelle:
• nécessite une surface (canevas), et non un espace linéaire,
pour s'exprimer.
Øeffectue des recherches au moyen d'un exemple que lui
fournit l'utilisateur au lieu d'utiliser une procédure.
Øforte analogie entre QBE et le calcul relationnel sur
domaine.
GPA-775 Chapitre 4 - Langages de
consultation
68
Le langage QBE
Canevas d’une base de données bancaire
L'utilisateur sélectionne les schémas qui lui conviennent, en
fonction de la recherche qu'il désire effectuer.
Banque Agence Avoirs Ville
Clientèle Client Rue Localité
Crédit Agence Prêt Client Montant
Dépôt Agence Compte Client Position
GPA-775 Chapitre 4 - Langages de
consultation
69
Le langage QBE
Ex 1 : Trouver l'ensemble des clients qui ont un compte à
Perryridge.
où
P. veut dire Print
_x désigne une variable que le système utilise.
L'objectif essentiel des variables que manipule le langage
QBE est de forcer les valeurs de certains tuples à être
identiques sur certains attributs.
Dépôt Agence Compte Client Position
Perryridge P._x
GPA-775 Chapitre 4 - Langages de
consultation
70
Le langage QBE
Ex 2 : Trouver l'ensemble des clients qui ont un compte à
Perryridge ainsi que la ville où ils résident.
Utilisation des canevas des relations Crédit et Clientèle
Crédit Agence Prêt Client Montant
Perryridge _x
Clientèle Client Rue Localité
P._x P._y
GPA-775 Chapitre 4 - Langages de
consultation
71
Le langage QBE
Contrairement à SQL ou QUEL, il élimine automatiquement
les doublons.
Ex 3 : Cet exemple illustre comment on peut les conserver.
La commande ALL permet d’afficher les doublons
Dépôt Agence Compte Client Position
Perryridge P.ALL._x
GPA-775 Chapitre 4 - Langages de
consultation
72
Le langage QBE
Ex 4: Trouver les clients qui ont à la fois un compte à
Perryridge et à Redwood.
L’opération ET sur une seule relation
Dépôt Agence Compte Client Position
Perryridge
Redwood
P._x
_x
GPA-775 Chapitre 4 - Langages de
consultation
73
Le langage QBE
Ex 5 : Trouver les clients de Perryridge qui ont un compte et
un prêt.
L’opération ET sur plusieurs relations
Dépôt Agence Compte Client Position
Perryridge P._x
Crédit Agence Prêt Client Montant
Perryridge _x
GPA-775 Chapitre 4 - Langages de
consultation
74
Le langage QBE
Ex 6 : Trouver les clients qui ont un compte à Perryridge, à
Redwood ou aux deux.
L’opération OU sur une seule relation
Dépôt Agence Compte Client Position
Perryridge
Redwood
P._x
P._y
GPA-775 Chapitre 4 - Langages de
consultation
75
Le langage QBE
Ex 7 : Trouver les comptes qui ont un solde supérieur à
1200$.
L’opération plus grand que : >
Dépôt Agence Compte Client Position
P._x > 1200
GPA-775 Chapitre 4 - Langages de
consultation
76
Le langage QBE
Ex 8 :Trouver les clients qui ont un compte à Perryridge mais
pas de prêt.
L’opération de négation : ¬
Dépôt Agence Compte Client Position
Perryridge P._x
Crédit Agence Prêt Client Montant
¬ Perryridge _x
GPA-775 Chapitre 4 - Langages de
consultation
77
Le langage QUEL
Caractéristiques:
Ølangage de consultation du système de base de
données Ingres (Interactive Graphics and Retreival
System).
Ømis au point à l'université de Berkeley en Californie dans
les années 70.
ØIl est distribué par RTI (Relational Technology, Inc)
depuis les annnées 80 et inclue un éventail de
fonctionnalité similaire à SQL.
ØLa structure de ce langage est très proche de celle du
calcul relationnel sur tuples.
GPA-775 Chapitre 4 - Langages de
consultation
78
Le langage QUEL
La structure de base d'une expression QUEL comporte trois
clauses:
Range of t1 is r1
Range of t2 is r2
Range of tm is rm
Retrieve ti1.aj1, ti2.aj2, tim.ajm
WHERE p
Où
Øt = variable de tuple,
Ør = relation,
Øa = attribut,
Øp = prédicat.
GPA-775 Chapitre 4 - Langages de
consultation
79
Le langage QUEL
Ex : Trouver l'ensemble des personnes qui ont un prêt de
Perryridge ainsi que leur ville de résidence :
Range of t is Crédit
Range of s is Clientèle
Retrieve ( t.client, s.localité )
WHERE ( t.agence = Perryridge ) and
( t.client = s.client )

Contenu connexe

Similaire à Chapitre 04-B - Langages de consultation.pdf

INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3PGambette
 
Coursbase de donnees relationnelle sql server
Coursbase de donnees relationnelle sql serverCoursbase de donnees relationnelle sql server
Coursbase de donnees relationnelle sql serverLahcensabir2
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreMICHRAFY MUSTAFA
 
DATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdf
DATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdfDATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdf
DATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdfHéla Ben Khalfallah
 
coursMLD.pdf djnvvvvvvvvvvvvvvvv jd dvjjjjjjjjjjjjjjj
coursMLD.pdf djnvvvvvvvvvvvvvvvv jd           dvjjjjjjjjjjjjjjjcoursMLD.pdf djnvvvvvvvvvvvvvvvv jd           dvjjjjjjjjjjjjjjj
coursMLD.pdf djnvvvvvvvvvvvvvvvv jd dvjjjjjjjjjjjjjjjobaghat60
 
coursMLD.pdfnw wx c c c c c c cc c c c c c cckck
coursMLD.pdfnw wx c c c c c c cc c c c c c cckckcoursMLD.pdfnw wx c c c c c c cc c c c c c cckck
coursMLD.pdfnw wx c c c c c c cc c c c c c cckckobaghat60
 
coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...obaghat60
 
chapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptxchapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptxDolaMary
 
Création et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL OracleCréation et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL Oraclewebreaker
 
BD_Cours_4_MPCI_etudiants.pdf
BD_Cours_4_MPCI_etudiants.pdfBD_Cours_4_MPCI_etudiants.pdf
BD_Cours_4_MPCI_etudiants.pdfAlkalimatayiba
 
Formation access
Formation accessFormation access
Formation accessbouyahia76
 

Similaire à Chapitre 04-B - Langages de consultation.pdf (20)

INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3
 
Coursbase de donnees relationnelle sql server
Coursbase de donnees relationnelle sql serverCoursbase de donnees relationnelle sql server
Coursbase de donnees relationnelle sql server
 
Introduction au langage SQL
Introduction au langage SQLIntroduction au langage SQL
Introduction au langage SQL
 
FIP_pl-sql.pdf
FIP_pl-sql.pdfFIP_pl-sql.pdf
FIP_pl-sql.pdf
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvre
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Plsql
PlsqlPlsql
Plsql
 
DATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdf
DATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdfDATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdf
DATABASE_DATA_STRUCTURE_DEVOXXFRANCE2024.pdf
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
coursMLD.pdf djnvvvvvvvvvvvvvvvv jd dvjjjjjjjjjjjjjjj
coursMLD.pdf djnvvvvvvvvvvvvvvvv jd           dvjjjjjjjjjjjjjjjcoursMLD.pdf djnvvvvvvvvvvvvvvvv jd           dvjjjjjjjjjjjjjjj
coursMLD.pdf djnvvvvvvvvvvvvvvvv jd dvjjjjjjjjjjjjjjj
 
coursMLD.pdfnw wx c c c c c c cc c c c c c cckck
coursMLD.pdfnw wx c c c c c c cc c c c c c cckckcoursMLD.pdfnw wx c c c c c c cc c c c c c cckck
coursMLD.pdfnw wx c c c c c c cc c c c c c cckck
 
coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
coursMLD.pdf dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
 
chapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptxchapitre 5_db_20_21.pdf.pptx
chapitre 5_db_20_21.pdf.pptx
 
Création et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL OracleCréation et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL Oracle
 
Les05.ppt
Les05.pptLes05.ppt
Les05.ppt
 
BD_Cours_4_MPCI_etudiants.pdf
BD_Cours_4_MPCI_etudiants.pdfBD_Cours_4_MPCI_etudiants.pdf
BD_Cours_4_MPCI_etudiants.pdf
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Presentation sql
Presentation sqlPresentation sql
Presentation sql
 
Formation access
Formation accessFormation access
Formation access
 

Plus de RihabBENLAMINE

Tutoriel-PHP-Introduction-à-la-POoooooooooooO.pdf
Tutoriel-PHP-Introduction-à-la-POoooooooooooO.pdfTutoriel-PHP-Introduction-à-la-POoooooooooooO.pdf
Tutoriel-PHP-Introduction-à-la-POoooooooooooO.pdfRihabBENLAMINE
 
CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdf
CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdfCM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdf
CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdfRihabBENLAMINE
 
10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf
10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf
10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdfRihabBENLAMINE
 
coursphp-chap3-230321082859-121d6678.pptx
coursphp-chap3-230321082859-121d6678.pptxcoursphp-chap3-230321082859-121d6678.pptx
coursphp-chap3-230321082859-121d6678.pptxRihabBENLAMINE
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfRihabBENLAMINE
 
Virtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdf
Virtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdfVirtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdf
Virtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdfRihabBENLAMINE
 
416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdf416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdfRihabBENLAMINE
 
Interace Utilisateur.pdf
Interace Utilisateur.pdfInterace Utilisateur.pdf
Interace Utilisateur.pdfRihabBENLAMINE
 
Bases de données sous Android.pdf
Bases de données sous Android.pdfBases de données sous Android.pdf
Bases de données sous Android.pdfRihabBENLAMINE
 
Environnement Android.pdf
Environnement Android.pdfEnvironnement Android.pdf
Environnement Android.pdfRihabBENLAMINE
 
coursphp-230411142526-784b67e9.pdf
coursphp-230411142526-784b67e9.pdfcoursphp-230411142526-784b67e9.pdf
coursphp-230411142526-784b67e9.pdfRihabBENLAMINE
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdfRihabBENLAMINE
 
introAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdfintroAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdfRihabBENLAMINE
 
016834638650_suitechap1.pptx
016834638650_suitechap1.pptx016834638650_suitechap1.pptx
016834638650_suitechap1.pptxRihabBENLAMINE
 
p01b_portelogique_boole.pdf
p01b_portelogique_boole.pdfp01b_portelogique_boole.pdf
p01b_portelogique_boole.pdfRihabBENLAMINE
 
architecture-des-ordinateurs.pdf
architecture-des-ordinateurs.pdfarchitecture-des-ordinateurs.pdf
architecture-des-ordinateurs.pdfRihabBENLAMINE
 

Plus de RihabBENLAMINE (20)

Tutoriel-PHP-Introduction-à-la-POoooooooooooO.pdf
Tutoriel-PHP-Introduction-à-la-POoooooooooooO.pdfTutoriel-PHP-Introduction-à-la-POoooooooooooO.pdf
Tutoriel-PHP-Introduction-à-la-POoooooooooooO.pdf
 
CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdf
CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdfCM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdf
CM_PHP_PDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.pdf
 
10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf
10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf
10_interfacesjavaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pdf
 
coursphp-chap3-230321082859-121d6678.pptx
coursphp-chap3-230321082859-121d6678.pptxcoursphp-chap3-230321082859-121d6678.pptx
coursphp-chap3-230321082859-121d6678.pptx
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
 
Virtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdf
Virtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdfVirtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdf
Virtualisation & Cloud. Cloud Computing. Iset Siliana RSI3..pdf
 
416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdf416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdf
 
Interace Utilisateur.pdf
Interace Utilisateur.pdfInterace Utilisateur.pdf
Interace Utilisateur.pdf
 
Firebase.pdf
Firebase.pdfFirebase.pdf
Firebase.pdf
 
Bases de données sous Android.pdf
Bases de données sous Android.pdfBases de données sous Android.pdf
Bases de données sous Android.pdf
 
Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
 
Environnement Android.pdf
Environnement Android.pdfEnvironnement Android.pdf
Environnement Android.pdf
 
coursphp-230411142526-784b67e9.pdf
coursphp-230411142526-784b67e9.pdfcoursphp-230411142526-784b67e9.pdf
coursphp-230411142526-784b67e9.pdf
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
 
introAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdfintroAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdf
 
016834638650_suitechap1.pptx
016834638650_suitechap1.pptx016834638650_suitechap1.pptx
016834638650_suitechap1.pptx
 
PHP_intro.pdf
PHP_intro.pdfPHP_intro.pdf
PHP_intro.pdf
 
chapitre-2.pptx.pdf
chapitre-2.pptx.pdfchapitre-2.pptx.pdf
chapitre-2.pptx.pdf
 
p01b_portelogique_boole.pdf
p01b_portelogique_boole.pdfp01b_portelogique_boole.pdf
p01b_portelogique_boole.pdf
 
architecture-des-ordinateurs.pdf
architecture-des-ordinateurs.pdfarchitecture-des-ordinateurs.pdf
architecture-des-ordinateurs.pdf
 

Chapitre 04-B - Langages de consultation.pdf

  • 1. Chapitre 4 (2ième partie) Langages de consultation des bases de données relationnelles
  • 2. GPA-775 Chapitre 4 - Langages de consultation 2 Le langage SQL SQL : Structured Query Language. ♦ conçu par IBM Research comme interface pour le SGBD relationnel en expérimentation : SYSTEM R. ♦ standardisé en 1986 (ANSI) et normalisé en 92 (SQL2) ♦ est maintenant l'interface de plusieurs SGBDs commerciaux: DB2 de IBM, SQL/DS, ORACLE, INGRES, UNIFY, MS-Access, etc… ♦ contient des fonctions qui sont utilisées pour définir, accéder et maintenir les BDR. Ø DDL : Langage qui définit les composante de la base de données (relations, attributs) Ø DML : Langage qui manipule les données (ajout, supression, modification)
  • 3. GPA-775 Chapitre 4 - Langages de consultation 3 Le langage SQL SQL… ♦non-procédural… ??? Ø Spécifie ce qui doit être fait Ø Non, comment cela doit être fait ♦possède des facilités pour Øla définition de vues sur la BD Øla création des index sur les relations Øl'encapsulation des instructions SQL dans un langage évolué (ex: C, C++, Pascal, PL/1)
  • 4. GPA-775 Chapitre 4 - Langages de consultation 4 Avantages et désavantages du SQL Avantages Ø permet de réduire les coûts de formation des programmeurs (langage standardisé) Ø permet de porter les applications sur différents environnements logiciels et physiques, i.e.: • la communication peut se faire à partir de différents systèmes • permet aux usagers d'utiliser une interface commune. Ø permet d'assurer que les applications auront une durée de vie suffisante. Désavantages Ø SQL comporte des limitations technologiques qui ne permettent pas de réaliser le plein potentiel du modèle relationnel. • la créativité visant à procurer la meilleure solution peut être interdite par une solution moins bonne mais bien définie par le standard,
  • 5. GPA-775 Chapitre 4 - Langages de consultation 5 Définition des données dans SQL (DDL) SQL utilise les termes : Ø table pour une relation; Ø ligne pour une tuple; Ø colonne pour un attribut. SQL comporte 3 commandes pour la manipulation des tables. Ø CREATE TABLE Ø DROP TABLE Ø ALTER TABLE
  • 6. GPA-775 Chapitre 4 - Langages de consultation 6 CREATE TABLE Ø permet de spécifier une nouvelle relation en donnant: • son nom • et en spécifiant chacun de ses attributs w son nom, w son domaine de valeurs ou type de données w ses contraintes sur l'attribut. Remarque (pas dans les notes): Ø Les relations créées sont dites tables de base. Ø La relation et ses tuples sont créés et stockés comme un fichier par le SGBD. Ø Les attributs dans les relations de base sont ordonnés dans l'ordre spécifié dans la commande CREATE TABLE, mais les lignes (tuples) ne sont pas considérées comme ordonnées.
  • 7. GPA-775 Chapitre 4 - Langages de consultation 7 CREATE TABLE : les types de données Les types numériques : Ø Entier (INTEGER ou INT, SMALLINT) Ø Réel (FLOAT, REAL) Ø Nombres avec format spécifié(DECIMAL (i,j) ou NUMERIC(i,j) ou NUMBER(i,j)) Les chaînes de caractères : Ø Longueur fixe : CHAR (n); n nombre de caractères Ø Longueur variable : VARCHAR(n), n : nombre maximal La date et l’heure : Ø Date (DATE avec le format AAAA-MM-JJ) Ø Heure (TIME avec les format HH:MM:SS) Ø Date et Heure combinées (TIMESTAMP)
  • 8. GPA-775 Chapitre 4 - Langages de consultation 8 CREATE TABLE : les contraintes Ø Clé primaire de la table (PRIMARY KEY) Ø Clé étrangère (FOREIGN KEY… REFERENCES) • Permet de définir le lien d’une table avec une autre table. • Garantit l’intégrité référentielle de la BD w Ex : Nous ne pouvons effacé un tuple d’une table, s’il y a une table contenant un tuple qui y est associé par une clé étrangère. Ø colonne à valeurs uniques (UNIQUE) • Chaque ligne de la table doit avoir une valeur différente ou NULL pour cette colonne. Ø Aucunes valeurs nulles (NOT NULL) • SQL permet NULL comme valeur d'attribut, mais une contrainte NOT NULL peut aussi être spécifiée. En général, on doit spécifier NOT NULL sur la valeur de la clé primaire pour chaque relation.
  • 9. GPA-775 Chapitre 4 - Langages de consultation 9 Exemples de CREATE TABLE CREATE TABLE EMPLOYEE ( FNAME VARCHAR (15) NOT NULL, MINIT CHAR (1), LNAME VARCHAR (15) NOT NULL, SSN CHAR (9) NOT NULL, BDATE CHAR (9), ADDRESS VARCHAR (30), SEX CHAR (1), SALARY INTEGER, SUPERSSN CHAR (9), DNO INTEGER NOT NULL, PRIMARY KEY (SSN), FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN), FOREIGN KEY (DNO) REFERENCES DEPARTEMENT (DNUMBER)); CREATE TABLE DEPARTMENT ( DNAME VARCHAR (15) NOT NULL, DNUMBER INTERGER NOT NULL, MGRSSN CHAR (9), MGRSTARTDATE CHAR (9), PRIMARY KEY (DNUMBER), FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN), UNIQUE (DNAME));
  • 10. GPA-775 Chapitre 4 - Langages de consultation 10 Exemples de CREATE TABLE CREATE TABLE DEPT_LOCATIONS ( DNUMBER INTEGER NOT NULL, DLOCATION VARCHAR (15) NOT NULL , PRIMARY KEY (DNUMBER, DLOCATION), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER)); CREATE TABLE PROJECT ( PNAME VARCHAR (15) NOT NULL, PNUMBER INTEGER NOT NULL, PLOCATION VARCHAR (15), DNUM INTEGER NOT NULL , PRIMARY KEY (PNUMBER), FOREIGN KEY (DNUM) REFERENCES DEPARTMENT (DNUMBER), UNIQUE (PNAME)); CREATE TABLE WORKS_ON ( ESSN CHAR (9) NOT NULL, PNO INTEGER NOT NULL, HOURS DECIMAL (3,1) NOT NULL , PRIMARY KEY (ESSN, PNO), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN), FOREIGN KEY (PNO) REFERENCES PROJECT (PNUMBER));
  • 11. GPA-775 Chapitre 4 - Langages de consultation 11 Exemples de CREATE TABLE CREATE TABLE DEPENDENT ( ESSN CHAR (9) NOT NULL, DEPENDENT _NAME CHAR (15) NOT NULL, SEX CHAR (1), BDATE CHAR (9), RELATIONSHIP VARCHAR(8) , PRIMARY KEY (ESSN, DEPENDENT _NAME), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN)); • Pour de donner un nom aux contraintes, nous utilisons la commande CONSTRAINT. • L’avantage est qu’elle peut être détruite dans le futur et remplacer par une nouvelle. Exemple : CREATE TABLE DEPT_LOCATIONS ( DNUMBER INTEGER NOT NULL, DLOCATION VARCHAR (15) NOT NULL , CONSTRAINT DEP_LOC_PK PRIMARY KEY (DNUMBER, DLOCATION), CONSTRAINT DNUM_FK FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER));
  • 12. GPA-775 Chapitre 4 - Langages de consultation 12 DROP TABLE ♦Permet de détruire une table de base quand elle est plus nécessaire. Exemple : DROP TABLE DEPENDENT; Remarque : Si vous avez d’autres tables qui font référence à la table à détruire, il faut détruire les références avant de détruire la table.
  • 13. GPA-775 Chapitre 4 - Langages de consultation 13 ALTER TABLE ♦Permet d'ajouter une contrainte à une relation de base. ♦Permet d'ajouter un attribut à une relation de base. ØLe nouvel attribut aura la valeur NULL dans tous les tuples de la relation, juste après l'exécution de la commande. ØNOT NULL n'est pas permis pour ce nouvel attribut. Exemple : Pour garder la trace des fonctions des employés de la BD COMPANY. ALTER TABLE EMPLOYEE ADD JOB VARCHAR(12);
  • 14. GPA-775 Chapitre 4 - Langages de consultation 14 Manipulation des données dans SQL : DML SQL possède plusieurs instructions pour effectuer Øla recherche d'information, Ødes consultations , Øde la manipulation de données… dans une base de donnée. Ces instructions sont : ØSELECT ØINSERT ØDELETE ØUPDATE
  • 15. GPA-775 Chapitre 4 - Langages de consultation 15 SELECT Ø L’instruction de base pour effectuer la recherche d'information Ø La forme de base est formée des 3 clauses: SELECT <Liste d'attributs>: liste de noms d'attributs dont les valeurs sont recherchées par la consultation. FROM <Liste de tables>: liste de noms de relations nécessaires pour traiter la consultation. WHERE <Conditions>:Une expression logique qui identifie les tuples recherchés par la consultation. Remarques: Ø L'instruction SELECT n'a aucune relation avec l'opération SELECTION de l'algèbre relationnelle. • SQL permet qu'une table possède une duplication de tuples. Ø Lorsque la clause WHERE est omise, il n’y a aucune condition sur les tuples. Tous les tuples spécifiés dans la clause FROM sont alors sélectionnés. • Ceci est équivalent à WHERE TRUE
  • 16. GPA-775 Chapitre 4 - Langages de consultation 16 Exemples avec SELECT REQUÊTE 1 : Rechercher la date de naissance et l'adresse de l'employé au nom de 'John B. Smith‘ R1 : SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME = 'John' AND MINIT = 'B' AND LNAME = 'Smith' 1. implique seulement la relation EMPLOYEE listée dans la clause FROM. 2. sélectionne les tuples de EMPLOYEE qui satisfont la condition dans la clause WHERE, 3. fait une projection du résultat sur les attributs BDATE et ADDRESS listés dans la cause SELECT. Résultat de la consultation R1: DBATE ADDRESS 09-JAN-55 731 Fondren, Houston, TX
  • 17. GPA-775 Chapitre 4 - Langages de consultation 17 Exemples avec SELECT R1 est similaire à l'expression de l'algèbre relationnelle : π<BDATE, ADDRESS> (σfname = 'John' AND MINIT='B' AND LNAME = 'Smith' (EMPLOYEE)) Øune consultation SQL simple est similaire à la paire SELECTION-PROJECTION des opérations de l'algèbre relationnelle. Remarque: La seule différence est que dans le résultat d’une consultation SQL, on peut avoir une duplication de tuples.
  • 18. GPA-775 Chapitre 4 - Langages de consultation 18 Exemples avec SELECT REQUÊTE 2 : Rechercher le nom et l'adresse de tous les employés qui travaillent pour le département 'Research'. R2 : SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME = 'Research' AND DNUMBER = DNO Ø équivalente à la séquence SELECTION-PROJECTION-UNION des opérations de l'algèbre relationnelle. Ø DNAME = 'Research' est la condition de sélection Ø DNUMBER = DNO est la condition de jointure. Ø FNAME, LNAME, ADDRESS sont les colonnes de projection. Résultat de la consultation R2: FNAME LNAME ADDRESS John Franklin Ramesh Joyce Smith Wong Narayan English 731, Fondren, Houston, TX 638, Voss, Houston, TX 975, Fire Oak, Humble TX 5631, Rice, Houston, TX
  • 19. GPA-775 Chapitre 4 - Langages de consultation 19 Exemples avec SELECT REQUÊTE 3 : Pour chaque projet situé à 'Stafford', lister le numéro de projet, le numéro du département qui le contrôle et le nom, l'adresse et la date de naissance du manager du département. R3 : SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM = DNUMBER AND MGRSSN = SSN AND PLOCATION = 'Stafford' ♦La condition de jointure DNUM = DNUMBER relie un projet au département qui le contrôle et la condition de jointure MGRSSN = SSN relie le département de contrôle à l'employé qui gère ce département. ♦la condition PLOCATION = 'Stafford' est la condition de sélection. Résultat de la consultation R3: PNUMBER DNU LNAME ADDRESS BDATE 10 30 4 4 Wallace Wallace 291, Berry, Bellaire, TX 291, Berry, Bellaire, TX 20-JUN-31 20-JUN-31
  • 20. GPA-775 Chapitre 4 - Langages de consultation 20 SELECT : Noms identiques Ø le même nom peut être utilisé pour plusieurs attributs pourvu que ces attributs soient dans des relations différentes. Ø Dans une requête, on préfixe le nom de la relation au nom de l'attribut en les séparant par un '.‘ . Exemple: Ø Supposons que les attributs DNO et LNAME de la relation EMPLOYEE sont nommés DNUMBER et NAME, Ø et que l'attribut DNAME de DEPARTMENT est aussi nommé NAME. Pour éviter l'ambiguïté, la consultation R2 est reformulée en R2A : R2A: SELECT FNAME, EMPLOYEE.NAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DEPARTMENT.NAME='Research' AND DEPARTMENT.DNUMBER = EMPLOYEE.DNUMBER
  • 21. GPA-775 Chapitre 4 - Langages de consultation 21 SELECT : Noms identiques Ø Nous pouvons aussi utiliser un mécanisme d'alias. Exemple : R2A peut être réécrite en R2B en réduisant les noms de relations. R2B: SELECT E.FNAME, E.NAME, E.ADDRESS FROM EMPLOYEE E , DEPARTMENT D WHERE D.NAME = 'Research' AND D.DNUMBER = E.DNUMBER
  • 22. GPA-775 Chapitre 4 - Langages de consultation 22 SELECT : Noms identiques L'ambiguïté apparaît aussi quand une consultation fait référence deux fois à la même relation. REQUÊTE 4 : Pour chaque employé, rechercher le nom et le prénom ainsi que le nom et le prénom de son superviseur immédiat. R4: SELECT E.FNAME, E.LNAME, S.FNANE, S.LNAME FROM EMPLOYEE E S WHERE E.SUPERSSN = S.SSN Résultat de la requête 4: E. FNAME E. NAME S. FNAME S. LNAME John Franklin Alicia Jennifer Ramesh Joyce Ahmad Smith Wong Zelage Wallace Narayan English Jabbar Franklin James Jennifer James Franklin Franklin Jennifer Wong Borg Wallace Borg Wong Wong Wallace E et S sont séparés par un blanc et non d'une virgule E représente EMPLOYEE dans le rôle de supervisé, S représente EMPLOYEE dans le rôle de superviseur. la jointure se fait entre la relation avec elle-même en sélectionnant les tuples qui satisfont la condition E.SUPERSSN = S.SSN.
  • 23. GPA-775 Chapitre 4 - Langages de consultation 23 SELECT : Utilisation de ‘ * ’ Ø Permet de spécifier tous les attributs d’une table Exemple: La consultation R6A représente le produit cartésien entre EMPLOYEE et DEPARTMENT. R6A : SELECT * FROM EMPLOYEE, DEPARTMENT Exemple: La consultation R7 retrouve toutes les valeurs d'attributs des tuples EMPLOYEE qui travaillent pour le DEPARTMENT #5 R7: SELECT * FROM EMPLOYEE WHERE DNO = 5 Résultat de R7 : FNAME MINIT LNAME SSN BDATE ADDRESS S SALARY SUPERSSN DNO John Franklin Ramesh Joyce B T K A Smith Wong Narayan English 123456789 333445555 666884444 453453453 09-JAN-55 08-DEC-45 15-SEP-52 31-JUL-62 731, Fondren, Houston, TX 638 Voss, Houston, TX 975, Fire Oak, Humble, TX 5631 Rice, Houston, TX M M M F 30000 40000 38000 25000 333445555 888665555 333445555 333445555 5 5 5 5
  • 24. GPA-775 Chapitre 4 - Langages de consultation 24 SELECT : L’instruction DISTINCT Ø SQL n'élimine pas automatiquement les duplications dans les résultats de consultations. Ø Si on désire éliminer les duplications, on utilisera l’instruction DISTINCT dans la clause SELECT. Ex: Rechercher le salaire de chaque employé. Les tuples identiques sont dupliqués tel qu’illustré sur la figure. R9 : SELECT SALARY FROM EMPLOYEE Résultat de R9: S A L A R Y 30000 40000 25000 43000 38000 25000 25000 55000 Ex: Si on est intéressé par seulement les salaires distincts, on utilise la consultation R9A. R9A: SELECT DISTINCT SALARY FROM EMPLOYEE Résultat de R9A: S A L A R Y 3 0 0 0 0 4 0 0 0 0 2 5 0 0 0 4 3 0 0 0 3 8 0 0 0 5 5 0 0 0
  • 25. GPA-775 Chapitre 4 - Langages de consultation 25 SELECT : UNION, MINUS, INTERSECT Certaines opérations de l'algèbre relationnelle peuvent être incorporées: Ø UNION Ø MINUS (différence) Ø INTERSECT Remarque : Par souci de compatibilité, les relations impliquées doivent avoir les mêmes attributs apparaissant dans le même ordre. Ex: Produire une liste de tous les # de projets impliquant un employé, dont le nom est 'Smith' comme un travailleur ou un manager du département qui contrôle le projet. R10 : ( SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM = DNUMBER AND MGRSSN = SSN AND LNAME = 'Smith') UNION ( SELECT PNUMBER FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER = PNO AND ESSN = SSN AND LNAME = 'Smith' ) Le premier « select » retrouve les projets impliquant 'Smith' comme manager du département qui contrôle le projet. le second retrouve les projets impliquant 'Smith' comme travailleur sur le projet.
  • 26. GPA-775 Chapitre 4 - Langages de consultation 26 SELECT : Consultations imbriquées et comparaisons d'ensembles Certaines consultations nécessitent que les valeurs existantes dans la BD doivent être retrouvées puis utilisées dans la conditions de comparaison. Ø l'imbrication avec des consultations complètes de type SELECT- FROM, WHERE. Ex: La consultation R10 est reformulée en R10A pour utiliser l'imbrication. R10A: SELECT DISTINCT PNUMBER FROM PROJET WHERE PNUMBER IN ( SELECT PNUMBER FROM PROJECT,DEPARTMENT, EMPLOYEE WHERE DNUM = DNUMBER AND MGRSSN=SSN AND LNAME='Smith' ) OR PNUMBER IN ( SELECT PNO FROM WORKS_ON, EMPLOYEE WHERE ESSN=SSN AND LNAME='Smith' ) 1. La première consultation imbriquée sélectionne les # de projets dont 'Smith' est impliqué comme manager. 2. La seconde consultation imbriquée sélectionne les # de projets dont 'Smith' est impliqué comme travailleur. 3. Dans la consultation externe on sélectionne le tuple projet si la valeur de PNUMBER est soit dans le 1er résultat, soit dans le second
  • 27. GPA-775 Chapitre 4 - Langages de consultation 27 SELECT : Consultations imbriquées et comparaisons d'ensembles On peut avoir plusieurs niveaux d'imbrication, pour différencier les attributs dans les consultations, il faut suivre la règle suivante: Règle : Une référence à un attribut non qualifié se rapporte à la relation déclarée dans la consultation imbriquée la plus interne. Exemple R11: Retrouver le nom de chaque employé qui possède un dépendant ayant le même prénom et le même sexe que lui. R11 : SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE E.SSN IN ( SELECT ESSN FROM DEPENDENT WHERE ESSN = SSN AND FNAME = NAME AND SEX = E.SEX ) Résultat: FNAME LNAME On doit qualifier E.SEX car SEX est un attribut de EMPLOYEE et de DEPENDENT
  • 28. GPA-775 Chapitre 4 - Langages de consultation 28 SELECT : Consultations imbriquées et comparaisons d'ensembles Lorsqu’une condition de la clause WHERE d'une consultation imbriquée fait référence aux attributs d'une consultation externe, on dit qu'elles sont corrélées. Ø la consultation imbriquée interne est évaluée une fois pour chaque tuple dans la consultation externe. Une consultation imbriquée de la forme SELECT, FROM, WHERE utilisant = ou IN comme opérateur de comparaison peut être exprimée par une consultation d’un seul bloc. Ex: La consultation R11 est réécrite en R11A R11A : SELECT E.FNAME, E.LNAME FROM EMPLOYEE E, DEPENDENT D WHERE E.SSN = D.ESSN AND E.SEX = D.SEX AND E.FNAME = D.NAME
  • 29. GPA-775 Chapitre 4 - Langages de consultation 29 SELECT : Fonction EXISTS Ø utilisées en conjonction avec une consultation imbriquée corrélée. • EXISTS(Q) : retourne TRUE s’il existe au moins un tuple dans le résultat de la consultation Q. • NOT EXISTS(Q) : retourne TRUE s’il n’y a pas de tuples dans le résultat de la consultation Q. Ex: La consultation R11 est reformulée en R11B SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE EXISTS( SELECT * FROM DEPENDENT WHERE E.SSN=ESSN AND SEX = E.SEX AND E.FNAM = DEPENDENT.NAME ) Retrouver le nom de chaque employé qui possède un dépendant ayant le même prénom et le même sexe que lui.
  • 30. GPA-775 Chapitre 4 - Langages de consultation 30 SELECT : Fonction EXISTS R12 : Retrouver les noms des employés qui n'ont aucun dépendant. SELECT FNAME, LNAME FROM EMPLOYEE WHERE NOT EXISTS( SELECT * FROM DEPENDENT WHERE SSN=ESSN) R13 : Lister les noms des «managers» qui ont au moins un dépendant. SELECT FNAME, LNAME FROM EMPLOYEE WHERE EXISTS( SELECT * FROM DEPENDENT WHERE SSN=ESSN ) AND EXISTS( SELECT * FROM DEPARTMENT WHERE SSN=MGRSSN ) Vérifie que l’employé a un dépendant. Vérifie que l’employé est un «managers».
  • 31. GPA-775 Chapitre 4 - Langages de consultation 31 SELECT : Fonction CONTAINS Ø compare deux ensembles de valeurs. Il retourne TRUE si l'un contient tous les éléments de l'autre. Remarque: Ce n’est pas toutes les implantations commerciales de SQL qui possèdent cet opérateur. R14 : Retrouver le nom de chaque employé qui travaille sur tous les projets contrôlés par le département #5. SELECT FNAME, LNAME FROM EMPLOYEE WHERE ( ( SELECT PNO FROM WORKS_ON WHERE SSN=ESSN ) CONTAINS ( SELECT PNUMBER FROM PROJECT WHERE DNUM=5 ) ) 1.Retrouve tous les numéros de projets par employé. 2.Retrouve tous les numéros de projets du département #5. 3. Conserve les noms et prénoms des employé qui ont tous les projets du département #5.
  • 32. GPA-775 Chapitre 4 - Langages de consultation 32 SELECT : Fonction CONTAINS On peut remplacer CONTAINS, par les fonctions EXISTS et NOT EXISTS. La requête R14 peut être ré-écrite en R14A SELECT LNAME, FNAME FROM EMPLOYEE WHERE NOT EXISTS( SELECT * FROM WORKS_ON B WHERE ( B.PNO IN ( SELECT PNUMBER FROM PROJECT WHERE DNUM=5 ) AND NOT EXISTS( SELECT * FROM WORKS_ON C WHERE C.ESSN=SSN AND C.PNO=B.PNO ) ) Sélectionner chaque employé pour lequel il n'existe aucun projet contrôlé par le département 5 et que cet employé ne travaille pas dessus. Sélectionne tout tuple de WORKS_ON (B) dont PNO désigne un projet contrôlé par département 5… …et où il n'y a aucun tuple WORKS_ON (C) avec le même PNO et le même SSN que celui de l'employé en considération dans la consultation externe
  • 33. GPA-775 Chapitre 4 - Langages de consultation 33 SELECT : Ensembles explicites et NULL Ensemble explicites On peut utiliser un ensemble de valeurs explicites dans la clause “WHERE” à la place d'une consultation imbriquée. R15 : Retrouver les numéros de sécurité social de tous les employés qui travaillent sur les projets #1, 2 ou 3. SELECT DISTINCT ESSN FROM WORKS_ON WHERE PNO IN ( 1, 2, 3 ) Null SQL permet de vérifier si une valeur est NULL. On utilise IS et ISNOT au lieu des signes '=' et '<>‘. R16: Retrouver les noms de tous les employés qui n'ont pas de superviseurs. SELECT FNAME, LNAME FROM EMPLOYEE WHERE SUPERSSN IS NULL FNAME LNAME James Borg
  • 34. GPA-775 Chapitre 4 - Langages de consultation 34 SELECT : Fonctions d'agrégation Ø L'agrégation et le groupement sont nécessaires dans plusieurs applications. Ø SQL possède des primitives pour incorporer ces concepts: • COUNT : le nombre de valeurs; • SUM : la somme des valeurs; • MAX : la valeur maximum; • MIN : la valeur minimum; • AVG : la valeur moyenne. Remarque: Ces fonctions peuvent être utilisées dans la clause SELECT seulement, ou dans la clause HAVING. Exemples: R17 : Trouver la somme des salaires de tous les employés, le salaire maximum, le salaire minimum et le salaire moyen. SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE
  • 35. GPA-775 Chapitre 4 - Langages de consultation 35 SELECT : Fonctions d'agrégation R18 : Si on veut avoir les mêmes valeurs que la consultation précédente mais seulement pour les employés du département 'Research': SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME='Research‘ R19 : Retrouver le nombre total d’employés dans la compagnie. SELECT COUNT(*) FROM EMPLOYEE R20 : Retrouver le nombre d’employés dans le département 'Research'. SELECT COUNT(*) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME= 'Research' Ici, «*» réfère aux tuples, alors COUNT(*) retourne le nombre de lignes retenues par la condition de la requête. Certains SQL ne permettent pas plus d'une fonction dans la clause SELECT; dans ce cas, on doit écrire 4 consultations.
  • 36. GPA-775 Chapitre 4 - Langages de consultation 36 SELECT : Fonctions d'agrégation COUNT peut être utilisé pour compter les valeurs dans une colonne au lieu des tuples. Ex: Compter le nombre de valeurs “distinctes” de salaires dans la BD. R21: SELECT COUNT (DISTINCT SALARY) FROM EMPLOYEE Les fonctions d’agrégation peuvent être utilisé pour sélectionner des tuples particuliers. Il faut alors utiliser une consultation imbriquée corrélée avec la fonction désirée. Ex : Retrouver les noms des employés qui ont au minimum 2 dépendants. R22: SELECT LNAME, FNAME FROM EMPLOYEE WHERE(SELECTCOUNT(*) FROM DEPENDENT WHERE SSN=ESSN ) > 2
  • 37. GPA-775 Chapitre 4 - Langages de consultation 37 SELECT : Fonctions GROUP BY Ø Permet d’appliquer les fonctions d'agrégation aux sous-groupes de tuples d’une relation, basés sur certaines valeurs d'attributs. Ex: Pour chaque département, retrouver le numéro du département, le nombre d'employés et leur salaire moyen. R23 : SELECT DNO, COUNT(*),AVG(SALARY) FROM EMPLOYEE GROUP BY DNO Attribut de regroupement FNAME MINIT LNAME SSN *** SALARY SUPERSSN DNO John B Smith 123456789 30000 333445555 5 Franklin T Wong 333445555 40000 888665555 5 Ramesh K Narayan 666884444 38000 333445555 5 Joyce A English 453453453 25000 333445555 5 Alicia J Selaya 999887777 25000 987654321 4 Jennifer S Wallace 987654321 43000 888665555 4 Ahmad V Jabbar 987987987 25000 987654321 4 James E Bong 88866555 *** 55000 null 1 Regroupement des tuples EMPLOYEE en se basant sur le DNO DNO COUNT (*) AVG (SALARY) 5 4 33250 4 3 31000 1 1 55000 Résultat de R23 } } la clause SELECT inclut seulement les attributs de regroupement et les fonctions à appliquer sur chaque groupe de tuples. 2. Les fonctions COUNT et AVG sont appliquées aux groupes séparément. 1. Les tuples de la table EMPLOYEE sont divisés en groupes, sur la base de la valeur de DNO.
  • 38. GPA-775 Chapitre 4 - Langages de consultation 38 SELECT : Fonctions GROUP BY Ø Nous pouvons utiliser une condition de jonction en conjonction avec GROUP BY. Ø Le groupement et les fonctions d’agrégations sont appliqués seulement après la jonction des deux relations. REQUÊTE 24: Pour chaque projet, retrouver le # du projet, le nom du projet ainsi que le nombre d'employés qui travaillent sur ce projet. R24 : SELECT PNUMBER, PNAME, COUNT(*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME
  • 39. GPA-775 Chapitre 4 - Langages de consultation 39 SELECT : Clause HAVING Ø Permet de retrouver les données pour seulement les groupes qui satisfont certaines conditions. Ø Ne s’utilise qu’avec la clause GROUP BY. Ø Seuls les groupes qui satisfont la condition de HAVING seront retrouvés. Ex: Pour chaque projet sur lequel travaillent plus de deux employés, retrouver le # du projet, le nom du projet et le nombre d'employés qui travaillent sur ce projet. R25 : SELECT PNAME, COUNT(*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME HAVING COUNT(*)>2
  • 40. GPA-775 Chapitre 4 - Langages de consultation 40 SELECT : Clause HAVING C e s g r o u p e s n e s o n t p a s s é l e c t i o n n é s p a r l a c o n d i t i o n « H A V I N G » d e R 2 5 P N A M E P N U M B E R * * * E S S N P N O H O U R S P r o d u c t X 1 1 2 3 4 5 6 7 8 9 1 3 2 . 5 P r o d u c t X 1 4 5 3 4 5 3 4 5 3 1 2 0 . 0 P r o d u c t Y 2 1 2 3 4 5 6 7 8 9 2 7 . 5 P r o d u c t Y 2 4 5 3 4 5 3 4 5 3 2 2 0 . 0 P r o d u c t Y 2 3 3 3 4 4 5 5 5 5 2 1 0 . 0 P r o d u c t Z 3 6 6 6 8 8 4 4 4 4 3 4 0 . 0 P r o d u c t Z 3 3 3 3 4 4 5 5 5 5 3 1 0 . 0 C o m p u t e r i z a t i o n 1 0 3 3 3 4 4 5 5 5 5 1 0 1 0 . 0 C o m p u t e r i z a t i o n 1 0 9 9 9 8 8 7 7 7 7 1 0 1 0 . 0 C o m p u t e r i z a t i o n 1 0 9 8 7 9 8 7 9 8 7 1 0 3 5 . 0 R e o r g a n i z a t i o n 2 0 3 3 3 4 4 5 5 5 5 2 0 1 0 . 0 R e o r g a n i z a t i o n 2 0 9 8 7 6 5 4 3 2 1 2 0 1 5 . 0 R e o r g a n i z a t i o n 2 0 8 8 8 6 6 5 5 5 5 2 0 n u l l N e w b e n e f i t s 3 0 9 8 7 9 8 7 9 8 7 3 0 5 . 0 N e w b e n e f i t s 3 0 9 8 7 6 5 4 3 2 1 3 0 2 0 . 0 N e w b e n e f i t s 3 0 9 9 9 8 8 7 7 7 7 3 0 3 0 . 0 A v a n t a p p l i c a t i o n d e l a c l a u s e “ H A V I N G ” } } } } } } P N A M E P N U M B E R E S S N P N O H O U R S ProductY 2 1 2 3 4 5 6 7 8 9 2 7.5 ProductY 2 4 5 3 4 5 3 4 5 3 2 20.0 ProductY 2 3 3 3 4 4 5 5 5 5 2 10.0 C o m p u t e r i z a t i o n 1 0 3 3 3 4 4 5 5 5 5 1 0 10.0 C o m p u t e r i z a t i o n 1 0 9 9 9 8 8 7 7 7 7 1 0 10.0 C o m p u t e r i z a t i o n 1 0 9 8 7 9 8 7 9 8 7 1 0 35.0 R e o r g a n i z a t i o n 2 0 3 3 3 4 4 5 5 5 5 2 0 10.0 R e o r g a n i z a t i o n 2 0 9 8 7 6 5 4 3 2 1 2 0 15.0 R e o r g a n i z a t i o n 2 0 8 8 8 6 6 5 5 5 5 2 0 null N e w b e n e f i t s 3 0 9 8 7 9 8 7 9 8 7 3 0 5.0 N e w b e n e f i t s 3 0 9 8 7 6 5 4 3 2 1 3 0 20.0 N e w b e n e f i t s 3 0 * * * 9 9 9 8 8 7 7 7 3 0 30.0 A p r è s a p p l i c a t i o n d e l a c l a u s e “ H A V I N G ” } P N A M E C O U N T (*) P r o d u c t Y 3 C o m p u t e r i z a t i o n 3 R e o r g a n i z a t i o n 3 N e w b e n e f i t s 3 R e s u l t a t d e R 2 5 ( P N U M B E R n o n a f f i c h é ) } } }
  • 41. GPA-775 Chapitre 4 - Langages de consultation 41 SELECT : Clause HAVING Note: les conditions de sélection dans la clause WHERE limitent les tuples pour lesquelles les fonctions sont appliquées, tandis que la clause HAVING limite les groupes en entier. On doit faire attention quand on applique deux conditions. Ex: Supposé qu'on veut compter le nombre total des employés ayant des salaires supérieurs à 40 000$ dans chaque département, mais seulement pour les départements ayant plus de 5 employés. Supposons qu'on écrive la consultation incorrecte suivante : SELECT DNAME, COUNT(*) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO AND SALARY > 40 000 GROUP BY DNAME HAVING COUNT(*)>5 Attention: Cette consultation sélectionne seulement les départements qui ont plus de 5 employés ayant un salaire de plus de 40 000$.
  • 42. GPA-775 Chapitre 4 - Langages de consultation 42 SELECT : Clause HAVING La règle est : • La clause WHERE est exécutée en premier pour sélectionner les tuples individuellement, • la clause HAVING est exécutée après, pour sélectionner les groupes de tuples séparément. Une façon d'écrire correctement la consultation précédente : R26 : SELECT DNAME, COUNT(*) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER = DNO AND SALARY > 40 000 AND DNO IN( SELECT DNO FROM EMPLOYEE GROUP BY DNO HAVING COUNT(*) > 5 ) GROUP BY DNAME
  • 43. GPA-775 Chapitre 4 - Langages de consultation 43 SELECT : Comparaison de chaînes Ø Utilisé dans la clause WHERE Ø L’instruction LIKE est utilisé comme opérateur de comparaison. Ø % ou * : remplace une chaînes de caractères de longueur quelconque Ø '_' ou ? : remplace un caractère arbitraire Ex: Retrouver tous les employés dont l'adresse est dans Houston,Tx. R27: SELECT FNAME, LNAME FROM EMPLOYEE WHERE ADDRESS LIKE '% Houston,Tx% ’ Ex: Retrouver les employés qui sont nés durant les années 1950. On suppose que '5' doit être le 9e caractère de la chaîne représentant la date de naissance qui a le format JJ-MM-AAAA R28 : SELECT FNAME, LNAME FROM EMPLOYEE WHERE BDATE LIKE '_______5_' Votre requêtes ne fonctionnera plus en 2050!!! Noter que le “ % ” et le “ _ ” font partie du ANSI de SQL.
  • 44. GPA-775 Chapitre 4 - Langages de consultation 44 SELECT : OPERATEURS ARITHMETIQUES Les opérateurs arithmétiques sont permis dans les consultations et peuvent être appliqués aux valeurs numériques du résultat de la consultation: Ø +, - ,* , / Ex: Supposé qu'on veut voir l'effet de donner à tous les employés qui travaillent sur 'PRODUCT X' une augmentation de 10%. SELECT FNAME, LNAME, 1.1*SALARY FROM EMPLOYEE, WORKS_ON, PROJECT WHERE SSN=ESSN AND PNO=PNUMBER AND PNAME = 'Product X ’
  • 45. GPA-775 Chapitre 4 - Langages de consultation 45 SELECT : Ordre de tri Ø SQL permet de trier les tuples dans le résultat de la consultation sur la base d'un ou plusieurs attributs, Ø la clause se nomme ORDER BY Ø Le tri est ascendant (ASC) par défaut et on utilise le mot clé DESC si on désire un ordre descendant Ex: Retrouver le liste des employés et les projets sur lesquels ils travaillent. La liste doit être ordonnée par département et dans chaque département, ordonnée alphabétiquement par nom. R30 : SELECT DNAME, LNAME, FNAME, NAME FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT WHERE DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME, LNAME, FNAME Ex: Si on veut un ordre descendant sur DNAME et ascendant sur LNAME et FNAME, la clause ORDER BY de R30 devient: ORDER BY DNAME DESC, LNAME ASC, FNAME ASC
  • 46. GPA-775 Chapitre 4 - Langages de consultation 46 Sommaire des éléments d’une consultation SQL Une consultation SQL contient jusqu'à 6 clauses. Mais seulement les deux premières sont obligatoires . ( [ ] signifie optionnel) SELECT <Liste d'attributs> FROM <Liste de tables> [WHERE <Conditions>] [GROUP BY <Attributs de groupement>] [HAVING <Condition groupe>] [ORDER BY <Liste d'attributs>] Liste des attributs ou fonctions à retrouver Spécifie toutes les relations nécessaires dans la consultation, mais pas celles qui sont nécessaires dans les consultations imbriquées. Spécifie les conditions pour sélectionner les tuples à partir des relations. Spécifie les attributs de groupement. Spécifie la condition sur les groupes à sélectionner, et non pas sur les tuples individuelles spécifie l'ordre d'affichage du résultat de la consultation.
  • 47. GPA-775 Chapitre 4 - Langages de consultation 47 Sommaire des éléments d’une consultation SQL Rappel: ØLes fonctions d'agrégations : COUNT, SUM, MIN, MAX et AVG sont utilisées en conjonction avec le groupement. ØUne consultation est évaluée en appliquant en 1er la clause WHERE, ensuite GROUP BY et HAVING. ØChaque SGBD possède des routines d'optimisation pour réaliser une consultation. ØEn général, il y a plusieurs façons de décrire la même consultation en SQL.
  • 48. GPA-775 Chapitre 4 - Langages de consultation 48 INSERT ♦ utilisée pour ajouter un tuple à une relation. ♦ On doit spécifier le nom de la relation et la liste des valeurs du tuple. 1. Toutes les valeurs sont listées dans le même ordre que les attributs spécifiés dans la commande CREATE TABLE. U1 :INSERT INTO EMPLOYEE VALUES( 'Richard', 'K', 'Marini', '653 298 653', '30-DEC-52', '98 BAR FOREST, Katy, TX','M', 37 000, '987654321',4) 2. Certaines valeurs sont listées en spécifiant explicitement le nom des attributs correspondants. Ø Ainsi, les attributs à valeurs NULL sont ignorés. U1A : INSERT INTO EMPLOYEE ( FNAME, LNAME, SSN ) VALUES ( 'Richard', 'Marini', '654 248 653')
  • 49. GPA-775 Chapitre 4 - Langages de consultation 49 INSERT Il est important de garder l'intégrité référentielle. Exemple: dans la consultation U2, SQL va réaliser l'insertion, même s'il n'y a pas de département ayant le numéro 2 (DNUMBER=2). C'est sous la responsabilité de l'utilisateur de vérifier si les contraintes sont violées. (À moins d’avoir préalablement créé vos contraintes) U2 : INSERT INTO EMPLOYEE ( FNAME, LNAME, SSN, DNO ) VALUES ( 'Robert', 'Hatcher','980760540', 2 ) Par contre, SQL va rejeter une commande d'insertion dans laquelle un attribut déclaré NOT NULL ne reçoit pas de valeur. Ainsi, U2A sera rejeté puisque l’attribut SSN a été déclaré NOT NULL. U2A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO) VALUES ( 'Robert', 'Hatcher', 2 ) Manque SSN
  • 50. GPA-775 Chapitre 4 - Langages de consultation 50 INSERT ♦permet d'insérer des tuples multiples dans une relation en utilisant une consultation qui s’occupe du chargement de la table. Ex: Supposé qu'on veuille créer une table temporaire qui possède le nom, le nombre d'employés et le salaire total de chaque département. La table DEPTS_INFO est créée par U3A: U3A: CREATE TABLE DEPTS_INFO( DEP_NAME VARCHAR(15), NO_OF_EMPS INTEGER, TOTAL_SAL INTEGER ); Elle est chargée par le résultat de la consultation U3B: U3B: INSERT INTO DEPTS_INFO ( DEPT_NAME, NO_OF_EMPS, TOTAL_SAL ) SELECT DNAME, COUNT(*), SUM(SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER = DNO GROUP BY DNAME;
  • 51. GPA-775 Chapitre 4 - Langages de consultation 51 DELETE La commande DELETE Øpermet de supprimer des tuples d'une relation. Øutilise la clause de sélection WHERE pour sélectionner les tuples à supprimer. ØLes tuples sont supprimés que d'une seule table à la fois. ØSi la clause WHERE est omise, tous les tuples de la relation seront supprimés. Par contre, la table reste dans la BD comme vide. • Pour supprimer une table complètement, on doit utiliser la commande DROP TABLE.
  • 52. GPA-775 Chapitre 4 - Langages de consultation 52 DELETE Ex: Si on veut supprimer 1 ou plusieurs tuples de la relation EMPLOYEE: U4A : DELETE FROM EMPLOYEE WHERE LNAME = 'Brown' U4B : DELETE FROM EMPLOYEE WHERE SSN='123456789' U4C : DELETE FROM EMPLOYEE WHERE DNO IN ( SELECT DNUMBER FROM DEPARTMENT WHERE DNAME = 'Research') U4D : DELETE FROM EMPLOYEE Détruit tous les employés du département recherche. Détruit tous les tuples de la table EMPLOYEE.
  • 53. GPA-775 Chapitre 4 - Langages de consultation 53 UPDATE ♦utilisée pour modifier les valeurs d'attributs d'un ou plusieurs tuples sélectionnés. ♦la clause SET spécifie les attributs à modifier. ♦la clause WHERE sélectionne les tuples d'une relation à modifier. Ex: Changer le lieu et le # du département du projet #10 à 'Bellaire' et 5, respectivement. U5 : UPDATE PROJECT SET PLOCATION = 'Bellaire', DNUM=5 WHERE PNUMBER=10
  • 54. GPA-775 Chapitre 4 - Langages de consultation 54 UPDATE ♦Il est possible de modifier plusieurs tuples avec une seule commande UPDATE. Ex: Donner à tous les employés du département 'Research' une augmentation de salaire de 10%. Noter : Deux références à l'attribut SALARY sont nécessaires. U6 : UPDATE EMPLOYEE SET SALARY = SALARY * 1.1 WHERE DNO IN ( SELECT DNUMBER FROM DEPARTMENT WHERE DNAME = 'Research' )
  • 55. GPA-775 Chapitre 4 - Langages de consultation 55 Les vues Ø Table virtuelle dérivée à partir d’autres tables (elle n’existe pas physiquement) Ex:Si on émet fréquemment des consultations qui recherchent le nom de l'employé et les noms des projets sur lesquels il travaille… Au lieu de spécifier à chaque fois la jonction de EMPLOYEE, WORKS_ON et PROJECT; nous pouvons définir une vue qui contient le résultat de ces jonctions. Les consultations peuvent maintenant se faire sur la vue, qui est une seule table au lieu de deux jonctions impliquant 3 tables. On appelle les tables EMPLOYEE, WORKS_ON, PROJECT : Tables de définition de la vue... Les autres tables sont des tables de base ou des vues précédemment définies.
  • 56. GPA-775 Chapitre 4 - Langages de consultation 56 Spécification des vues CREATE VIEW V1: CREATE VIEW WORKS_ON_1 AS SELECT FNAME, LNAME, PNAME, HOURS FROM EMPLOYEE, PROJECT, WORKS_ON WHERE SSN = ESSN AND PNO = PNUMBER; La consultation des vues se fait de la même façon que les autres tables. Ex: Retrouver le nom et le prénom de tous les employés qui travaillent sur le projet 'PROJECTX‘. QV1: SELECT FNAME, LNAME FROM WORKS_ON_1 WHERE PNAME = 'ProjectX'; Nom de la vue Consultation
  • 57. GPA-775 Chapitre 4 - Langages de consultation 57 Spécifications des vues Ø Si les attributs résultent de fonctions appliquées ou d’opérations arithmétiques, nous devons spécifier les attributs de la vue. V2 : CREATE VIEW DEPT_INFO ( DEPT_NAME, NO_OF_EMPS,TOTAL_SAL) AS SELECT DNAME, COUNT(*), SUM(SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER = DNO GROUP BY DNAME; NOTE : Une vue est toujours mise à jour. Si on modifie les tuples dans les tables de base sur lesquelles la vue est définie, la vue reflète automatiquement ces changements. La vue n'est pas réalisée au moment de la définition de la vue, mais plutôt au moment où on spécifie une consultation sur la vue. Liste d’attributs
  • 58. GPA-775 Chapitre 4 - Langages de consultation 58 Élimination des vues DROP VIEW Ex: DROP VIEW WORKS_ON; DROP VIEW DEPT_INFO;
  • 59. GPA-775 Chapitre 4 - Langages de consultation 59 Mise à jour sur une vue La mise à jour d’une vue est compliquée et peut être ambiguë. Ø Vue définie sur une seule table: la mise à jour peut correspondre à la mise à jour de la table de base correspondante. Ø Vue impliquant des jonctions: la mise à jour peut correspondre à la mise à jour des tables de base, selon plusieurs façons. Exemple: Transférer l’employé “John Smith” du projet “Product X” au projet “Product Y”. Si on considère la vue WORKS_ON_1, il s’agit de faire la mise à jour de l'attribut PNAME de 'ProductX' à 'Product Y' lorsque l’employé “John Smith” est impliqué. UV1 : UPDATE WORKS_ON_1 SET PNAME = 'ProductY ’ WHERE LNAME = 'Smith' AND FNAME = 'John' AND PNAME = 'ProductX ’
  • 60. GPA-775 Chapitre 4 - Langages de consultation 60 Mise à jour sur une vue Cette mise à jour peut correspondre à différentes modifications sur les relations de base. a) UPDATE WORKS_ON SET PNO = ( SELECT PNUMBER FROM PROJECT WHERE PNAME = 'ProductY' ) WHERE ESSN=( SELECT SSN FROM EMPLOYEE WHERE LNAME ='Smith’ AND FNAME = 'John' ) AND PNO = ( SELECT PNUMBER FROM PROJECT WHERE PNAME = 'ProductX' ) b) UPDATE PROJECT SET PNAME = 'Product Y’ WHERE PNAME= 'ProductX‘ Modifie le tuple 'ProductX' dans la relation PROJECT en 'ProductY’. Tous les employés qui travaille pour le projet ProductX vont être assignés sur le projet ProductY. relie 'John Smith' au tuple 'Product Y' à la place de 'ProductX'.
  • 61. GPA-775 Chapitre 4 - Langages de consultation 61 Mise à jour sur une vue Certaines mises à jour de vue n'ont pas de sens. Ex: Modifier l'attribut TOTAL_SAL dans DEPT_INFO. UV2: UPDATE DEPT_INFO SET TOTAL_SAL = 100 000 WHERE DNAME = 'Research'; NOTE : Le thème de mise à jour des vues est encore un domaine de recherche très actif, notez que certains chercheurs ont défini des algorithmes pour choisir qu’elle mise à jour sont les plus vraisemblables, d’autres préfèrent avoir le choix de l'utilisateur. Représente la somme des salaires!
  • 62. GPA-775 Chapitre 4 - Langages de consultation 62 INDEX Ø sont des chemins d'accès physiques; spécifiés sur certains attributs nommés : Attributs d’indexation. Ø permettent de rendre l'accès aux tuples plus efficace. Ø font parties du DDL Création d’index Ex : I1 : CREATE INDEX LNAME_INDEX ON EMPLOYEE( LNAME ); Les index sont croissants sur les valeurs d'attributs indexés. Si on veut désigner l'ordre décroissant: DESC. I2 : CREATE INDEX NAME_INDEX ON EMPLOYEE( LNAME ASC, FNAME DESC, MINIT );
  • 63. GPA-775 Chapitre 4 - Langages de consultation 63 INDEX On peut aussi spécifier un attribut comme clé : I3 : CREATE UNIQUE INDEX SSN_INDEX ON EMPLOYEE( SSN ); Note : Spécifier une clé est recommandé avant que les tuples ne soient insérées dans la relation, de telle façon que le système puisse renforcer la contrainte. L’option “CLUSTER” permet de spécifier un index de regroupement; ce qui rend plus efficace les conditions de sélection et de jonction. Ex: On veut que les enregistrements de EMPLOYEE soient indexés et regroupés par le # de département. I4 :CREATE INDEX DNO_INDEX ON EMPLOYEE(DNO) CLUSTER;
  • 64. GPA-775 Chapitre 4 - Langages de consultation 64 INDEX Élimination d’index DROP INDEX Ex: Pour supprimer l'index DNO_INDEX I5 : DROP INDEX DNO_INDEX Note : Attention de ne pas supprimer un index clé!
  • 65. GPA-775 Chapitre 4 - Langages de consultation 65 Intégration de SQL dans les langages évolués SQL peut être utilisé en conjonction avec un langage évolué: Ø C, C++, Pascal, COBOL, PLI. Ex 1: A) Invocation SQL directe : SELECT FNAME, LNAME FROM EMPLOYEE WHERE DNO = ‘5’; B) Invocation à partir d’un programme (Pro C/C++) char fname[20], lname[20]; EXEC SQL SELECT FNAME , LNAME INTO :fname, :lname FROM EMPLOYEE WHERE DNO = ‘5’; Ici, les mots réservés EXEC SQL du langage Pro C/C++ permet l'appel d'une fonction SQL. Les variables sont préfixées avec “ : ”; Ce qui permet de faire le lien entre le langage hôte et le SGBD en introduisant le résultat de la consultation dans ces variables.
  • 66. GPA-775 Chapitre 4 - Langages de consultation 66 Intégration de SQL dans les langages évolués Ex 2: consultation SQL à partir d'un langage comme Pascal Begin writeln('entrez votre numéro d'assurance sociale:'); readln(numAssSociale); $SELECT NOM, ADRESSE, SALAIRE INTO %E.NOM, %E.ADRESSE, %E.SALAIRE FROM EMPLOYÉ WHERE NAS = %numAssSociale; writeln (E.NOM, E.ADRESSE, E.SALAIRE); Note : • $ indique la commande SQL. • Les variables Pascal sont préfixées de % dans la clause INTO.
  • 67. GPA-775 Chapitre 4 - Langages de consultation 67 Le langage QBE (Query By Example) Caractéristiques: Øa été mis au point dans les laboratoires de recherche de la compagnie IBM. Øfait partie du système de base de données DB2. Øpossède une syntaxe bidimensionnelle: • nécessite une surface (canevas), et non un espace linéaire, pour s'exprimer. Øeffectue des recherches au moyen d'un exemple que lui fournit l'utilisateur au lieu d'utiliser une procédure. Øforte analogie entre QBE et le calcul relationnel sur domaine.
  • 68. GPA-775 Chapitre 4 - Langages de consultation 68 Le langage QBE Canevas d’une base de données bancaire L'utilisateur sélectionne les schémas qui lui conviennent, en fonction de la recherche qu'il désire effectuer. Banque Agence Avoirs Ville Clientèle Client Rue Localité Crédit Agence Prêt Client Montant Dépôt Agence Compte Client Position
  • 69. GPA-775 Chapitre 4 - Langages de consultation 69 Le langage QBE Ex 1 : Trouver l'ensemble des clients qui ont un compte à Perryridge. où P. veut dire Print _x désigne une variable que le système utilise. L'objectif essentiel des variables que manipule le langage QBE est de forcer les valeurs de certains tuples à être identiques sur certains attributs. Dépôt Agence Compte Client Position Perryridge P._x
  • 70. GPA-775 Chapitre 4 - Langages de consultation 70 Le langage QBE Ex 2 : Trouver l'ensemble des clients qui ont un compte à Perryridge ainsi que la ville où ils résident. Utilisation des canevas des relations Crédit et Clientèle Crédit Agence Prêt Client Montant Perryridge _x Clientèle Client Rue Localité P._x P._y
  • 71. GPA-775 Chapitre 4 - Langages de consultation 71 Le langage QBE Contrairement à SQL ou QUEL, il élimine automatiquement les doublons. Ex 3 : Cet exemple illustre comment on peut les conserver. La commande ALL permet d’afficher les doublons Dépôt Agence Compte Client Position Perryridge P.ALL._x
  • 72. GPA-775 Chapitre 4 - Langages de consultation 72 Le langage QBE Ex 4: Trouver les clients qui ont à la fois un compte à Perryridge et à Redwood. L’opération ET sur une seule relation Dépôt Agence Compte Client Position Perryridge Redwood P._x _x
  • 73. GPA-775 Chapitre 4 - Langages de consultation 73 Le langage QBE Ex 5 : Trouver les clients de Perryridge qui ont un compte et un prêt. L’opération ET sur plusieurs relations Dépôt Agence Compte Client Position Perryridge P._x Crédit Agence Prêt Client Montant Perryridge _x
  • 74. GPA-775 Chapitre 4 - Langages de consultation 74 Le langage QBE Ex 6 : Trouver les clients qui ont un compte à Perryridge, à Redwood ou aux deux. L’opération OU sur une seule relation Dépôt Agence Compte Client Position Perryridge Redwood P._x P._y
  • 75. GPA-775 Chapitre 4 - Langages de consultation 75 Le langage QBE Ex 7 : Trouver les comptes qui ont un solde supérieur à 1200$. L’opération plus grand que : > Dépôt Agence Compte Client Position P._x > 1200
  • 76. GPA-775 Chapitre 4 - Langages de consultation 76 Le langage QBE Ex 8 :Trouver les clients qui ont un compte à Perryridge mais pas de prêt. L’opération de négation : ¬ Dépôt Agence Compte Client Position Perryridge P._x Crédit Agence Prêt Client Montant ¬ Perryridge _x
  • 77. GPA-775 Chapitre 4 - Langages de consultation 77 Le langage QUEL Caractéristiques: Ølangage de consultation du système de base de données Ingres (Interactive Graphics and Retreival System). Ømis au point à l'université de Berkeley en Californie dans les années 70. ØIl est distribué par RTI (Relational Technology, Inc) depuis les annnées 80 et inclue un éventail de fonctionnalité similaire à SQL. ØLa structure de ce langage est très proche de celle du calcul relationnel sur tuples.
  • 78. GPA-775 Chapitre 4 - Langages de consultation 78 Le langage QUEL La structure de base d'une expression QUEL comporte trois clauses: Range of t1 is r1 Range of t2 is r2 Range of tm is rm Retrieve ti1.aj1, ti2.aj2, tim.ajm WHERE p Où Øt = variable de tuple, Ør = relation, Øa = attribut, Øp = prédicat.
  • 79. GPA-775 Chapitre 4 - Langages de consultation 79 Le langage QUEL Ex : Trouver l'ensemble des personnes qui ont un prêt de Perryridge ainsi que leur ville de résidence : Range of t is Crédit Range of s is Clientèle Retrieve ( t.client, s.localité ) WHERE ( t.agence = Perryridge ) and ( t.client = s.client )