Donnes 1
(SGBD1)
19/10/2011 F.ELLABBAR 2
Dfinition
19/10/2011 F.ELLABBAR 5
Objectifs des systmes de gestion de bases de
donnes
19/10/2011 F.ELLABBAR 6
Services attendus dun SGBD
LM
LDD D
SGF
STOCKAG
INT
Disque
E
SEC
KUP
CO C
NF
BA
19/10/2011 F.ELLABBAR 7
Langage de description de donnes (LDD)
DDL (Data Description Language)
Permet de dcrire les donnes
Type, Longueur, Nature
Valeurs acceptes (contraintes dintgrit sur domaine)
Rgles de gestion statiques (contraintes dintgrit
fonctionnelles)
19/10/2011 F.ELLABBAR 8
Langage de manipulation de donnes(LMD)
19/10/2011 F.ELLABBAR 9
Gestion du stockage
La faon dont le S.G.B.D organise les donnes en
fichiers est transparente pour lutilisateur.
Par ailleurs, avec un S.G.B.D les donnes sont
indpendantes des programmes. Cest dire que
les donnes sont dcrites lextrieur des
programmes et quon peut donc modifier leur
description sans forcment refaire les
programmes. Et par ailleurs on peut connatre
leur structure sans regarder les programmes qui
les utilisent.
19/10/2011 F.ELLABBAR 10
Sauvegarde et restauration (Backup)
19/10/2011 F.ELLABBAR 11
Confidentialit et Scurit
Cette fonctionnalit consiste garantir que seuls les utilisateurs
autoriss peuvent effectuer des oprations correctes sur la base de
telle sorte quelles sont maintenu dans un tat cohrent :
19/10/2011 F.ELLABBAR 12
Contrle dintgrit
La plupart des S.G.B.D offrent la possibilit de
dcrire les rgles de gestion du systme
dinformation de lentreprise. Par exemple, si un
client nexiste pas, on ne peut pas lui associer de
facture.
Une fois toutes les rgles dcrites, le S.G.B.D
vrifie que les mises jour effectues sur les
donnes respectent ces rgles. Ainsi, il refusera la
cration de la facture tant que le client ne sera
pas cr.
19/10/2011 F.ELLABBAR 13
Les accs concurrents aux donnes
19/10/2011 F.ELLABBAR 14
Les accs concurrents aux donnes
La plupart des SGBD sur la march utilisent pour cela
un mcanisme de verrouillage.
Lorsquune donne est accde en lecture, un verrou
partag y est plac.
Lorsquune donne est accde en criture, un
verrou exclusif y est plac.
Un verrou partag permet toujours daccder en
lecture sur cette donne, mais toute opration
dcriture sur cette mme donne sera bloque en
attendant que le verrou soit libr.
En revanche, un verrou exclusif bloque toute
opration de lecture ou dcriture sur cette donne.
19/10/2011 F.ELLABBAR 15
Architecture dun SGBD
On distingue 3 niveaux de description :
Le niveau conceptuel ou logique
Le niveau interne
Le niveau externe
19/10/2011 F.ELLABBAR 16
Architecture Stockage physique
Schma interne
Description de lorganisation
physique des donnes
Domaine des
Schma Schma Schma Application accdant aux
crateurs
externe externe externe donnes : des vues (accs
dapplications
limits)
Ce dcoupage permet des modifications chaque niveau sans que cela interagisse (le
moins possible) sur les autres niveaux.
19/10/2011 F.ELLABBAR 17
Les principaux types de SGBD
Le modle hirarchique
Le modle rseau
Le modle relationnel
Le modle objet
19/10/2011 F.ELLABBAR 18
Un peu d'histoire
19/10/2011 F.ELLABBAR 19
Modle hirarchique
Liaison entre les objets de type 1
Client
Client n
Client
Client Modle arborescent dont le
parcours se fait du pre vers le
fils laide de pointeurs
Commandes
Commandes
Complexit importante
Commandes Commandes
Commandes Commandes
Systme DL1 / IBM
19/10/2011 F.ELLABBAR 20
Modle rseau
Liaison entre les objets de type n n
Client
Client
Modle dont le parcours se fait laide
Client de pointeurs mais en tous sens
Client
Paternit multiple
Systme IDS2 de Bull
Commandes Commandes
Commandes Commandes
Commandes Commandes
Commandes Articles
Lignes
Lignes
Lignes
Commande
Lignes
Commande
Commande
Commande
19/10/2011 F.ELLABBAR 21
Modle relationnel
Bas sur le modle Entit Relation
driv de la thorie des ensembles et
Client Commande
de la logique des prdicats
PK IdClient PK IdCommande Grande indpendance entre vue
FK1 IdClient
externe et stockage interne
Simplicit - Evolutivit
Thorie : Codd 1972
CommandeArticle
Article
PK,FK1 IdCommande
IBM System R 1979 et DB2 1982
PK IdArticle
PK,FK2 IdArticle
19/10/2011 F.ELLABBAR 22
Modle relationnel
SGBDR Client / Serveur
DB2 - IBM
UDB (Universal Data Base Tous Systmes)
Oracle
SQL Server Microsoft
Informix (Rachat par IBM)
MYSQL (Open Source)
19/10/2011 F.ELLABBAR 23
Modle relationnel
SGBDR Fichier
Access
Paradox
FoxPro
19/10/2011 F.ELLABBAR 24
Modle Objet
19/10/2011 F.ELLABBAR 25
19/10/2011 F.ELLABBAR 26
2.1 Prsentation de SQL
SQL signie Structured Query Language c'est--dire Langage d'interrogation
structur.
En fait SQL est un langage complet de gestion de BDR. Il a t conu par IBM
dans les annes 70. Il est devenu le langage standard des (SGBDR).
19/10/2011 F.ELLABBAR 27
2.2 Types de donnes
Type numrique : NUMBER, INTEGER, int,
smallint, bigInt
On peut crire:
NUMBER(taille_maxi)
NUMBER(taille_maxi, dcimales)
19/10/2011 F.ELLABBAR 28
Remarques:
19/10/2011 F.ELLABBAR 29
2.3 Cration des tables
Par exemple, si nous disposons dune table pour enregistrer les informations
des clients, les colonnes peuvent alors inclure des donnes telles que le
prnom, le nom, ladresse, la ville, le pays, la date de naissance, et ainsi de suite.
Lors de la spcification dune table, il faut inclure les types de donnes relatives
cette colonne particulire.
19/10/2011 F.ELLABBAR 30
2.3 Manipulation des tables
La syntaxe SQL de CREATE TABLE est :
CREATE TABLE "nom de table"
("colonne 1" " type de donnes pour la colonne 1",
"colonne 2" "type de donnes pour la colonne 2",
... )
19/10/2011 F.ELLABBAR 31
2.3 Manipulation des tables
Il est aussi possible dattribuer une valeur par dfaut chaque colonne. La valeur par
dfaut est utile lorsquaucune valeur de colonne na t spcifie au moment de
linsertion des donnes dans la table.
Pour spcifier une valeur par dfaut, ajoutez "Default [value]" aprs la dfinition du
type de donnes. Dans lexemple ci-dessus, pour dfinir par dfaut la colonne
"Address" "Unknown" (Inconnu) et Ville Rabat", il faut saisir :
CREATE TABLE Client
(nom varchar(50),
prenom varchar(50),
Address varchar(50) default 'Unknown',
ville varchar(50) default Rabat',
pays varchar(25),
Date_naissance date) ;
Vous pouvez galement limiter le type dinformations que doit contenir une table ou
une colonne. Pour ce faire, utilisez le mot-cl CONSTRIANT
19/10/2011 F.ELLABBAR 32
2.4 Les Contraintes du SQL
1. NOT NULL
Une colonne accepte par dfaut une valeur NULL. Pour rejeter une valeur
NULL dans une colonne, vous devez dfinir une contrainte sur cette colonne
en indiquant que celle-ci naccepte pas de valeur NULL.
19/10/2011 F.ELLABBAR 33
2.4. Les Contraintes du SQL
2. UNIQUE
La contrainte UNIQUE garantit que toutes les valeurs dune colonne ne
peuvent comporter de doublons.
Par exemple, dans linstruction suivante
CREATE TABLE Client
(SID NUMBER UNIQUE,
nom varchar (30) NOT NULL,
prenom varchar(30));
La colonne "SID" naccepte pas de doublons, alors quune telle contrainte ne
sapplique pas aux colonnes nom" et "prenom".
(pour une contrainte sur une table :)
UNIQUE (colonne1, colonne2,...)
19/10/2011 F.ELLABBAR 34
2.4 Les Contraintes du SQL
3.CHECK
La contrainte CHECK permet que toutes les valeurs dune colonne
satisfassent des conditions donnes.
19/10/2011 F.ELLABBAR 35
2.4 Les Contraintes du SQL
4.Cl Primaire
Exemple :
CREATE TABLE Client
(SID NUMBER PRIMARY KEY,
nom varchar (30),
prenom varchar(30));
Ou
(SID NUMBER constraint pk_Client primary key,
5.Cl trangre
La cl trangre reprsente un champ (ou des champs) qui pointe vers la cl primaire
dune autre table:
(pour une contrainte sur une colonne :)
REFERENCES tableref [(col1 )]
[ON DELETE CASCADE][ON UPDATE CASCADE]
(pour une contrainte sur une table :)
FOREIGN KEY (colonne1, colonne2,...)
REFERENCES tableref [(col1, col2,...)]
[ON DELETE CASCADE][ON UPDATE CASCADE]
Ou (colonne type CONSTRAINT fk_c REFERENCES
tablreference(colonne reference) [ON DELETE CASCADE] [ON UPDATE
CASCADE]
19/10/2011 F.ELLABBAR 37
2.4 Les Contraintes du SQL
5.Cl trangre
L'option ON DELETE CASCADE indique que la suppression d'une ligne de
tableref va entraner automatiquement la suppression des lignes qui la
rfrencent dans la table. Si cette option n'est pas indique, il est impossible de
supprimer des lignes de tableref qui sont rfrences par des lignes de la table.
La norme SQL2 offre 4 autres options qui ne sont pas implmente dans Oracle:
ON UPDATE CASCADE
ON DELETE SET DEFAULT
ON UPDATE SET NULL
ON UPDATE SET DEFAULT
19/10/2011 F.ELLABBAR 38
2.4 Les Contraintes du SQL
5.Cl etrangre
Exemple:
19/10/2011 F.ELLABBAR 39
2.4 Les Contraintes du SQL
5.Cl etrangre
Exemple:
19/10/2011 F.ELLABBAR 40
Remarques
19/10/2011 F.ELLABBAR 41
Remarque: CREATE TABLE AS
La commande CREATE TABLE a dj t vue, Une variante permet d'insrer
pendant la cration de la table des lignes venant d'autres tables :
CREATE TABLE nom de table (col type......)
AS SELECT .....
Exemple :
CREATE TABLE MINIDEPT(CLE INTEGER, NOM VARCHAR(20)) AS SELECT
NUM_DEPT, NOMD FROM DEPT
Cet ordre crera une table MINIDEPT et la remplira avec deux colonnes des lignes
de la table DEPT. Il faut videmment que les dfinitions des colonnes de la table
cre et du rsultat de la slection soient compatibles en type et en taille. On
peut galement ne pas donner les noms et type des colonnes de la table cre.
Dans ce cas les colonnes de cette table auront les mmes noms, types et tailles
que celles de l'interrogation :
CREATE TABLE DEPT10 AS SELECT * FROM DEPT
WHERE NUM_DEPT = 10
19/10/2011 F.ELLABBAR 42
2.5 Modification et suppression dune table
la commande ALTER TABLE permet de grer les colonnes d'une table : ajout
d'une colonne, suppression et modification d'une colonne existante.
Ajout d'une colonne ADD
ALTER TABLE table
ADD (col1 type1, col2 type2, ...);
19/10/2011 F.ELLABBAR 43
2.5 Modification et suppression dune table
Modification d'une colonne - MODIFY
ALTER TABLE table
MODIFY (col1 type1, col2 type2, ...)
col1, col2... sont les noms des colonnes que l'on veut modifier. Elles doivent
bien sr dj exister dans la table. type1, type2,... sont les nouveaux types
que l'on dsire attribuer aux colonnes.
19/10/2011 F.ELLABBAR 44
2.5 Modification et suppression dune table
Exemple:
alter table personne
modify ( prenoms null,
nom varchar(50));
On peut donner une contrainte de colonne dans la nouvelle
dfinition de la colonne.
Exemple:
alter table personne
modify ( sexe char(1)
constraint per_sexe check(sexe in ('m', 'f')));
19/10/2011 F.ELLABBAR 45
2.5 Modification et suppression dune table
Suppression d'une colonne - DROP COLUMN
ALTER TABLE table
DROP COLUMN col;
La colonne supprime ne doit pas tre rfrence par une cl trangre
ou tre utilise par un index.
Renommer une colonne - RENAME COLUMN
ALTER TABLE table
RENAME COLUMN ancien_nom TO nouveau_nom;
Renommer une table - RENAME TO
ALTER TABLE ancien_nom
RENAME TO nouveau_nom
Supprimer une table - DROP TABLE
DROP TABLE table [CASCADE CONSTRAINTS]
Il est impossible de supprimer une table si la table est rfrence par
une contrainte d'intgrit rfrentielle
46
19/10/2011 F.ELLABBAR
Remarques:
linstruction suivante permet de lister les contraintes cres par
lutilisateur
Select * from user_constraints;
19/10/2011 F.ELLABBAR 47
2.6 Ajouter, supprimer ou renommer une contrainte
19/10/2011 F.ELLABBAR 48
2.6 Ajouter, supprimer ou renommer une contrainte
Exemple
ALTER TABLE EMP
DROP CONSTRAINT NOM_UNIQUE;
Ou ADD CONSTRAINT SAL_MIN CHECK(SAL > 1000);
Ou RENAME CONSTRAINT NOM1 TO NOM2 ;
Ou MODIFY CONSTRAINT SAL_MIN DISABLE;
Ou DISABLE CONSTRAINT NOM_UNIQUE
Ou ENABLE CONSTRAINT NOM_UNIQUE
Ou ADD CONSTRAINT FK_COMMANDE FOREIGN KEY
(NUM_CLIENT) REFERENCES CLIENT(NUM);
19/10/2011 F.ELLABBAR 49
19/10/2011 F.ELLABBAR 50
3.1 Insertion
INSERT INTO table (col1,..., coln )
VALUES (val1,...,valn );
Ou
INSERT INTO table VALUES (val1,...,valn );
19/10/2011 F.ELLABBAR 51
3.1 Insertion
Client(SID (pk), nom(not null), prenom, ville default(inconnu))
Exemple 1:
INSERT INTO Client
VALUES (10, nom1', prenom1,fes);
Exemple 2:
INSERT INTO client (SID, nom, prenom)
VALUES (3, nom1,prenom1);
Exercice:
Insrer dans la table client les informations suivantes:
(12, nom1,prenom1,ville1)
(14, nom2,prenom2)
(10, nom2)
(122, nom3,prenom3,ville3)
19/10/2011 F.ELLABBAR 52
3.2.4 Gnration de cls primaires :Squences (oracle)
19/10/2011 F.ELLABBAR 53
Table DUAL (oracle)
C'est une particularit d'Oracle. Cette pseudo-
table ne contient qu'une seule ligne et une seule
colonne et ne peut tre utilise qu'avec une
requte select.
Elle permet de faire afficher une expression dont
la valeur ne dpend d'aucune table en particulier.
Exemple
Afficher la date d'aujourd'hui, le nom de
l'utilisateur et le rsultat d'un calcul :
select sysdate, user, round(3676 / 7),
sqrt(5) from dual
19/10/2011 F.ELLABBAR 54
19/10/2011 F.ELLABBAR 55
3.2 L'ordre SELECT
Pour afficher les donnes sous forme dun tableau dont les colonnes portent
un intitul, SQL propose linstruction suivante:
Exemple :
La requte pour afficher le nom et le sid de la table client:
select sid, nom from client;
La requte pour afficher toutes les colonnes de la table client:
select * from client;
La requte pour afficher les lignes dont le sid >= 13:
select * from client where sid >=13;
Exercice: slectionner les lignes de la table client:
19/10/2011 F.ELLABBAR 56
3.2.1 L'ordre SELECT: Clause WHERE simple
WHERE prdicat
Un prdicat simple est la comparaison de deux expressions ou plus au
moyen d'un oprateur logique :
19/10/2011 F.ELLABBAR 57
3.2.1 L'ordre SELECT: Clause WHERE simple
Les trois types d'expressions (arithmtiques, caractres, ou dates) peuvent tre
compares au moyen des oprateurs d'galit ou d'ordre (=, !=, <, >, <=, >=)
pour les types date, la relation d'ordre est l'ordre chronologique
pour les types caractres, la relation d'ordre est l'ordre lexicographique.
Il faut ajouter ces oprateurs classiques les oprateurs suivants:
BETWEEN, IN, IS NULL, LIKE :
exp1 BETWEEN exp2 AND exp3
est vrai si exp1 est compris entre exp2 et exp3, bornes incluses.
exp1 IN (exp2 , exp3...)
est vrai si exp1 est gale l'une des expressions
exp IS [NOT] NULL
est vrai si l'expression a la valeur NULL (ou l'inverse avec NOT).
Remarque : Le prdicat exp = NULL n'est jamais vrai, et ne permet donc
pas de tester si l'expression est NULL.
19/10/2011 F.ELLABBAR 58
3.2.1 L'ordre SELECT: Clause WHERE simple
exp1 LIKE exp2 : teste l'galit de deux chanes en tenant compte des caractres
jokers dans la 2me chane :
_ remplace 1 caractre exactement
% remplace une chane de caractres de longueur quelconque, y compris de
longueur nulle
l'expression 'MARTIN' LIKE '_AR%' sera vraie.
Remarques :
L'utilisation des jokers ne fonctionne qu'avec LIKE ; elle ne fonctionne pas
avec =.
Si on veut faire considrer _ ou % comme des caractres normaux, il faut
les faire prcder d'un caractre d'chappement que l'on indique par la
clause ESCAPE.
Par exemple, la requte suivante cache les noms qui contiennent le
caractre % : select nom from emp where nom like '%\%%' escape '\'
19/10/2011 F.ELLABBAR 59
3.2.2 L'ordre SELECT: Clause WHERE complexe
Oprateurs logiques :
Les oprateurs logiques AND et OR peuvent tre utiliss pour combiner plusieurs
prdicats (l'oprateur AND est prioritaire par rapport l'oprateur OR).
Des parenthses peuvent tre utilises pour imposer une priorit dans l'valuation
du prdicat, ou simplement pour rendre plus claire l'expression logique.
L'oprateur NOT plac devant un prdicat en inverse le sens.
Exemples
Slectionner les employs du dpartement 30 ayant un salaire suprieur 1500 dh.
SELECT NOM FROM EMP
WHERE DEPT = 30 AND SAL > 1500
Afficher une liste comprenant les employs du dpartement 30 dont le salaire est
suprieur 11000 DH ou (attention, la traduction par OR) les employs qui ne
touchent pas de commission.
SELECT nom FROM emp
WHERE dept = 30 AND sal > 11000 OR comm IS NULL
19/10/2011 F.ELLABBAR 60
3.2.3 Fonctions de groupes
19/10/2011 F.ELLABBAR 62
Remarque:
19/10/2011 F.ELLABBAR 64
3.2.5 Le regroupement: Clause GROUP BY
Date Agence CA
exemple:
06/09/2010 Nord 1000 dh
06/09/2010 Sud 2000 dh
06/09/2010 Est 3000 dh
07/09/2010 Nord 2000dh
07/09/2010 Est 5000 dh
07/09/2010 Sud 2000dh
Nous effectuons le regroupement par date et nous sommons sur le CA. Nous obtenons
le code SQL suivant :
SELECT Date, Sum(CA) AS CA_total
FROM Rsultats GROUP BY Date;
dans lequel le regroupement est exprim par la clause GROUP BY. La requte fournit le
rsultat suivant :
Date CA_total
06/09/2010 6000dh
07/09/2010 9000dh
19/10/2011 F.ELLABBAR 65
3.2.5 Le regroupement: Clause GROUP BY
Une requte de slection classique (dans les trois premires lignes), suivie d'un
regroupement.
Date CA_total
La requte fournit le rsultat suivant :
06/09/2010 3000dh
07/09/2010 4000dh
19/10/2011 F.ELLABBAR 66
3.2.5 Le regroupement: Clause GROUP BY
19/10/2011 F.ELLABBAR 67
3.2.6 Le regroupement: Clause GROUP BY
Clause HAVING
HAVING prdicat
Le prdicat suit la mme syntaxe que celui de la clause WHERE. Cependant, il ne
peut porter que sur des caractristiques de groupe : fonction de groupe ou
expression figurant dans la clause GROUP BY
Clause Order By
ORDER BY exp1 [ASC], exp2 [DESC], ...
La clause Order by permet de trier les colonnes dans lordre dcroissant sachant
que par dfaut lordre est croissant.
D'une manire gnrale, une requte avec regroupement s'crit en SQL :
SELECT .........
FROM ...........
WHERE ............
GROUP BY ...........
HAVING .......
19/10/2011 ORDER BY DESC. F.ELLABBAR 68
3.2.6 Le regroupement: Clause GROUP BY
19/10/2011 F.ELLABBAR 69
3.2.6 Le regroupement: Clause GROUP BY
19/10/2011 F.ELLABBAR 70
3.2.6 Le regroupement: Clause GROUP BY
Le comptage des doublons sur deux champs date et agence s'crit ainsi :
19/10/2011 F.ELLABBAR 71
3.2.6 Le regroupement: Clause GROUP BY
Le comptage et les doublons
Le regroupement sans comptage nous permet d'liminer les doublons. Si nous
effectuons l'opration sur la colonne "Agence", nous obtenons la liste des agences.
Le code SQL s'crit :
Agence
Est
Rsultat
Nord
Sud
La requte fournit un rsultat o les agences sont tries par ordre alphabtique.
Comptage
Rsultat
6
19/10/2011 F.ELLABBAR 72
3.2.7 Le regroupement et les fonctions de groupe
Erreurs viter:
Where fonction _group -> exp: where max, where sum INCORECTE
Having fg(fg(col)) exp: having min (sum(sal))>1000 INCORECTE
19/10/2011 F.ELLABBAR 73
19/10/2011 F.ELLABBAR 74
3.2.7 Les jointures
Objectifs: Afficher des Donnes issues de Plusieurs Tables
On a parfois besoin d'obtenir des donnes de plusieurs tables. Dans l'exemple ci-dessus, l'tat affiche les
donnes de deux tables diffrentes.
EMPNO appartient la table EMP.
DEPTNO appartient aux tables EMP et DEPT.
LOC appartient la table DEPT.
Pour obtenir cet tat,
il faut relier les tables
EMP et DEPT et
accder aux donnes
de ces deux tables.
19/10/2011 F.ELLABBAR 75
3.2.7 Les jointures
Dfinition:
Syntaxe:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
19/10/2011 F.ELLABBAR 76
3.2.7 Les jointures: Produit Cartsien
Exemple
SELECT ename , dname FROM emp, dept;
Rsultat: Produit Cartsien
19/10/2011 F.ELLABBAR 77
3.2.7 Les jointures:
Types de Jointures
Il existe deux principaux types de conditions de jointure :
Les quijointures
Les non-quijointures
Les autres mthodes de jointures sont les suivantes :
Jointures externes
Autojointures
Les oprateurs ensemblistes
19/10/2011 F.ELLABBAR 78
3.2.7 Les jointures: Equijointures et Jointures externes
19/10/2011 F.ELLABBAR 79
3.2.7 Les jointures: Equijointures et Jointures externes
19/10/2011 F.ELLABBAR 80
3.2.7 Les jointures: Equijointures et Non-Equijointures
La relation entre la table EMP et la table SALGRADE est une non-quijointure car aucune
colonne de la table EMP ne correspond directement une colonne de la table SALGRADE.
La relation existant entre les deux tables est la suivante: les valeurs de la colonne SAL de la
table EMP sont comprises entre celles des colonnes LOSAL et HISAL de la table SALGRADE. Il
faut donc utiliser un autre oprateur que le signe gal (=) pour effectuer une jointure.
Il se peut que vous ayez besoin de relier une table elle-mme. Ici, pour retrouver le nom
du manager de chaque employ, il faut que la table EMP soit relie elle-mme
WORKER.ENAME||'WORKSFOR'||MANAGER
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
19/10/2011 F.ELLABBAR 82
Autojointures
Soit le schma suivant :
EMP (NUM ,NOM , SAL , POSTE , DEPT)
DEPT (DEPT , NOMD, VILLE )
Slectionner les employs ayant le mme salaire deux deux.
SELECT E1.NOM, E2.NOM FROM EMP E1, EMP E2
WHERE E1.NOM > E2.NOM AND E1.SAL = E2.SAL
Afficher les dpartement ayant la mme ville deux deux
Afficher les noms des employs ayant les mme postes trois trois
19/10/2011 F.ELLABBAR 83
19/10/2011 F.ELLABBAR 84
3.2.8 Sous-interrogation
19/10/2011 F.ELLABBAR 85
3.2.8 Sous-interrogation
Exemple2
Liste des employs ayant mme poste que FAKIR ou un salaire suprieur KADIRI:
19/10/2011 F.ELLABBAR 86
3.2.8 Sous-interrogation
Remarque
Attention : une sous-interrogation une seule ligne doit ramener une seule
ligne ; dans le cas o plusieurs lignes, ou pas de ligne du tout seraient
ramenes, un message d'erreur sera affich et l'interrogation sera
abandonne.
19/10/2011 F.ELLABBAR 87
3.2.8 Sous-interrogation
Remarque
L'oprateur IN est quivalent = ANY.
L'oprateur NOT IN est quivalent != ALL.
Exemple2
Liste des employs du dpartement 10 ayant mme poste que quelqu'un du
dpartement VENTES
19/10/2011 F.ELLABBAR 89
3.2.8 Sous-interrogation
Exemple2
Nom et dpartement des employs ayant le salaire maximal par
dpartement .
19/10/2011 F.ELLABBAR 91
3.2.8 Sous-interrogation
4) Clause EXISTS
La clause EXISTS est suivie d'une sous-interrogation entre parenthses, et prend la
valeur vrai s'il existe au moins une ligne satisfaisant les conditions de la sous-
interrogation.
Exemple
Lister les noms des dpartements qui ont au moins un employ ayant
plus de 10.000 comme salaire.
SELECT NOMD FROM DEPT
WHERE EXISTS (SELECT * FROM EMP
WHERE DEPT = DEPT.DEPT AND SAL > 10000);
Remarque
Si on veut lister les noms des dpartements qui ont aucun employ ayant plus de
10.000 comme salaire.
-En utilise NOT EXISTS
19/10/2011 F.ELLABBAR 92
3.2.8 les oprations ensemblistes en SQL
Notions d'Algbre Relationnelle
Le langage SQL permet de raliser sur un groupe de deux tables les trois oprations de
base de la thorie des ensembles, c'est dire :
l'union
l'intersection
la diffrence
19/10/2011 F.ELLABBAR 93
L'union de deux tables
nom prnom n1 p1
nom prnom n2 p2
n1 p1
UNION n4 p4 = n3 p3
n2 p2
n3 p3 n1 p1 n4 p4
Table2 Rsultat
Table1
nom prnom n1 p1
nom prnom n2 p2
n1 p1
UNION ALL n4 p4 = n3 p3
n2 p2
n3 p3 n1 p1 n4 p4
Table2 n1 p1
Table1
Rsultat
La requte SQL scrit
SELECT nom, prenom
FROM Table1
UNION ALL
SELECT nom, prenom
FROM Table2;
19/10/2011 F.ELLABBAR 95
L'intersection de deux tables (ORACLE)
Exemple
nom prnom
nom prnom nom prnom
n1 p1
INTERSECT n4 p4 = n1 p1
n2 p2
n3 p3 n1 p1 Rsultat
Table2
Table1
La requte SQL scrit (oracle)
SELECT nom, prenom
FROM Table1
INTERSECT
SELECT nom, prenom
FROM Table2;
SELECT nom, prenom FROM Table1 WHERE
(nom,prenom) IN ( SELECT nom,prenom FROM TABLE2)
19/10/2011 F.ELLABBAR 96
La diffrence de deux tables (ORACLE)
Exemple
nom prnom nom prnom
nom prnom
n1 p1
MINUS n4 p4 = n2 p2
n2 p2 n3 p3
n3 p3 n1 p1
Table2
Table1 Rsultat
19/10/2011 F.ELLABBAR 97
19/10/2011 F.ELLABBAR 98
La Modification: lordre update
UPDATE table
SET col1 = exp1, col2 = exp2, ...
WHERE prdicat
Ou UPDATE table
SET (col1, col2,...) = (SELECT ...)
WHERE prdicat
19/10/2011 F.ELLABBAR 99
La Modification: lordre update
(e) Augmenter le salaire des employs habitant rabat de 0.2% de salaire maximal.
Erreurs viter
Modifier une seule table
UPDATE EMP, DEPT SET SAL= SAL+12 Incorrecte
Modifier le salaire de ACHRAF par la somme du salaire de KADIRI et HOUDA.
UPDATE EMP
SET SAL= ( SELECT SAL FROM EMP WHERE NOM=KADIRI ) + ( SELECT SAL
FROM EMP WHERE NOM=HOUDA )
Solution: UPDATE EMP
SET SAL= 0+ ( SELECT SAL FROM EMP WHERE NOM=KADIRI ) + ( SELECT SAL
FROM EMP WHERE NOM=HOUDA )
OU: UPDATE EMP SET SAL=
( SELECT E1.SAL+ E2.SAL FROM EMP E1, EMP E2 WHERE E1.NOM=KADIRI
AND E2.NOM = HOUDA )
19/10/2011 F.ELLABBAR 101
La suppression: lordre delete
Exemple:
1) Supprimer le dpartement 10
DELETE FROM dept
WHERE dept = 10
Dfinition:
Une transaction est un ensemble de modifications de la base qui forment un tout
indivisible : il faut effectuer ces modifications entirement ou pas du tout, sous peine de
laisser la base dans un tat incohrent.
Dans la norme SQL, une transaction commence au dbut d'une session de travail ou
juste aprs la n de la transaction prcdente. Elle se termine par
un ordre explicite de validation
ou d'annulation .
COMMIT : L'utilisateur peut tout moment valider (et terminer) la transaction en
cours par la commande COMMIT. Les modifications deviennent alors
dfinitives et visibles toutes les autres transactions.
ROLLBACK : L'utilisateur peut annuler (et terminer) la transaction en cours par la
commande ROLLBACK. Toutes les modifications depuis le dbut de la
transaction sont annules.
Fonctions date : oprent sur des valeurs de type date et ramnent des valeurs de type
date.
Fonctions de conversion : convertissent une valeur d'un certain type dans un autre
type.
111
Fonctions caractre
1. Fonctions de Conversion Majuscules/Minuscules
113
Fonctions caractre
2. Fonctions de Manipulation des Caractres
1. Exemple:
affiche le nom des employs concatn leur poste, le nombre de
caractres du nom, ainsi que la position de la lettre i dans leur nom et ce, pour
tous les employs dont le poste commence par la chane mana'.
SELECT nom , CONCAT(nom, poste ), LENGTH(nom),
INSTR(nom, i)
FROM emp
WHERE SUBSTR (poste, 1, 4) = mana;
nom CONCAT(nom, poste ) LENGTH(nom) INSTR(nom, i)
--------------------------------------------------------------------------------------------------------
kadiri kadirimanager 6 2
mouradi mouradimanager 7 1
...
10 rows selected.
114
Fonctions numriques
116
Fonctions Date (SQL SERVER)
Datepart:
year
month
day
week
hour
Minute
117
Fonctions de Conversion (Oracle)
SELECT nom,
TO_CHAR (daten, 'fmDD Month YYYY ) daten
FROM emp;
nom daten
-----------------------------------------------------------
kadiri 1 May 1981
mouradi 17 November 198
martin 28 September 1981
...
10 rows selected.
1ere mthode:
Utiliser le type timestamp
2eme mthode:
SQL> CREATE TABLE test (d date );
SQL> INSERT INTO test VALUES (sysdate);
SQL> ALTER session SET nls_date_format = 'DD/MM/RRRR HH24:MI:SS';
SQL> insert into test values('11/11/2010 23:00:00');
SQL> SELECT d FROM test;
D
-------------------------
10/11/2010 22:26:55
11/11/2010 23:00:00
3eme mthode:
SQL> insert into test values( to_date(11/11/2010 23:00:00 ', 'dd/mm/rrrr hh:mi:ss')
SQL> select to_char(d,'dd/mm/rrrr hh:mi:ss') from test;
D
-------------------------
11/11/2010 23:00:00
-------------------------------------------------------------------------------------------------------
YYYY anne
YY deux derniers chires de l'anne
WW numro de la semaine dans l'anne
MM numro du mois HH ou HH12 heure (sur 12 heures)
DDD numro du jour dans l'anne HH24 heure (sur 24 heures)
DD numro du jour dans le mois
MI minutes
D numro du jour dans la semaine (1 pour lundi, 7 pour dimanche)
122
La fonction NVL (Oracle)
Pour transformer une valeur NULL en une valeur relle, on utilise la fonction
NVL.
Syntaxe
NVL (expr1, expr2)
o :
expr1 : est l'expression ou la valeur source susceptible de contenir une
valeur NULL
expr2 : est la valeur de remplacement pour la valeur NULL
Les types de donnes doivent correspondre
NVL(comm,0)
NVL(hiredate,'01-JAN-97')
NVL(job,'No Job Yet')
Lordre SELECT:
Une vue peut tre rfrence dans un SELECT de la mme faon qu'une
table.
SELECT * FROM EMP3
Lordre Update:
Il est possible d'effectuer des DELETE, INSERT et des UPDATE travers des vues.
Les conditions suivantes doivent tre remplies :
Pour effectuer un DELETE:
le select qui dfinit la vue ne doit pas comporter de jointure, de group by,
de distinct, de fonction de groupe
Pour un UPDATE:
en plus des conditions prcdentes, les colonnes modifies doivent tre
des colonnes relles de la table sous-jacente ;
Pour un INSERT:
en plus des conditions prcdentes, toute colonne not null de la table sous-
jacente doit tre prsente dans la vue.
Attribution:
GRANT CREATE USER, CREATE TABLE
TO user1;
GRANT CREATE SESSION TO scott
WITH ADMIN OPTION;
Rvocation:
REVOKE CREATE TABLE FROM user1;
REVOKE CREATE SESSION FROM scott;