Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le...

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 d’une BD relationnelle • Protection des informations • Perspectives des BD

Transcript of Evry, 29-31 mai 2000 1© INT Programme Introduction aux BD et aux SGBD Le modèle relationnel +Le...

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(); }