Vous êtes sur la page 1sur 71

École Marocaine des Sciences de l’Ingénieur

Cours de

Bases de données
(SQL/PL SQL)

M. NASSAR & A. EL-ATTAR


A.U : 2016 - 2017
Sommaire
Chapitre I Introduction à SQL
Chapitre II PL/SQL : Concepts de Base
Chapitre III PL/SQL : Transactions & Curseurs
Chapitre IV PL/SQL : La gestion des exceptions, les fonctions et
les procédures, les packages
Chapitre V PL/SQL : La Gestion des déclencheurs (Triggers)
Chapitre I

Introduction à SQL
Les bases de données relationnelles
Une base de données relationnelle est un ensemble de tables à deux
dimensions

Chaque table est composée de lignes et de colonnes

Chaque ligne est identifiée de façon unique

Chaque colonne possède dans sa définition des règles d’intégrité des


données

On peut manipuler les données contenues dans les tables en exécutant


des commandes SQL (Structured Query Language)
Terminologie des bases relationnelles
Table Departements

ID Nom Region_id
--- ------------ ------------
30 Finance 1
31 Ventes 1
32 Ventes 2
43 Opérations 3
50 Administration 5

Table Regions

ID Nom
--- ----------------------
1 Amérique du Nord
2 Amérique du Sud
3 Afrique / Moyen-orient
4 Asie
5 Europe
Objets de la base de données
Table : une table est la structure de base d’un SGBDR. Elle est composée
d’une ou plusieurs colonnes et de zéro, une ou plusieurs lignes.
Ligne : une ligne est une combinaison de valeurs des colonnes d’une
table. Elle correspond à une occurrence de la table. On pourrait comparer
une occurrence de table à un enregistrement d’un fichier classique.
Colonne : une colonne correspond à un type de donnée dans une table (on
parle parfois d’attribut).
Champ : un champ correspond à la valeur située à l’intersection d’une
ligne et d’une colonne.
Clé primaire : il s’agît d’une colonne qui identifie de manière unique une
ligne de la table (elle doit toujours être renseignée).
Clé étrangère : il s’agît d’une ou plusieurs colonnes qui font référence à
une clé primaire appartenant généralement à une autre table.
Objets de la base de données
Table : unité de stockage composée de lignes et de colonnes

Vue : unité logique définie à partir d’une ou plusieurs tables (permet


d’établir un filtrage sur une ou plusieurs tables).

Séquence : génère des valeurs uniques pour une clé primaire.

Index : permet d’améliorer les performances de certaines requêtes

Synonyme : autre nom pour désigner un objet


SQL, PL/SQL et SQL*Plus
SQL
Langage de commande permettant de communiquer avec la base de données

PL/SQL
Langage propriétaire Oracle qui enrichit le langage SQL d’une couche
procédurale

SQL*Plus
Outil oracle reconnaissant et exécutant les instructions SQL et PL/SQL
Les différents types de commandes SQL

Interrogation de données : SELECT

Manipulation de données : INSERT, UPDATE, DELETE


Définition de données : CREATE, ALTER, DROP, RENAME, TRUNCATE

Contrôle des transactions : COMMIT, ROLLBACK, SAVEPOINT

Sécurité : GRANT, REVOKE


Commandes SQL*PLUS
SQL*PLUS est une interface qui permet d’interroger directement une base
de données avec du SQL.

Les commandes SQL*PLUS peuvent être des types suivants :

Environnement (set)

Manipulation de fichiers (spool)

Execution (/)

Interaction (accept, define)

Divers (connect, describe)


Langage d’interrogation des données
Langage d’interrogation des données
Syntaxe simplifiée

SELECT [ DISTINCT ] * | expr{, expr}


FROM table
[ WHERE condition ]
[ ORDER BY expr| position [ASC| DESC]] ;

12
Langage d’interrogation des données
Les Conditions
Permettent de comparer une colonne ou une expression à une autre
colonne ou expression

–Comparaison de valeurs =, >, <, >=, <=, <>


exp op_relationnel exp
–Intervalle BETWEEN
exp [NOT] BETWEEN exp AND exp
–Liste de valeurs IN
exp [NOT] IN (liste_de_valeurs)
–Comparaison avec filtre LIKE
char_exp [NOT] LIKE «chaine» ( _ un car; % n caractère)
–Indétermination IS NULL
colonne IS [NOT] NULL
13
Langage d’interrogation des données
• Sélectionner toutes les lignes et les colonnes de la table
département :

SQL> SELECT * FROM departments;

ID NOM REGION_ID
---- ------------------------------ ----------------
10 Finance 1
31 Ventes 1
32 Ventes 2
41 Opérations 1
42 Opérations 2
43 Opérations 3
50 Administration 1

12 rows selected
Langage d’interrogation des données

Exemples
SQL> SELECT nom FROM personnes
2 WHERE nom Like 'R_v%' ;

SQL> SELECT DISTINCT Prénom


2 FROM personnes;

SQL> SELECT nom, prenom FROM personnes


2 WHERE taille > 180
3 ORDER BY nom ASC, naissance DESC ;

15
Langage d’interrogation des données

Les fonctions de groupes

Fonction Description
Count(*|[ DISTINCT|ALL] expr) Le nombre de ligne de expr
Avg( [ DISTINCT | ALL] expr) Valeur moyenne de expr, en ignorant les
valeurs NULL
Min( [ DISTINCT | ALL] expr) Valeur minimale de expr, en ignorant les
valeurs NULL
Max( [ DISTINCT | ALL] expr) Valeur maximale de expr, en ignorant les
valeurs NULL
Sum( [ DISTINCT | ALL] expr) Somme des valeurs de expr, en ignorant
les valeurs NULL
Langage d’interrogation des données

Exemples

SQL> SELECT Avg(salaire), Sum(salaire), Min(salaire),


2 Max(salaire)
3 FROM personnes ;

SQL> SELECT Min(naissance),Max(naissance) FROM personnes ;

SQL> SELECT Min(nom), Max(nom)


2 FROM personnes ;

SQL> SELECT Count(*)


2 FROM personnes ;

17
Langage d’interrogation des données

Exemples
SQL> SELECT Count( telephone) FROM personnes

SQL> SELECT Count( DISTINCT prenom) FROM personnes;

SQL> SELECT Count(telephone), COUNT(*)


2 FROM personnes WHERE ville = ‘Rabat’;

18
Langage d’interrogation des données
EMP Deptno sal
10 5000
10 1500
10 1300
20 2975 Question:
20 3000 salaire moyen pour
20 1100 Chaque département de
30 2850 la table EMP
30 1250
30 1600
30 1500
30 950
30 1250

Table EMP 19
Langage d’interrogation des données

La clause GROUP BY

SELECT column, group_fonction FROM table


[ WHERE condition ]
[ GROUP BY group_by_expression ] [ ORDER BY column];

Remarque
Les attributs du select ne peuvent être que
– L’attribut qui crée le groupe
– Une fonction de groupe.
20
Langage d’interrogation des données

Exemples

SELECT deptno, AVG( sal ) FROM emp


GROUP BY deptno;

EMP Deptno sal


10 2600
20 2175
30 1566.7

21
Langage d’interrogation des données

EMP Deptno job sal


10 Dir technique 5000
10 Chef projet 1500
10 programmeur 1300
20 Chef projet 2975
Question
20 Analyste 3000
20 programmeur 1100 Somme des salaires pour
30 Chef projet 2850 chaque poste, regroupés
30 commercial 1250
par département
30 commercial 1600
30 commercial 1500
30 programmeur 950
30 commercial 1250
22
Langage d’interrogation des données

SELECT deptno, job, SUM( sal ) FROM emp


GROUP BY deptno, job;

Deptno job
10 programmeur
10 Chef projet Dir
10 technique
20 Analyste
20 programmeur
20 Chef projet
30 programmeur
30 Chef projet
30 Commercial
23
Langage d’interrogation des données

GROUP BY avec HAVING

 SELECT column, group_fonction


 FROM table
 [ WHERE condition ]
 [ GROUP BY group_by_expression]
 [ HA VING group_condition ] ]
 [ ORDER BY column];

24
Langage d’interrogation des données
SELECT deptno, MAX( sal )
FROM emp GROUP BY deptno
HAVING MAX( sal ) > 2900; Deptno job sal
10 Dir technique 5000
10 Chef projet 1500
Deptno M 10 programmeur 1300
10 5 20 Chef projet 2975
20 20 Analyste 3000
30 2 20 programmeur 1100
30 Chef projet 2850
30 commercial 1250
30 commercial 1600
Deptno MAX(sal)
30 commercial 1500
10 5000
30 programmeur 950
20 3000
30 commercial 1250 25
Synthèse

SELECT column, group_fonction FROM tables


[ WHERE condition ]
[ GROUP BY group_by_expression
[ HAVING group_condition ] ]
[ ORDER BY column];

17
Langage d’interrogation des données

Requêtes sur plusieurs tables

 Les opérateurs de jointures

 L’imbrication de requêtes

 Les opérateurs ensemblistes

27
Langage d’interrogation des données

Requêtes sur plusieurs tables : La jointure

 Equijointure ( jointure naturelle)


 Autojointure (jointure sur la même table)
 Non-équijointure (jointure par non égalité, théta
jointure)

28
Langage d’interrogation des données

Equijointure ( jointure naturelle)

SELECT expr
FROM table1, table 2
WHERE table1.col1= table2.col2;

tab1 col1 tab2 col2

29
Langage d’interrogation des données
Equijointure ( jointure naturelle)

Liste des patients ayant un RDV


avec le docteur ‘Ouazzani’

SELECT PAT.NomPat
FROM PAT, RDV, DOC
WHERE PAT.NumPat = RDV.NumPat
and RDV.NumDoc = DOC.NumDoc
and DOC.NomDoc =‘Ouazzani’;
30
Langage d’interrogation des données
Equijointure (Exemple)
Pour déterminer le service d'un employé, vous devez comparer la valeur de la colonne
DEPARTMENT_ID de la table EMPLOYEES à celles de la colonne DEPARTMENT_ID de la
table DEPARTMENTS. La relation entre les tables EMPLOYEES et DEPARTMENTS est
appelée équijointure puisque les valeurs de la colonne DEPARTMENT_ID des deux tables sont
égales.

31
Langage d’interrogation des données
Equijointure ( jointure naturelle)

SELECT employees.employee_id, employees.last_name,


employees.department_id, departments.department_id,
departments.location_id
FROM employees, departments
WHERE employees.department_id = departments.department_id;

32
Langage d’interrogation des données
Equijointure ( Joindre plus de deux tables)

Pour joindre n tables entre elles, il faut au minimum n-1 conditions de


jointure. Par exemple, deux jointures au moins sont nécessaires pour
joindre trois tables.
33
Langage d’interrogation des données
Auto-jointures = joindre une table à elle-même

EMP Deptno NOM sal


Liste des employés 10 Ouazzani 5000
ayant un salaire égal à 10 Rachidi 1500
10 Filali 1250
celui de « Filali» 20 Youssfi 2975
20 Anwar 3000
20 Radi 1100
30 Rabii 2850
30 Naciri 1250
30 Ghazali 1600
30 Farabi 1500
30 Bahi 950
30 Bahiri 1250 34
Langage d’interrogation des données

Autojointure

SELECT expr
FROM table1 Alias1, table1 Alias 2
WHERE Alias1.col1= Alias2.col1

tab1 col1

35
Langage d’interrogation des données
Autojointure
Deptno NOM sal
Liste des employés 10 Ouazzani 5000
ayant un salaire égale à 10 Rachidi 1500
celui de « Filali » 10 Filali 1250
20 Youssfi 2975
20 Anwar 3000
20 Radi 1100
30 Rabii 2850
SELECT E2.Nom 30 Naciri 1250
FROM EMP E1, EMP E2
WHERE E1.sal=E2.sal 30 Ghazali 1600
and 30 Farabi 1500
E1.Nom ='Filali'; 30 Bahi 950
30 Bahiri 1250
36
Langage d’interrogation des données
Autojointure
Deptno NOM sal

Liste des employés ayant un 10 Ouazzani 5000


salaire <= à celui de « Filali » 10 Rachidi 1500
10 Filali 1250
20 Youssfi 2975
20 Anwar 3000
20 Radi 1100
30 Rabii 2850
SELECT E2.Nom
30 Naciri 1250
FROM EMP E1, EMP E2
WHERE E1.sal <= E2.sal 30 Ghazali 1600
and 30 Farabi 1500
E1.Nom ='Filali'; 30 Bahi 950
30 Bahiri 1250
37
Langage d’interrogation des données
Non Equijointure (thêta jointure)
Une non-équijointure est une condition de jointure contenant un opérateur qui
n'est pas un opérateur d'égalité.

La liste des employés et leurs grades


SELECT EMP.NOM, SAL.GRA
FROM EMP, SAL
WHERE EMP.SAL BETWEEN SAL.SALMIN and SAL.SALMAX

EMP nom salemp SAL salmin salmax GRA

Radi 100 50 100 1


Naciri 220 101 220 2
Filali 110 221 300 3
Alaoui 200 301 500 4
38
Langage d’interrogation des données
Non Equijointure (thêta jointure)

SELECT e.ename, e.sal, j.grade


FROM emp e, salgrade j
WHERE e.sal
BETWEEN j.losal AND j.hisal

39
Langage d’interrogation des données

Les Requêtes imbriquées

40
Langage d’interrogation des données
Syntaxe générale

SELECT colonnes_de_projection
sens d’exécution

FROM table
WHERE expr operator (
SELECT colonnes_de_projection
FROM table
WHERE …..
);

Remarque:
Pas de ORDER BY ou UNION dans la sous requête

41
Langage d’interrogation des données
Type de sous requête opérateur

ramène une seule ligne =, >, >=, >, <=, <>

ramène plusieurs lignes IN : appartenance


ALL : à tous
ANY: au moins un
EXISTS : non vide

Plusieurs lignes avec plusieurs EXISTS : nonvide


colonnes.

Type de sous requêtes et opérateurs possibles


42
Langage d’interrogation des données
Exemples
Le nom des employés qui gagnent plus que ’Filali’ ?
SELECT nom
FROM EMP
WHERE salemp > (SELECT salemp
FROM EMP
WHERE nom=‘Filali’); EMP nom salemp
Radi 100
Les employés ayant un salaire supérieur à la
Moyenne ? Alaoui 220

SELECT nom Filali 110


FROM EMP
WHERE salemp < (SELECT AVG(salemp) Sari 200
FROM EMP);

43
Langage d’interrogation des données
Exemples
Le nom des employés qui ne sont pas les moins payés ?

SELECT nom EMP nom salemp


FROM EMP Radi 100
WHERE salemp > ANY (SELECT salemp
FROM EMP ); Alaoui 220

Le nom de l’employé le mieux payé ? Filali 110

SELECT nom Sari 200


FROM EMP
WHERE salemp >= ALL (SELECT salemp
FROM EMP);

44
Langage d’interrogation des données

IN : la condition est vraie si l’élément appartient au résultat retourné

par la sous-requête

ANY : la condition est vraie si la comparaison est vérifiée pour au moins un

élément du résultat retourné par la sous-requête

ALL : la condition est vraie si la comparaison est vérifiée pour tous les

élément du résultat retourné par la sous-requête

EXISTS (sous-requête) - Vraie si Résultat(sous-requête) != Ensemble vide,

Faux dans le cas contraire

45
Langage d’interrogation des données
Exemples :

Q1 : Les docteurs n’ ayant pas eu des RDV en 2010 ?

Select * from DOC


Where NumDoc NOT IN (select NumDoc from RDV
where DateRDV
Between '01/01/2010' and '31/12/2010')

Select * from DOC D


Where NOT EXISTS (select * from RDV R
where R.NumDoc=D.NumDoc
and DateRDV
Between ‘01/01/2010’ and ‘31/12/2010’)

46
Langage d’interrogation des données
Opérateurs ensemblistes

INTERSECT
UNION
UNION ALL
MINUS

Requête SELECT
<Opérateur ensembliste>
Requête SELECT

47
Langage d’interrogation des données
Exemples

Q1 : les Numeros de docteurs n’ayant jamais eu de RDV ?


Select NumDoc from DOC
MINUS
Select NumDoc from RDV;

Q2 : les docteurs patients ?

Select CIN, Nom, Prénom from DOC


INTERSECT
Select CIN, Nom, Prénom from PAT;

48
Langage de Manipulation des Données
(LMD)
Les différents types de commandes SQL

Interrogation de données : SELECT

Manipulation de données : INSERT, UPDATE, DELETE


Définition de données : CREATE, ALTER, DROP, RENAME, TRUNCATE

Contrôle des transactions : COMMIT, ROLLBACK, SAVEPOINT

Sécurité : GRANT, REVOKE


Langage de Manipulation des Données
Syntaxe INSERT INTO
INSERT INTO <nom table>
[( colonne1 [, colonne2] … )]
VALUES
(<valeur1> [, <valeur2>] … )
| <requête>;
Exemples:
Table: DOC(NumDoc, NomDoc, VilleDoc)

INSERT INTO DOC (NumDoc, NomDoc, VilleDoc) values (123,


‘Filali’,’Rabat’);

<=> INSERT INTO DOC values (123, ‘Filali’,’Rabat’);

INSERT INTO DOC (NumDoc, NomDoc) values (444, ‘Alaoui’);

INSERT INTO DOC select * from tabledesmedecins;


Langage de Manipulation des Données
Exemples:

INSERT INTO EMP


VALUES(1111, 'KAMAL', 'SALESMAN', 2, '01/01/1984', 10000, 5,30);

INSERT INTO EMP (EMPNO, ENAME , JOB, HIREDATE, SAL, DEPTNO)


VALUES(2222, ‘AMINE', ‘ANALYST', '01/01/1984', 10000, 30);
Langage de Manipulation des Données
Syntaxe UPDATE

UPDATE <nom table> SET <colonne> =


valeur [, <colonne> = valeur ] …
[WHERE <condition de modification> ];

Exemples:
Table: DOC(NumDoc, NomDoc, VilleDoc)
UPDATE DOC
SET NomDoc=‘Rachidi’, NomVille=‘Casablanca’
Where NumDoc=444;

UPDATE DOC
SET VilleDoc=Null;

Modifier le nom de KAMAL en "KARIM" dans la table EMP?


Langage de Manipulation des Données
Syntaxe DELETE

DELETE FROM <nom table>


[WHERE <condition>]

Exemples:
Table: DOC(NumDoc, NomDoc, VilleDoc)

DELETE FROM DOC WHERE NumDoc=444;

DELETE FROM DOC


WHERE NomDoc IN (
select NomDOc from DOC
WHERE VilleDoc=NULL
);
Les différents types de commandes SQL

Interrogation de données : SELECT

Manipulation de données : INSERT, UPDATE, DELETE


Définition de données : CREATE, ALTER, DROP, RENAME, TRUNCATE

Contrôle des transactions : COMMIT, ROLLBACK, SAVEPOINT

Sécurité : GRANT, REVOKE


Langage de Définition des Données

Syntaxe de la commande CREATE TABLE

CREATE TABLE nom Table


(
colonne type [contrainte de la colonne]
[, colonne type [contrainte de la colonne]]

[, contrainte de la table] …);


Langage de Définition des Données
Contrainte sur une colonne
[ CONSTRAINT <nom de la ontrainte>
[NOT NULL | UNIQUE | PRIMARY KEY |
CHECK (condition) |
REFERENCES <nom de la table> (colonne)
]
]
Contrainte sur une table

[ CONSTRAINT <nom de la contrainte> [


UNIQUE (liste de colonnes) |

PRIMARY KEY (liste de colonnes) |

CHECK (condition) |

FOREIGN KEY (liste de colonnes)


REFERENCES <nom de la table> (liste colonnes) [<mode>]
]
]
Langage de Définition des Données

[<mode>::= [ON DELETE {CASCADE|SET DEFAULT|SET NULL}]


| [ON UPDATE {CASCADE| SET DEFAULT| SET NULL}]
]

Remarque:
Le mode est à appliquer :
 Sur la colonne ou la table: si la contrainte ne fait intervenir
qu’un SEUL ATTRIBUT.
 sur la table: si la contrainte fait intervenir PLUSIEURS ATTRIBUTS.
Langage de Définition des Données

Create Table DOC(


NumDOC integer, NomDOC
VARCHAR2(20), VilleDOC
VARCHAR2(20),
Constraint PK_DOC Primary Key (NumDOC)
);

Create Table DOC(


NumDOC NUMBER PRIMARY KEY,
NomDOC VARCHAR2(20),
VilleDOC VARCHAR2(20)
);
Langage de Définition des Données
Create Table DOC(
NumDOC Number Constraint PK_DOC PRIMARY KEY,
NomDOC VARCHAR2(20),
VilleDOC VARCHAR2(20)
);
Langage de Définition des Données

Create Table DET(


NumORD Number,
NumLigne Number,
NumMED Number,
QTE Number Not Null,
Constraint PK_DET Primary Key (NumORD, NumLigne),
Constraint NbMaxMed Check (NumLigne < 5),
Constraint Ref_ORD Foreign Key (NumORD)
References ORD(NumORD) on update cascade,
Constraint Ref_MED Foreign Key (NumMED)
References MED(NumMED)on update cascade
);
Langage de Définition des Données
Syntaxe de la commande ALTER TABLE

ALTER TABLE <nom de la Table>


{
ADD COLUMN <def Colonne> |
DROP COLUMN <nom Colonne> [RESTRICT|CASCADE] |
ADD CONSTRAINT <def Contrainte> |
DROP <nom Contrainte> [RESTRICT|CASCADE] |
}

RESTRICT : pas de destruction si l’objet est référencé ou utilisé ailleurs


CASCADE : propage la destruction
Langage de Définition des Données

Exemples

ALTER TABLE DOC ADD COLUMN TEL NUMBER NOT NULL;

ALTER TABLE DOC DROP COLUMN TEL;

ALTER TABLE DOC ADD CONSTRAINT NN_NOM NomDoc NOT NULL;

ALTER TABLE DOC DROP CONSTRAINT NN_NOM;


Langage de Définition des Données
Syntaxe DROP TABLE

DROP TABLE <Nom de la table>

Exemple:

Drop table DOC;


LES VUES
LES VUES:
 Table virtuelle calculée à partir d’autres tables ou vues par une requête
 Pas d’existence physique mais recalculée chaque fois qu’elle est invoquée
 Vue mono table
 Vue multi-tables

Intérêts:
 Indépendance application/données
 Personnalisation des données selon les besoins des utilisateurs
 Confidentialité
 Rapidité des requêtes

 Utilisation:
 Pour les sélections, comme une table ordinaire
 Pour les maj. (insert, update, delete), y a des restrictions
LES VUES:
Syntaxe de CREATE VIEW

CREATE VIEW <nom vue> [(liste des attributs)]


AS <requête de sélection>
[WITH CHECK OPTION]

WITH CHECK OPTION

Permet de vérifier que les mises à jour ou les insertions faites à


travers la vue ne produisent que des lignes qui feront partie de la
sélection de la vue.
LES VUES:

Exemples:

CREATE VIEW MedecinsDeRabat


AS
Select * From DOC
Where villeDoc=‘Rabat’;

CREATE VIEW DocPat AS


Select NomDOc, NomPat
FROM DOC D, RDV R, PAT P
WHERE D.NumDoc=R. NumDoc and R.NumPat=P.NumPat;
LES VUES:
Règles d’utilisations des VUES

 Vous pouvez exécuter des opérations LMD sur des vues simples.
 Vous ne pouvez pas supprimer une ligne si la vue contient :
- des fonctions de groupe,
- une clause GROUP BY,
- le mot-clé DISTINCT,
- la pseudo-colonne ROWNUM.
- des colonnes définies par des expressions.
- des colonnes NOT NULL se trouvant dans les tables de base
qui ne sont pas sélectionnées par la vue.
LES VUES:
Règles d’utilisations des VUES
Le SELECT principal de

DELETE
UPDATE
SELECT

INSERT
la vue contient

Plusieurs tables OUI NON NON NON


GROUP BY OUI NON NON NON
DISTINCT OUI NON NON NON
fonction de groupe OUI NON NON NON
Attribut calculé OUI NON OUI NON
Attribut NOT NULL pas dans le OUI OUI OUI NON
SELECT
UNION, INTERSETC, MINUS OUI NON NON NON

Vous aimerez peut-être aussi