Chapitre 2 La sélection simple - ESEN :: Ecole Supérieure d
Transcription
Chapitre 2 La sélection simple - ESEN :: Ecole Supérieure d
Université de Manouba École Supérieure d’Économie Numérique Département des Technologies des Systèmes d’Information Le Langage SQL version Oracle Document version 1.1 Mohamed Anis BACH TOBJI [email protected] Table des matières CHAPITRE 1 INTRODUCTION ........................................................................... 5 1.1 Les tables ............................................................................................................................................ 5 1.2 Les types de données .......................................................................................................................... 5 CHAPITRE 2 LA SELECTION SIMPLE .............................................................. 7 2.1 La sélection simple ............................................................................................................................. 7 2.1.1 La clause SELECT .......................................................................................................................... 7 2.1.2 Le traitement des valeurs NULL ..................................................................................................... 9 2.1.3 Le mot clé DISTINCT..................................................................................................................... 9 2.1.4 La clause ORDER BY................................................................................................................... 10 2.1.5 La restriction de lignes .................................................................................................................. 10 2.1.6 Les opérateurs de comparaison ..................................................................................................... 11 2.1.7 Les opérateurs logiques ................................................................................................................. 12 CHAPITRE 3 LES FONCTIONS ....................................................................... 13 3.1 Les fonctions de lignes ..................................................................................................................... 13 3.1.1 Les fonctions de caractères ........................................................................................................... 13 3.1.2 Les fonctions numériques .............................................................................................................. 15 3.1.3 Les fonctions de date ..................................................................................................................... 16 3.1.4 Les fonctions de conversion .......................................................................................................... 17 3.1.5 Les fonctions opérant sur tous les types de données ..................................................................... 17 3.2 Les fonctions de groupe ................................................................................................................... 18 3.2.1 La clause GROUP BY................................................................................................................... 20 3.2.2 Groupes dans des groupes ............................................................................................................. 20 3.2.3 La clause HAVING ....................................................................................................................... 21 CHAPITRE 4 EXTRACTION DES DONNEES A PARTIR DE PLUSIEURS TABLES……………… .............................................................................................. 22 4.1 Equi-jointure .................................................................................................................................... 23 4.2 Non Equi-jointure ............................................................................................................................ 23 4.3 Jointure externe ............................................................................................................................... 23 4.4 Jointure d’une table à elle-même .................................................................................................... 24 CHAPITRE 5 LES OPERATEURS ENSEMBLISTES ....................................... 25 5.1 L’opérateur UNION ........................................................................................................................ 25 5.2 L’opérateur INTERSECT ............................................................................................................... 25 5.3 L’opérateur MINUS ........................................................................................................................ 26 CHAPITRE 6 LES SOUS-REQUETES ............................................................. 27 6.1 Les sous-requêtes simples (non corrélées) ...................................................................................... 27 6.1.1 Les sous-requêtes produisant une seule ligne ................................................................................ 28 6.1.2 Les sous-requêtes produisant plusieurs lignes ............................................................................... 28 6.2 Les sous-requêtes corrélées (synchronisées) .................................................................................. 30 6.3 L’opérateur EXISTS........................................................................................................................ 31 6.4 NOT EXISTS vs NOT IN ................................................................................................................ 33 6.5 La division et le NOT EXISTS ........................................................................................................ 33 CHAPITRE 7 LE LANGAGE DE DEFINITION DE DONNEES ......................... 39 7.1 Création d’une table – CREATE TABLE ..................................................................................... 39 7.2 Les contraintes ................................................................................................................................. 39 7.3 Modification d’une table – ALTER TABLE ................................................................................. 41 7.3.1 Renommer une table...................................................................................................................... 41 7.3.2 Ajouter une colonne ...................................................................................................................... 41 7.3.3 Renommer une colonne ................................................................................................................. 42 7.3.4 Modifier une colonne .................................................................................................................... 42 7.3.5 Supprimer une colonne.................................................................................................................. 42 7.3.6 Marquer une colonne ..................................................................................................................... 43 7.3.7 Ajouter une contrainte ................................................................................................................... 43 7.3.8 Désactivation/Activation de contraintes ........................................................................................ 43 7.3.9 La suppression d’une contrainte .................................................................................................... 44 7.4 Suppression d’une table – DROP TABLE ..................................................................................... 44 7.5 Consultation des contraintes ........................................................................................................... 44 CHAPITRE 8 LE LANGAGE DE MANIPULATION DE DONNEES .................. 46 8.1 Ajout de données – INSERT ........................................................................................................... 46 8.2 Modification de données – UPDATE .............................................................................................. 47 Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] 8.3 Suppression de données – DELETE ............................................................................................... 48 ANNEXE A ........................................................................................................... 49 ANNEXE B ........................................................................................................... 50 BIBLIOGRAPHIE ................................................................................................. 52 Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] Chapitre 1 Introduction Le langage SQL (Structered Query Language) est le langage standard de gestion des bases de données relationnelles. Il permet de définir, manipuler et contrôler les données. Ainsi SQL est constitué de trois sous langages : 1. LDD (Langage de Définition de Données) incluant les requêtes CREATE, ALTER, DROP, RENAME, TRUNCATE. Le LDD permet de créer, de changer et d'éliminer une structure de données Oracle. 2. LMD (langage de manipulation de données) incluant les requêtes SELECT, INSERT, UPDATE, DELETE, MERGE. Le LMD permet de sélectionner, d'insérer, de modifier et de supprimer des lignes à partir d'une table. 3. LCD (langage de contrôle de données) incluant les requêtes GRANT, REVOKE. Le LCD permet de donner ou de priver les droits d'accès à une base de données Oracle ou à ces structures. SQL a été implémenté par IBM dans les années 70, et se base sur l'algèbre relationnelle de Codd. Chaque SGBDR (DB2, Informix, Ingres, SQL SERVER...) présente sa propre version de SQL. ORACLE possède sa propre version. Ceci dit, toutes les versions sont fondées sur le même noyau. ORACLE fournit un éditeur de requêtes SQL, il s'agit de SQL*PLUS. Pour accéder à cet éditeur, il faut être un utilisateur (avoir un login et un mot de passe). Une fois l'éditeur affiché, on peut saisir les requêtes et voir les résultats retournés. 1.1 Les tables La table est l'objet principal d'une base de données car c'est là ou on stocke les données. Oracle identifie une table par son nom. Elle peut avoir une ou plusieurs colonnes (champ, attribut, mesure etc.). Une colonne est caractérisée par son nom et son type de données. La table peut avoir zéro ou plusieurs lignes (enregistrements, objets, tuples etc.). 1.2 Les types de données Oracle offre les types de données suivants : CHAR(n) : Chaîne de caractère fixe de longueur maximale n. VARCHAR2(n) : Chaîne de caractère variable de longueur maximale n. NUMBER(n,d) : Réel avec n le nombre de chiffres du réel, d le nombre de décimaux. Exemple : NUMBER(5,2) inclut tous les nombres de -999.99 → 999.99 DATE : Le type de données incluant la date et l'heure. Le format par défaut est le suivant : DD-MON-YY, par exemple : `04-0CT-04'. Chapitre 1 : Introduction 6 LONG : Chaîne de caractère variable de taille maximale 2 Go. CLOB : Chaîne de caractère variable de taille maximale 4 Go. RAW(n) : Données binaires de longueur n. LONG RAW : Données binaires de longueur variable allant jusqu'à 2 Go. BLOB : Données binaires de longueur variable allant jusqu'à 4 Go. BFILE : Données binaires stockées dans un fichier externe allant jusqu'à 4 Go. ROWID : Chaîne hexadécimale représentant l'adresse unique d'une ligne dans une table. C'est un type de données qu'on peut utiliser pour stocker les valeurs retournées par le pseudo colonne ROWID. TIMESTAMP[(n)][WITH TIME ZONE] : Stocke la date et l'heure. L'heure est stockée avec n fractions de secondes, n peut varier de 0 à 9, 6 est la valeur par défaut. Exemple : '04-OCT-04 12.45.32.1654 AM', ici n=4. Si le mot clé WITH TIME ZONE est spécifié alors l'heure est affichée avec la différence entre l'heure de la zone locale et celle de Greenwich. INTERVAL YEAR[(y)] TO MONTH : Stocke une période de temps sous forme d'années et de mois. INTERVAL DAY TO SECOND : Stocke une période de temps sous forme de jours et de secondes. Remarque - Une colonne de type LONG ne peut pas être copiée lors de la création d'une table à l'aide d'une requête SELECT. - Une colonne de type LONG ne peut pas être incluse dans une clause GROUP BY ou HAVING. - Une table ne peut contenir qu'une seule colonne de type LONG. - Une colonne de type LONG ne peut pas avoir de contrainte. - Le type de données CLOB inclut LONG. - Il n'y a pas de type de données booléen, ce dernier peut être simulé par NUMBER(1) ou CHAR(1). - Une colonne non renseignée porte la valeur NULL qui est différente de 0 pour les nombres et de la chaîne vide pour les chaînes de caractères. Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] Chapitre 2 La sélection simple 2.1 La sélection simple La requête SELECT nous permet d'extraire des données à partir d'une base de données. La clause SELECT est suivie d'une ou de plusieurs colonnes, ce sont les colonnes qu'on veut extraire. La clause FROM est suivie par le nom de la table à partir de laquelle on veut afficher les données. Tous les exemples qui suivent se basent sur les tables EMP, DEPT et SALGRADE créées par défaut lors de l'installation d'Oracle pour l'utilisateur scott/tiger (voir Annexe A). La requête R1 affiche toutes les colonnes de la table EMP : REQ 1 : SELECT * FROM EMP ; Le symbole ‘*’ remplace toutes les colonnes de la table EMP. REQ 2 : SELECT EMPNO, ENAME, SAL FROM EMP ; Cette opération est dite opération de projection sur EMP sur les colonnes EMPNO, ENAME et SAL. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. Figure 1 : Projection sur EMPNO, ENAME et SAL 2.1.1 La clause SELECT En réalité la clause SELECT peut inclure des expressions autres que les colonnes. Elle peut être suivie par : Des expressions arithmétiques. Des alias de colonnes. Des colonnes concaténées. Des littéraux (constantes). REQ 3 : Donner les noms et les salaires annuels de tous les employés ? SELECT ENAME, SAL*12 FROM EMP ; Chapitre 2 : La sélection simple 8 Voici ce que nous affiche cette requête : ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 14 ligne(s) sélectionné(es). SAL*12 9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600 REQ 4 : L’entête de la 2ème colonne est sal*12, on peut modifier l’entête en lui affectant un alias : SELECT ENAME, SAL*12 ANNSAL FROM EMP ; L’alias et la colonne (ou l’expression) sont séparés d’un espace. ENAME ANNSAL SMITH 9600 ALLEN 19200 … … REQ 5 : Afficher les codes et les noms concaténés de tous employés ? SELECT EMPNO||ENAME EMPLOYEE FROM EMP ; EMPLOYEE 7369SMITH 7499ALLEN ………. REQ 6 SELECT EMPNO||‘ ‘||ENAME EMPLOYEE, ‘works in’, DEPTNO FROM EMP ; EMPLOYEE ‘works in’ DEPTNO 7369 SMITH works in 20 7499 ALLEN works in 30 ……… ……… …….. Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] Chapitre 2 : La sélection simple 9 Nous avons introduit le littéral ‘ ‘ (espace) concaténé à EMPNO et ENAME, ainsi que le littéral ‘works in’. Ces deux littéraux s’affichent pour chaque ligne. 2.1.2 Le traitement des valeurs NULL Si une ligne donnée n’a pas de valeur pour une colonne donnée, alors cette case porte la valeur NULL. Toute colonne, quelque soit son type de données, peut avoir la valeur NULL. Ceci dit, certaines contraintes appliquées sur une colonne (PRIMARY KEY, NOT NULL…) l’empêchent d’avoir la valeur NULL. Cette valeur est traitée différemment des autres valeurs. En effet si NULL est impliquée dans : Une expression arithmétique, alors le résultat de toute l’expression est NULL. Une expression logique, alors le résultat de tout l’expression est FAUX. REQ 7 Le revenu annuel d’un employé est SAL*12 auquel on ajoute la commission COMM. Afficher les salaires annuels de tous les employés ? SELECT ENAME, SAL*12 + COMM ANNSAL FROM EMP ; ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER ANNSAL 19500 15500 16400 18000 Quoique le salaire de SMITH est de 9600, le résultat affiché ci-dessus est NULL. La fonction NVL(col,val) nous sera très utile dans ce cas, car cette fonction retourne val si la colonne porte la valeur NULL. REQ 8 La requête correcte est : SELECT ENAME, SAL*12+NVL(COMM,0) ANNSAL FROM EMP ; 2.1.3 Le mot clé DISTINCT Ce mot clé est introduit après SELECT, il sert à éliminer les occurrences, ainsi pour afficher les codes de départements (chacun une seule fois) : Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] Chapitre 2 : La sélection simple 10 REQ 9 SELECT DISTINCT DEPTNO FROM EMP ; DEPTNO 10 20 30 DISTINCT ne peut être introduite qu’une seule fois, juste après le SELECT, et concerne toutes les colonnes qui la suivent. Le résultat est toute combinaison distincte de ces colonnes. REQ 10 Afficher les jobs dans chaque département de manière distincte. SELECT DISTINCT JOB, DEPTNO FROM EMP ; 2.1.4 La clause ORDER BY Le résultat retourné d’une requête n’a pas d’ordre défini. La clause ORDER BY permet de trier le résultat selon une ou plusieurs colonnes dans un ordre croissant ou décroissant. Cette clause doit être la dernière dans la requête et peut être suivie d’une colonne, d’une expression ou même d’un alias. REQ 11 Afficher les employés triés par leurs DEPTNO dans l’ordre décroissant et par leurs JOB dans l’ordre croissant. SELECT * FROM EMP ORDER BY DEPTNO DESC, JOB ASC ; Chaque groupe de lignes ayant le même DEPTNO est lui-même trié selon le JOB dans l’ordre croissant. 2.1.5 La restriction de lignes Supposons que nous voulons afficher les employés du département 20. La requête que nous devons formuler doit retourner chaque ligne de la table EMP dont la colonne DEPTNO a pour valeur 20. Cette opération relationnelle est dite opération de restriction (ou sélection), et se base sur la clause WHERE. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO Figure 2 : Opération de restriction La clause WHERE est suivie d’une condition simple ou composée (combinaison de plusieurs conditions). Chaque ligne satisfaisant cette condition est retournée. Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] Chapitre 2 : La sélection simple 11 REQ 12 Afficher les employés du département 20. SELECT * FROM EMP WHERE DEPTNO=20 ; REQ 13 Afficher les employés dont la commission est inférieure au salaire. SELECT * FROM EMP WHERE NVL(COMM,0)<SAL ; 2.1.6 Les opérateurs de comparaison Les opérateurs de comparaison classiques sont utilisables pour comparer deux valeurs de même type (<, <=, >, >=, <>, !=, =). Cependant Oracle offre quatre opérateurs de comparaison qui lui sont spéciaux : BETWEEN v1 AND v2 col≥v1 AND col≤v2. IN (v1,v2,v3,…,vn) col= v1 OR col=v2 OR...OR col=vn. LIKE pattern (les symboles % et _ sont utilisés pour spécifier un pattern, le % remplace une sous chaîne y compris la chaîne vide, le _ remplace un seul caractère). IS NULL (l’opérateur = ne peut pas être utilisée pour comparer une colonne à NULL, on utilise cet opérateur). L’opérateur logique NOT peut être utilisé avec ces opérateurs NOT BETWEEN…., NOT IN….., NOT LIKE…., IS NOT NULL. REQ 14 Donner les noms et les salaires des employés dont le salaire est entre 1000 et 2000 ? SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 ; REQ 15 Donner les employés dont le manager est 7902, 7566 ou 7788 ? SELECT * FROM EMP WHERE MGR IN (7902, 7566, 7788) ; REQ 16 Afficher les employés dont le nom commence par ‘S’ ? SELECT * FROM EMP WHERE ENAME LIKE ‘S%’ ; REQ 17 Afficher les employés dont le nom est composé de 4 caractères ? Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] Chapitre 2 : La sélection simple 12 SELECT * FROM EMP WHERE ENAME LIKE ‘_ _ _ _’ ; REQ 18 Afficher les employés qui n’ont pas de manager ? SELECT * FROM EMP WHERE MGR IS NULL ; 2.1.7 Les opérateurs logiques Les opérateurs logiques sont les trois suivants AND, OR et NOT. Il est inutile de vous rappeler que AND est prioritaire au OR, tout comme les opérateurs * et / qui sont prioritaires au + et au . REQ 19 Afficher tous les clerks dont le salaire est entre 1000 et 2000 ? SELECT * FROM JOB=’CLERK’; EMP WHERE SAL BETWEEN 1000 AND 2000 AND REQ 20 Afficher tous les managers dont le salaire est supérieur à 1500 et tous les salesman ? SELECT * FROM JOB=’SALESMAN’; EMP WHERE SAL>1500 AND JOB=’MANAGER’ OR REQ 21 Afficher tous les salesman et tous les managers dont le salaire est supérieur à 1500 ? SELECT * FROM EMP JOB=’SALESMAN’); WHERE SAL>1500 AND (JOB=’MANAGER’ Le langage SQL version Oracle – Document 1.1 Feedbacks à [email protected] OR
Documents pareils
INSIA – SIGL 2 Bases de données SQL – ORACLE TP 2 DDL et
Column table_name format a20
Select constraint_name, table_name, r_constraint_name, status, deferrable, deferred from
user_constraints order by constraint_name ;
Lister tous vos objets (vue user_ob...
Optimisation SQL
Un index est utilisé pour une clause LIKE si et seulement si la colonne est de type CHAR (ou VARCHAR2) et si
la chaîne de comparaison débute avec un caractère.
Par exemple, l’index sur ENAME est ut...