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

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...

Plus en détail

Optimisation SQL

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...

Plus en détail