0% ont trouvé ce document utile (0 vote)
65 vues82 pages

5 - BDD - Langage SQL

Le document présente le langage SQL, qui comprend des sous-langages pour l'interrogation, la manipulation, la définition et le contrôle des données. Il détaille les commandes pour créer, modifier et supprimer des tables, ainsi que les contraintes et les domaines associés. Enfin, il aborde les vues, les index et les opérations de base de données, fournissant des exemples pratiques pour chaque fonctionnalité.

Transféré par

Jef Goloba Mao
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
65 vues82 pages

5 - BDD - Langage SQL

Le document présente le langage SQL, qui comprend des sous-langages pour l'interrogation, la manipulation, la définition et le contrôle des données. Il détaille les commandes pour créer, modifier et supprimer des tables, ainsi que les contraintes et les domaines associés. Enfin, il aborde les vues, les index et les opérations de base de données, fournissant des exemples pratiques pour chaque fonctionnalité.

Transféré par

Jef Goloba Mao
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi