Académique Documents
Professionnel Documents
Culture Documents
Le langage SQL
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
Le langage SQL
Introduction
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
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)
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
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
Le langage SQL
Dfinition et modification de schma Dfinition de contraintes d'intgrit Dfinition de vues Dfinition d'autorisations
Le langage SQL
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
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
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
Le langage SQL
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>
Le langage SQL
Vins
Viticulteurs
Commandes
Buveurs
14
Le langage SQL
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
Le langage SQL
16
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
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
Le langage SQL
<liste rsultat> ::= * | <expression de valeur> [ { , <expression de valeur> } ] <liste de rfrences de relation> ::= <rfrence de relation> [ { , <rfrence de relation> } ]
19
Le langage SQL
20
10
Le langage SQL
Slection d'attributs
Q2 :
SELECT FROM
21
Le langage SQL
Q3 :
Donner les diffrents crus, annes et degrs des vins sans doubles.
SELECT FROM
22
11
Le langage SQL
23
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
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
Le langage SQL
13
Le langage SQL
27
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
Le langage SQL
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
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
Le langage SQL
31
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
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
Le langage SQL
SELECT
34
17
Le langage SQL
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
Le langage SQL
SELECT
36
18
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
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
Le langage SQL
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
Le langage SQL
Q14 : Calculer le degr moyen pour chaque cru. SELECT FROM GROUP BY CRU, AVG (DEGRE), COUNT (*) VINS CRU
40
20
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
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
Le langage SQL
GROUP BY NUMB
43
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
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
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
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>
47
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
Le langage SQL
Suppression
DELETE FROM <nom de relation> DELETE FROM <nom de relation> [[WHERE <expression de recherche> ]] WHERE <expression de recherche>
49
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
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
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
Le langage SQL
53
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
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
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
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
Le langage SQL
SQL3
Fonctionnalits objets Procdures externes Types de donnes abstraits Sous-tables et gnralisation
58
29
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