You are on page 1of 30

www.cours-ofppt.

com
SQL avancé
Les sous-requêtes Les fonctions de groupes Gestion des transactions Les vues Indexation et Cluster

Les sous-requêtes

SQL permet d'utiliser des requêtes pour élaborer des conditions plus complexes et "dynamiques", c'est à dire qu'un critère de recherche employé dans la clause WHERE soit lui même le résultat d'un SELECT

Type de sous requête
Sous-requêtes simples  Sous-requêtes synchronisées

www.cours-ofppt.com

ISI 204

2

Sous-requêtes simples (1)
 

Dans ce cas la sous-requête est d'abord évaluée, puis le résultat est utilisé pour exécuter la requête principale. Exemple
 

sélectionner la liste des employés ayant même poste que JONES select ENAME from EMP where JOB = ( select JOB from EMP where ENAME = 'JONES' ); les sous-requêtes sont plus lisibles que des jointures

Remarque

www.cours-ofppt.com

ISI 204

3

cours-ofppt.Sous-requêtes simples (2)  Exercice  Les personnes ayant un salaire inférieur à JONES et qui ne travaillent pas dans le même département que ALLEN Sélectionner les employés travaillant à CHICAGO et ayant le même job que ALLEN  www.com ISI 204 4 .

MGR = EMPNO).Sous-requêtes synchronisées   Dans ce cas la sous-requête est évaluée pour chaque n-uplet de la requête principale Exemple    sélectionner des employés ne travaillant pas dans le même département que leur manager. SQL> select ENAME from EMP e where DEPTNO != ( select DEPTNO from EMP where e. Remarque  le synonyme emp de la requête principale est utilisé dans la sous-requête. Thomas Devogele ISI 204 5 .

Les opérateurs associés aux sous-requêtes (1)    L'opérateur EXISTS permet de construire un prédicat vrai si la sous-requête qui suit ramène au moins une ligne. Syntaxe  select ' from nom-table where exists ( select --.) Liste des employés travaillant dans un département qui contient au moins un ANALYSTE ? Exercice  Thomas Devogele ISI 204 6 .

Les opérateurs associés aux sous-requêtes (2)  Les opérateurs ensemblistes     Dans les exemples précédent. car à droite du signe "=" se trouvait une seule valeur. Cependant une sous-requête peut ramener plusieurs n-uplets (une liste de valeur). Les opérateurs permettant de comparer une valeur à un ensemble de valeurs sont les opérateurs obtenus en ajoutant ANY et ALL à la suite d'un opérateur de comparaison ANY : la comparaison sera vraie si elle est vraie pour au moins un élément de l'ensemble. Thomas Devogele ISI 204 7 . ALL : la comparaison sera vraie si elle est vraie pour tous les éléments de l'ensemble. le SELECT de la sous-requête ramenait un seul n-uplet.

Les opérateurs associés aux sous-requêtes (3)  Exercice  sélectionner les employés gagnant plus que tous les employés du département 30  Remarque   L'opérateur IN est équivalent à l'opérateur = ANY L'opérateur NOT IN est équivalent à l'opérateur != ALL Employés du département "RESEARCH" embauchés le même jour que quelqu'un du département "SALES":  Exercice  Thomas Devogele ISI 204 8 .

from nom table where (col2. La liste de colonnes figurera entre parenthèse à gauche de l'opérateur de comparaison. .Les opérateurs associés aux sous-requêtes (4)  Les sous-requêtes ramenant plusieurs colonnes    II est possible de comparer le résultat d'un SELECT ramenant plusieurs colonnes à une liste de colonnes.. Syntaxe  select col1. col3 ) sélectionner la liste des employés ayant même job et même salaire que FORD ISI 204 9  Exercice  Thomas Devogele ..col3) = (select col2.

Les valeurs NULL sont ignorées. Les fonctions de groupe sont les suivantes   avg (col)   moyenne des valeurs (les valeurs NULL sont ignorées) count (col) nombre de n-uplet satisfaisant à la condition WHERE.Les fonctions de groupe (1)   II est possible d'utiliser certaines fonctions en demandant de grouper les résultats selon une ou plusieurs colonnes. 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 .

 Remarque   Exercice   Thomas Devogele ISI 204 11 .Les fonctions de groupe (2)   En appelant une fonction de groupe dans la liste résultat d'un SELECT. Nom. job. Exemple   Total des salaires du département 10. et salaire de l'employé ayant le salaire le plus élevé. select SUM(SAL) from EMP where DEPTNO = 10. Liste des employés ayant le salaire le plus élevé dans chaque département. on obtient un résultat comportant une seule ligne et prenant en compte l'ensemble des lignes satisfaisant à la condition WHERE. il est impossible de demander à la fois une colonne et une fonction de groupe.

.]  exemple  donner la somme des salaires pour chaque département  Select SUM(SAL) from EMP group by DEPTNO. chaque groupe étant l'ensemble des lignes ayant une valeur commune.  Syntaxe  group by expr [.Calcul sur plusieurs groupes (1)   II est possible de subdiviser la table en groupes..expr2 . Thomas Devogele ISI 204 12 .

Calcul sur plusieurs groupes (2)  Exercice    sélectionner par job. la somme et la moyenne des salaires. Liste des employés ayant le salaire le plus élevé dans chaque département. dans la liste des colonnes résultat d'un SELECT de groupe ne peuvent figurer que des caractéristiques de groupe. le nombre d'employés. c'est à dire :    Attention   soit des fonctions de groupe soit des expressions figurant dans le GROUP BY Thomas Devogele ISI 204 13 . Donner le salaire moyen par département et par job.

ISI 204 14 Thomas Devogele . expression] [having prédicat] ] Le prédicat figurant dans la clause HAVING ne peut porter que sur des caractéristiques des fonctions de groupe figurant dans la clause GROUP BY.] from table [. table2j [where prédicat] [group by expression [.La clause HAVING    La clause HAVING permet. de façon analogue à la clause WHERE ... de poser des conditions sur le résultat du regroupement select col1 [col2 .

quand les clauses WHERE et GROUP BY sont présentes. puis les groupes seront constitués à partir des nuplets sélectionnés. et les fonctions de groupes seront évaluées nombre de CLERK des départements ayant au moins deux employés CLERK job ayant le salaire moyen le plus bas  Remarque :   Exercices difficiles   Thomas Devogele ISI 204 15 .La clause HAVING (2)  Exercice  sélectionner les jobs dont la moyenne des salaires est supérieure à 1500. la clause WHERE sera d'abord appliquée pour sélectionner les lignes.

elle fait évoluer la base de données d'un état cohérent à un autre état cohérent. Une transaction qui s'exécute bien  est validée .  une transaction qui ne se termine pas  Thomas Devogele ISI 204 16 . est avortée. la base est restaurée dans l'état où elle se trouvait avant que la transaction ne démarre. Ce qui signifie que si une transaction ne va pas à son terme pour une raison ou pour une autre (cas de crash du système ou du disque).Gestion des transactions (1)  transaction     traduit l'atomicité d'une séquence d'opérations sur la base.

 Toutes les modifications depuis le début de la transaction sont alors annulées.  Les modifications deviennent définitives et visibles à tous les utilisateurs. Thomas Devogele ISI 204 17 .  annuler la transaction en cours par la commande ROLLBACK.Gestion des transactions (2)  valider la transaction en cours par la commande COMMIT.

 Les vues permettent    Thomas Devogele ISI 204 18 . La vue sera vu par l'utilisateur comme une table réelle. des accès simplifiés aux données l'indépendance des données la confidentialité des données : restreint les droits d'accès à certaines colonnes ou à certains n-uplets.Les vues  Definitions     Une vue est une table virtuelle elle n'existe pas dans la base elle est construite à partir du résultat d'un SELECT.

select col1. les colonnes de la vue ont pour nom les noms des colonnes résultat de SELECT... from tab where prédicat [with check option]   La spécification des noms de colonnes de la vue est facultative.. . Par défaut.Les vues (2)    création d'une vue . .as.CREATE VIEW La commande CREATE VIEW permet de créer une vue en spécifiant le SELECT constituant la définition de la vue Syntaxe  create view nom [(col1... col2. Thomas Devogele ISI 204 19 .) ] .

cours-ofppt.com ISI 204 20 . on ne pourra à travers cette vue ni modifier.Les vues (3)  Exercice  créer une vue EMP10 sous-ensemble de la table EMP comportant le numéro. ni insérer des employés ne faisant pas partie du département 10.  L'option CHECK OPTION   permet de vérifier que la mise à jour ou l'insertion faite à travers la vue ne produisent que des lignes qui feront partie de la sélection de la vue. si la vue EMP10 a été créée avec "check option". Par exemple. le nom et le job des employés du département 10. www.

DEPTNO = dept. DNAME.  Requêtes et vues    Thomas Devogele ISI 204 21 . cette table est virtuelle et est reconstruite à chaque appel de la vue EMPLOYES par exécution du SELECT constituant la définition de la vue. Exemple   créer une vue comportant le nom des employés. DEPT dept where emp. on procédera comme si l'on était en face d'une table classique. LOC from EMP emp.DEPTNO Pour récupérer les données de vues.Les vues (4)   Création de vues à partir de plusieurs tables. select * from EMPLOYES2 … En réalité. le nom du service et le lieu de travail. create view EMPLOYES2 as select ENAME.

Les vues (5)  Suppression d'une vue  Une vue peut être détruite par la commande drop view nom vue  Renommer une vue   Une vue peut être renommée par la commande rename ancien-nom-vue to nouveau-nom-vue la prochaine version de MySQL gérera les vues  Remarques :  Thomas Devogele ISI 204 22 .

ISI 204  La création d'un index  Exemple d'index 23 Thomas Devogele .Indexation  Lors d'une sélection   le système balaye toute la table pour trouver les nuplets répondant aux prédicats temps de réponse prohibitifs pour des tables dépassant quelques centaines de lignes. permettra au système de repérer de façon plus rapide des lignes spécifiques des tables et donc d'améliorer d'interrogations.

.) Un index peut être créé sur une table contenant déjà des n-uplets. L'index sera mis à jour automatiquement lors de la modification de la table.  Remarques   Les requêtes SOL sont transparentes au fait qu'il existe un index ou non.. C'est l'optimisateur du SGBD qui optimise II est possible de créer un index en précisant que les valeurs de la colonne indexée devront être uniques (unicité de clé). col2. .Indexation (2)  création d'un index    Syntaxe  create index nom_index on nom table (col1. Ainsi la création de l'index suivant empêchera l'insertion dans la table EMP d'un numéro 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  Définition  Le cluster est une organisation des tables qui consiste à rassembler physiquement (dans un même bloc disque) les lignes d'une ou plusieurs tables ayant une valeur commune dans un champs donné.) II faut préciser le nom du CLUSTER. on peut "rapprocher" les informations de DEPT et de EMP en utilisant les colonnes communes DEPTNO. Le clustering permet d'accélérer les jointures. Syntaxe   Pour notre exemple   création d'un cluster   create cluster nom_cluster (cle1 types1. .... Thomas Devogele ISI 204 25 . la colonne à utiliser et le type des éléments de cette colonne.

col   où l'on indique la colonne de la table à identifier à la clé du cluster. le cluster est vide. 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. Les données de la table sont alors déplacées.Cluster (2)  Activation   A sa création.com ISI 204 26 .cle = nom_table. II ne contiendra des données que lorsqu'on y transportera une table par la commande ALTER CLUSTER Syntaxe  alter cluster nom_cluster add table nom_table where nom_cluster.cours-ofppt.

on associe les deux tables EMP et DEPT au cluster alter cluster DEPT.NUM.  Thomas Devogele ISI 204 27 .EMP add table DEPT where DEPT.DEPTNO = DEPT-EMP.DEPTNO = DEPT-EMP.NUM.  alter cluster DEPT-EMP add table EMP where EMP.Cluster (3)  Exemple   création  create cluster DEPT-EMP (NUM number).

Contrôle des accès à la base : LCD (1)  Partage de droits   Le créateur d'une table en est le propriétaire et il est seul à pouvoir ajouter. modifier ou supprimer des données ou modifier la description des tables. Le propriétaire de la table peut néanmoins accorder ou retirer les privilèges à d'autre utilisateurs Autoriser un utilisateur à ajouter des n-uplets Autoriser un utilisateur à consulter une vue Autoriser un utilisateur à modifier la définition de la table  Exemples    Thomas Devogele ISI 204 28 .

Contrôle des accès à la base : LCD (2)  l'ordre GRANT   L'ordre GRANT permet au propriétaire d'une table de donner à d'autres utilisateurs des droits d'accès à 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 .

Les droits peuvent être accordés à tous les utilisateurs en utilisant le mot réservé PUBLIC à la place du nom de l'utilisateur...) : droit de modification de lignes ~ delete : droit de suppression de lignes ~ alter : droit de modification de la définition de la table ~ index : droit de création d'index ~ cluster : droit de mise en cluster ~ all : tous les droits ci-dessus Les trois premiers privilèges s'appliquent aux tables et aux vues.  Remarques   Thomas Devogele ISI 204 30 .Contrôle des accès à la base : LCD (3)  Les privilèges qui peuvent être accordés sont les suivants         ~ select : droit de lecture ~ insert : droit d'insertion de n-uplets ~ update(col..