Vous êtes sur la page 1sur 30

Bases de donnes relationnelles

Le langage SQL

Le langage Le langage de requtes de requtes SQL SQL

Bases de donnes relationnelles

Le langage SQL

Plan

1. Introduction 2. Dfinition des donnes 3. Manipulation des donnes 4. Recherches 5. Mises jour 6. Programmation 7. Normalisation et extensions

Bases de donnes relationnelles

Le langage SQL

Introduction

SQL est un langage assertionnel L'utilisateur dcrit le rsultat obtenir

SQL est non procdural C'est le SGBD qui dtermine l'enchanement

Bases de donnes relationnelles

Le langage SQL

Normalisation et extensions
SQL est driv de l'algbre relationnelle et de SEQUEL (System R 74) Il a t intgr SQL/DS et DB2. Il existe trois versions normalises : SQL-86 version minimale SQL-89 addendum (intgrit) SQL-92 Une version SQL-3 tendue est en prparation. Peu de systmes supportent SQL2 complet

Bases de donnes relationnelles

Le langage SQL

Organisation du langage
SQL comprend quatre parties : Le langage de dfinition de schma (Tables, Vues, Droits) Le langage de manipulation des donnes (Slection et mises jour) La spcification de modules appelables (Procdures et contrles) L'intgration aux langages de programmation (Curseurs)

Bases de donnes relationnelles

Le langage SQL

Possibilits du langage
Dfinition et modification de schmas Dfinition de contraintes d'intgrit Dfinition de vues Dfinition d'autorisations Manipulation ensembliste Manipulation tuple tuple Contrle de transactions

Bases de donnes relationnelles

Le langage SQL

Commandes de SQL1 - 86
Dfinition des donnes CREATE TABLE CREATE VIEW GRANT Manipulation des donnes SELECT INSERT UPDATE DELETE Programmation OPEN FETCH CLOSE Contrle des donnes COMMIT ROLLBACK

Bases de donnes relationnelles

Le langage SQL

Dfinition des donnes

Dfinition et modification de schma Dfinition de contraintes d'intgrit Dfinition de vues Dfinition d'autorisations

Bases de donnes relationnelles

Le langage SQL

Grammaire d'un langage


On utilise une notation base sur la BNF (Backus Naur Form) On dfinit la grammaire du langage l'aide un ensemble de rgles (clauses) Chaque rgle a un nom not entre < > <il pleut> La dfinition de la rgle est indique par ::= <il pleut> ::= Une rgle peut tre constante <il pleut> ::= "Il pleut" Une rgle peut offrir un choix indiqu par | <il pleut> ::= "Il pleut" | "Il flotte"

Bases de donnes relationnelles

Le langage SQL

Raccourcis syntaxiques
Partie optionnelle note [ ] Dfinition : A [ B ] ::= A B | A <il pleut> ::= "Il pleut" [ "beaucoup" ]

Groupement not { } ou [ ] Dfinition : A { B | C } ::= A B | A C <il pleut> ::= "Il" { "pleut" | "flotte" } [ "un peu" | "beaucoup" ]

Rptition note { } Dfinition : A ::= | A | A A | A A A | <il pleut> ::= "Il pleut" { "Il pleut" }

10

Bases de donnes relationnelles

Le langage SQL

Drivation
On peut utiliser une rgle dans la dfinition d'une autre rgle <expr> ::= <terme> | <expr> { + | - } <terme> <terme> ::= <fact> | <terme> { * | / } <fact> <fact> ::= [ + | - ] <prim> Les dfinitions peuvent tre rcursives <prim> ::= <const> | <var> | ( <expr> )

11

Bases de donnes relationnelles

Le langage SQL

Cration du schma
CREATE SCHEMA <clause d'autorisation> CREATE SCHEMA <clause d'autorisation> [[{{<lment de schma> } ]] <lment de schma> }

<clause d'autorisation> ::= AUTHORIZATION <identifiant du propritaire> <lment de schma> ::= <dfinition de relation> | <dfinition de vue> | <dfinition de droit>

12

Bases de donnes relationnelles

Le langage SQL

Cration d'une relation


CREATE TABLE <nom de relation> CREATE TABLE <nom de relation> ((<lment de relation> [[{{, ,<lment de relation> } ]])) <lment de relation> <lment de relation> }

SQL-86 : <lment de relation> ::= <dfinition d'attribut> <dfinition d'attribut> ::= <nom d'attribut> <type de donne> [ NOT NULL [ UNIQUE ] ] <dfinition de contrainte> ::= UNIQUE ( <nom d'attribut> [ { , <nom d'attribut> } ] ) 13 | <dfinition de contrainte>

Bases de donnes relationnelles

Le langage SQL

Base de donnes exemple


VINS (NUMV, CRU, ANNEE, DEGRE, NUMVT, PRIX) VITICULTEURS (NUMVT, NOM, PRENOM, VILLE) BUVEURS (NUMB, NOM, PRENOM, VILLE) COMMANDES (NUMC, NUMV, NUMB, DATE, QTE)

Vins

Viticulteurs

Commandes

Buveurs

14

Bases de donnes relationnelles

Le langage SQL

Exemple de cration de relation


Les possibilits de SQL-86 sont trs limites

CREATE TABLE COMMANDES ( NUMC INTEGER NOT NULL UNIQUE, NUMV INTEGER NOT NULL, NUMB INTEGER NOT NULL, DATE CHARACTER (8) NOT NULL, UNIQUE (NUMV, NUMB, DATE), QTE DECIMAL (15, 2) )

15

Bases de donnes relationnelles

Le langage SQL

Manipulation des donnes


Manipulation ensembliste Utilisation d'une expression logique spcifiant l'ensemble des tuples insrer, rechercher, modifier ou dtruire. Manipulation tuple tuple Insertion directe d'une valeur de tuple dans une relation. Dclaration et utilisation d'un curseur - un pointeur courant - sur un ensemble pour rechercher, modifier, dtruire le tuple courant.

16

Bases de donnes relationnelles

Le langage SQL

Manipulation ensembliste
SELECT : recherche de tuple(s) satisfaisant une condition (expression de qualification) INSERT : insertion dans une relation de tuple(s) obtenus par recherche dans la base

DELETE : suppression de tuple(s) satisfaisant une condition UPDATE : modification de tuple(s) satisfaisant une condition

17

Bases de donnes relationnelles

Le langage SQL

Recherche
La syntaxe de base est fonde sur le bloc SELECT FROM WHERE

Les blocs peuvent tre imbriqus Uniquement dans la clause where en SQL1 Au niveau externe des blocs peuvent tre lis Uniquement par union en SQL1

18

Bases de donnes relationnelles

Le langage SQL

Syntaxe dune recherche simple


SELECT [[DISTINCT | | ALL ]] <liste rsultat> SELECT DISTINCT ALL <liste rsultat> FROM <liste de rfrences de relation> FROM <liste de rfrences de relation> [[WHERE <expression de recherche> ]] WHERE <expression de recherche>

<liste rsultat> ::= * | <expression de valeur> [ { , <expression de valeur> } ] <liste de rfrences de relation> ::= <rfrence de relation> [ { , <rfrence de relation> } ]

19

Bases de donnes relationnelles

Le langage SQL

Slection de tuples (restriction)


Q1 : Donner les Beaujolais. * VINS CRU = 'Beaujolais'

SELECT FROM WHERE

Simplicit et productivit de SQL Simplicit et productivit de SQL

20

10

Bases de donnes relationnelles

Le langage SQL

Slection d'attributs

Q2 :

Donner les diffrents crus, annes et degrs des vins.

SELECT FROM

CRU, ANNEE, DEGRE VINS

21

Bases de donnes relationnelles

Le langage SQL

Utilisation de DISTINCT (projection)

Q3 :

Donner les diffrents crus, annes et degrs des vins sans doubles.

SELECT FROM

DISTINCT CRU, ANNEE, DEGRE VINS

22

11

Bases de donnes relationnelles

Le langage SQL

Slection sur plusieurs relations (jointure)


Q4 : Donner le nom des viticulteurs avec les crus qu'ils produisent.

SELECT FROM WHERE

DISTINCT NOM, PRENOM, CRU VITICULTEURS, VINS VITICULTEURS.NUMVT = VINS.NUMVT

23

Bases de donnes relationnelles

Le langage SQL

Interprtation algbrique
SELECT <liste des attributs projets Ai> SELECT <liste des attributs projets Ai> FROM <liste des relations touches Rj> FROM <liste des relations touches Rj> WHERE <expression de recherche E> WHERE <expression de recherche E>

Expression algbrique quivalente pour une requte simple (en l'absence de sous-requte imbrique) : PROJECTIONAi ( RESTRICTIONE ( PRODUIT ( Rj ) )

24

12

Bases de donnes relationnelles

Le langage SQL

Expression de recherche
Comparaison (restriction ou jointure) Recherche par intervalle Recherche dans une liste Recherche textuelle Recherche sur valeur nulle Recherche quantifie

25

Bases de donnes relationnelles

Le langage SQL

Expression de recherche complexe


Q5 : Donner les numros des vins de plus de 20 parmi les Beaujolais 80, 82 ou 83 de degr compris entre 11,0 et 12,4 ou alors parmi les vins de vigneron connu. SELECT FROM WHERE AND ( ( AND AND NUMV VINS PRIX > 20.00 DEGRE BETWEEN 11.0 AND 12.4 ANNEE IN (1980, 1982, 1983) CRU LIKE '%Beaujolais%' ) OR NUMVT IS NOT NULL ) 26

13

Bases de donnes relationnelles

Le langage SQL

Requte sur plusieurs relations


Q6 : Donner les noms des buveurs ayant command des Beaujolais. SELECT FROM WHERE AND AND DISTINCT BUVEURS.NUMB, NOM, PRENOM BUVEURS, COMMANDES, VINS BUVEURS.NUMB = COMMANDES.NUMB COMMANDES.NUMV = VINS.NUMV CRU = 'Beaujolais'

27

Bases de donnes relationnelles

Le langage SQL

Utilisation de variables

Q6' : Donner les noms des buveurs ayant command des Beaujolais. SELECT FROM WHERE AND AND DISTINCT B.NUMB, B.NOM, B.PRENOM BUVEURS B, COMMANDES C, VINS V B.NUMB = C.NUMB C.NUMV = V.NUMV V.CRU = 'Beaujolais' obligatoire optionnel

28

14

Bases de donnes relationnelles

Le langage SQL

Plusieurs variables sur une mme relation


Avec le schma suivant : EMPLOYE (NUM, NOM, PRENOM, , RESP, ) o RESP dsigne un autre employ responsable

Q7 :

Donner les noms et prnoms des employs dont le salaire est suprieur celui de leur responsable. E.NOM, E.PRENOM EMPLOYE E, EMPLOYE R E.RESP = R.NUM E.SALAIRE > R.SALAIRE 29

SELECT FROM WHERE AND

Bases de donnes relationnelles

Le langage SQL

Requtes imbriques
Q8 : Donner le nom des viticulteurs qui produisent du Julinas. SELECT FROM WHERE FROM WHERE NOM, PRENOM VITICULTEURS NUMVT IN ( NUMVT VINS CRU = 'Julinas' ) Bloc imbriqu constant

SELECT

Forme intuitive pour requte simple Forme intuitive pour requte simple Limite la puissance dune semi-jointure Limite la puissance dune semi-jointure

30

15

Bases de donnes relationnelles

Le langage SQL

Forme "plate" quivalente


Q9 : Donner le nom des viticulteurs qui produisent du Julinas. DISTINCT VT.NUMVT, VT. NOM, VT. PRENOM VITICULTEURS VT, VINS V VT.NUMVT = V.NUMVT V.CRU = 'Julinas'

SELECT FROM WHERE AND

Attention aux doubles !! Attention aux doubles

31

Bases de donnes relationnelles

Le langage SQL

Interprtation logique
SELECT < liste des attributs projets V1.A1, ,Vp.Ap > SELECT < liste des attributs projets V1.A1, ,Vp.Ap > FROM < liste des relations touches V1 R1, , Vn Rn > FROM < liste des relations touches V1 R1, , Vn Rn > WHERE < expression de recherche Ei (V1, , Vn) > WHERE < expression de recherche Ei (V1, , Vn) >

EXPRESSION LOGIQUE QUIVALENTE (Au nombre de doubles prs) { (V1.A1, ,Vp.Ap) | V1 R1, , Vp Rp, $ Vp+1 Rp+1, , $ Vn Rn, Ei (V1, , Vn) }

32

16

Bases de donnes relationnelles

Le langage SQL

Quantificateur existentiel
Q10 : Donner les noms des crus commands par au moins un buveur. SELECT FROM WHERE FROM WHERE DISTINCT CRU VINS V EXISTS ( * COMMANDES C C.NUMV = V.NUMV )

SELECT

SQL comprend une expression de SQL comprend une expression de quantification existentielle explicite quantification existentielle explicite

33

Bases de donnes relationnelles

Le langage SQL

Rfrence externe un bloc


Q10 : Donner les noms des crus commands par au moins un buveur. SELECT FROM WHERE FROM WHERE DISTINCT CRU VINS V EXISTS ( * COMMANDES C C.NUMV = V.NUMV ) Bloc imbriqu fonction de V

SELECT

34

17

Bases de donnes relationnelles

Le langage SQL

Forme existentielle implicite


Q10' : Donner les noms des crus commands par au moins un buveur. SELECT FROM WHERE DISTINCT V.CRU VINS V, COMMANDES C C.NUMV = V.NUMV

Dans Q7', la variable C ne figure pas dans le rsultat Dans Q7', la variable C ne figure pas dans le rsultat Elle est implicitement prfixe par un Elle est implicitement prfixe par un quantificateur $ . . quantificateur $ Un SELECT DISTINCT est quivalent une expression du Un SELECT DISTINCT est quivalent une expression du calcul de tuple. calcul de tuple. {{V.CRU | | V VINS, $ C COMMANDES, (C.NUMV = V.NUMV) }} V.CRU V VINS, $ C COMMANDES, (C.NUMV = V.NUMV)

35

Bases de donnes relationnelles

Le langage SQL

Forme existentielle ngative


Q11 : Donner les noms des crus qui n'ont t commands par aucun buveur. SELECT FROM WHERE FROM WHERE DISTINCT CRU VINS V NOT EXISTS ( * COMMANDES C C.NUMV = V.NUMV )

SELECT

36

18

Bases de donnes relationnelles

Le langage SQL

Quantificateur universel
Q12 : Donner les noms des buveurs qui ont command tous les vins de la base. SELECT NOM, PRENOM FROM BUVEURS B WHERE NOT EXISTS ( SELECT * FROM VINS V WHERE NOT EXISTS ( SELECT * FROM COMMANDES C WHERE B.NUMB = C.NUMB AND C.NUMV = V.NUMV ) )

37

Bases de donnes relationnelles

Le langage SQL

Fonctions d'agrgation
Q13 : Donner la moyenne des degrs des Julinas. SELECT FROM WHERE AVG (DEGRE), COUNT (*) VINS CRU = 'Julinas'

38

19

Bases de donnes relationnelles

Le langage SQL

SELECT : forme gnrale

SELECT [[DISTINCT | | ALL ]] <liste rsultat> SELECT DISTINCT ALL <liste rsultat> FROM <liste de rfrences de relation> FROM <liste de rfrences de relation> [[WHERE <expression de recherche> ]] WHERE <expression de recherche> [[GROUP BY <rf. d'attribut> [[{{, ,<rf. d'attribut> } ]] GROUP BY <rf. d'attribut> <rf. d'attribut> } [[HAVING <expression de recherche> ]] HAVING <expression de recherche> [[ORDER BY <ref colonne> [[{{, ,<ref colonne> } ]] ORDER BY <ref colonne> <ref colonne> }

39

Bases de donnes relationnelles

Le langage SQL

Groupement des agrgations

Q14 : Calculer le degr moyen pour chaque cru. SELECT FROM GROUP BY CRU, AVG (DEGRE), COUNT (*) VINS CRU

40

20

Bases de donnes relationnelles

Le langage SQL

Slection de groupe
Q15 : Calculer le degr moyen pour tous les crus pour lesquels il y a au moins 10 vins. SELECT FROM GROUP BY HAVING CRU, AVG (DEGRE) VINS CRU COUNT (*) >= 10

Clause WHERE --> slection des tuples Clause WHERE --> slection des tuples Clause HAVING --> slection des groupes entiers Clause HAVING --> slection des groupes entiers

41

Bases de donnes relationnelles

Le langage SQL

Expression de valeurs
Rfrences d'attributs Calculs arithmtiques + - * / Fonctions agrgats Compte, somme, moyenne, min et max Manipulation de chanes de caractres Expressions rgulires

42

21

Bases de donnes relationnelles

Le langage SQL

Agrgation et requte imbrique


Q16 : Donner le nom des buveurs ayant command plus de 10 litres d'alcool pur en 1988. SELECT FROM WHERE SELECT FROM WHERE AND HAVING NOM BUVEURS NUMB IN ( NUMB COMMANDES, VINS DATE LIKE '%88' COMMANDES.NUMV = VINS.NUMV SUM (QTE * DEGRE / 100) > 10 )

GROUP BY NUMB

43

Bases de donnes relationnelles

Le langage SQL

Mises jour

INSERT :

insertion dans une relation de tuple(s) obtenus par recherche dans la base

DELETE : suppression de tuple(s) satisfaisant une condition UPDATE : modification de tuple(s) satisfaisant une condition

44

22

Bases de donnes relationnelles

Le langage SQL

Insertion
INSERT INTO <nom de relation> [[((<liste d'attributs cibles> ))]] INSERT INTO <nom de relation> <liste d'attributs cibles> {{VALUES ((<liste de valeurs insrer> )) | | <spcif. de recherche> }} VALUES <liste de valeurs insrer> <spcif. de recherche>

<liste d'attributs cibles> ::= <nom d'attribut> [ { , <nom d'attribut> } ] <liste de valeurs insrer> := <valeur insrer> [ { , <valeur insrer> } ] <valeur insrer> ::= NULL | <spcif. de valeur>

45

Bases de donnes relationnelles

Le langage SQL

Exemples d'insertion
Insertion (partielle) d'un vin particulier INSERT INTO VINS (NUMV, CRU, ANNEE) VALUES (112, 'Julinas', NULL) Les viticulteurs Dijonnais sont des buveurs INSERT INTO BUVEURS SELECT FROM WHERE * VITICULTEURS VILLE = 'Dijon'

46

23

Bases de donnes relationnelles

Le langage SQL

Modification
UPDATE <nom de relation> UPDATE <nom de relation> SET <affectation> [[{{, ,<affectation> } ]] SET <affectation> <affectation> } [[WHERE <expression de recherche> ]] WHERE <expression de recherche>

<affectation> ::= <nom d'attribut> = NULL | <expression de valeur>

47

Bases de donnes relationnelles

Le langage SQL

Exemples de modification
Les Julinas 1994 font 12 degr. UPDATE SET WHERE AND VINS DEGRE = 12 CRU = 'Julinas' ANNEE = 1994

10 % gratuit sur les commandes de Volnay 1993. UPDATE SET WHERE SELECT FROM WHERE AND COMMANDES QTE = QTE * 1.1 NUMV IN ( NUMV VINS CRU = 'Volnay' ANNEE = 1993 ) 48

24

Bases de donnes relationnelles

Le langage SQL

Suppression
DELETE FROM <nom de relation> DELETE FROM <nom de relation> [[WHERE <expression de recherche> ]] WHERE <expression de recherche>

49

Bases de donnes relationnelles

Le langage SQL

Exemple de suppression
Supprimer les commandes de vins de degr inconnu. DELETE FROM COMMANDES WHERE NUMV IN ( SELECT NUMV FROM VINS WHERE DEGRE IS NULL )

50

25

Bases de donnes relationnelles

Le langage SQL

Programmation
Les langages relationnels manipulent les donnes par ensembles Les langages de programmations manipulent les donnes par boucle de programme Il y a incompatibilit d'humeur Solution SQL les curseurs

Un curseur dcrit une position courante dans un Un curseur dcrit une position courante dans un ensemble de tuples dcrit par une expression de ensemble de tuples dcrit par une expression de recherche SQL recherche SQL

51

Bases de donnes relationnelles

Le langage SQL

Curseurs
Un curseur est manipul par des commandes spcifiques DECLARE <nom de curseur> CURSOR FOR <expression de recherche OPEN <nom de curseur> CLOSE <nom de curseur>

Plusieurs commandes permettent d'accder au tuple courant et de modifier la position du curseur FETCH <nom de curseur> INTO UPDATE <nom de relation> SET WHERE CURRENT OF <nom de curseur> DELETE FROM <nom de relation> WHERE CURRENT OF <nom de curseur> 52

26

Bases de donnes relationnelles

Le langage SQL

Utilisation de SQL depuis un LP


Programme PL/1-SQL
EXEC SQL BEGIN DECLARE SECTION ; DCL VAR1 CHAR(20) ; DCL VAR2 INT ; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE C1 CURSOR FOR SELECT FROM WHERE :VAR1 ; EXEC SQL OPEN C1 ; DO WHILE SQLCODE = 0 BEGIN EXEC SQL FETCH C1 INTO :VAR2 ; END

53

Bases de donnes relationnelles

Le langage SQL

Normalisation et extensions
SQL est driv de l'algbre relationnelle et de SEQUEL (System R 74) Il a t intgr SQL/DS et DB2. Il existe trois versions normalises : SQL-86 version minimale SQL-89 addendum (intgrit) SQL-92 Une version SQL-3 tendue est en prparation. Peu de systmes supportent SQL2 complet

54

27

Bases de donnes relationnelles

Le langage SQL

SQL2 (SQL-92)

SQL2, trois niveaux sont distingus : SQL2 entre SQL-89 + corrections SQL2 intermdiaire Complments relationnels SQL2 complet Gadgets en plus

55

Bases de donnes relationnelles

Le langage SQL

SQL2 intermdiaire

Type de donnes dates avec oprateurs correspondants Cascade des mises jour par intgrit rfrentielle Diffrents alphabets et ordres lexicographiques Possibilit de crer des domaines Jointure externe Union [externe], intersection, diffrence

56

28

Bases de donnes relationnelles

Le langage SQL

SQL2 complet

Extension des dates et du temps Expressions tendues avec correspondances de colonnes Possibilit de SELECT en argument d'un FROM Vues concrtes (implmentes) Contraintes d'intgrit multi-tables Contrles d'intgrit diffrs

57

Bases de donnes relationnelles

Le langage SQL

SQL3
Fonctionnalits objets Procdures externes Types de donnes abstraits Sous-tables et gnralisation

Fonctionnalits dductives Union rcursive Dclencheurs Paralllisme Requtes asynchrones au programme

58

29

Bases de donnes relationnelles

Le langage SQL

Conclusion
Un standard de plus en plus complet et de plus en plus suivi Attention aux approximations et imitations fausses Tout existe dans les propositions SQL2/3 Une rfrence pour implmenter / utiliser chaque aspect des BD Le langage de communication inter-systme SQL - CLI (protocole client / serveur) RDA (remote data access, protocole BD distante) TP (transaction processing, excution rpartie)

Le langage universel sur lequel s'appuient les progiciels Le langage universel sur lequel s'appuient les progiciels

59

30

Vous aimerez peut-être aussi