Vous êtes sur la page 1sur 44

Les Bases de Données

Oracle RDBMS - SQL


Pr. Mohammed El Mohajir

1
SQL

 SEQUEL  Structured English Query Language (IBM)


 Nom a changé  SQL  Structured Query Language
 Langage Standard pour l’accès au DB
 SQL est plus un langage de commande que de
programmation

2
Commandes SQL

 Interrogation -requêtes -reporting:


 SELECT

 Data Manipulation Language (DML):


 INSERT
 UPDATE
 DELETE

 Data Definition language (DDL):


 CREATE
 ALTER
 DROP
 RENAME
 TRUNCATE

3
Commandes SQL-suite
 Contrôle de transaction:
 COMMIT
 ROLLBACK
 SAVEPOINT
 Data Control Language (DCL):
 GRANT
 REVOKE

4
langages de programmation
 But: associer aux données par Ie RDBMS les traitements les
concernant
 Ces traitements sont stockés et exécutés dans Ie RDBMS .
 2 langages:
 PL/SQL: Procedural Language I SQL =extension du SQL pour les aspects
procéduraux (boucles, tests, calculs arithmétiques, ...)
 Java (orientation objet)

 Avantages du PL/SQL:
 portabilité sur toute plate-forme logicielle ORACLE
 indépendant de 1‘OS sur lequel s'exécute Ie RDBMS (UNIX, NT, ...)
 performances (lien étroit avec la DB)

5
Tables de la DB support du cours
 EMP: tables contenant les employés
 EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO
 DEPT
 DEPTNO, DNAME, LOC
 SALGRADE
 GRADE, LOSAL, HISAL

6
Commandes SQL
 Indépendante de la case (SELECT =Select =
select)
 Peuvent être écrites sur plusieurs lignes
 Les mots-clés ne peuvent pas être coupés ou
abrégés
 Les ordres et les clauses les composant sont
regroupées sur des lignes séparées dans un soucis
de lisibilité
 Terminées par« ; »
 Outils ORACLE: SQL*PLUS, SQL Worksheet
 Outils commerciaux ex:TOAD
7
SELECT
 Retourne les données sous la forme d'une table «
virtuelle »
 Sélectionner toutes les colonnes et toutes les
lignes d'une table:
SQL> SELECT *
2 FROM dept;
DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK


20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

8
SELECT
 Sélectionner quelques colonnes et toutes les
lignes d'une table:

SQL> SELECT deptno, loc FROM dept;

DEPTNO LOC

10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON

9
Expressions arithmétiques
 Les données extraites de la DB peuvent être des données
calculées partir des informations stockées
 Uniquement pour des données de type « NOMBRE » ou
« DATE»
 Operateurs classiques: * , I, +, -(par ordre de précédence)

10
Expressions arithmétiques
 Exemple 1

!SQL> SELECT ename, sal, sal+300


2 FROM emp;

ENAME SAL SAL+300

SMITH 800 1100


ALLEN 1600 1900
WARD 1250 1550
JONES 2975 3275
MARTIN 1250 1550
...
14 rows selected

11
Expressions arithmétiques
 Exemple 2

SQL> SELECT ename, sal, 12*sal+300


2 FROM emp;

ENAME SAL 12*(SAL+300)

SMITH 800 9900


ALLEN 1600 19500
WARD 1250 15300
JONES 2975 36000
MARTIN 1250 15300

14 rows selected.

12
Expressions arithmétiques
 Exemple 2

SQL> SELECT ename, sal, 12*(sal+300)


2 FROM emp;

ENAME SAL 12*(SAL+300)

SMITH 800 13200


ALLEN 1600 22800
WARD 1250 18600
JONES 2975 39300
MARTIN 1250 18600

14 rows selected.

13
Valeur NULL
 En plus de I' intervalle naturel de valeurs propre un type
de donnée, tout champ d'une table peut stocker une
valeur particulière précisant I' absence d'information:
NULL
 NULL ne vaut PAS ZERO pour un nombre
 NULL n'est PAS une chaine de caractères VIDE ou ne
contenant que des espaces
SQL> SELECT ename, job,
2 comm ENAME JOB COMM
3 FROM emp;
SMITH CLERK
ALLEN SALESMAN 300

14
NULL dans des expressions
 Dans une expression arithmétique, toute valeur NULL
joue Ie rôle d'absorbant; Ie résultat retourné vaut NULL

SQL> SELECT ename, 12*(sal + comm)


2 FROM emp;

ENAME 12* (SAL+COMM)

SMITH
ALLEN 19500

15
ALIAS
 Dans un SELECT, permet de donner un autre nom une
colonne ou à une expression
 Surtout utile pour une expression
 alias =chaine de caractères, entre guillemets si contient
des espaces ou caractères spéciaux ou si la case est
importante
 Exemple:
 SELECT ename AS nom FROM emp;
 SELECT ename , sal AS « Salaire annuel » FROM emp;
 SELECT ename, (sal+comm) « Salaire & Commission » ...
 Le mot-clé « AS » est facultatif

16
CONCATENATION
 L'operateur « II » permet de construire de nouvelles
chaines de caractères par la juxtaposition d'autres

SQL> SELECT ename||’-’||job AS "Employés"


2 FROM emp;

Employés

SMITH-CLERK
ALLEN-SALESMAN
WARD-SALESMAN

17
Eliminer les doublons
 L'operateur « DISTINCT» permet de ne retenir
que les valeurs strictement différentes les une des
autres
SQL> SELECT deptno
2 FROM emp;
DEPTNO
-------
SQL> SELECT DISTINCT deptno 20
2 FROM emp; 30
30
DEPTNO 20
------- 30
10 30
20 10
30 20
10
18
SQL, SOL*PLUS, SQL WORKSHEET
 SQL:
 langage de manipulation de données
 normalisé ANSI

 SQL*PLUS:
 Outil ORACLE d'interaction avec Ie RDBMS (ISQL, ...)
 mode« terminal»

 SQL WORKSHEET:
 Outil ORACLE d'interaction avec Ie RDBMS (ISQL, ...)
 mode« graphique», interface WINDOWS

19
Structure des tables
 DESCRIBE permet de visualiser sous SQL*PLUS
la structure d'une table:
 Ie nom des champs (ou colonne)
 Ie type de données
 certaines contraintes (NOT NULL)

SQL> DESCRIBE dept; Employes NULL? TYPE

DEPTNO NOT NULL NUMBER (2)


DNAME VARCHAR2 (14)
LOC VARCHAR2 (13 )

 Autre methode:
 SELECT sur une table SYSTEME (voir plus loin)

20
Commandes SQL*PLUS
 Commandes pour éditer des ordres SQL

 APPEND text
 CHANGE I oldI new •INPUT
 CHANGE I textI •INPUT text
 CLEAR BUFFER •LlST
•LIST n
 DEL
• LlST m n
 DEL n •RUN
 DEL m n

21
Commandes SQL*PLUS
 Commandes « fichier »
 SAVE nom_fichier
 sauver Ie buffer de commandes dans un fichier
 GET nom_fichier
 lire un fichier dans Ie buffer de commandes
 START nom_fichier
 demarrer un script de commandes
 @ nom_fichier
 demarrer un script de commandes
 EDIT nom_fichier
 lancer un editeur
 SPOOL nom_fichier
 Ie fichier dans lequel doivent venir s'inscrire les résultats

22
Restriction et tris de données

23
Objectifs
 Comment choisir des enregistrements ?
 Chaines de caractères et dates
 Operateurs de comparaison
 Operateurs BETWEEN, IN, LIKE, IS NULL
 Operateurs logiques AND, OR, NOT
 Règles de priorités des operateurs
 Tris

24
Choisir des enregistrements
 Comment extraire de la table EMP tous les
employés travaillant dans le département 10 ?
EMPNO ENAME JOB DEPNO
-----------------------------------------------------------------------
7839 KING PRESIDENT 10
7698 BLAKE MANAGER 30
7699 CLARK MANAGER 10
….

7456 JONES MANAGER 20

EMPNO ENAME JOB DEPNO

? ----------------------------------------------------------------------
7839
7756
7934
KING PRESIDENT
CLARK MANAGER
MILLER CLERK
10
10
10

25
3

Clause WHERE
 La clause WHERE d'un SELECT précise les conditions
que doivent remplir les enregistrements qui seront
sélectionnés
 Extraire tous les employés travaillant dans le
département 10 en utilisant la clause WHERE:
SQL> SELECT ename, job, deptno
2 FROM emp
3 WHERE deptno=10;

ENAME JOB DEPTNO


KING PRESIDENT 10
CLARK MANAGER 10
MILLER CLERK 10
3 rows selected.

26
Chaînes de caractères
 Les chaînes de caractères sont entourées par
l'apostrophe
 Leur contenu est sensible à la casse:
 'A' est différente de 'a'
 'Bonjour' est différent de 'BONJOUR'
 Y-a-t'il un employé qui s'appelle 'JAMES' ?

SQL> SELECT ename, job, deptno


2 FROM emp
3 where ename=‘JAMES’;

27
Dates
 Les dates sont introduites sous la forme de
chaînes de caractères entourées par l'apostrophe
 Le contenu doit respecter un format prédéfini
choisi pour une session ou par défaut:
 'DD-MON-YY'
 Quels employés ont été engagés le 3 décembre
1981 ?
SQL> SELECT ename, job, deptno
2 FROM emp
3 WHERE hiredate='03-DEC-81';

28
Opérateurs de comparaison
 = égal à
 > supérieur à
 >= supérieur ou égal à
 < inférieur à
 <= inférieur ou égal à
 <> ou != ou NOT = différent de

29
Exemple
 Quels employés touchent un salaire inférieur à
leur commission?
SQL> SELECT ename, saI, comm
2 FROM emp
3 WHERE saI < comm;

ENAME SAL COMM


MARTIN 1250 1400

1 rows selected.

30
Autres opérateurs de restriction
Condition Use Example
IN Determines if a certain value is equal to any values in a SELECT * FROM emp WHERE
specific list of values. dept_id IN (10,20,30);

ANY, SOME Compares a certain value to a specific list of values. Must SELECT * FROM emp WHERE
be combined with one of the simple comparison salary >= ANY (1000, 5000, 7000);
operators.

ALL Compares a value to every value in a list. Must be SELECT * FROM emp WHERE
combined with one of the simple comparison operators. salary >= ALL (1000, 5000,7000);

BETWEEN a Determines if a value is greater than or equal to a but less SELECT * FROM emp WHERE
AND b than or equal to b. dept_id BETWEEN 10 AND 50;

LIKE comparaison à l'aide de caractères génériques

IS NULL permet de tester les valeurs NULL


JAMAIS « colonne =NULL », ceci étant toujours FAUX

EXISTS returns true when a value or set of values exists in the SELECT deptno FROM emp
result set of a given subquery WHERE EXISTS (SELECT deptno
FROM dept);
31
Between
 Permet d'extraire les enregistrements dont les valeurs
d'une colonne se trouvent dans un intervalle
 Quels sont les employés touchant un salaire compris dans
une fourchette de 1000 à 1500 ?
SQL> SELECT ename, saI
2 FROM emp
3 WHERE sal BETWEEN 1000 AND 1500; ENAME SAL
----------------------------
MARTIN 1250
WARD 1250
TURNER 1500
ADAMS 1100
MILLER 1300

5 rows selected

32
IN
 Permet d'extraire les enregistrements dont les
valeurs d'une colonne doivent appartenir à une
liste
 Quels sont les employés travaillant pour les
manager 7902, 7566 et 7788 ?

SQL> SELECT ename, sal, mgr


2 FROM emp
3 WHERE mgr IN (7902, 7566, 7788);

33
LIKE
 Permet d'extraire les enregistrements dont les
valeurs d'une colonne de type chaîne de caractères
correspondent à un masque de recherche
 Le masque utilise les caractères génériques par
défaut suivant:
 % correspond à 0 ou plusieurs caractères
 _ correspond à un seul caractères

34
LIKE -exemples
 Quels sont les employés dont le nom commence
par' S ' ?
SQL> SELECT ename
2 FROM emp
3 WHERE ename LIKE ‘S%’;

 Quels sont les employés engagés en 1981 ?

SQL> SELECT ename, hiredate


2 FROM emp
3 WHERE hiredate LIKE '%81';

35
LIKE - Option ESCAPE
 Pour utiliser les caractères génériques (% ou _ ) en
tant que caractères recherchés, il faut modifier leur
signification pour le parser SQL par la commande
«ESCAPE»
 Quels sont les employés dont le nom contient
'A_B'

SQL> SELECT ename


2 FROM emp
3 WHERE ename LIKE '%A\_B%' ESCAPE '\';

36
IS NULL
 Permet de déterminer si une valeur est NULL
 Pour rappel, « colonne = NULL » n'est JAMAIS
vrai
 Quels sont les managers?

SQL> SELECT ename


2 FROM emp
3 WHERE mgr IS NULL;

37
Opérateurs logiques
 Une clause WHERE peut être construite en combinant
plusieurs conditions à l'aide d'opérateurs logiques
 AND
 retourne « true » si les 2 conditions sont « true»
 OR:
 retourne « true » si une des 2 conditions vaut « true »
 NOT
 retourne l'inverse logique

38
Opérateur AND
 Quels sont les employés exerçant le job' CLERK '
ET gagnant plus de 1000 ?

SQL> SELECT empno, ename, job, saI


2 FROM emp
3 WHERE saI> 1000 AND job = 'CLERK';

39
Opérateur OR
 Quels sont les employés exerçant le job' CLERK'
OU dont le salaire est supérieur à 1000 ?

SQL> SELECT empno, ename, job, saI


2 FROM emp
3 WHERE job = 'CLERK' OR saI> 1000;

SQL> SELECT empno, ename, job, saI


2 FROM emp
3 WHERE saI> 1000 OR job = 'CLERK';

40
Opérateur NOT
 Quels sont les employés n'exerçant ni le job , CLERK
' ni le job' MANAGER' ?

SQL> SELECT empno, ename, job, saI


2 FROM emp
3 WHERE job NOT IN (‘CLERK', ‘MANAGER’);

41
Règles de priorité des opérateurs
 1. Les opérateurs de comparaison
 2. NOT
 3. AND
 4. OR

 Préférer le recours aux parenthèses afin de forcer


l'ordre de priorité et de rendre le code plus lisible

42
Exemple1
 Quels sont les employés exerçant le métier
'SALESMAN' OU les employés 'PRESIDENT' qui
gagnent plus de 1500?
SQL> SELECT ename, job, saI
2 FROM emp
3 WHERE job = 'SALESMAN' OR
4 job = 'PRESIDENT' AND saI> 1.500;

SQL> SELECT ename, job, saI


2 FROM emp
3 WHERE job = 'SALESMAN' OR
4 (job = PRESIDENT' AND saI> 1.500);

43
Exemple 2
 Quels sont les employés exerçant le métier
'SALESMAN' OU de 'PRESIDENT' ET qui
gagnent plus de 1500 ?

SQL> SELECT ename, job, saI


2 FROM emp
3 WHERE (job = 'SALESMAN' OR
4 job = 'PRESIDENT') AND saI> 1.500;

44