Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD...

66
Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre relationnelle : QUEL, SEQUEL, SQL (79, sur Oracle) Normalisation en 87 par ANSI de SQL plus d'une centaine de produits supportant SQL aujourd'hui SQL n'est pas un langage de programmation 2 douzaines d'instructions environ peut trouver sa place dans un langage de programmation

Transcript of Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD...

Page 1: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20041

Le langage SQL

Histoire– langages pour les BD relationnelless incluant toutes

les possibilités de l'algèbre relationnelle : QUEL, SEQUEL, SQL (79, sur Oracle)

– Normalisation en 87 par ANSI de SQL– plus d'une centaine de produits supportant SQL

aujourd'hui SQL n'est pas un langage de programmation

– 2 douzaines d'instructions environ– peut trouver sa place dans un langage de

programmation

Page 2: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20042

Caractéristiques

SQL assure l'indépendance des données SQL est un langage déclaratif (par opposition à

procédural) Mode interactif ou programmé

– interactif : instruction SQL tapée directement, instantanément traitée

– à l'intérieur d'un pgm : appel de SQL dans un pgm en C, ...

instruction SQL = requête résultat d'une requête = table

Page 3: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20043

Caractéristiques

SQL est un langage à dimension triple :– le DDL (Data Definition Language) : commandes de

SQL permettant de créer, modifier ou effacer la définition (schéma) d'une BD ou d'une table.

– le DML (Data Manipulation Language) : interrogation et modification de l'information contenue dans les tables

– le DCL (Data Control Language) : sécurité et confidentialité de la BD.

Page 4: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20044

SQL1 - 86 LANGAGE DE DEFINITIONS DE DONNEES

– CREATE TABLE– CREATE VIEW

LANGAGE DE MANIPULATION DE DONNEES– SELECT OPEN– INSERT FETCH– UPDATE CLOSE– DELETE

LANGAGE DE CONTROLE DE DONNEES– GRANT et REVOKE– BEGIN et END TRANSACTION– COMMIT et ROLLBACK

Page 5: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20045

Le Language de Manipulation des Données : la consultation de données

Instruction SELECT : 3 parties principales :– clause (obligatoire) Select : précise les valeurs qui constituent

chaque ligne du résultat– clause (obligatoire) from : indique les tables desquelles le

résultat tire ses valeurs– clause where : donne la condition de sélection que doivent

satisfaire les lignes qui fournissent le résultat

SELECT schéma

FROM table

WHERE condition ;

Page 6: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20046

Interrogation en SQL

SELECT <liste de colonnes>

FROM <liste de tables>

[WHERE <critère de jointure> AND <critère de sélection>]

[GROUP BY <attributs de partitionnement>]

[HAVING <citère de restriction>] Exemple :

SELECT NomCoureur

FROM Coureurs

WHERE CodePays = ‘SUI’;

Page 7: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20047

CRU(Nom_Cru,Commune,Région,Coul)

VINS(Région,Coul,Millésime,Qualité)

CEPAGE_REGION(Cepage,R_PROD,Coul)

OU

EMP(Num,Nom,Fonction,N_Sup,Embauche, Salaire,Comm,N_Dep)

DEPT(N_Dept,Nom,Lieu)

Interrogation d’une seule table

Page 8: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20048

PROJECTION

Extraction simple : afficher une table entièrement

SELECT *FROM Nom_table; Exemple :

– Tous les crus ?– Expression algébrique : cru– SQL : SELECT *

FROM CRU;

Page 9: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-20049

PROJECTION

SELECT Nom_Col1, ..., Nom_ColN

FROM Nom_table; Exemple :

Requête : Liste des noms de crus

Algèbre : Nom_Cru (CRU)

SQL : SELECT Nom_CruFROM CRU

La clause DISTINCT permet d'éliminer les doublons.

Page 10: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200410

SELECTION

SELECT Nom_ColonneFROM Nom_TableWHERE critère ; Exemple :

– Requête : La liste des noms de crus rouges– Algèbre : Nom_Cru ( Coul = rouge(CRU))– SQL : SELECT Nom_Cru

FROM CRU WHERE Coul=‘Rouge’

Page 11: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200411

Opérateurs de comparaison =,>,<,>=,<=,<> (ou != ou ^=) In et not in

– Requête : quels sont les bons millésimes de Bordeaux ?– SQL : SELECT Millésime

FROM VINSWHERE Région = ‘Bordeaux’ AND

Qualité =‘Bonne’ OR Qualité =‘Très Bonne’ OR Qualité =‘Excellente’

OU SELECT Millésime FROM VINSWHERE Région = ‘Bordeaux’ AND

Qualité IN (‘Bonne’, ‘Très bonne’, Excellente’ )

Page 12: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200412

Opérateurs de comparaison LIKE : appartenance à une chaîne de caractères

– ‘_’ remplace n'importe quel caractère– ‘%’ remplace n'importe quelle chaîne de caractères

Exemple :– Requête : Quels sont les noms de cru qui commencent par Ch ?– SQL : SELECT Nom_Cru

FROM CRUWHERE Nom_Cru like ‘Ch%’

– Requête : Quels sont les noms de cru possédant un ‘a’ en seconde position ?

– SQL : SELECT Nom_CruFROM CRUWHERE Nom_Cru like ‘_a%’

Page 13: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200413

Opérateurs de comparaison

BETWEEN : appartenance à un intervalle Exemple :

– Requête : Quels sont les salariés gagnant entre 20000 et 25000 ?

– SQL : SELECT Nom, Salaire

FROM EMP

WHERE Salaire BETWEEN 20000 AND 25000

Page 14: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200414

Nom de colonne

Les colonnes constituant le résultat d’un SELECT peuvent être renommées dans le SELECT– Requête : salaire de chaque employé– SQL : SELECT Nom,Salaire « SALAIRE MENSUEL »

FROM EMP;

Page 15: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200415

Opérateurs de comparaison

IS NULL et IS NOT NULL Exemple :

– Requête : le nom des crus dont la commune n’a pas été renseignée

– SQL : SELECT Nom_Cru

FROM CRU

WHERE Commune IS NULL

Page 16: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200416

Tri des résultats

ORDER BY SELECT attribut1, attribut2, ...FROM Nom_tableORDER BY attribut1 [ASC], attribut2 [DESC], ... ;

Exemple : – Requête : Les bordeaux classés par millésimes et par couleur– SQL : SELECT *

FROM VINSWHERE Région = ‘Bordeaux’ORDER BY Millésime, Coul

Page 17: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200417

Fonctions La relation résultat

– ne comportera qu'une ligne – ou pourra simplement être considérée comme un nombre

Fonctions numériques :– AVG : moyenne– Exemple : Age moyen des professeurs– SQL : SELECT ‘2001-10-10’-AVG(Date_Naissance) FROM PROFESSEUR;– SUM : somme– Exemple : CA généré par les vendeurs de PACA: – SQL : SELECT SUM(CA)

FROM VendeurWHERE Region = 'PACA'’;

Page 18: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200418

Fonctions

COUNT : nombre d'éléments sélectionnés– Requête : Nombre de cépages bordelais ?– SQL : SELECT COUNT ( *)

FROM CEPAGE_REGIONWHERE R_Prod = ‘Bordeaux’;

MIN, MAX, ... Expressions et Fonctions sur les chaînes de caractères

– || : seul opérateur sur les chaînes de caractères : la concaténation.

Résultat : chaîne de caractères obtenue en écrivant d'abord la chaîne à gauche de || puis celle à droite de ||.

– LOWER(chaîne) : Renvoie chaîne en ayant mis toutes ses lettres en minuscules.

...

Page 19: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200419

Fonctions

Expressions et fonctions sur les dates– Opérateurs sur les dates : + et -

date +/- nombre : le resultat est une date obtenue en ajoutant le nombre de jours nombre à la date date.

date2 - date1 : le resultat est le nombre de jours entre les deux dates.

Page 20: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200420

Regroupements

Il est possible de subdiviser la table en groupes Permet d’appliquer les fonctions d’aggrégation à

des sous-groupes– Requête : Combien de crus rouges et de crus blancs

sont produits dans chaque commune ?– SQL : SELECT Commune, Count(*)

FROM CRU

GROUP BY Commune, Coul;

Page 21: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200421

Résultat

Commune Coul Count(*)

Aloxe-Corton Rouge 1

Barsac Blanc 1

Margaux Rouge 2

Meursault Blanc 3

Meursault Rouge 1

Pauillac Rouge 2

Page 22: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200422

Selection des groupes

HAVING : conditions imposées aux groupes (de lignes) à sélectionner

– pour éviter la confusion avec la clause WHERE (qui ne s'applique qu'à des lignes seules)

Exemple :– Requête : Donner les communes où au moins 2 crus

rouges ou crus blancs sont produits?– SQL : SELECT Commune, Count(*)

FROM CRUGROUP BY Commune, CoulHAVING Count(*) >2;

Page 23: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200423

Quantificateurs

ALL + opérateur de comparaison : teste si une expression est vérifiée dans tous les cas de figure

– Requête : Tous les salariés ont-ils été recrutés avant le 1er janvier 2001 ?

– SQL : ‘2001-01-01’ > ALL (SELECT Embauche FROM EMP)

SOME ou ANY : expression vraie si la comparaison est vérifiée pour au moins une valeur

– Requête : vérifiez si au moins un salarié a été recruté depuis un an

– SQL : ‘2000-10-01’ > ANY (SELECT Embauche FROM EMP)

Page 24: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200424

Quantificateurs

EXISTS, NOT EXISTS

Page 25: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200425

Comment interpréter une requête complexe monotable ?

on considère la table spécifiée dans la clause FROM on sélectionne les lignes sur la base de la clause

WHERE on classe ces lignes en groupes comme spécifié dans la

clause GROUP BY on ne retient que les groupes qui vérifient la clause

HAVING de chacun de ces groupes, on extrait les valeurs

demandées dans la clause SELECT les valeurs demandées sont ordonnées selon la clause

ORDER BY éventuelle.

Page 26: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200426

Interrogations sur plusieurs tables :

SQL permet la liaison de plusieurs tables via 3 possibilités :– Les opérations de jointure entre 2 tables en se

basant sur l'égalité entre l'un des attributs de chaque table

– Le principe des requêtes imbriquées qui repose sur le fait que le résultat d'une requête est une table

– L'utilisation d'opérations ensemblistes pour combiner le résultat de plusieurs requêtes.

Page 27: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200427

Jointures

SELECT ...FROM nom_table1, nom_table2...WHERE critère;

– pas de condition de sélection : résultat obtenu = produit cartésien des tables présentes derrière le FROM.

– Requête : à partir de quel cépage principal est produit le Meursault ?

– SQL : SELECT Cépage FROM CEPAGE_REGION, CRUWHERE région = R_Prod

AND Commune = Meursault’

Si l’attribut Région avait le même nom dans CRU que dans CEPAGE_REGION on aurait

écrit : CRU.Région = CEPAGE_REGION.Région

Page 28: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200428

Auto-jointure :

Requête : Donner pour chaque employé le nom de son supérieur hiérarchique.

SQL : SELECT EMP.Nom, chef.Mom

FROM EMP, EMP chef

WHERE EMP.N_sup= chef.Num;

Page 29: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200429

Autres jointures

Le critère d'égalité est le critère de jointure le plus naturel. Mais on peut utiliser d'autres types de comparaisons comme critères de jointures. – Requête : Quels sont les employés gagnant plus

que SIMON ? – SQL : SELECT EMP.nom, EMP.salaire,

EMP.fonctionFROM EMP, EMP empbisWHERE EMP.salaire > empbis.salaire

AND empbis.nom = 'SIMON';

Page 30: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200430

Requêtes imbriquées

une clause WHERE est elle-même le résultat d'un SELECT

renvoient une ou plusieurs valeurs

Page 31: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200431

Requêtes imbriquées Sous-interrogation ramenant une seule valeur

– Requête : Quels sont les vins qui sont produits dans la même commune que La Grappe d’Or ?

– SQL : SELECT Nom_CruFROM VINSWHERE Commune = (SELECT Commune

FROM VINS WHERE Nom_Cru

= ‘La Grappe d’Or’)

– Remarque : auto-jointure possible pour répondre à cette question

Page 32: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200432

Requêtes imbriquées

une sous-interrogation qui ne ramène aucune

ligne se termine avec un code d'erreur.

une sous-interrogation ramenant plusieurs

lignes provoquera aussi, dans ce cas, une

erreur

Page 33: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200433

Requêtes imbriquées

Sous-interrogation ramenant plusieurs lignes

Avec des opérateurs de comparaison admettant à leur droite un ensemble de valeurs comme : – l'opérateur IN – les opérateurs obtenus en ajoutant ANY ou ALL à la

suite d'un opérateur de comparaison classique (=, <>, >, >=, <, <=)

Page 34: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200434

Requêtes imbriquées

Requête : Quels sont les employés gagnant plus que tous les employés du département 30 ?

SQL : SELECT Nom, Salaire

FROM Emp

WHERE salaire > ALL(SELECT Salaire

FROM Emp

WHERE N_Dep=30);

Page 35: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200435

Requêtes imbriquées

Sous-interrogation ramenant plusieurs colonnes– Exemple : Quels sont les employés ayant la même

fonction et le même supérieur que CODD ?– SQL : SELECT Nom, Fonction, N_Sup

FROM Emp

WHERE (Fonction,N_Sup) = (SELECT Fonction,N_Sup FROM Emp

WHERE Nom = 'CODD');

Page 36: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200436

Requêtes imbriquées Sous-interrogation ramenant au moins une ligne L'opérateur EXISTS permet de construire un prédicat

vrai si la sous-interrogation qui suit ramène au moins une ligne.

– Requête : Quels sont les employés travaillant dans un département qui a procédé à des embauches depuis le début de l'année 2001 ?

– SQL : SELECT *

FROM Emp Empbis

WHERE EXISTS (SELECT *

FROM EMP

WHERE Embauche >= '01-jan-01'

AND N_Dept = Empbis.N_Dept);

Page 37: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200437

Les opérateurs ensemblistes

permettent de "joindre" des tables verticalement c'est-à-dire de combiner dans un résultat unique des lignes provenant de deux interrogations. Les opérateurs ensemblistes sont les suivants :

– l'union : UNION – l'intersection : INTERSECT – la différence relationnelle : MINUS

La syntaxe d'utilisation est la même pour ces trois opérateurs :

SELECT ... {UNION | INTERSECT | MINUS } SELECT ...

Page 38: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200438

Les opérateurs ensemblistes Dans une requête utilisant des opérateurs ensemblistes :

– Tous les SELECT doivent avoir le même nombre de colonnes sélectionnées, et leur types doivent être un à un identiques.

– Les doubles sont éliminés (DISTINCT implicite). – Les noms de colonnes sont ceux du premier SELECT.

On peut combiner le résultat de plus de deux SELECT au moyen des opérateurs UNION, INTERSECT, MINUS.

SELECT ... UNION SELECT ... MINUS SELECT ...– Expresion évaluée de gauche à droite. Modification de l'ordre

d'évaluation par des parenthèses.

SELECT ...UNION (SELECT ...

MINUS SELECT ...)

Page 39: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200439

Les opérateurs ensemblistes

Exemple : Lister tous les enseignants

SELECT Nom, Prénom

FROM MdC

UNION

SELECT Nom, Prénom

FROM Professeur ;

Page 40: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200440

Coment interpréter une requête complexe multitable ?

on considère les tables spécifiées dans la clause FROM on effectue la jointure de ces tables selon le critère de

jointure de la clause WHERE on sélectionne les lignes de la jointure sur la base des

autres conditions de la clause WHERE on classe ces lignes en groupes comme spécifié dans la

clause GROUP BY on ne retient que les groupes qui vérifient la clause HAVING

de chacun de ces groupes, on extrait les valeurs demandées dans la clause SELECT

les valeurs demandées sont ordonnées selon la clause ORDER BY éventuelle.

Page 41: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200441

Coment interpréter une requête complexe multitable ?

Exemple :SELECT N°Client, COUNT(*), SUM(QtéCom)FROM Commande C, LigneCom LWHERE C.N°Com = L.N°ComAND N°Pro = ‘PA 60’GROUP BY N°ClientHAVING COUNT(*) >= 2ORDER BY N°Client

Page 42: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200442

Le Language de Manipulation des Données : la modification de données

Insertion de nouveaux n-uplets

INSERT INTO nom_table(nom_col1, nom_col2,...)

VALUES (val1, val2...) Exemple :

INSERT INTO Etudiant (n°Et, Nom, Prénom)

VALUES(96035, ‘Diego’, ‘Berger’)

Page 43: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200443

La modification de données

Il est possible d'insérer dans une table des lignes provenant d'une autre table. La syntaxe est la suivante :

INSERT INTO nom_table(nom_col1, nom_col2, ...)

SELECT ... Exemple : Insérer dans la table Bonus les noms et

salaires des directeurs.

INSERT INTO bonus

SELECT nom, salaire

FROM empWHERE fonction = 'directeur';

Page 44: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200444

La modification de données Modification de lignes

– La commande UPDATE permet de modifier les valeurs d'une ou plusieurs colonnes, dans une ou plusieurs lignes existantes d'une table. La syntaxe est la suivante :

UPDATE nom_tableSET nom_col1 = {expression1 | ( SELECT ...) },

nom_col2 = {expression2 | ( SELECT ...) }[WHERE critère];

Exemple : Augmenter de 10% les salaires [des ingénieurs].

UPDATE empSET salaire = salaire * 1.1[WHERE fonction = 'ingenieur' ];

Page 45: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200445

La modification de données

Suppression de lignes– La commande DELETE permet de supprimer des lignes d'une

table. La syntaxe est la suivante :

DELETE FROM nom_tableWHERE critère;– Toutes les lignes pour lesquelles le critère est évalué à vrai sont

supprimées. En l'absence de clause WHERE, toutes les lignes de la table sont supprimées.

– Exemple :

DELETE FROM empWHERE fonction = ‘retraité‘;

Page 46: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200446

Le language de définition de données

Création d'une tableCREATE TABLE nom_table

(nom_col1 TYPE1,[NOTNULL/PRIMARY KEY/FOREIGN KEY]

nom_col2 TYPE2,[.../.../...] ...);

– Types acceptés : – CHAR(longueur), VARCHAR(longueur) – SMALLINT, INTEGER, DECIMAL(m,n), FLOAT, SERIAL(n)– DATE

Page 47: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200447

Création d'une tableCREATE TABLE Departement (NDep SERIAL(20),NOTNULL,PRIMARY KEY, NomDep CHAR(20), Directeur CHAR(20),

Budget DECIMAL(6,0));CREATE TABLE Etudiant (NEtud SERIAL(20),NOTNULL,PRIMARY KEY, Nom CHAR(20),

Prénom CHAR(20), DateNaissance DATE,

Rue CHAR(80), CodePostal DECIMAL(5,0), Ville CHAR(20),DEFAULT ‘‘PARIS’’,

NDep SERIAL(20),NOTNULL,FOREIGN KEY);

Page 48: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200448

Suppresion et modification d'une table

DROP TABLE nom_table ;– Exemple : DROP TABLE Etudiant ;

Modification d'une table– Ajoût d'une ou plusieurs colonnes :

ALTER TABLE nom_table

ADD(nom_col1 TYPE1, nom_col2 TYPE2, ...);– option : [BEFORE nom_col_before]– Exemple : On aimerait connaître le téléphone des étudiants

ALTER TABLE Etudiant

ADD(Téléphone DECIMAL(10,0)

BEFORE NDep);

Page 49: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200449

Modification d'une table

Suppression d'une colonne :ALTER TABLE nom_table DROP nom_col;

– Attention aux problèmes d'intégrité ! Modification d’une table :

ALTER TABLE nom_table MODIFY(nom_col1 TYPE1,nom_col2 TYPE2,...);

– Exemple : Un nom peut dépasser 20 caractèresALTER TABLE Etudiant MODIFY(Nom Char(25));

Page 50: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200450

Modification d'une table

Changement de nom de tables ou de colonnes :

RENAME TABLE ancien_nom TO nouveau_nom ;

RENAME COLUMN nom_relation.ancien_nom_col TO nouveau_nom_col ;– Exemple :

RENAME COLUMN Etudiant.DateNaissance

TO BirthDay;

Page 51: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200451

Les vues

Les vues permettent d'assurer l'objectif d'indépendance logique. Grace à elles, chaque utilisateur pourra avoir sa vision propre des données.

Créer une vue– La commande CREATE VIEW permet de créer une vue en

spécifiant le SELECT constituant la définition de la vue :

CREATE VIEW nom_vue [(nom_col1,...)]

AS SELECT ...

WITH CHECK OPTION ;

Page 52: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200452

Les vues Exemple : Création d'une vue constituant une

restriction de la table emp aux employés du departement 10.

CREATE VIEW emp10 ASSELECT *FROM empWHERE n_dept = 10 ;

Le CHECK OPTION permet de vérifier que la mise à jour ou l'insertion faite à travers la vue ne produisent que des lignes qui font partie de la sélection de la vue.

Supprimer une vueDROP VIEW nom_vue;

Page 53: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200453

Les index

Considérons le SELECT suivant : SELECT *FROM EtudiantWHERE nom = 'MARTIN'

– moyen de recherche des lignes avec nom = 'MARTIN' : balayer toute la table

– prohibitif dès que nb lignes > qq centaines Solution offerte par tous les SGBD : création d'index Les index sont des structures permettant de retrouver

une ligne dans une table à partir de la valeur d'une colonne ou d'un ensemble de colonnes.

Page 54: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200454

Choix des index

Indexer en priorité : – les clés primaires – les colonnes servant de critère de jointure – les colonnes servant souvent de critère de recherche

Ne pas indexer : – les colonnes contenant peu de valeurs distinctes

(index alors peu efficace) – les colonnes fréquemment modifiées

Page 55: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200455

Créer un index

Un index peut être créé par la commande suivante :

CREATE [UNIQUE] INDEX nom_index

ON nom_table (nom_col1 , nom_col2, ...) Option UNIQUE : interdiction que deux lignes aient la

même valeur dans la colonne indexée. Les requêtes SQL sont transparentes au fait qu'il existe

un index ou non. Effacement d'un index :

DROP INDEX Nom_de_l’index

Page 56: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200456

Les contraintes d'intégrité

Sur les colonnes :– NOT NULL : force la saisie de la colonne– DEFAULT : précise une valeur par défaut– UNIQUE : vérifie que toutes les valeurs sont différentes– CHECK : vérifie la condition précisée– CONSTRAINT : permet de nommer une contrainte

Sur la table globalement :– CONSTRAINT– PRIMARY KEY : clé primaire– FOREIGN KEY (liste_col1) REFERENCES table(liste_col2): clé

étrangère => intégrité référentielle

Page 57: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200457

Les contraintes d'intégrité Clé étrangère :

– Attribut ou groupe d’attribut dans une table T1 dont les valeurs doivent exister comme valets de la clé candidate dans la table T2.

– T1 : table qui référence : table secondaire du lien (contient la clé étrangère)

– T2 : table référencée : table primaire du lien Du point de vue de la table qui référence (T1) :

– FOREIGN KEY (T1) REFERENCES table(T2): clé étrangère => intégrité référentielle

Du point de vue de la table référencée (T2) :– Modification de la clé primaire => effets sur les autres tables

utilisant cette clé comme clé étrangère ?– REFERENCES complétée par ON UPDATE ou ON DELETE

Page 58: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200458

Les contraintes d'intégrité

RESTRICT : échec de la modification ou suppression de la clé primaire

CASCADE : modification ou suppression des lignes correspondantes en cascade

SET NULL : mettre NULL SET DEFAULT : mettre la valeur par défaut

Page 59: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200459

Gestion des transactions

Plusieurs utilisateurs peuvent accéder à la base de données de façon concurrente, "en même temps".

– Exemple : un même système de réservations de billets d'avions est utilisé en concurrence par des centaines d'employés d'agences de voyage.

Ce concept pose des problèmes quant à la cohérence et l'intégrité de la base de données.

Le SGBD devra donc gérer les utilisations concurrentes sur les données avec le plus d'efficacité possible.

Page 60: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200460

Gestion des transactions

Une transaction est un ensemble de requêtes élémentaires sur les données d'une base.

– Exemple : vente de produit à un client = 2 parties mise à jour de l'inventaire en soustrayant la quantité vendue du

produit, et mise à jour de la table des encaissements à réaliser pour facturer

le client.

Fin de transaction :– COMMIT : Validation. – ROLLBACK : suite à un echec, le SGBD doit revenir à l'état

précédant le début de l’action. Ceci est fait automatiquement par la commande ROLLBACK.

Page 61: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200461

Administration d'une Base de Données

GESTION DES DROITS – protéger les données de la base contre les accès non autorisés

enregistrer et authentifier les utilisateurs définir des autorisations de manipulation des objets de la base par

les utilisateurs (relation, vue, contrainte d'intégrité, index)

LES DIFFERENTS UTILISATEURS – ADMINISTRATEUR BD

possède tous les droits – UTILISATEURS PRIVILEGIES

peuvent créer des relations – UTILISATEURS FINAUX

peuvent manipuler des relations

Page 62: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200462

Les différents droits sur une relation

DROIT D'INTERROGATION DROIT DE MISE A JOUR (insertion,

modification, suppression de tuples) DROIT D'ADMINISTRATION (déclaration de

clés, définition d'index, modif. / suppression du schéma, transmission des droits)

DROIT DE CREATION (création schéma relation)

Page 63: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200463

Droits sur une relation

EXPRESSION DES DROITS EN SQL – DROITS GERES PAR SQL

-> droits de manipulation des relations de base et des vues

– ATTRIBUTION DE DROITS grant <droits> on <relation> to <usagers>

– grant SELECT on VINS to Grobuveur

– REVOCATION DES DROITS (SQL2) revoke <droits > on < relation > to <usagers>

– revoke SELECT on VINS to grobuveur

Page 64: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200464

Le mode Client-Serveur

Serveur : serveur de ressources communes Client : logiciel qui accède au serveur

Besoin de permettre la connexion de n’importe quel type de client avec n’importe quel type de serveur Naissance de protocoles comme ODBC (Open DataBase Connectivity) ou JDBC (Java DataBase Connectivity)

Logiciel

Client

Machine A

UtilisateurLogiciel

Serveur

Machine B

requête

réponse

Page 65: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200465

Le mode Client-Serveur

permettent de traduire les requêtes du logiciel client en ordres exploitables par le serveur puis à traduire le format des données renvoyées par le serveur en données manipulables par le client

Problème : le choix du bon constructeur. Que mettre dans le client et que mettre sans le serveur ?

Page 66: Maria Berger - Maîtrise d'AES 2003-2004 1 Le langage SQL Histoire – langages pour les BD relationnelless incluant toutes les possibilités de l'algèbre.

Maria Berger - Maîtrise d'AES 2003-200466

ODBC : accès aux bases de données dans le monde de Microsoft

Le mode Client-Serveur