Vous êtes sur la page 1sur 28

LE LANGAGE DE REQUETES

SQL
Origines et Evolutions
SQL1 86: la base
SQL1 89: l'intgrit

1. Origines et Evolutions
SQL est driv de l'algbre relationnelle et de SEQUEL
Il a t intgr SQL/DS, DB2, puis ORACLE,
INGRES,
Il existe trois versions normalises, du simple au
complexe :

SQL1 86 version minimale


SQL1 89 addendum (intgrit)
SQL2 (92) langage complet 3 niveaux

Une version 3 tendue (objets, rgles) est la norme 99.


La plupart des systmes supportent SQL2 complet
G. Gardarin

Oprations
Oprations de base

SELECT, INSERT, UPDATE, DELETE

Oprations additionnelles

G. Gardarin

dfinition et modification de schmas


dfinition de contraintes d'intgrit
dfinition de vues
accord des autorisations
gestion de transactions

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

G. Gardarin

SQL1 - 86
LANGAGE DE DEFINITIONS DE DONNEES

CREATE TABLE
CREATE VIEW

LANGAGE DE MANIPULATION DE DONNEES

SELECT
INSERT
UPDATE
DELETE

OPEN
FETCH
CLOSE

LANGAGE DE CONTROLE DE DONNEES

G. Gardarin

GRANT et REVOKE
BEGIN et END TRANSACTION
COMMIT et ROLLBACK

Base de Donnes
Collection de tables et de vues dans un schma
VITICULTEURS (NVT, NOM, PRENOM, VILLE, REGION)
VINS (NV, CRU, MILLESIME, DEGRE, NVT, PRIX)
BUVEURS (NB, NOM, PRENOM, VILLE)
ABUS (NV, NB,DATE,QTE)
GROS_BUVEURS (NB, NOM, PRENOM)
G. Gardarin

2. SELECT: Forme Gnrale

SELECT <liste de projection>


FROM <liste de tables>
[WHERE <critre de jointure> AND <critre de restriction>]
[GROUP BY <attributs de partitionnement>]
[HAVING <citre de restriction>]

Restriction :

arithmtique (=, <, >, )


textuelle (LIKE)
sur intervalle (BETWEEN)
sur liste (IN)

Possibilit de blocs imbriqus par :

G. Gardarin

IN, EXISTS, NOT EXISTS, ALL, SOME, ANY

Exemples de Questions (1)


Q1: Crus des vins sans doubles.

SELECT DISTINCT CRU


FROM VINS

Q2: Noms des buveurs ayant bus des Beaujolais 97 ou 98

G. Gardarin

SELECT DISTINCT NOM


FROM BUVEURS B, VINS V, ABUS
WHERE B.NB = ABUS.NB
AND ABUS.NV = V.NV
AND CRU LIKE '%BEAUJOLAIS%'
AND MILLESIME IN (1997, 1998)

Exemples de Questions (2)


Q3 : Noms et prnoms des buveurs de vins dont le cru commence par
B, de degr inconnu ou compris entre 11 et 13.

SELECT NOM, PRENOM


FROM BUVEURS B, VINS V, ABUS A
WHERE B.NB = A.NB AND A.NV = V.NV
AND CRU LIKE "B%"
AND (DEGRE BETWEEN 11 AND 13 OR DEGRE IS NULL)

Q4 : Noms des crus bus par au moins un buveurs.

G. Gardarin

SELECT DISTINCT CRU


FROM VINS V
WHERE EXISTS ( SELECT *
FROM BUVEURS B, ABUS A
WHERE B.NB = A.NB AND A.NV = V.NV )

Exemples de Questions (3)


Q5: Calculer le degr moyen pour chaque cru.

SELECT CRU, AVG(DEGRE)


FROM VINS
GROUP BY CRU

Q6 : Calculer le degr moyen et le degr minimum pour tous les


crus de 94 dont le degr minimum est suprieur 12.

G. Gardarin

SELECT CRU, AVG(DEGRE), MIN(DEGRE)


FROM VINS
WHERE MILLESIME = 1994
GROUP BY CRU
HAVING MIN(DEGRE) > 12

Forme gnrale de la condition


<search condition> ::= [NOT]
<nom_colonne> constante <nom_colonne>
<nom_colonne> LIKE <modle_de_chane>
<nom_colonne> IN <liste_de_valeurs>
<nom_colonne> (ALL ANY SOME) <liste_de_valeurs>
EXISTS <liste_de_valeurs>
UNIQUE <liste_de_valeurs>
<tuple> MATCH [UNIQUE] <liste_de_tuples>
<nom_colonne> BETWEEN constante AND constante
<search condition> AND OR <search condition>
avec
::= < = >
Remarque: <liste_de_valeurs> peut tre dynamiquement dtermine par une requte
G. Gardarin

Requtes imbriques (1)


Q7: Donner les crus des vins qui n'ont jamais t
commands
SELECT CRU
FROM VINS V
WHERE V.V# NOT IN (
SELECT C.V#
FROM COMMANDES C )

G. Gardarin

SELECT CRU
FROM VINS V
WHERE V.V# <> ALL (
SELECT C.V#
FROM COMMANDES C )

Requtes imbriques (2)


Q8 : Donner le nom des buveurs qui n'ont pas bu tous les
vins == A VERIFIER
SELECT NOM
FROM BUVEURS B
WHERE EXISTS (
SELECT *
FROM VINS V
WHERE NOT EXISTS (
SELECT *
FROM COMMANDES C
WHERE V.V# = C.V#
AND C.B# = B.B#) )
G. Gardarin

Requtes imbriques (3)


Q9: Donner le numro et le cru des vins
commands exactement une fois
SELECT V#, CRU
FROM VINS
WHERE V# MATCH UNIQUE (
SELECT V#
FROM COMMANDES )
G. Gardarin

Requte Union
Q10 :Donner le numro et le cru des vins commands plus
de 100 fois ou bien jamais commands
( SELECT V.V#, V.CRU
FROM VINS V, COMMANDES C
WHERE V.V# = C.V#
GROUP BY V.V#
HAVING COUNT(C.C#) > 100 )
UNION
( SELECT V#, CRU
FROM VINS
WHERE V# NOT IN (SELECT V# FROM COMMANDES) )
G. Gardarin

Utilisation de SQL
depuis un langage de prog.
Intgration de deux systmes de types

utilisation d'un pr-compilateur et d'une librairie

Passage de l'ensembliste au tuple tuple

utilisation de curseurs et Fetch

SELECT

Exemple Program PL/1-SQL

G. Gardarin

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

Curseur

SGBD

3. Les Mises Jour


INSERT

Insertion de lignes dans une table


Via formulaire o via requtes

UPDATE

Modification de lignes dans une table

DELETE

G. Gardarin

Modification de lignes dans une table

Commande INSERT
INSERT INTO <relation name>
[( attribute [,attribute] )]
{VALUES <value spec.> [, <value spec.>] | <query spec.>}
Exemples

G. Gardarin

INSERT INTO VINS (NV, CRU, MILLESIME)


VALUES 112, "JULIENAS", NULL
INSERT INTO BUVEURS (NB,NOM,PRENOM)
SELECT NVT, NOM, PRENOM
FROM VITICULTEURS
WHERE VILLE LIKE '%DIJON%'

Commande UPDATE
UPDATE <relation name>
SET <attribute = {value expression | NULL}
[<attribute> = {value expression | NULL}]
[WHERE <search condition>]
EXEMPLE

G. Gardarin

UPDATE ABUS
SET QTE = QTE * 1.1
WHERE ABUS.NV IN
SELECT NV
FROM VINS
WHERE CRU = 'VOLNAY' AND MILLESIME = 1990

Commande DELETE
DELETE FROM <relation name>
[WHERE <search condition>]
EXEMPLE

G. Gardarin

DELETE FROM ABUS


WHERE NV IN
SELECT NV
FROM VINS
WHERE DEGRE IS NULL

4. Contraintes d'intgrit
Contraintes de domaine

Valeurs possibles pour une colonne

Contraintes de cls primaires

Cl et unicit

Contraintes rfrentielles(cl trangres)

G. Gardarin

Dfinition des liens inter-tables

SQL1 - 89 : INTEGRITE
VALEURS PAR DEFAUT

CREATE TABLE VINS


( NV INT UNIQUE,
CRU CHAR(10),
ANNEE INT,
DEGRE FIXED (5,2) ,
NVT INT,
PRIX FIXED(7,2) DEFAULT 40 )

CONTRAINTES DE DOMAINES

G. Gardarin

SALAIRE INT CHECK BETWEEN 6000 AND 100000

SQL1 - 89 :
Contrainte rfrentielle
Cl primaire et contrainte rfrentielle

CREATE TABLE VINS


( NV INT PRIMARY KEY,
CRU CHAR(10),
ANNEE INT,
DEGRE FIXED (5,2) ,
NVT INT REFERENCES VITICULTEURS,
PRIX DEFAULT 40 )

Rfrence en principe la cl primaire

G. Gardarin

celle de VITICULTEURS

SQL1 89 : Cration de table


CREATE TABLE <nom_table>
(<def_colonne> *
[<def_contrainte_table>*]) ;

< def_colonne > ::=


<nom_colonne> < type nom_domaine >
[CONSTRAINT nom_contrainte
< NOT NULL UNIQUE PRIMARY KEY
CHECK (condition) REFERENCES nom_table (liste_colonnes) > ]
< def_contrainte_table > ::= CONSTRAINT nom_contrainte
< UNIQUE (liste_colonnes) PRIMARY KEY (liste_colonnes)
CHECK (condition)
FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes) >
[NOT] DEFERRABLE

G. Gardarin

Autre cration de tables


CREATE TABLE EXPEDITIONS
( numExp INTEGER PRIMARY KEY
date_exp DATE,
qte QUANTITE,
CONSTRAINT refCom FOREIGN KEY numExp
REFERENCES COMMANDES (numCom) DEFERRABLE
);
L'association d'un nom une contrainte est optionnelle.
Ce nom peut tre utilis pour rfrencer la contrainte (ex: messages
d'erreurs).
G. Gardarin

5. CONCLUSION
SQL1 est un standard minimum
Les versions tendues:

SQL2 = Compltude relationnelle


SQL3 = Support de l'objet

Sont aujourd'hui intgres dans les grands SGBD

G. Gardarin

LA NORMALISATION DE SQL
Groupe de travail ANSI/X3/H2 et ISO/IEC JTC1/SC2
Documents ISO :

SQL1 - 86 : Database Language SQL X3.135 ISO-9075-1987)


SQL1 - 89 : Database Language SQL with Integrity Enhancement X3.168 ISO-90751989
SQL2 - 92 : Database Language SQL2 X3.135 ISO-9075-1992

Arguments pour :

Rduction des cots d'apprentissage


Portabilit des applications
Longvit des applications
Langage de communication inter-systmes

Arguments contre :

G. Gardarin

Manque de rigueur thorique


Affaiblit la crativit

POSITION DES VENDEURS


Problmes :

G. Gardarin

SQLCODE (0 ou <0 si
erreur)
Requtes imbriques
Dynamique SQL (Prepare,
Execute)
Mta-base normalise
Modles internes (Index,
Espaces,)

SQL
VENDEUR.1

SQL
SQL
VENDEUR.2

STANDARD

SQL
VENDEUR.3