Top Banner
Evry, 29-31 mai 2000 1 © INT Programme • Introduction aux BD et aux SGBD • Le modèle relationnel Le langage de requête SQL • La conception d’une BD relationnelle • Protection des informations • Perspectives des BD
63

Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Apr 03, 2015

Download

Documents

Gwenaël Prost
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 1© INT

Programme

• Introduction aux BD et aux SGBD

• Le modèle relationnelLe langage de requête SQL

• La conception d’une BD relationnelle

• Protection des informations

• Perspectives des BD

Page 2: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

SQL

Structured Query Language

Page 3: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 3© INT

Schéma de la base de référence

• Employé(Nom_emp, Prénom_emp, No_ss, Date_naiss, Adresse_emp, Sexe, Salaire, Comm, No_chef, Nod)

• Département(Nom_d, No_dept, No_dir, Date_affect)

• Dept_local(Num_dept, Id_loc)

• Projet(Nom, No_proj, Local_proj, Nod)

• Travaille_sur(No_ss, No_projet, Nb_heures)

Page 4: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 4© INT

InstanceEmployé Nom_emp Prénom_emp No_ssDate_naiss Adresse_emp Sexe Salaire Comm No_chefNod

Amelmou Karl 1123409/01/55 1, rue de la paix- Fontainebleau M 300 0 13334 5

Ball Jean 1333408/12/45 15, rue Bonaparte- Fontainebleau M 400 100 18886 5

Couvert Armelle 2999819/07/58 101, rue Blondel- Fontainebleau F 350 200 29876 4

Diocy Kelly 2987620/06/41 18, avenue F Roosevelt- Fontainebleau F 430 0 18886 4

Eigery Tom 1666815/09/65 21, rue Mouffetard- Paris M 380 0 13334 5

Hea Aline 2453431/07/62 3, Av. du château- Fontainebleau F 50 300 13334 5

Gol Henry 1987929/03/59 36, Bd Napoléon- Nemours M 250 100 29876 4

Kamil Sim 1888610/11/27 8, impasse des hirondelles- Avon M 550 150 null 1

Département Nom_d No_dept No_dir Date_affect

R&D 5 13334 22/05/78

DRH 4 29876 01/01/85

DG 1 18886 19/06/71

Dept_local Num_dept Id_loc

1 Paris

4 Paris

5 Fontainebleau

5 Paris

5 Melun

Page 5: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 5© INT

Instance (suite)Projet Nom No_proj Local_proj Nod

ProduitX 1 Fontainebleau 5

ProduitY 2 Melun 5

ProduitZ 3 Paris 5

Réorganisation 15 Paris 1

Informatisation 26 Paris 4

Prospect 27 Paris 4

Travaille_sur No_ss No_projet Nb_heures

11234 1 32.5

11234 2 7.5

16668 3 40

24534 1 20

24534 2 20

13334 2 10

13334 3 10

13334 26 10

13334 15 10

29998 27 30

29998 26 10

19879 26 35

19879 27 5

29876 27 20

29876 15 15

18886 15 null

Page 6: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 6© INT

Interrogation de la base de données

Présentation des résultats sous forme tabulaire où:– en-tête de colonne: attribut– largeur de colonne cf. définition du domaine de

l'attribut

alias possible pour entête de colonne

Page 7: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 7© INT

SELECT attr1, attr2, .... attrn

FROM relation;

• Exemples:SELECT Nom_d

FROM Département;

SELECT Nom, Nod "numéro"

FROM Projet;

Clauses minimales

Résultat Nom_d

R&D

DRH

DG

Résultat Nom Numéro

ProduitX 5

ProduitY 5

ProduitZ 5

Réorganisation 1

Informatisation 4

Prospect 4

Page 8: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 8© INT

Joker

SELECT *

FROM Projet;

Résultat Nom No_proj Local_proj Nod

ProduitX 1 Fontainebleau 5

ProduitY 2 Melun 5

ProduitZ 3 Paris 5

Réorganisation 15 Paris 1

Informatisation 26 Paris 4

Prospect 27 Paris 4

Page 9: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 9© INT

Elimination des doublons

SELECT DISTINCT Local_proj

FROM Projet;Résultat Local_proj

Fontainebleau

Melun

Paris

Page 10: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 10© INT

Synonymes

SELECT P.Nom, P.Nod

FROM Projet P;Résultat Nom Nod

ProduitX 5

ProduitY 5

ProduitZ 5

Réorganisation 1

Informatisation 4

Prospect 4

Page 11: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 11© INT

Clause WHERESELECT attr1, attr2, .... attrn

FROM relation

WHERE condition;

Exemple:

« Liste des employés travaillant plus de 20 heures sur un projet. »

SELECT No_ss, No_projet

FROM Travaille_sur

WHERE Nb_heures > 20;

Page 12: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 12© INT

Exemples• Liste des employés dont la

commission est supérieure à leur

salaireSELECT No_ss

FROM Employé

WHERE Comm > Salaire;

• Liste des employés du département 5

dont le salaire est supérieur à 300 kFSELECT No_ss

FROM Employé

WHERE Salaire > 300

AND Nod = 5;

• Liste des employés qui ne

sont pas du département 5SELECT No_ss

FROM Employé

WHERE Nod <> 5;

• Liste des départements

localisés à Paris ou à

FontainebleauSELECT Num_dept

FROM Dept_local

WHERE Id_loc IN ('Paris', 'Fontainebleau');

Page 13: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 13© INT

Clause ORDER BY

• ORDER BY {attribut [DESC | ASC]}

• Liste des employés ordonnée par ordre croissant de salaireSELECT No_ss

FROM Employé

ORDER BY Salaire;

Page 14: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 14© INT

Exemples• Liste des employés et

leurs départements ordonnée par ordre décroissant de salaire à partir de 300 kF

SELECT No_ss

FROM Employé

WHERE Salaire > 300

ORDER BY Salaire DESC;

• Liste des employés et leurs départements ordonnée par ordre croissant de salaire et par ordre décroissant de département

SELECT No_ss

FROM Employé

ORDER BY Salaire, 1, Nod DESC;

Page 15: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 15© INT

Requête multi-relations

• Critère de jointure: clause WHERE• Notation préfixée (relation.attribut)• Exemple: Dans quelles villes sont les

départements R&D? (Equi-jointure)SELECT Id_loc

FROM Département, Dept_local

WHERE Nom_d = 'R&D'

AND No_dept = Num_dept;

Page 16: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 16© INT

Exemples• Sur quels projets travaillent des

femmes ?SELECT No_projet

FROM Travaille_sur, Employé

WHERE Sexe = 'F'

AND Travaille_sur.No_ss = Employé.No_ss;

ouSELECT No_projet

FROM Travaille_sur T, Employé E

WHERE Sexe = 'F'

AND T.No_ss = E.No_ss;

• Employés qui gagnent plus que leur responsable (auto-jointure)SELECT Nom_emp

FROM Employé E, Employé CHEF

WHERE E.No_chef = CHEF.No_ss

AND E.Salaire > CHEF.Salaire

Page 17: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 17© INT

Sous-requêtesSELECT attr1, attr2, .... attrn

FROM relation

WHERE attribut opérateur (SELECT ...);

• Quels sont les employés des départements R&D ? SELECT Nom_emp

FROM Employé

WHERE Nod IN ( SELECT No_dept

FROM Département

WHERE Nom_d = 'R&D');

Page 18: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 18© INT

Expressions et fonctions numériques dans la clause

SELECT

• Liste des employés et de leur rémunération totale (salaire et commission)

SELECT E.No_ss, E.Salaire + E.Comm

FROM Employé E;

Page 19: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 19© INT

Expressions numériques dans la clause WHERE

• Liste des employés dont la commission dépasse la moitié de leur salaire.

SELECT E.No_ss

FROM Employé E

WHERE E.Comm > 0.5 * E.Salaire

Page 20: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 20© INT

Expressions numériques dans la clause ORDER BY

• Liste des employés triée par ordre croissant de rémunération totale

SELECT E.No_ss

FROM Employé E

ORDER BY E.Comm+ E.Salaire;

Page 21: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 21© INT

Fonctions agrégats

• 5 fonctions agrégatives:– AVG ( ): calcul de la moyenne– SUM ( ): calcul de la somme– MIN ( ): calcul de la valeur minimale– MAX ( ): calcul de la valeur maximale– COUNT ( ): calcul du nombre de tuples

Page 22: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 22© INT

AVG ( )

• Donner la moyenne des salaires.SELECT AVG(Salaire)

FROM Employé;

• Donner la moyenne des revenus d'un salariéSELECT AVG(Salaire + Comm)

FROM Employé;

Page 23: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 23© INT

SUM( )• Donner la somme des salaires, et la somme des

commissions perçues par les employés.SELECT SUM(Salaire), SUM(Comm)

FROM Employé;

• Donner la somme des salaires des employés ne percevant pas de commission.SELECT SUM(Salaire)

FROM Employé

WHERE Comm = 0;

Page 24: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 24© INT

MIN( )

• Quel est le revenu minimum (commission comprise) ?

SELECT MIN(Salaire + Comm)

FROM Employé;

Page 25: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 25© INT

MAX( )

• Quel est la commission maximale perçue ?

SELECT MAX(Comm)

FROM Employé;

Page 26: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 26© INT

COUNT()• Quel est le nombre d'employés du département 5

?SELECT COUNT(No_ss)

FROM Employé

WHERE Nod = 5;

ou

SELECT COUNT(*)

FROM Employé

WHERE Nod = 5;

Page 27: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 27© INT

Exemples

AttentionSELECT Nom_emp, AVG(Salaire)

FROM Employé;

• Donner le plus haut salaire, le plus bas salaire et la différence entre les deuxSELECT MAX(Salaire), MIN(Salaire),

MAX(Salaire) - MIN(Salaire)

FROM Employé;

Page 28: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 28© INT

Clause GROUP BY• Regroupement de tuples

• Relation initiale partitionnée horizontalement selon les valeurs d'un attribut ou d'un groupe d'attributs.

• Permet de répondre aux questions du type: – donner le nombre d'employés par département. – constituer des groupes d'employés pour chaque

département– évaluer au sein de chacun de ces groupes le nombre

d'éléments

Page 29: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 29© INT

Exemple

• Donner le nombre d'employés par département.SELECT Nod, COUNT(*)

FROM Employé

GROUP BY Nod;

Page 30: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 30© INT

Evaluation du résultat

Employé Nom_emp Prénom_emp No_ss Date_naiss Adresse_emp Sexe Salaire Comm No_chef Nod

Amelmoux Karl 11234 09/01/55 1, rue de la paix- Fontainebleau M 300 0 13334 5

Ball Jean 13334 08/12/45 15, rue Bonaparte- Fontainebleau M 400 100 18886 5

Couvert Armelle 29998 19/07/58 101, rue Blondel- Fontainebleau F 350 200 29876 4

Diocy Kelly 29876 20/06/41 18, avenue F Roosevelt- Fontainebleau F 430 0 18886 4

Eigery Tom 16668 15/09/65 21, rue Mouffetard- Paris M 380 0 13334 5

Hea Aline 24534 31/07/62 3, Av du château- Fontainebleau F 50 300 13334 5

Gol Henry 19879 29/03/59 36, Bd Napoléon- Nemours M 250 100 29876 4

Kamil Sim 18886 10/11/27 8, impasse des hirondelles- Avon M 550 150 null 1

• Relation initiale

Page 31: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 31© INT

Evaluation du résultat

• Tri et partitionnement

Employé Nom_emp Prénom_emp No_ss Date_naiss Adresse_emp Sexe Salaire Comm No_chef Nod

Kamil Sim 18886 10/11/27 8, impasse des hirondelles- Avon M 550 150 null 1

Couvert Armelle 29998 19/07/58 101, rue Blondel- Fontainebleau F 350 200 29876 4

Diocy Kelly 29876 20/06/41 18, avenue F Roosevelt- Fontainebleau F 430 0 18886 4

Gol Henry 19879 29/03/59 36, Bd Napoléon- Nemours M 250 100 29876 4

Amelmoux Karl 11234 09/01/55 1, rue de la paix- Fontainebleau M 300 0 13334 5

Ball Jean 13334 08/12/45 15, rue Bonaparte- Fontainebleau M 400 100 18886 5

Eigery Tom 16668 15/09/65 21, rue Mouffetard- Paris M 380 0 13334 5

Hea Aline 24534 31/07/62 3, Av du château- Fontainebleau F 50 300 13334 5

Page 32: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 32© INT

Evaluation du résultat

• Résultat

Résultat Nod Count(*)1 14 35 4

Page 33: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 33© INT

Exemples

Attention: tous les attributs figurant dans la clause SELECT sans être soumis à un agrégat doivent apparaître dans la clause GROUP BY

SELECT Nom_emp, AVG(Salaire)

FROM Employé

GROUP BY Nod; Problème

Page 34: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 34© INT

Exemples

• Donner le salaire moyen des femmes par département.SELECT Nod, AVG(Salaire + Comm)

FROM Employé

WHERE Sexe = 'F'

GROUP BY Nod;

Page 35: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 35© INT

Clause HAVING

• Exprimer des conditions sur le résultat après partitionnement

• Exemple: Donner la liste des salaires moyens par département si celui-ci excède 400 kF.

SELECT Nod, AVG(Salaire)

FROM Employé

GROUP BY Nod

HAVING AVG(Salaire) > 400;

Page 36: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 36© INT

Exemple

• Donner la liste des salaires moyens des femmes par département si celui-ci excède 400 kF.SELECT Nod, AVG(Salaire)

FROM Employé

WHERE Sexe = 'F'

GROUP BY Nod

HAVING AVG(Salaire) > 400;

Page 37: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 37© INT

Opérateurs ensemblistes

• Opérateurs binaires

• Deux relations de même schéma en entrée

Page 38: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 38© INT

Union• Donner la liste des dépenses composant la masse

salariale (salaire et commission).SELECT Salaire

FROM Employé

UNION

SELECT Comm

FROM Employé

• L'opérateur d'union élimine automatiquement les doublons

Page 39: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 39© INT

Exemple Attention aux schémas• Donner la liste des départements avec leurs directeurs

et des départements avec leurs localisationsSELECT No_dept, No_dir

FROM Département

UNION

SELECT Num_dept, Id_loc

FROM Dept_local Problème

Page 40: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 40© INT

Intersection

• Quels sont les employés qui encadrent d'autres employés et qui travaillent sur un projet ?SELECT No_chef

FROM Employé

INTERSECT

SELECT No_ss

FROM Travaille_sur

Page 41: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 41© INT

Différence

• Donner la liste des employés qui n'encadrent personne.SELECT No_ss

FROM Employé

EXCEPT

SELECT No_chef

FROM Employé

Page 42: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 42© INT

Questions quantifiées

• Prédicats– ANY– ALL– EXISTS

Page 43: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 43© INT

ANY• Teste si la valeur d'un attribut satisfait un critère de

comparaison avec au moins un résultat d'une sous-requête

• Exemple: Quels sont les employés travaillant sur au moins un des projets de l'employé 13334.

SELECT No_ss

FROM Travaille_sur

WHERE No_projet = ANY (SELECT No_projet

FROM Travaille_sur

WHERE No_ss =13334)

Page 44: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 44© INT

ALL

• Teste si la valeur d'un attribut satisfait un critère de comparaison avec tous les résultats d'une sous-requête.

• Exemple: Quels sont les employés les mieux payés.

SELECT No_ss

FROM Employé

WHERE Salaire >= ALL (SELECT Salaire

FROM employé)

Page 45: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 45© INT

EXISTS• Teste si la réponse à une sous-requête est vide.• Exemple: Donner le nom des employés travaillant

au moins sur un projet.

SELECT Nom_emp

FROM Employé E

WHERE EXISTS ( SELECT No_projet

FROM Travaille_sur T

WHERE T.No_ss = E.No_ss);

Page 46: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 46© INT

Exemple

• Quels sont les noms d'employés ayant au moins un autre employé sous leurs ordres.SELECT Nom_emp

FROM Employé E1

WHERE EXISTS ( SELECT No_ss

FROM Employé E2

WHERE E2.No_chef = E1.No_ss)

ORDER BY Nom_emp;

Page 47: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 47© INT

Prédicat EXISTS pour exprimer une division

• Quels sont les départements répartis sur tous les sites?– Un département est conservé s'il n'existe aucun site sur lequel il ne soit pas

situé.

SELECT No_dept

FROM département D

WHERE NOT EXISTS (SELECT Id_loc

FROM Dept_local L1

WHERE NOT EXIST (SELECT L2.*

FROM Dept_local L2

WHERE L2.Id_loc = L1.Id_loc

AND L2.Num_dept = D.No_dept))

Page 48: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 48© INT

SynthèseSQL Equivalent AR

• SELECT liste d'attributs, agrégats Projection

• FROM liste de relations Produit cartésien

• WHERE conditions Restriction + jointure ou autre requête Division, jointure

• GROUP BY liste d'attributs

• HAVING condition, agrégats

• ORDER BY liste d'attributs

• UNION | INTERSECTION | EXCEPT Union, intersection, différence

Page 49: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 49© INT

Exemple complet• Liste des départements avec le nombre d'employés ne percevant pas

de commission et travaillant sur un projet si celui-ci est supérieur à 1 triée par ordre croissant de département.

SELECT D.Nom_d, D.No_dept, COUNT(*)

FROM Département D, Employé E, Travaille_sur T

WHERE E.Comm=0

AND D.No_dept =E.Nod

AND E.No_ss = T.No_ss

GROUP BY No_dept

HAVING COUNT(*) > 1

ORDER BY No_dept;

Page 50: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 50© INT

Commandes de mise à jour

• Insertion de nouveaux tuples: INSERT

• Mise à jour de valeurs: UPDATE

• Suppression de tuples: DELETE

• Suppression de tous les tuples d'une relation: TRUNCATE

Page 51: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 51© INT

INSERT

• Insérer des tuples dans une relation en spécifiant les valeurs à insérerINSERT INTO <relation>

VALUES (<liste de valeurs>);

INSERT INTO relation(<liste d'attributs>)

VALUES (<liste de valeurs>);

• Liste des noms d'attributs optionnelle

Page 52: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 52© INT

Exemples• Créer le nouveau département "Distribution" de numéro 6,

dirigé par 18886 à partir du 15/09/96.

INSERT INTO département

VALUES ('Distribution', 6, 18886, '15/09/96');• Créer le nouveau département "Distribution" de numéro 6,

dirigé par 18886. La date d'affectation est pour l'instant inconnue.

INSERT INTO département (No_dept, nom_d, No_dir)

VALUES (6, 'Distribution', 18886);

Page 53: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 53© INT

Insertion à partir d'autres relations

• Insertion de tuples provenant d'une requête considérée comme une sous-requête

INSERT INTO relation

SELECT...• Création de relation avec insertion simultanée de

données

CREATE TABLE relation

AS SELECT....

Page 54: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 54© INT

UPDATE

• Modification des valeurs d'un ou de plusieurs attributs, dans un ou plusieurs tuples existants d'une relation.

UPDATE <relation>

SET <attribut> = <valeur>

WHERE <expression logique>• En l'absence de clause WHERE toutes les lignes

sont mises à jour

Page 55: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 55© INT

Exemple

• Augmenter de 10 % tous les employés n'ayant pas de commission.

UPDATE Employé

SET Salaire = Salaire *1.1

WHERE Comm = 0;

Page 56: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 56© INT

DELETE

• Suppression des tuples d'une relation vérifiant un certain critère

DELETE FROM <relation>

WHERE <expression logique>

• En l'absence de la clause WHERE tous les tuples sont supprimés

Page 57: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 57© INT

Exemple

• Traiter la fin du projet Produit Y

DELETE FROM Travaille_sur

WHERE Nom = 'produitX';

Page 58: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 58© INT

TRUNCATE

• Suppression de tous les tuples d'une relationTRUNCATE TABLE relation;

• Vider la relation "projets" (après un archivage par exemple)TRUNCATE Projet;

Page 59: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

SQL : aspect programmation

Page 60: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 60© INT

Contexte

• Limites du SQL interactif : – absence de structure de contrôle – absence de variable

=> Adopter un langage de type procédural

• SQL doit rester le seul langage d'accès aux données

=> SQL intégré (Embedded SQL)

Page 61: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 61© INT

SELECT nom, âge

FROM Employé

WHERE âge >30

Analyse Syntaxique

Vérification

DD

Optimisation

Génération d'un plan d'exécution

Forme exécutable de la requête

Exécution

Traitement d'une requête SQL

Page 62: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 62© INT

Concepts• Précompilateur

– Programme + ordres SQL => programme + appels bas niveaux BD

• Variable hôte– Variable déclarée dans le programme hôte pour le transfert

des données entre les ordres SQL intégrés et le programme hôte

– Utilisations:• Variables paramètres des ordres SQL (programme -> SGBD);• Zone de réception des données renvoyées par une interrogation

(SGBD -> programme).

Page 63: Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le langage de requête SQL La conception dune BD relationnelle.

Evry, 29-31 mai 2000 63© INT

Exemple: Pro*Cmain(){

exec sql include sqlca;exec sql begin declare section;

int num; /* no employé*/char nom[16]; /*nom employé*/

float sal: /* salaire*/ exec sql end declare section; printf("entrer le numéro de l'employé: "); scanf("%d", &num); exec sql select nom_emp, salaire

from Employé Where num_emp =: num into:nom,:sal;

if (sqlca.sqlcode == 0) { printf("nom: %s, salaire:%f\n", nom,

sal); } else { if (sqlca.sqlcode == 100) { printf("Pas d'employé ayant ce

numéro\n"); } else { printf("erreur:%d\n", sqlca.sqlcode); } } exit(); }