Vous êtes sur la page 1sur 52

Historique

SQL (Structured Query Language)


70 centres de recherche
1982 introduit commercialement par IBM
Aujourdhui il est utilis dans la plus part
des SGBD : DB2, Oracle, MS SQL Server,
Sybase
Bibliographie :
Tout document sur SQL
Les spcifications officielles

Standardisation
SQL1 ISO 1989
Fonctions de lalgbre relationnelle, pour la
dfinition, la mise jour, la recherche

SQL2 ISO 1992


Extension qui supporte des types de donnes
varis et des commandes manquantes

SQL3 propositions (ISO 1996?)


Extension objet

Rle de SQL
Outils de
programmation

Gnrateur de
formulaires

SQL

Outil de requtes
interactif

Programme
dapplication
SQL

Frontal de base
de donnes

SQL

SQL

Moteur de base de donnes


SQL

SQL
Autres systmes
informatiques

Passerelle de base
de donnes
BD
SGBD dautres diteurs

Fonctions SQL

Dfinitions de donnes
Mise jour des donnes
Recherche de donnes
Calcul en colonne
Contrle de laccs aux donnes

Application de test
Donnes compagnies ariennes
IDC, Nom, Adresse, Ville, Pays

Donnes passagers
IDP, Nom, Prnom, Adresse, Ville, Age

Donnes vols
IDV, IDC, Dpart, Arrive, Heure

Donnes rservations
IDR, IDV, IDP, Date

Types de donnes (Oracle)


Nombres :

NUMBER [(prcision, chelle)]


DECIMAL [(prcision, chelle)]
INTEGER
FLOAT

Caractres
CHAR [(nbMaxChar)]
VARCHAR, VARCHAR2 (Oracle8)
LONG

Temps
DATE (Oracle)
TIME

Types binaires
RAW, LONG RAW

Cration de table
CREATE TABLE <nom table> ( <lment de table>+ )
<lment de table> ::= <dfinition de colonne> | <contrainte de table>
<dfinition de colonne> ::= <nom de colonne> <type de donnes>
[<clause dfaut>] [<contrainte de colonne>]
Nom Table , Nom Colonne

Unique pour un compte (le nom de table)


Commence par une lettre
Compte moins de 30 caractres
Ne peux pas tre un mot rserv SLQ
Il devrait tre descriptif

CREATE TABLE Compagnies_Arienne (IDC Int, NomC Char(20),


AdresseC Char(50), VilleC Char(20), PaysC Char(20) )

Contraintes de domaine

NOT NULL
c. de colonne
Clause dfaut : DEFAULT <val>
c. de colonne ou
UNIQUE
de table
CHECK (condition) plage ou liste de valeurs
possibles

CREATE TABLE Passagers (


IDP Int NOT NULL UNIQUE,
Nom Char(20),
PrnomP Char(30),
Adresse Char(50),
Ville Char(20) DEFAULT Paris CHECK (Ville IN (Paris, Rome,
Madrid, Londres, Amsterdam, Frankfort) ,)
Age Dec(2) CHECK (Age BETWEEN 18 AND 70)

Contraintes dentit
De colonne : PRIMARY KEY
De table : PRIMARY KEY (Atr1, , Atrn)
Les attributs dune cl doivent tre NOT NULL
CREATE TABLE Vols (
IDV Int NOT NULL PRIMARY KEY,
IDC Int NOT NULL,
Dpart Char(20), Arrive Char(20), Heure Num(4)

)
CREATE TABLE Rservations (
IDR Int NOT NULL UNIQUE,
IDV Int NOT NULL,
IDP Int NOT NULL,
Date DATE,

[CONSTRAINT PK_Res] PRIMARY KEY (IDR, IDV, IDP)


)

Contraintes rfrentielles
De colonne : REFERENCES table [attribut]
De table : FOREIGN KEY (attribut+)
REFERENCES table [(attribut+)]
CREATE TABLE Vols (
IDV Int NOT NULL PRIMARY KEY,
IDC Int NOT NULL,
Dpart Char(20), Arrive Char(20), Heure Num(4) ,
[CONSTRAINT FK_Vols] FOREIGN KEY (IDC) REFERENCES
Compagnies_Arienne

)
CREATE TABLE Rservations (
IDR Int NOT NULL UNIQUE,
IDV Int NOT NULL REFERENCES Vols (IDV),
IDP Int NOT NULL REFERENCES Passagers,
Date DATE,

PRIMARY KEY (IDR, IDV, IDP)


)

Les tables de lapplication (1)


CREATE TABLE Compagnies_Ariennes (
IDC Int NOT NULL PRIMARY KEY,
NomC Char(20) UNIQUE,
AdresseC Char(50),
VilleC Char(20),
PaysC Char(20)
)
CREATE TABLE Passagers (
IDP Int NOT NULL PRIMARY KEY,
NomP Char(20),
PrnomP Char(30),
AdresseP Char(50),
Ville Char(20),
Age Dec(2) CHECK (Age BETWEEN 18 AND 70)
)

Les tables de lapplication (2)


CREATE TABLE Vols (
IDV Int NOT NULL PRIMARY KEY,
IDC Int NOT NULL REFERENCES Compagnies_Ariennes,
Dpart Char(20),
Arrive Char(20),
Heure Number(4)
)
CREATE TABLE Rservations (
IDR Int NOT NULL UNIQUE,
IDV Int NOT NULL REFERENCES Vols (IDV),
IDP Int NOT NULL REFERENCES Passagers,
Date DATE,
PRIMARY KEY (IDR, IDV, IDP)
)
Possibilit dutiliser des scripts - fichiers *.sql avec les dfinitions

Autres oprations
Visualisation des schmas
DESCRIBE <nom table>

Suppression des tables


DROP TABLE <nom table>

Modifications des schmas (1)


ALTER TABLE <nom table> <altration>
<altration> = ADD (<spec. colonne>)
MODIFY (<spec. colonne>)
DROP (<nom colonne>)
ADD CONSTRAINT (<constr.>)
DROP CONSTRAINT

Modifications des schmas (exemples)

ALTER TABLE Vols ADD (Dure Number(4,2) );


ALTER TABLE Vols MODIFY (Dpart Char(30) );
ALTER TABLE Vols DROP (Dure);
ALTER TABLE Passager DROP PRIMARY KEY;
ALTER TABLE Passager ADD CONSTRAINT PK_Pass
PRIMARY KEY (IDP);

Mise jour des donnes


Insertion
INSERT INTO

Modification
UPDATE

Suppression
DELETE

Insertion
INSERT INTO <nom table> [(<nom colonne>+)]
VALUES (<valeurs>+) | <commande recherche>
Exemples :
INSERT INTO Compagnies_Ariennes VALUES
(1, Air France, 45 Rue de Paris, Roissy, France);
INSERT INTO Compagnies_Ariennes (IDC, NomC, PaysC)
VALUES (2, KLM, Netherlands);
INSERT INTO Compagnies_Ariennes SELECT
INSERT INTO Passagers Vols

Modification
UPDATE <nom de table>
SET <nom de colonne> = {<expression > | NULL }
[ WHERE { <condition de recherche> |
CURRENT OF <nom de curseur> } ]
Exemples :
UPDATE Compagnies_Ariennes SET Ville=Amsterdam
WHERE NomC=KLM;
UPDATE Passagers SET Age=Age+1;
UPDATE Passagers SET Adresse=1 Rue X
WHERE NomP=Dupont AND PrnomP=Pierre;

Suppression
DELETE FROM <nom de table> [ WHERE { <condition de
recherche> | CURRENT OF <nom de curseur> } ]
Exemples :
DELETE FROM Vols ;
DELETE FROM Vols WHERE Arrive=Bagdad;

Recherche de donnes
SELECT ... FROM [<condition>]
Permet :

Projection
Slection
Jointures
Tri
Fonction de calcul
Agrgats
Oprations ensemblistes
Imbrication de questions

Projection
SELECT [ALL | DISTINCT] <colonnes>* FROM
<nom table>
Par dfaut

Exemples :

Pour liminer les doubles

Projection relationnelle
Arrive (Vols)

SELECT * FROM Passagers;


SELECT DISTINCT Arrive FROM Vols;
SELECT NomP, PrnomP, Age FROM Passagers;

Par dfaut, les colonnes rsultat ont le mme nom


On peut redfinir le nom :
SELECT Arrive AS Destinations FROM Vols

Slection / Restriction
SELECT [ALL | DISTINCT] <colonnes>* FROM
<nom table> WHERE <condition>

La condition peut contenir AND, OR, NOT

Comparaison une valeur


Comparaison un intervalle de valeurs
Comparaison une liste de valeurs
Comparaison un filtre (pour donnes chane de
caractre)
Etc.

Comparaison une valeur


Condition = exp1 op exp2
exp IS NULL
Peut contenir
+ - * /
exp IS NOT NULL
attributs
constantes

= != <

> <=

>=

Slection relationnelle
Dpart=Paris (Vols)

Exemples :
SELECT * FROM Vols WHERE Dpart=Paris;
SELECT NomP, PrnomP FROM Passagers WHERE Ville=Paris AND
Age<26;
SELECT * FROM Produits WHERE Prix*Quantit<5000;

Comparaison une plage de valeurs


Condition = exp [NOT] BETWEEN v1 AND v2
Exemple :
SELECT NomP, PrnomP, Age FROM Passagers
WHERE Age BETWEEN 18 AND 30;

Condition = exp [NOT] IN (liste valeurs)


Exemple :
SELECT * FROM Vols WHERE Arrive IN (Londres,
Rome, Amsterdam);
Arrive=Londres OR Arrive=Rome OR Arrive =Amsterdam

Comparaison un filtre
Pour chanes de caractres
Condition = colonne [NOT] LIKE <modle de chane>
_ remplace un caractre
% remplace une squence de longueur quelconque
sous Oracle 9 : % toujours la fin
Exemples :
SELECT NomC,AdresseC FROM Compagnies_Ariennes WHERE
Pays LIKE F% ;
SELECT * FROM Passagers WHERE NomP LIKE A%d% AND
PrnomP LIKE J___% AND Adresse LIKE __ Rue M% ;

Jointures (1)
Produit cartsien :
SELECT * FROM Vols, Rservations ;

Jointure (naturelle quijointure) :


SELECT NomP, Date FROM Passagers, Rservations
WHERE Passagers.IDP=Rservations.IDP ;
SELECT c.NomC, c.Pays, v.Arrive FROM
CompagniesAriennes c, Vols v WHERE c.IDC=v.IDC ;

Inquijointure :
SELECT p.NomP, p.Ville, v.Dpart FROM Passagers p,
Vols v WHERE p.Ville != v.Arrive ;

Jointures (2)
Jointures de plusieurs tables
SELECT p.NomP FROM Passagers p, Rservations r,
Vols v WHERE p.IDP=r.IDP AND r.IDV=v.IDV AND
p.Ville=Paris AND v.Arrive=Londres ;

Autojointure :
SELECT p1.NomP, p1.Age FROM Passagers p1,
Passagers p2 WHERE p1.Age>p2.Age AND
p2.Nom=Pierre ;

Jointure externe (syntaxe Oracle) :


SELECT r.IDR, r.Date, p.Nom FROM Rservations r,
Passagers p WHERE p.IDP=r.IDP(+) ;

Jointures en SQL2 (Oracle)


SELECT <nom de table> [NATURAL]
[{LEFT | RIGHT}] JOIN <nom de table>
[ ON (<spcification de colonne>+ =
<spcification de colonne>+) ]

Tri des tuples


Pour trier les lignes on utilise ORDER BY
On peut trier selon plusieurs attributs
SELECT NomP, PrnomP, Age FROM Passagers
ORDER BY NomP, PrnomP ;
SELECT NomP, Adresse FROM Passagers
ORDER BY Age DESC ;
Dcroissant
Par dfaut : croissant

Fonctions de group
COUNT, SUM, AVG, MIN, MAX
SELECT COUNT(*) FROM Passagers ;
SELECT MIN(Age) FROM Passagers ;
SELECT AVG(Prix), MAX(Prix) FROM Produits ;

Regroupement des lignes


La clause GROUP BY
Permet le regroupement des lignes dune table
et lintrieur de chaque group, lattribut spcifi
la mme valeur
SELECT IDV, COUNT(*) FROM Rservations
GROUP BY IDV;
SELECT Ville, AVG(Age) FROM Passagers
GROUP BY Ville;

Conditions sur les groupes


SELECT FROM GROUP BY HAVING
Equivalent de WHERE applique aux groupes
SELECT IDP, COUNT(*) FROM Rservations
GROUP BY IDP HAVING COUNT(*) < 2 ;
SELECT Ville, COUNT(*) FROM Passagers
WHERE Ville LIKE P% GROUP BY Ville
HAVING AVG(Age)<35 ;

Imbrication de sous questions


SELECT NomC FROM CompagniesAriennes
WHERE IDC = (SELECT DISTINCT IDC FROM Vols
WHERE Arrive=Mexico) ;
SELECT NomP FROM Passagers WHERE Ville=Paris
AND IDP IN
(SELECT IDP FROM Rservations WHERE IDV IN
(SELECT IDV FROM Vols WHERE Dpart=Paris
AND Arrive=Londres) ) ;
SELECT Ville, AVG(Age) FROM Passagers GROUP BY
Ville HAVING MIN(Age) < (SELECT AVG(Age) FROM
Passagers) ;

Questions quantifies
En utilisant les oprateurs ANY, ALL, EXISTS
SELECT NomP FROM Passagers WHERE
Age < ANY (SELECT Age FROM Passagers
WHERE Ville=Paris) ;
SELECT NomC FROM Clients WHERE
Montant > ALL (SELECT Prix FROM Produits
WHERE Prod=TV) ;
SELECT NomP FROM Passagers WHERE
Ville=Brest AND EXISTS (SELECT * FROM Vols
WHERE Dpart=Paris AND Arrive=Brest) ;

Oprations ensemblistes
Union : <sous question> UNION <sous question>
SQL2 :
Intersection :
<sous question> INTERSECT <sous question>
Diffrence :
<sous question> EXCEPT <sous question>
(SELECT DISTINCT Ville FROM Passagers
WHERE Age < 35) INTERSECT (SELECT Dpart
FROM Vols WHERE Arrive=Amsterdam);

Assertions (1)
Rappel :
Contrainte dentit
Contrainte de domaine
Contrainte rfrentielle

Assertions : des contraintes non


directement attaches une table

Assertions (2)
CREATE ASSERTION <nom> CHECK (condition)

Exemple :
CREATE ASSERTION ver_quant_Prod CHECK (
(produits.quant > SUM(commandes.quant) ) AND
(produits.IDP=commandes.IDP) )
CREATE ASSERTION ver_credit CHECK (
clients.limite_credit <= SELECT
SUM(commandes.montant) FROM commandes
WHERE commandes.client=client.num_client )

Vues
Vue : une table virtuelle de la base de donnes
dont le contenu est dfini par une requte
Correspond au niveau externe de larchitecture
dun SGBD (ANSI/SPARC)
Pour lutilisateur, la vue apparat comme un
table relle
Mais elle nexiste pas dans la base comme une
ensemble stock de valeurs

Cration de vue
CREATE VIEW <nom vue> [ (attributs) ]
AS <requte> [WITH CHECK OPTION]
WITH CHECK OPTION : vrifier que les tuples
insrs ou mis jour via la vue doivent satisfaire
aux conditions de la question dfinissant la vue
WITH [CASCADED | LOCAL] CHECK OPTION
SQL2
Quand une vue est base sur plusieurs vues
CASCADED vrifier et appliquer une mise jour
pour toute la hirarchie de vues

Exemple de vues
CREATE VIEW Passager_Paris AS SELECT *
FROM Passagers WHERE Ville=Paris ;
CREATE VIEW Passager_Pour_Londres AS
SELECT p.IDP, p.NomP, r.dateD, v.heure, r.IDR
FROM Passagers p, Rservations r, Vols v
WHERE p.IDP=r.IDP AND r.IDV=v.IDV AND
v.Arrive=Londres
WITH CHECK OPTION ;

Suppression de vue
DROP VIEW <nom vue>
[RESTRICT | CASCADE]
RESTRICT : supprimer la vue seulement
si aucune autre vue ne dpend delle
CASCADE : supprimer la vue et toutes les
vues qui dpendent de sa dfinition

Avantages des vues (1)


Indpendance logique des programmes par
rapport aux donnes
Simplicit - facilit laccs la base
Masquer la complexit des schmas
Transformer des requtes multi tables en
requtes mono table

Scurit
Un utilisateur ne peut accder quaux donnes
des vues auxquelles il a droit daccs

Avantages des vues (2)


Prserver la confidentialit et la
personnalisation
Intgrit des donnes
Si des donnes sont lues ou introduites par le
biais dune vue, le SGBD peut vrifier quelles
respectent les contraintes dintgrit

Isolations des modifications


Une vue peut prsenter une image cohrente,
mme si les tables sont dcomposes,
restructures, renommes

Inconvnients
Performances
Le SGBD doit toujours traduire les vues en
requtes (souvent complexes) : temps
important pour excuter une requte sur une
vue

Restrictions de mise jour


Une mise jour sur une vue se rpercute sur
les tables composantes; les vue complexes
sont en lecture seule, donc mise jour
impossible

Interrogation au travers des vues

R1

Vue

Rn

Base de donnes

V=F(R1, , Rn)
R=Q(V)

R=Q( F(R1, , Rn) )

Exemple
Les Vols Air France de Paris Londres
SELECT v.IDV, v.Dpart, v.Arrive, v.Heure FROM Vols v,
Compagnies_Ariennes c, WHERE v.IDC=c.IDC AND c.NomC LIKE
%Air%France% AND v.Arrive=Londres AND v.Dpart=Paris;

Une vue contenant les vols dAir France


CREATE VIEW VolsAF AS SELECT v.IDV, v.Dpart, v.Arrive,
v.Heure FROM Vols v, Compagnies_Ariennes c WHERE
v.IDC=c.IDC AND c.NomC LIKE %Air%France%;

Requte sur la vue


SELECT * FROM VolsAF WHERE Arrive=Londres AND
Dpart=Paris;

Mise jour au travers des vues


Mise jour m

Vue

Question V

BD

Mise jour rpercute m

Vue

Question V

BD

Vues modifiables
Pas toutes les vues dont modifiables
Conditions pour quune vue soit modifiable :
Le SGBD doit tre capable de faire remonter chaque ligne de la
vue sa ligne source
Les doubles ne doivent pas tre limins (SELECT ne doit pas
contenir DISTINCT)
La clause ne doit spcifier quune seule table (ou vue)
susceptible dtre mise jour
Chaque lment de la slection doit tre une rfrence de
colonne; pas dexpressions, colonnes calcules, fonctions
(SUM, COUNT, etc.)
La clause WHERE ne doit pas inclure des sous requtes, JOIN,
UNION, INTERSECT, EXCEPT, GROUP BY ou HAVING

Sinon, vue en lecture seule

La scurit dans les SGBD


Proccupation majeure dans les SGBD
Les principaux objectifs :
Confidentialit
Disponibilit
Fiabilit
Intgrit
Maintenance

Elments de confidentialit
Plusieurs utilisateurs peuvent utiliser la mme
base
Identification : chaque utilisateur le SGBD
attribue un ID unique
Authentification des utilisateurs (vrification
des mots de passe)
Group dutilisateurs : utilisateurs ayant des
besoins similaires
Objets de scurit : les tables et vues peuvent
tre protges individuellement

Privilges
Lensemble dactions quun utilisateur peut
excuter sur un objet dune base de donnes :
select, insert, delete, update, references
Un utilisateur ne peut pas excuter une action
pour laquelle na pas les droits
Le crateur dune table en est le propritaire ; il
peut accorder aux autres utilisateurs des
permissions pour laccs sa base

Privilges en SQL
GRANT privilges ON table TO utilisateurs [WITH GRANT OPTION]

SELECT
DELETE
INSERT (nom_colonne*)
UPDATE (nom_colonne*)
REFERENCES (nom_colonne*)
ALL PRIVILEGES

nom_utilisateur,
PUBLIC

Permet la transmission
des privilges

REVOKE privilges ON table FROM utilisateurs [CASCADE | RESTRICT]

Vous aimerez peut-être aussi