Vous êtes sur la page 1sur 30

www.cours-ofppt.

com
SQL avanc
Les sous-requtes Les fonctions de groupes Gestion des transactions Les vues Indexation et Cluster

Les sous-requtes

SQL permet d'utiliser des requtes pour laborer des conditions plus complexes et "dynamiques", c'est dire qu'un critre de recherche employ dans la clause WHERE soit lui mme le rsultat d'un SELECT

Type de sous requte


Sous-requtes simples Sous-requtes synchronises

www.cours-ofppt.com

ISI 204

Sous-requtes simples (1)


Dans ce cas la sous-requte est d'abord value, puis le rsultat est utilis pour excuter la requte principale. Exemple

slectionner la liste des employs ayant mme poste que JONES select ENAME from EMP where JOB = ( select JOB from EMP where ENAME = 'JONES' ); les sous-requtes sont plus lisibles que des jointures

Remarque

www.cours-ofppt.com

ISI 204

Sous-requtes simples (2)

Exercice

Les personnes ayant un salaire infrieur JONES et qui ne travaillent pas dans le mme dpartement que ALLEN Slectionner les employs travaillant CHICAGO et ayant le mme job que ALLEN

www.cours-ofppt.com

ISI 204

Sous-requtes synchronises

Dans ce cas la sous-requte est value pour chaque n-uplet de la requte principale Exemple

slectionner des employs ne travaillant pas dans le mme dpartement que leur manager. SQL> select ENAME from EMP e where DEPTNO != ( select DEPTNO from EMP where e.MGR = EMPNO); Remarque

le synonyme emp de la requte principale est utilis dans la sous-requte.

Thomas Devogele

ISI 204

Les oprateurs associs aux sous-requtes (1)

L'oprateur EXISTS permet de construire un prdicat vrai si la sous-requte qui suit ramne au moins une ligne. Syntaxe

select ' from nom-table where exists ( select --- ) Liste des employs travaillant dans un dpartement qui contient au moins un ANALYSTE ?

Exercice

Thomas Devogele

ISI 204

Les oprateurs associs aux sous-requtes (2)

Les oprateurs ensemblistes

Dans les exemples prcdent, le SELECT de la sous-requte ramenait un seul n-uplet, car droite du signe "=" se trouvait une seule valeur. Cependant une sous-requte peut ramener plusieurs n-uplets (une liste de valeur). Les oprateurs permettant de comparer une valeur un ensemble de valeurs sont les oprateurs obtenus en ajoutant ANY et ALL la suite d'un oprateur de comparaison ANY : la comparaison sera vraie si elle est vraie pour au moins un lment de l'ensemble. ALL : la comparaison sera vraie si elle est vraie pour tous les lments de l'ensemble.

Thomas Devogele

ISI 204

Les oprateurs associs aux sous-requtes (3)

Exercice

slectionner les employs gagnant plus que tous les employs du dpartement 30

Remarque

L'oprateur IN est quivalent l'oprateur = ANY L'oprateur NOT IN est quivalent l'oprateur != ALL
Employs du dpartement "RESEARCH" embauchs le mme jour que quelqu'un du dpartement "SALES":

Exercice

Thomas Devogele

ISI 204

Les oprateurs associs aux sous-requtes (4)

Les sous-requtes ramenant plusieurs colonnes

II est possible de comparer le rsultat d'un SELECT ramenant plusieurs colonnes une liste de colonnes. La liste de colonnes figurera entre parenthse gauche de l'oprateur de comparaison. Syntaxe

select col1, ... from nom table where (col2,col3) = (select col2, col3 ) slectionner la liste des employs ayant mme job et mme salaire que FORD
ISI 204 9

Exercice

Thomas Devogele

Les fonctions de groupe (1)

II est possible d'utiliser certaines fonctions en demandant de grouper les rsultats selon une ou plusieurs colonnes. Les fonctions de groupe sont les suivantes

avg (col)

moyenne des valeurs (les valeurs NULL sont ignores)

count (col)
nombre de n-uplet satisfaisant la condition WHERE. Les valeurs NULL sont ignores.
valeur maximale des valeurs de la colonne valeur minimale des valeurs de la colonne Somme des valeurs de la colonne variance des valeurs de la colonne

max (col)

min (col) sum (col) variance (col)

Thomas Devogele

ISI 204

10

Les fonctions de groupe (2)

En appelant une fonction de groupe dans la liste rsultat d'un SELECT, on obtient un rsultat comportant une seule ligne et prenant en compte l'ensemble des lignes satisfaisant la condition WHERE. Exemple

Total des salaires du dpartement 10. select SUM(SAL) from EMP where DEPTNO = 10; il est impossible de demander la fois une colonne et une fonction de groupe. Nom, job, et salaire de l'employ ayant le salaire le plus lev. Liste des employs ayant le salaire le plus lev dans chaque dpartement.

Remarque

Exercice

Thomas Devogele

ISI 204

11

Calcul sur plusieurs groupes (1)


II est possible de subdiviser la table en groupes, chaque groupe tant l'ensemble des lignes ayant une valeur commune.

Syntaxe

group by expr [,expr2 ...]

exemple

donner la somme des salaires pour chaque dpartement

Select SUM(SAL) from EMP group by DEPTNO;

Thomas Devogele

ISI 204

12

Calcul sur plusieurs groupes (2)

Exercice

slectionner par job, le nombre d'employs, la somme et la moyenne des salaires. Donner le salaire moyen par dpartement et par job. Liste des employs ayant le salaire le plus lev dans chaque dpartement. dans la liste des colonnes rsultat d'un SELECT de groupe ne peuvent figurer que des caractristiques de groupe, c'est dire :

Attention

soit des fonctions de groupe soit des expressions figurant dans le GROUP BY

Thomas Devogele

ISI 204

13

La clause HAVING

La clause HAVING permet, de faon analogue la clause WHERE , de poser des conditions sur le rsultat du regroupement select col1 [col2 ...] from table [, table2j [where prdicat] [group by expression [, expression] [having prdicat] ] Le prdicat figurant dans la clause HAVING ne peut porter que sur des caractristiques des fonctions de groupe figurant dans la clause GROUP BY.
ISI 204 14

Thomas Devogele

La clause HAVING (2)

Exercice

slectionner les jobs dont la moyenne des salaires est suprieure 1500. quand les clauses WHERE et GROUP BY sont prsentes, la clause WHERE sera d'abord applique pour slectionner les lignes, puis les groupes seront constitus partir des nuplets slectionns, et les fonctions de groupes seront values nombre de CLERK des dpartements ayant au moins deux employs CLERK job ayant le salaire moyen le plus bas

Remarque :

Exercices difficiles

Thomas Devogele

ISI 204

15

Gestion des transactions (1)

transaction

traduit l'atomicit d'une squence d'oprations sur la base, elle fait voluer la base de donnes d'un tat cohrent un autre tat cohrent. Ce qui signifie que si une transaction ne va pas son terme pour une raison ou pour une autre (cas de crash du systme ou du disque), la base est restaure dans l'tat o elle se trouvait avant que la transaction ne dmarre. Une transaction qui s'excute bien

est valide ; est avorte.

une transaction qui ne se termine pas

Thomas Devogele

ISI 204

16

Gestion des transactions (2)

valider la transaction en cours par la commande COMMIT.

Les modifications deviennent dfinitives et visibles tous les utilisateurs.

annuler la transaction en cours par la commande ROLLBACK.

Toutes les modifications depuis le dbut de la transaction sont alors annules.

Thomas Devogele

ISI 204

17

Les vues

Definitions

Une vue est une table virtuelle elle n'existe pas dans la base elle est construite partir du rsultat d'un SELECT. La vue sera vu par l'utilisateur comme une table relle. des accs simplifis aux donnes l'indpendance des donnes la confidentialit des donnes : restreint les droits d'accs certaines colonnes ou certains n-uplets.

Les vues permettent


Thomas Devogele

ISI 204

18

Les vues (2)


cration d'une vue - CREATE VIEW La commande CREATE VIEW permet de crer une vue en spcifiant le SELECT constituant la dfinition de la vue Syntaxe

create view nom [(col1, ...) ] ,.as. select col1, col2, ... from tab where prdicat [with check option]

La spcification des noms de colonnes de la vue est facultative. Par dfaut, les colonnes de la vue ont pour nom les noms des colonnes rsultat de SELECT.

Thomas Devogele

ISI 204

19

Les vues (3)

Exercice

crer une vue EMP10 sous-ensemble de la table EMP comportant le numro, le nom et le job des employs du dpartement 10.

L'option CHECK OPTION

permet de vrifier que la mise jour ou l'insertion faite travers la vue ne produisent que des lignes qui feront partie de la slection de la vue. Par exemple, si la vue EMP10 a t cre avec "check option", on ne pourra travers cette vue ni modifier, ni insrer des employs ne faisant pas partie du dpartement 10.

www.cours-ofppt.com

ISI 204

20

Les vues (4)


Cration de vues partir de plusieurs tables. Exemple


crer une vue comportant le nom des employs, le nom du service et le lieu de travail. create view EMPLOYES2 as select ENAME, DNAME, LOC from EMP emp, DEPT dept where emp. DEPTNO = dept.DEPTNO Pour rcuprer les donnes de vues, on procdera comme si l'on tait en face d'une table classique. select * from EMPLOYES2 En ralit, cette table est virtuelle et est reconstruite chaque appel de la vue EMPLOYES par excution du SELECT constituant la dfinition de la vue.

Requtes et vues

Thomas Devogele

ISI 204

21

Les vues (5)

Suppression d'une vue

Une vue peut tre dtruite par la commande drop view nom vue

Renommer une vue

Une vue peut tre renomme par la commande rename ancien-nom-vue to nouveau-nom-vue
la prochaine version de MySQL grera les vues

Remarques :

Thomas Devogele

ISI 204

22

Indexation

Lors d'une slection

le systme balaye toute la table pour trouver les nuplets rpondant aux prdicats temps de rponse prohibitifs pour des tables dpassant quelques centaines de lignes. permettra au systme de reprer de faon plus rapide des lignes spcifiques des tables et donc d'amliorer d'interrogations.
ISI 204

La cration d'un index

Exemple d'index
23

Thomas Devogele

Indexation (2)

cration d'un index


Syntaxe

create index nom_index on nom table (col1, col2, ...)

Un index peut tre cr sur une table contenant dj des n-uplets. L'index sera mis jour automatiquement lors de la modification de la table.

Remarques

Les requtes SOL sont transparentes au fait qu'il existe un index ou non. C'est l'optimisateur du SGBD qui optimise II est possible de crer un index en prcisant que les valeurs de la colonne indexe devront tre uniques (unicit de cl). Ainsi la cration de l'index suivant empchera l'insertion dans la table EMP d'un numro d'employ existant

create unique index EMPNO on EMP (EMPNO) drop index nom_index

suppression d'un index

Syntaxe

Thomas Devogele

ISI 204

24

Cluster

Dfinition

Le cluster est une organisation des tables qui consiste rassembler physiquement (dans un mme bloc disque) les lignes d'une ou plusieurs tables ayant une valeur commune dans un champs donn. Le clustering permet d'acclrer les jointures. on peut "rapprocher" les informations de DEPT et de EMP en utilisant les colonnes communes DEPTNO. Syntaxe

Pour notre exemple

cration d'un cluster


create cluster nom_cluster (cle1 types1, ....)

II faut prciser le nom du CLUSTER, la colonne utiliser et le type des lments de cette colonne.

Thomas Devogele

ISI 204

25

Cluster (2)

Activation

A sa cration, le cluster est vide. II ne contiendra des donnes que lorsqu'on y transportera une table par la commande ALTER CLUSTER Syntaxe

alter cluster nom_cluster add table nom_table where nom_cluster.cle = nom_table.col

o l'on indique la colonne de la table identifier la cl du cluster. Les donnes de la table sont alors dplaces. Syntaxe

Suppression d'une table d'un cluster

alter cluster nom_cluster drop table nom_table

Suppression d'un cluster

Syntaxe

drop cluster nom cluster

www.cours-ofppt.com

ISI 204

26

Cluster (3)

Exemple

cration

create cluster DEPT-EMP (NUM number);

on associe les deux tables EMP et DEPT au cluster


alter cluster DEPT.EMP add table DEPT where DEPT.DEPTNO = DEPT-EMP.NUM; alter cluster DEPT-EMP add table EMP where EMP.DEPTNO = DEPT-EMP.NUM;

Thomas Devogele

ISI 204

27

Contrle des accs la base : LCD (1)

Partage de droits

Le crateur d'une table en est le propritaire et il est seul pouvoir ajouter, modifier ou supprimer des donnes ou modifier la description des tables. Le propritaire de la table peut nanmoins accorder ou retirer les privilges d'autre utilisateurs Autoriser un utilisateur ajouter des n-uplets Autoriser un utilisateur consulter une vue Autoriser un utilisateur modifier la dfinition de la table

Exemples

Thomas Devogele

ISI 204

28

Contrle des accs la base : LCD (2)

l'ordre GRANT

L'ordre GRANT permet au propritaire d'une table de donner d'autres utilisateurs des droits d'accs cette table ou vue. Syntaxe

grant droit on table to nom_utilisateur [whith grant option] grant droit on vue to nom_utilisateur [whith grant option]

l'ordre REVOKE

Un utilisateur ayant accord un droit peut le reprendre l'aide de l'ordre REVOKE Syntaxe

revoke droit on table from nom_utilisateur revoke droit on vue from nom_utilisateur

Thomas Devogele

ISI 204

29

Contrle des accs la base : LCD (3)

Les privilges qui peuvent tre accords sont les suivants


~ select : droit de lecture ~ insert : droit d'insertion de n-uplets ~ update(col,...) : droit de modification de lignes ~ delete : droit de suppression de lignes ~ alter : droit de modification de la dfinition de la table ~ index : droit de cration d'index ~ cluster : droit de mise en cluster ~ all : tous les droits ci-dessus Les trois premiers privilges s'appliquent aux tables et aux vues. Les droits peuvent tre accords tous les utilisateurs en utilisant le mot rserv PUBLIC la place du nom de l'utilisateur.

Remarques

Thomas Devogele

ISI 204

30