Vous êtes sur la page 1sur 24

Le langage SQL

SQL est driv de l'algbre relationnelle et de SEQUEL du prototype de


SGBD relationnel SYSTEM/R (74-76).
Il a t intgr SQL/DS, DB2, puis ORACLE, INGRES,
Il existe 3 versions normalises (ISO), du simple au complexe :
SQL1 86 version minimale et SQL1 89 (+ intgrit).
SQL2 (92) langage complet 3 niveaux.
SQL3 98 : les volutions objets.
Oprations de base : recherche, insertion, mise jour, suppression.
Manipulation de donnes au format relationnel (LMD).
Un langage de manipulation (non procdural) :
emprunt l'algbre relationnelle et au calcul relationnel de tuples.
objets manipulables : identificateurs, tables, colonnes.
Les identificateurs: Ils servent dsigner les objets qu'ils
manipulent: utilisateurs, tables, colonnes, vues, index etc.
Les tables : les relations sont stockes sous forme de tables.
Les colonnes : les donnes stockes dans une colonne doivent 1avoir
le mme type, le nom complet est : <nom-table>.<nom-colonne>

SQL est un langage dimension triple :


Langage de Dfinitions de Donnes (Data Definition Language) :
commandes de SQL permettant de crer, modifier ou effacer la
dfinition (schma) d'une BD ou d'une table:
- CREATE TABLE .
- CREATE VIEW .
Langage de Manipulation de Donnes (Data Manipulation Language) :
interrogation et modification de l'information contenue dans les tables.
- SELECT, INSERT, UPDATE, DELETE,
- OPEN, FETCH, CLOSE.
Langage de contrle de donnes (Data Control Language):
scurit et confidentialit de la BD :
- GRANT et REVOKE.
- BEGIN et END TRANSACTION
- COMMIT et ROLLBACK.
Il permet aussi: - La spcification de modules appelables (Procdures).
2
- L'intgration aux langages de programmation (Curseurs).

Langage de Dfinition de Donnes


Cration de tables en SQL : CREATE TABLE <nom>
Cl trangre : - ON DELETE CASCADE ou ON DELETE SET NULL
- ON UPDATE CASCADE
Suppression dune table :

DROP TABLE <nom de la table>


Modification d'une table : Ajout d'une ou plusieurs colonnes:
ALTER TABLE nom_table ADD(nom_col1 TYPE1, nom_col2 TYPE2, ...);
option : [BEFORE nom_col_before]
Ex:

ALTER TABLE Etudiant ADD(Tel NUMBER(10,0) BEFORE NDep);

Modification dune colonne:


ALTER TABLE nom_table MODIFY(nom_col1 TYPE1, ...);
Ex: Nom>20caractres: ALTER TABLE Etudiant MODIFY(Nom Char(25));
Suppression d'une colonne : (Attention aux problmes d'intgrit!)
3

ALTER TABLE nom_table DROP nom_col;

Les vues : Une vue est une dfinition logique, sans stockage de donnes.
Seule la dfinition est stocke.
La cration de vue implante le concept de vue externe (VIEW) par
rapport au schma conceptuel (les TABLEs) :

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


AS SELECT ...; [with check option]
Usage : la vue est une table virtuelle.
Destruction :
DROP VIEW nom_vue
Insertion / Modification / Suppression : pas toujours possible.
Gestion des droits (Expression des droits en SQL):
Attribution et Rvocation des droits (SQL2).
Transmission des droits.
Droits grs par SQL: droits de manipulation des relations et des vues.
Les droits accords sont select, update, insert
GRANT ON {nomtable | nomvue} TO nom_user [WITH GRANT OPTION];
4
REVOKE PRIVILEGE ON {nom_table | nom_vue} FROM nom_user;

Numriques:
Exacts:

Les types donnes (SQL92)

INTEGER ou INT
SMALLINT
NUMERIC (p,s)
DECIMAL (p,s)
Non exacts
REAL
FLOAT (p)
Chanes de caractres: CHARACTER (x) ou CHAR(x)
CHARACTER VARYING (x) ou VARCHAR (x)
NATIONAL CHARACTERE ou NCHAR
(avec des caractres nationaux particuliers)
Chanes de bits:
BIT (X)
BIT VARYING (x)
Temporels:
DATE
TIME (x): x pour des chiffres aprs virgule pour les corrections
TIMESTAMP (x)
5
TIMESTAMP WITH TIME ZONE (cart UCT)

Langage de Manipulation de Donnes


SELECT <liste de projection> FROM <liste de tables>
[WHERE <critre de jointure> AND <critre de restriction>]
[GROUP BY <attributs de partitionnement>]
[HAVING <critre de restriction>]
[ORDER BY <liste attributs Al>]
Restriction :
= , != , < , > , <= , >=,
BETWEEN , IN , LIKE , IS [NOT] NULL , AND , OR
Possibilit de blocs imbriqus par :
IN , EXISTS , NOT EXISTS , ALL , SOME , ANY
Les jointures : Une jointure s'exprime gnralement en SQL en exprimant dans
la clause FROM l'ensemble des relations que l'on veut manipuler et dans la
clause WHERE l'expression (condition) de jointure.
Auto-jointure : Jointure dune relation avec elle mme.
ncessite l'utilisation de synonymes pour les relations.
Les sous-interrogations: (Les blocs SELECT imbriqus)
6
Objectif : Expression des jointures de manire procdurale.

Forme simple : Slection de tous les attributs de tous les tuples de la table
SELECT * FROM table

Restriction : Slection de certains attributs de certains les tuples de la table.

SELECT attribut1, attribut2, ... FROM table


WHERE qualification

Ex.

ATT Somme attribut


val11 val21
val31

Qualification:- peut combiner des prdicats.


- utilisation de AND, OR, NOT et de ( ).
Synonymes des attributs ou combinaisons dattributs :

SELECT attribut1 ATT, attribut2 + attribut3 Somme , attribut4

Oprations sur les attributs: SELECT fonction(attribut1), attrib2+attrib3,


Fonction : modification, lors de la restitution, de la valeur de lattribut ;
suivant le type, opration sur les nombres, les chanes de caractres, les dates,...
Elimination des doublons : DISTINCT (attribut)
Tri des rsultats :
SELECT attribut1, attribut2 FROM table

WHERE qualification ORDER BY attribut2, ...

Les jointures
Cas particulier simple: le produit cartsien
SELECT * FROM table1, table2,...
Rq.: Il peut y avoir plus de 2 tables.
Jointure avec qualification: restriction du produit cartsien
SELECT * FROM table1, table2
WHERE table1.atti = table2.attj
Ex: SELECT * FROM VOITURE V, CLIENT C WHERE V.NV = C.NV
Rque: Loprateur utilis est = , cest une quijointure.
Si les 2 attributs portent le mme nom, on est oblig de le prfixer par
le nom de la table, pour lever l'ambigut.
NV
1
2
2
3

Nom
Ali
Wafae
Reda
Zineb

NV
1
2
2
3

Marque
Renault
Ford
Ford
Peugeot

La jointure externe: note (+).


Se place dans la clause WHERE.
Lorsque lattribut risque dtre non valu dans lune des tables.
Accol lattribut dans la table o des valeurs risquent de manquer.
SELECT * FROM VOITURE V, CLIENT C WHERE V.NV (+) = C.NV

SELECT * FROM VOITURE V, CLIENT C WHERE V.NV = C.NV (+)


NV
1
2
3
4
NV
1
2
2
3
5

Nom
Ali
Wafae
Reda
Zineb
Med

Nom
Ali
Wafae
Reda
Zineb
Med

Marque
Renault
Ford
Peugeot
Toyota
NV
1
2
2
3

Marque
Renault
Ford
Ford
Peugeot

NV
1
2
2
3

Nom
Ali
Wafae
Reda
Zineb

NV
1
2
2
3
5
NV
1
2
2
3
4

Marque
Renault
Ford
Ford
Peugeot
9
Toyota

Autojointure : jointure dune table avec elle-mme. Ex.: Table Employes.


Utiliser 2 synonymes de la table pour prfixer sans ambigut les attributs.
SELECT E1.NEMP, E2.NRESP FROM EMPLOYES E1, EMPLOYES E2
WHERE E1.NRESP = E2.NEMP;

NEmp
1
2
3
4
5

Emploi
PDG
Directeur
Directeur
Ingnieur
Commercial

La sous interrogation :

NResp
1
1
3
3

NEmp
2
3
4
5

Resp
1
1
3
3

SELECT ... FROM ... WHERE Att1 = IN EXISTS


(SELECT FROM ... WHERE ...)

La partie droite dun prdicat peut tre remplace par le rsultat dun ordre
SELECT, condition que le rsultat du sous-SELECT soit compatible en
nombre et en type avec loprateur utilis.
10

Les oprateurs ensemblistes: Oprateurs binaires avec 2 relations de mme


schma en entre.
- UNION avec limination automatique des doublons.
- INTERSECT et EXCEPT
Agrgats ou fonctions : COUNT, SUM, AVG, MIN, MAX
Une fonction s'applique l'ensemble des valeurs d'une colonne d'une relation
Elles produisent une valeur unique.
Elles ne peuvent pas tre imbriques.
Elles ne peuvent pas tre dans une clause WHERE.
Elles ne peuvent tre que dans les clauses select et HAVING.
Questions quantifie : Prdicats ALL, ANY, EXISTS :
ALL teste si la valeur d'un attribut satisfait un critre de comparaison avec
tous les rsultats d'une sous-question.
ANY mme teste mais avec au moins un rsultat d'une sous-question.
Questions d'existence : Prdicat dexistence "EXISTS"
Tester si la rponse une sous-question est vide : EXISTS <sous-question>
Questions dappartenance : Prdicats IN
11
Permet de tester si la valeur dun terme appartient une liste.

Partitionnement horizontal d'une relation (ou GROUPEMENT):


Partitionnement selon les valeurs d'un attribut ou d'un groupe d'attributs qui
est spcifi dans la clause GROUP BY.
La relation est (logiquement) fragmente en groupes de tuples, o tous les
tuples de chaque groupe ont la mme valeur pour l'attribut (ou le groupe
d'attributs) de partitionnement.
Attention ne pas mlanger dans un SELECT un agrgat avec un attribut
classique. Un agrgat renvoie un rsultat unique alors qu'un attribut renvoie
un ensemble de rsultat. Le seul cas possible d'utilisation d'un tel mlange
est lorsqu'il y a une clause GROUP BY.
Fonctions sur les groupes : application possible de fonctions chaque groupe.
Restriction sur les groupes : application possible d'un critre de restriction sur
les groupes obtenus.
Clause HAVING
Clause WHERE : restriction sur les tuples d'une relation
Clause HAVING : restriction sur les groupes d'une relation obtenus
12 par la
clause GROUP BY

Insertion dun tuple dans la table:

INSERT INTO <relation name> [( attribute [,attribute] )]


{VALUES <value spec.> [, <value spec.>] | <query specification>}
Ex:

INSERT INTO VOITURE (NV, MARQUE) VALUES 10, "FIAT"


INSERT INTO VOITURE (CLIENT, NV)
SELECT NOM, NO FROM WHERE

Mise jour de tuples:


UPDATE <relation name> SET <attribute = {value expression | NULL}
[<attribute> = {value expression | NULL}] [WHERE <search condition>]
Ex.: UPDATE VOITURE SET PUISSANCE = 100 WHERE TYPE = 206
Suppression de tuples:
DELETE FROM <relation name> [WHERE <search condition>]
Ex.:

DELETE FROM CLIENT WHERE NOMC = Ali

13

Ex1: Soit le schma suivant :


IMMEUBLE (ADI, NBETAGES, DATEC, PROP)
APPIM (ADI, NAPR, OCCUP, TYPE, SUPER, ETAGE)
PERSONNE (NOM, AGE, PROF, ADR, NAPR)
COLE (NOMEC, ADEC, NBCLASSES, DIR)
CLASSE (NOMEC, NCL, MAITRE, NBEL)
ENFANT (NOMP, PRENOM, AN, NOMEC, NCL)
La relation IMMEUBLE dcrit un ensemble d'immeubles. Chaque immeuble a
un propritaire. APPIM dcrit pour chaque immeuble l'ensemble des
appartements qui le compose. Chaque appartement peut hberger plusieurs
personnes mais il y en a une qui est responsable (par exemple le locataire) et
qui est dsigne par le constituant OCCUP. Si l'appartement est inoccup, ce
constituant prend la valeur NULL. PERSONNE dcrit un ensemble de
personnes. ADR et NAPR reprsentent l'adresse o rside une personne. Une
personne peut avoir plusieurs enfants dcrits par la relation ENFANT. Les
coles et les classes sont dcrites dans les relations COLE et CLASSE. 14
- Proposez des cls primaires et trangres au schma prcdent ?

R1: Donner les noms des personnes qui ne sont pas propritaires.
R2: Donner le nom et la profession des propritaires d'immeubles o il y a des
appartements vides.
R3: Donner les noms des matres qui habitent dans le mme immeuble qu'au
moins un de leurs lves (les enfants vivent sous le mme toit que leur parrain).
R4: Donner l'adresse de l'immeuble, la date de construction, le type
d'appartement et l'tage o habitent chacun des matres des enfants de DUPONT
R5: Donner le nom et l'ge des matres qui habitent dans un immeuble dont le
propritaire est responsable d'un de leurs lves.
R6: Donner le nom et l'ge des personnes qui sont propritaires mais qui ne sont
ni matre ni directeur d'cole.
R7: Ajouter un enfant de nom np, de prnom e,

15

Ex2: Soit le schma : DEPT(DNO, DNOM, DIR, VILLE)


EMP(ENO, ENOM, PROF, DATEEMB, SAL, COMM, DNO)
Avec: ENO : numro d'employ, cl.
ENOM : nom de l'employ.
PROF : profession (directeur n'est pas une profession).
SAL : salaire.
COMM : commission (un employ peut ne pas avoir de commission).
DNO : numro de dpartement auquel appartient l'employ.
DNO : numro de dpartement, cl.
DNOM : nom du dpartement.
DIR
: directeur du dpartement.
VILLE : lieu du dpartement (ville).
Interrogation d'une seule Relation :
R1 : Donner tous les n-uplets de EMP.
R2 : Donner les noms et les salaires des employs.
R3 : Donner les professions des employs (aprs limination des duplicats).
16
R4 : Donner les dates d'embauche des techniciens.

Jointures :
R5 : Faire le produit cartsien entre EMP et DEPT.
R6 : Donner les noms des employs et les noms de leur dpartement.
R7 : Donner les numros des employs travaillant BOSTON.
R8 : Donner les noms des directeurs des dpartements 1 et 3.
Attention : directeur n'est pas une profession!
R9 : Donner les noms des employs travaillant dans un dpartement avec au
moins un ingnieur.
R10 : Donner le salaire et le nom des employs gagnant plus qu'un (au moins
un) ingnieur.
R11 : Donner le salaire et le nom des employs gagnant plus que tous les
ingnieurs.
R12 : Donner les noms des employs et les noms de leurs directeurs.
R13 : Trouver les noms des employs ayant le mme directeur que JIM.
Attention : un employ peut tre directeur de plusieurs dpartements.
R14 : Donner le nom et la date d'embauche des employs embauchs avant leur
17
directeur; donner galement le nom et la date d'embauche de leur directeur.

R15 : Donner les dpartements qui n'ont pas d'employs.


R16 : Donner les noms des employs du dpartement COMMERCIAL
embauchs le mme jour qu'un employ du dpartement PRODUCTION.
R17 : Donner les noms des employs embauchs avant tous les employs du
dpartement 1.
R18 : Donner les noms des employs ayant le mme emploi et le mme directeur
que JOE.
Valeurs Nulles, Tris, Groupes, Agrgats et Expressions :
R19 : Donner la liste des employs ayant une commission.
R20 : Donner les noms, emplois et salaires des employs par emploi croissant et,
pour chaque emploi, par salaire dcroissant.
R21 : Donner le salaire moyen des employs.
R22 : Donner le nombre d'employs du dpartement PRODUCTION.
R23 : Donner les noms des employs ayant le salaire maximum de chaque
dpartement.
R24 : Donner les emplois ayant le salaire moyen le plus bas; donnez aussi
18 leur
salaire moyen.

SQL3
PROCEDURES SQL
extensions procdurales de SQL => notion de procdures
stockes

FONCTIONNALITES ORIENTEES OBJET


construction de nouveaux types de donnes
support de l'hritage entre tables

FONCTIONNALITES DEDUCTIVES
oprateur de fermeture transitive

FONCTIONNALITES "ACTIVES"
support de rgles dclenches par des vnements BD =>
mcanisme de "trigger"
19

Les index
Une solution offerte par tous les SGBD est la cration d'index, qui permettra de
satisfaire aux requtes les plus frquentes avec des temps de rponse acceptables.
Choix des index, en priorit:
- les cls primaires.
- les colonnes servant de critre de jointure.
- les colonnes servant de critre de recherche.
Ne pas indexer: colonnes contenant peu de valeurs distinctes (index peu efficace)
colonnes frquemment modifies
Crer 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 2 lignes aient la mme valeur dans la
colonne indexe.
Les requtes SQL sont transparentes au fait qu'il existe un index ou non.
Effacement d'un index : DROP INDEX Nom_de_lindex
20

Dclencheur (Trigger)
Action sur la BD dclenche suite l'apparition d'un vnement particulier.
Forme : {BEFORE | AFTER} <vnement> THEN <action>
Un vnement peut tre : . une opration sur une table (dbut ou fin)
. un vnement externe (heure, appel,etc.)
Une action peut tre :
. une requte BD (mise jour)
. un abort de transaction (annulation)
. l'appel une procdure catalogue
Syntaxe: CREATE TRIGGER nom <vnement> ON <nom de la table>
WHEN (condition)
instruction FOR EACH ROW | STATEMENT

21

Dclencheur avec condition (Rgle)


Il est possible d'ajouter une condition afin de dclencher l'action seulement
quand la condition est vrifie.
Une condition est une qualification portant sur la base.
Ex.: Sur le schma :
commande ( no_commande , article , quantite )
livraison ( no_livraison , no_commande, article , quantite_livree )

CREATE TRIGGER MAJ_Qtite_commandee_livree


AFTER INSERT ON livraison
UPDATE commande SET quantite = (SELECT SUM(quantite_livree)
FROM livraison L WHERE L.no_commande = C.no_commande AND
L.article = C.article)

22

Traitement dune requte SQL


Les tapes du Traitement d'une Requte
- La mtabase
. Cest le dictionnaire des donnes organis sous forme de base de donnes
. Le dictionnaire est aliment par les commandes de dfinition de schma et
de vues.
. Elle fait appel lanalyseur et loptimiseur.
Architecture fonctionnelle de rfrence:
Analyseur
Mtabase

Contrleur
Optimiseur
Excuteur
BD

23

LAnalyseur
Syntaxique : - Prsence des attributs, etc.
Smantique : - Dtermination de la validit des questions,
- Recherche de questions quivalentes
Le contrleur
Vrification des contraintes dintgrit, rcriture de la requte.
Vrification des autorisations
Loptimiseur
Gnration d'un plan d'excution optimis, ordonnancement par
restructurations algbriques :
choix d'ordonnancement entre les jointures,
choix entre diffrentes techniques
Lexcuteur
Utilisation des mthodes d'accs,
Slections - Projections - limination des doubles et jointures
24
Gestion des accs concurrents.