SQL
Structured Query Language
1
Introduction
Le langage SQL est à la fois :
◼ un langage d'interrogation de données (LID) :
SELECT;
◼ un langage de manipulation de données (LMD) :
UPDATE, INSERT, DELETE
◼ un langage de définition des données (LDD) :
ALTER, CREATE, DROP
◼ un langage de contrôle des données et des utilisateurs
(LCD) : GRANT, REVOKE
2
SQL
Langage de définition des données des données
LDD
3
LDD
Un LDD permet de définir :
◼ Des schémas de relations
◼ Des vues
◼ Des contraintes d'intégrité
◼ Des index
◼ Des séquences
4
Création d'une table
La commande CREATE TABLE permet de définir
le schéma d'une table
CREATE TABLE <nom de table> (<élément de table> +)
Les éléments d'une table sont :
◼ les description des colonnes
◼ les description des contraintes de table
Les colonnes sont décrites par : Nom ; type de
données, valeur par défaut et les contraintes de
colonne
5
Création d'une table :
domaines de colonne
Les types standard en SQL sont :
◼ INTEGER
◼ NUMBER[(longueur,[précision])
◼ CHAR [(longueur)]
◼ VARCHAR2(longueur)
◼ DATE
◼ RAW(longueur)
6
Création d'une table :
domaines de colonne
Les types standard en SQL sont :
◼ CREATE
INTEGERTABLE ETUDIANT
◼ NUMBER[(longueur,[précision])
( Mat CHAR(15),
◼ CHAR Nom
[(longueur)]
CHAR(20),
◼ VARCHAR2(longueur)
Prn CHAR(20),
◼ DATE
Adr VARCHAR2(80) ,
◼ RAW(longueur)
Dtn DATE ,
Sexe CHAR
7
);
Création d'une table :
Contraintes de colonne
Les contraintes de colonne portent sur une
seule colonne :
[CONSTRAINT<Nom>] < Description_ contraint>
◼ Contrainte d’unicité : UNIQUE
◼ Contrainte de clé : PRIMARY KEY
◼ Contrainte référentielle :
REFERENCES <Nom de table> [(<Colonne >)]
[ON { DELETE | UPDATE}
{CASCADE | SET NULL}]
◼ Contrainte de nullité : NOT NULL
◼ Contrainte de Domaine : CHECK <Condition>
8
Création d'une table :
Contraintes de colonne
Les contraintes de colonne portent sur une
seule colonne :
CREATE TABLE ETUDIANT
[CONSTRAINT<Nom>]
( < Description_
Mat CHAR(15) CONSTRAINT contraint>
Clef_ ETUD
◼ Contrainte d’unicité
PRIMARY : UNIQUE
KEY ,
◼ Nom
Contrainte CHAR(20)
de clé NOTKEY
: PRIMARY NULL,
◼ Prnréférentielle
Contrainte CHAR(20): NOT NULL,
Adr CHAR(80)
REFERENCES <Nom de DEFAULT NULL, >)]
table> [(<Colonne
[ON { DELETE
Dtn DATE | UPDATE}
CHECK ( Dtn >1900/01/01 ),
{CASCADE
Sexe CHAR DEFAULT
| SET NULL}]‘’0’’
◼ CHECK(
Contrainte de nullité SexeNULL
: NOT IN (‘’0’’, ‘’1’’))
◼ );
Contrainte de Domaine : CHECK <Condition>
9
Création d'une table :
Contraintes de table
Les contraintes de table portent sur une ou
plusieurs colonnes . :
[CONSTRAINT<Nom>] < Description_ contraint>
◼ Contrainte d’unicité : UNIQUE(<Colonne>+)
◼ Contrainte de clé : PRIMARY KEY (<Colonne>+)
◼ Contrainte référentielle :
FOREIGN KEY ( < Colonne référençante>+ )
REFERENCES < table référencée>[(<Colonne
référencée>)+]
[ON DELETE CASCADE | SET NULL]
◼ Contrainte de Domaine : CHECK <Condition>
10
Création d'une table :
Contraintes de table
CREATE TABLE ETUDIANT
(
Les contraintes de table portent sur une ou
Mat CHAR(15),
plusieurs colonnes
Nom CHAR(20) NOT. :NULL,
[CONSTRAINT<Nom>]
Prn CHAR(20) NOT NULL, < Description_ contraint>
◼Adr CHAR(80)
Contrainte DEFAULT
d’unicité NULL,
: UNIQUE(<Colonne> +)
Dtn DATE,
◼ Contrainte de clé : PRIMARY KEY (<Colonne>+)
Sexe CHAR DEFAULT ‘’0’’ ,
◼ Contrainte référentielle :
CONSTRAINT
FOREIGN KEY Clef_ ETUD référençante>+
( < Colonne PRIMARY KEY )
(Mat), REFERENCES < table référencée>[(<Colonne
CHECK (
référencée>)+]
( Dtn >1900/01/01
[ON DELETE CASCADE ) And ( Sexe
| SET IN (‘’0’’, ‘’1’’))
NULL]
◼ Contrainte de Domaine : CHECK <Condition>
)
); 11
Création d'une table avec insertion
On peut créer une table et la remplir à partir
des sorties d'une requête :
CREATE TABLE <nom de table>
[(<élément de table> +) ]
AS < Clause SELECT >
12
Modification de schémas
On peut modifier le schéma d' une table en
ajoutant , modifiant ou supprimant des
éléments de table :
ALTER TABLE <nom de table>
ADD | DROP | ALTER [COLUMN |CONTRAINT]
(<élément de table> +)
13
Modification de schémas
On peut modifier le schéma d' une table en
ajoutant , modifiant ou supprimant des
éléments de table :
ALTER TABLE <nom de table>
ALTER ADD
TABLE ETUDIANT
| DROP | ALTER ADD
[COLUMN |CONTRAINT]
( Sect CHAR(4) DEFAULT NULL
(<élément +)
CHECK Sectde
IN (table>
‘’PC1’’, ‘’PC2’’, ’BG1’’, ’’BG2’’,
’’MP1’’ , ‘’MP2” ),
Bac CHAR(20)
);
14
Renommer / Supprimer une table
La commande DROP TABLE supprime une relation
exisante :
DROP TABLE<Nom de table>
La commande RENAME change le nom d'une table :
RENAME <Ancien_Nom> TO <Nouveau_Nom>
15
Les Domaines
Un domaine au sens de la norme SQL est la
définition d'un type associé à un certain
nombre de règles de validité.
La définition d'un domaine s'opère avec la
syntaxe suivante :
CREATE DOMAINE <nom de domaine>
[AS] < Type de donnée >
[DEFAULT valeur ]
{ [CONTRAINT <nom>] CHECK <condition> } +
16
Exemple de définition de domaine …
CREATE DOMAINE T_val_plus
AS INTEGER
CONTRAINT ctr_plus CHECK (VALUE > 0) ;
CREATE DOMAIN OUI_NON
AS CHAR(3)
DEFAULT 'NON'
CONSTRAINT ctr_Oui_Nom CHECK (
UPPER(VALUE) IN ('OUI', 'NON')) ;
17
.. Exemple de définition de domaine …
CREATE DOMAIN T_maj_8
AS CHAR(8)
CHECK (VALUE = UPPER (VALUE));
CREATE DOMAIN T_Code
AS CHAR(3)
CHECK (SUBSTR(VALUE,1,1) BETWEEN "A" AND "Z") ,
CHECK(SUBSTR(VALUE,1,1) NOT IN ("I","O")),
CHECK (SUBSTR(VALUE, 2, 1) BETWEEN "0" AND "9")
CHECK (SUBSTR(VALUE, 2, 1) BETWEEN "0" AND "9") ;
18
Modification de Domaines
La norme SQL 2 autorise la modification d'un
domaine en permettant de rajouter ou retirer une
clause défaut ou une contrainte :
ALTER DOMAIN nom_domaine
{ SET DEFAULT valeur_défaut
| DROP DEFAULT
| ADD contrainte_de_domaine
| DROP CONSTRAINT nom_contrainte }
Il n'est pas possible de changer le type de données de la définition
d'un domaine.
19
Modification de Domaines : exemple
ALTER DOMAIN T_Code
ADD CHECK(SUBSTR(VALUE,1,1) NOT IN ("I" ,
"O")) ;
ALTER DOMAINE T_val_plus
SET DEFAULT 1 ;
La suppression d'un domaine s'effectue avec un ordre SQL DROP
:
DROP DOMAINE <Nom_domaine> ;
20
Les index
sont des éléments indispensables à une exploitation
performante de base de données.
Souvent, lors de la création d'une contrainte :
- de clef primaire,
- de clef étrangère ,
- d'unicité,
le SGBDR implante automatiquement un index pour
assurer la mécanisme de contrainte avec des
performances correctes.
21
Les index (2) : choix des index
:Indexer en priorité
☺- les clés primaires
☺- les colonnes servant de critère de jointure
☺- les colonnes servant de critère de recherche
Ne pas indexer :
- les colonnes contenant peu de valeurs distinctes
(index alors peu efficace)
- les colonnes fréquemment modifiées
22
Index (3) : Création / Suppression
Commande de création :
CREATE [UNIQUE] INDEX <nom_index>
ON nom_table (<colonne> +) ;
Commande de suppression :
DROP INDEX <nom_index> ;
Exemple :
CREATE INDEX idx_nom_prn ON ETUDIANT (Nom , Prn )
23
Les vues (view)
Une vue est une table virtuelles dont le
schéma et le contenu sont dérivés d'une ou
plusieurs tables réelles par une requête.
On peut dire qu'une vue est une instance
d'une requête.
Grâce aux vues, chaque utilisateur pourra
avoir sa vision propre des données.
24
Les vues : création / suppression
Commande de création :
CREATE VIEW <nom_vue >
[<colonne> + ]
AS < requête de sélection>
[WITH CHECK OPTION] ;
Commande de suppression :
DROP VIEW <nom_vue >
25
Les vues : exemples
CREATE VIEW Etudiant_PC2
AS SELECT Mat , Nom , Prn
From ETUDIANT
WHERE Sect ="PC2" ;
CREATE VIEW Ouvrage
AS SELECT ISBN, Titre, NomEdt, NomAut
From Livre L , Auteurs A , Editeur D, Ecriture E
WHERE [Link]=[Link]
And [Link]=[Link]
And [Link]= [Link] ;
26
Utilisation des vues
Une vue peut être utilisée comme une table dans
toute requête de type SELECT.
à la différence des tables, une vue ne peut être
mise à jour (INSERT, UPDATE, DELETE) que si
elle obéit à la condition suivante :
Comporter suffisamment d'attributs pour
permettre un report des mises à jour dans la base
sans ambiguïté.
27
Utilisation des vues
En pratique, la plupart des systèmes restreignent les
possibilités de mise à jour à des vues mono table :
◼ contenir la clef primaire de la table
◼ ne pas transformer les données (pas de concaténation, addition
de colonne, calcul d'agrégat...)
◼ ne pas contenir de clause GROUP BY ou HAVING
◼ ne pas contenir de sous requête
La clause WITH CHECK OPTION implique que si la
vue peut être mise à jour, alors les valeurs modifiées
insérées ou supprimées doivent vérifier les conditions de
la clause WHERE .
28
Création/suppression de base de données
En SQL une BD est appelée schéma, la commande de
création est :
CREATE {SCHEMA |DATABASE} 'spécification'
[USER 'Nom_user' [PASSWORD 'Mot_de_passe']]
[DEFAULT CHARCTER SET <jeu_de_carac>]
La suppression d'un schéma :
DROP {SCHEMA |DATABASE} 'spécification'
[CASCADE]
29
SQL
Langage de manipulation de données
LMD
30
Ajout de lignes
Commande :
INSERT INTO < table | vue>
[(< Colonne>+ )]
{ VALUES (<valeur>+) | <requête Select>
Le SELECT peut contenir n'importe quelle clause sauf un
ORDER BY .
INSERT INTO Etudiant ( Mat , Nom , Prn )
VALUES ( '128', 'Bilal' , 'omar' , '235' , 'Dalil' ,'Aicha' ) ;
31
Modification / Suppression de lignes
Commande de modification :
UPDATE <table | vue >
SET { <Colonne> = <Expression de valeur>}+
[ WHERE <condition de recherche> ];
Commande de suppression :
DELETE FROM <table | vue >
WHERE <condition de recherche> ;
32
Exemples de Modifications
UPDATE Produit UPDATE Produit
SET prix = 55 ; SET prix = prix*1.05 ;
UPDATE ETUDIANT UPDATE ETUDIANT
SET Nom = UPPER(Nom), SET Sect="PC2"
Prn = UPPER(Prenom) , WHERE Sect="PC1" ;
Adr = UPPER(Adr);
UPDATE Commande
SET Qte =Qte/2
WHERE Refprd IN (Select Ref FROM Produit WHERE
Cond=2) ;
33
Exemples de suppression de lignes
DELETE FROM Produit ;
DELETE FROM ETUDIANT
WHERE Sect="PC1" ;
DELETE FROM Commande
WHERE Refprd IN (Select Ref FROM Produit WHERE
Cond=2) ;
34
SQL
Langage d'interrogation des données
LID
35
SQL Interrogation d'une BD
La commande SELECT permet :
◼ Les projections
◼ Les restrictions
◼ Les produits cartésiens
◼ Les jointures
◼ Les opérations union, intersection et différence
36
SQL Interrogation d'une BD
La structure de la commande SELECT :
SELECT [ALL| DISTINCT] <Colonne> +
FROM < table>+
WHERE < critères > +
37
SQL La Projection
SQL n’élimine pas les doubles, à moins que
cela soit explicitement demandé par le mot réservé
DISTINCT.
La projection en SQL s’exprime de la
manière suivante :
SELECT [ALL| DISTINCT] <Colonne > +
FROM < table>
38
SQL La Projection (2)
Fournisseur( NumFr, NomFr, Adr)
Produit (Ref, designation, cond, prix, #NumFr)
Commande(NumC, Dte, Qte, #Refprd)
Q1 : Donner toutes les commandes
SELECT *
FROM Commande ;
Q2 : Donner le nom et l’ adresse de chaque fournisseur
SELECT NomFr , Adr
FROM Fournisseur ;
Q3: Quelles sont tous les prix différents.
SELECT DISTINCT prix
FROM Produit ;
39
SQL La Restriction
En SQL la sélection est une combinaison d’une
restriction suivie d’une projection.
La sélection s’exprime comme une projection avec
en plus une condition de recherche selon la
syntaxe suivante :
SELECT [ALL| DISTINCT] <Colonne > +
FROM < table>
WHERE <Condition de recherché>
40
SQL La Restriction (2)
Exemple
Q1 : Les produits dont le prix dépasse 100 Dh.
SELECT *
FROM Produit
WHERE prix >100 ;
Q2 : Donner les designations et les prix des
produits vendus par le fournisseur numéro 125
SELECT designation, prix
FROM Produit
WHERE NumFr=125;
41
SQL Conditions de recherche
On utilise les opérateurs :
◼ de comparaison : < , <= , > , >= , =, <>
◼ Logiques : NOT , AND , OR
◼ <expr1> BETWEEN <expr2> AND <expr3>
◼ <expr1> IN (<exprk>+)
◼ <exp> LIKE <modèle >
où modèle est une chaîne de caractères
pouvant contenir l'un des caractères jokers :
◼ _ remplace exactement 1 caractère
% remplace une chaîne de caractères de
longueur quelconque.
42
SQL Nom de colonne de sortie
Les colonnes constituant le résultat d'un SELECT
peuvent être renommées dans le SELECT
il suffit de faire suivre l'expression définissant la colonne
d'un nom, selon les règles suivantes :
◼ le nom (30 charactères maximum) est inséré derrière
l'expression définissant la colonne, séparé de cette dernière par
un espace.
◼ si le nom contient des séparateurs (espace, caractère spécial), ou
s'il est identique à un mot clé de SQL (ex : DATE), il doit être
mis entre guillemets "".
43
SQL Nom de colonne de sortie
Les colonnes constituant le résultat d'un SELECT
peuvent être renommées dans le SELECT
il suffit de faire suivre l'expression définissant la colonne
d'un nom, selon les règles suivantes :
◼ le nom (30 charactères maximum) est inséré derrière
l'expression définissant la colonne, séparé de cette dernière par
un espace.
SELECT Ref , designation , prix ,
◼ si le nom contient des séparateurs (espace, caractère spécial), ou
s'il est identiqueprix*1.05
à un mot clé de" SQL
Nouveau prix".
(ex : DATE), il doit être
FROM
mis entre Produit
guillemets "".
WHERE NumFr=125;
44
SQL Le produit cartésien
Le produit cartésien en SQL est un cas particulier de
jointure ( c’est une jointure sans condition).
L’expression d’un produit cartésien en SQL est la
suivante :
SELECT [ALL| DISTINCT] <Colonne > +
FROM < table>+
Dans cette commande SQL on combine le produit
cartésien et la projection.
Le produit peut mettre en œuvre plus de deux tables
45
SQL La jointure
On peut joindre jusqu'à 256 tables.
Une jointure est un produit cartésien suivie d’une
restriction .
Elle se formule simplement en spécifiant plusieurs tables
derrière la clause FROM de la façon suivante :
SELECT [ALL| DISTINCT] <Colonne > +
FROM < table>+
WHERE <Condition de Jointure>
La jointure en SQL combine la jointure et la projection.
Il n'existe pas d'associations implicites entre les tables.
46
SQL Equi-jointure
Exemple
Q1 : Donner la liste des produits comportant le
nom et l’adresse du fournisseur
SELECT Ref , designation , cond, prix, NomFr , Adr
FROM Fournisseur , Produit
WHERE [Link]=[Link] ;
Q2 : Donner les lignes de commande avec les
montants
SELECT NumC, Refprd , Dte , Qte , Qte*prix
FROM Commande , Produit
WHERE Refprd=Ref ;
47
SQL Auto-jointure
On peut joindre une table à elle même
Dans ce cas, il faut renommer au moins l'une des deux
occurrences de la table en lui donnant un alias, afin de
pouvoir préfixer sans ambiguïté chaque nom de colonne.
Exemple 1. :
Employe (Mat, Nom , Prn , Adr , Sal , Fonct , MatSup )
Q : Donner pour chaque employé le nom de son supérieur
hiérarchique.
48
SQL Auto-jointure
SELECT [Link]
On peut joindre une table à,elle
[Link],
même
[Link], [Link]
Dans ce cas, il faut renommer au moins l'une des deux
FROM Employe
occurrences , Employe
de la table Superieur
en lui donnant un alias, afin de
pouvoir préfixer
WHERE sans ambiguïté chaque nom de colonne.
[Link]=[Link] ;
Exemple 1. :
Employe (Mat, Nom , Prn , Adr , Sal , Fonct , MatSup )
Q : Donner pour chaque employé le nom de son supérieur
hiérarchique.
49
SQL Autres-jointures
on peut utiliser d'autres types de comparaisons comme
critères de jointures.
Exemple
Q1 Quels sont les employés gagnant plus que l’employé dont
le matricule est A25621?
SELECT [Link] , [Link], [Link],
[Link]
FROM Employe , Employe Employe2
WHERE [Link] > [Link]
AND [Link]=”A25621
50
SQL Union , Intersection et Différence
En SQL les opérateurs ensemblistes se
construisent à l’aide de deux SELECT combinés
par l’un des opérateurs ensemblistes suivants :
◼ l'union : UNION
◼ l'intersection : INTERSECT
◼ la différence relationnelle : MINUS
SELECT ...
{UNION | INTERSECT | MINUS }
SELECT ...
51
SQL Classer les sorties d'une requête
Il est possible dans une requête SELECT de
demander que le résultat soit classé en fonction
d'une ou plusieurs colonnes , il suffit d'ajouter la
clause ORDER BY :
ORDER BY <Nom de colonne | Numero de colonne [DESC] > +
◼ Par défaut le classement se fait par ordre ascendant
◼ Une colonne peut être identifiée par son nom ou par sa position dans la
liste qui suit SELECT (la numérotation commence par 1).
52
SQL Classer les sorties d'une requête
Il est possible dans une requête SELECT de
demander
SELECT * que le résultat soit classé en fonction
d'une
FROMou plusieurs colonnes , il suffit d'ajouter la
Employe
clause ORDER BY :
ORDER BY Sal DESC , Nom , Prn;
ORDER BY <Nom de colonne | Numero de colonne [DESC] > +
◼SELECT
Par défautNom , Prn ,
le classement Sal
se fait par ordre ascendant
Une colonne
◼FROM Employe peut être identifiée par son nom ou par sa position dans la
liste qui suit SELECT (la numérotation commence par 1).
WHERE Sal >3000
ORDER BY Sal DESC , Nom , Prn;
53
SQL Fonctions de groupement
Dans un select on peut appliquer des calculs de
groupement sur les valeurs des colonnes :
◼ AVG (DISTINCT|ALL] expression)
◼ COUNT( * |DISTINCT|ALL] expression)
◼ MAX(DISTINCT|ALL] expression)
◼ MIN(DISTINCT|ALL] expression)
◼ STDDEV (DISTINCT|ALL] expression)
◼ SUM(DISTINCT|ALL] expression)
◼ VARIANCE(DISTINCT|ALL] expression)
54
SQL Fonctions de groupement
Dans
Q1 un select
:Le nombre on peut
d'emplyés appliquer des calculs de
groupement sur les(*)valeurs des colonnes :
SELECT COUNT
◼ FROM
AVG Employe;
(DISTINCT|ALL] expression)
nombre* d'emplyés
COUNT(
Q2 ◼:Le |DISTINCT|ALL]
ayant unexpression)
salaire >2000
◼ MAX(DISTINCT|ALL] expression)
SELECT COUNT (*)
◼ MIN(DISTINCT|ALL] expression)
FROM Employe
◼ STDDEV
WHERE(DISTINCT|ALL]
Sal >2000; expression)
SUM(DISTINCT|ALL]
Q3 ◼:Le expression)
nom, prénom et salaire des employés ayant le
◼ VARIANCE(DISTINCT|ALL]
salaire le plus élevé expression)
SELECT Nom , Prn , Sal
FROM Employe
WHERE Sal = SELECT MAX (Sal)
FROM Employe; 55
SQL les agrégats
On peut partitionner une table horizontalment en
fonction des valeurs d'un groupe d'attributs et
ensuite appliquer une fonction de groupe sur
chaque partie obtenue
En SQL la clause GROUP BY permet la réalisation
des agrégats dans une requête:
GROUP BY <Colonne > +
Les fonctions de groupement doivent être
indiquées dans les expressions qui suivent
SELECT
56
SQL les agrégats
On peut partitionner une table horizontalment en
Q1 : Les moyennes des prix des produits par
fonction ? des valeurs d'un groupe
fournisseur d'attributs et
ensuite appliquer une fonction de groupe sur
SELECT
chaqueNumFr
partie, AVG(prix)
obtenue
En SQL
FROM la clause GROUP BY permet la réalisation
Produit
des agrégats
GROUP BY NumFrdans une requête:
GROUP BY <Colonne > +
Les fonctions de groupement doivent être
indiquées dans les expressions qui suivent
SELECT
57
SQL les agrégats (2)
Dans une requête d'agrégat il est possible
d'appliquer des restrictions soit avant le
partionnement soit après :
◼ La clause WHERE pour une restriction avant le
partionnement
◼ La clause HAVING pour une restriction apès le
partionnement
58
SQL les agrégats (2)
Q1 : Les sommes par produit des Quantités commandées
entre
Dans25/10/02 et 25/11/02
une requête ?
d'agrégat il est possible
d'appliquer
SELECT Refprd, des restrictions soit avant le
SUM(Qte)
partionnement
FROM Commande soit après :
WHERE Dte BETWEEN 25/10/02 ANDt 25/11/02
◼ La clause WHERE pour une restriction avant le
GROUP BY Refprd;
partionnement
Q2 :◼ liste des salaire
La clause HAVINGmoyens
pourpar
unefonction pourapès
restriction les groupes
le
ayant partionnement
plus de deux employe
SELECT Fonct,COUNT(*) Effectif , AVG(Sal) "Salaire moyen"
FROM Employe
GROUP BY Fonct
HAVING COUNT(*)>2 ;
59
Les sous requêtes
Une sous requête est une requête dont le résultat
est utilisé comme argument dans une autre requête
Les conditions de restriction, clause WHERE,
peuvent utiliser le résultat d'une requête
On distingue 3 cas :
◼ La sous requête reproduit une valeur
◼ La sous requête reproduit une ligne
◼ La sous requête reproduit plusieurs lignes
60
Les sous requêtes (2) : une valeur
Lorsque le résultat de la sous requête est
une valeur, on utilise la syntaxe :
WHERE <Expression > <Opt> SELECT …
Opt : est un opérateur de comparaison
61
Les sous requêtes (2) : une valeur
SELECT *
Lorsque le résultat
FROM Produit de la sous requête est
une valeur,
WHERE prixon
= utilise la syntaxe :
WHERESELECT
<Expression
prix > <Opt> SELECT …
FROM Produit
Opt : WHERE
est un opérateur
Ref ='125'; de comparaison
SELECT Nom, Prn , Sal
FROM Employe,
WHERE Sal = SELECT MAX(Sal)
FROM Employe;
62
Les sous requêtes (3) : une ligne
Lorsque le résultat de la sous requête est
une ligne de plusieurs colonnes :
WHERE <liste colonne> <Opt> SELECT …
Opt : est un opérateur de comparaison
63
Les sous requêtes (3) : une ligne
Q : Quels
Lorsque sont de
le résultat les laemployés ayant
sous requête est même
fonction et même supérieur que l’employé
une ligne deB261458
matriculé plusieurs
? colonnes :
WHERE
SELECT <liste
Nom,colonne> <Opt> SELECT …
Fonct, MatSup
FROM Employe
Opt : est un opérateur de comparaison
WHERE (Fonct, MatSup) =
( SELECT Fonct, Matsup
FROM Employe
WHERE Mat = 'B261458');
64
Les sous requêtes (3) :Groupe de lignes
Lorsque le résultat de la sous requête comporte
plusieurs lignes on utilisera des quantificateurs
pour réaliser des comparaisons :
WHERE <Expression colonne> <Opt>
EXISTS|ALL|ANY| SOME
( SELECT … );
Opt : est un opérateur de comparaison ou l'opérateur
IN
65
Les sous requêtes (3) :Groupe de lignes
SELECT
Lorsque Nom, Sal
le résultat de la sous requête comporte
plusieurs
FROM lignes
Employeon utilisera des quantificateurs
pour réaliser des comparaisons :
WHERE Sal > ALL
WHERE <Expression
SELECT Sal colonne> <Opt>
FROM Employe
EXISTS|ALL|ANY| SOME
WHERE ( SELECT … );
Fonct = Ingénieur ;
Opt : est un opérateur de comparaison ou l'opérateur
IN
66
La clause JOIN
A partir de SQL2 on peut exprimer les jointures
en ajoutant la clause JOIN dans FROM
◼ Jointure normale
SELECT <colonne>+
FROM <Table1> JOIN <Table2>
ON <Condition de jointure>
◼ Jointure naturelle
SELECT <colonne>+
FROM <Table1> NATURAL JOIN <Table2>
[USING (<colonne_de jointure>+)]
67
SQL
Langage de contrôle des données et utilisateurs
LCD
68
Affecter des privilèges
GRANT <autorisation>
ON <Nom_table>
TO <utilisateur>+
[WITH GRANT OPTION] ;
<autorisation>::= ALL PRIVILEGES | <action>+
<action> ::=SELECT | INSERT | DELETE | UPDATE
[(<colonne>+ )] | REFERENCE [(<colonne>+ )]
<utilisateur>::= PUBLIC | <Nom_utilisateur>
69
Retirer des privilèges
REVOKE <autorisation>
ON <Nom_table>
FROM <utilisateur>+ ;
<autorisation>::= ALL PRIVILEGES | <action>+
<action> ::=SELECT | INSERT | DELETE | UPDATE
[(<colonne>+ )] | REFERENCE [(<colonne>+ )]
<utilisateur>::= PUBLIC | <Nom_utilisateur>
70
SQL
Transaction
Trigger
Generator
71
Transactions
Une transaction est une séquence atomique
d'opérations .
Une transaction est terminée soit avec
succès par un ordre de validation des mises
à jour, soit en échec suite à une panne par
un ordre d'annulation.
72
Gestion des transactions :
COMMIT , ROLLBACK
Update
Insert Delete
Buffer
COMMIT WORK ROLLBACK WORK
Néant
BD
73
Trigger (déclencheurs)
Traitement déclenché par un évènement
Généralement un trigger est associé à un
objet de la base, il est exprimé sous la
forme: Évènement – Condition –Action
Un évènement est un signal instantané
externe ou interne détecté par le SGBD :
◼ événements primitifs
◼ événements composés
74
Trigger : événements primitifs
Événement
Externe Interne
Heure Appel Modification interrogation
AT TIMES IN TIMES Before | After Before | After Before | After
<valeur> <valeur> Update delete Select
Before After Before | After
<procédure> <procédure> Insert
75
Trigger : Création
La commande SQL3 de création de trigger est :
CREATE TRIGGER <Nom>
{BEFORE |AFTER| INSTEAD OF}
{INSERT|DELETE|UPDATE}
ON <nomTable>
ORDER <valeur>
(
WHEN (<condition de recherche SQL>)
<procédure SQL3>
);
76
Trigger : création
Il est à noter que les fournisseur de SGBD
utilisent des syntaxes propres.
La syntaxe de InterBase est :
CREATE TRIGGER <nom> FOR <nomtable>
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION number]
AS <procédure>
terminator
77
Exemple de trigger
SET TERM ^ ;
CREATE TRIGGER ajout_Archive_etudiant
FOR Etudiant
AFTER DELETE
AS BEGIN
Insert into ArchiveEtud
values ([Link], [Link], [Link], [Link],
USER,CURRENT_TIMESTAMP) ;
END ^
SET TERM ; ^
78
Trigger : Modification /Suppression
Le commande de suppression d'un trigger :
Drop Trigger <nom_trigger> ;
La commande de modification d'un trigger :
ALTER TRIGGER <nom_trigger>
[ACTIVE| INACTIVE]
[{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}]
[POSITION <valeur>]
[AS <procédure>] [terminator]
79
Auto incrémentation :
Générateurs / Séquences
Les éditeurs de SGBDR ont proposés diverses
solutions pour l'auto incrémentation des valeurs. des
SGBDR comme PARADOX ou ACCESS proposent
une colonne de type AUTOINC c'est à dire un entier
dont la valeur est calculé à chaque nouvelle insertion.
Certains SGBDR proposent d'utiliser un objet
particulier de la base constitué par un "générateur"
capable de fournir un entier auto incrémenté à
chaque appel. C'est le cas d'Oracle (Sequence ) et
d'InterBase (Generator).
80
Générateur sous InterBase
Création : Attention !
CREATE GENERATOR <nom> ; L'association entre une
table et un générateur
la première valeur est initiée à 0 passe par l'écriture de
Trigger qui réalisera
Affectation d'une valeur : l'auto incrémentation
SET GENERATOR <nom>TO <valeur>
La fonction GEN_ID( <nom> , <valeur>)
Incrémente le générateur nommé.
Cette fonction sera utilisée dans des triggers ou
des commandes SQL .
81
Exemple d'auto incrémentation
CREATE GENERATOR num_Cde_Gen;
SET num_Cde_Gen To 1000;
COMMIT;
SET TERM ^ ;
CREATE TRIGGER AutInc_Num_Cde
For COMMANDE
BEFORE INSERT AS
BEGIN
NEW .numCde=GEN_ID (num_Cde_Gen,1);
END ^
SET TERM ; ^
82