Vous êtes sur la page 1sur 55

Partie 2

Le langage SQL

Pr A.AB ATAL 1
Le langage SQL

Le langage SQL ( Structured Query Longage : Langage

d’interrogation structuré) , lié à la structure relationnelle des

BD, est un langage permettant à l’aide d’un vocabulaire

assez limité d’accéder à des données et de les manipulées

sans se préoccuper de leur organisation, il a aussi le rôle

d’assurer la sécurité et l’intégrité des données.

2
Aspect générale du langage SQL
SQL (Structured Query Longage : Langage d’interrogation
structuré) ) est un langage non procédural, il comporte
plusieurs commandes qui se repartissent en trois familles
fonctionnellement distinctes:
• Langage de manipulation des données (LMD):
sélectionner, insérer, modifier, ou supprimer des données
dans une table.
• Langage de définition des données(LDD): créer des tables
dans une BDR, ainsi d’en modifier ou de supprimer leur
structure.
• Langage de contrôle de données(LCD): gérer la sécurité
et les permissions au niveau des utilisateurs d’une BDR.
3
Les Ordres SQL

• SELECT Recherche de données


• INSERT
Langage de manipulation des données (LMD)
• UPDATE
• DELETE
• CREATE
• ALTER Langage de définition des données (LDD)
• DROP
• RENAME
• TRUNCATE
• COMMIT
• ROLLBACK Contrôle des transactions
• SAVEPOINT

• GRANT
• REVOKE Langage de contrôle des données (LCD)

4
Tables utilisées dans le Cours
Table Emp Table Dept

Table SALGRADE

5
L’ordre Select

L’utilisation la plus fréquente de SQL s’effectue dans les


requêtes afin de rechercher les données dans une base de
données.
Syntaxe
select [distinct] * | <liste des champs >
From <Liste des tables>
[where <critère de sélection >]
[group by <critères de regroupement>]
[having <conditions de filtrage sur les groupes>]
[order by <liste des champs > asc | desc ] ;

6
Écriture des Ordres SQL

• Les ordres SQL peuvent être écrits indifféremment en


majuscules et/ou minuscules.
• Les ordres SQL peuvent être écrits sur plusieurs lignes.
• Les mots-clés ne doivent pas être abrégés ni scindés sur
deux lignes différentes.
• Les clauses sont généralement placées sur des lignes
distinctes.

7
Exécution de l’ordre SELECT

Saisie de l’ordre SQL


dans SQL*Plus
L’ordre est envoyé à
SQL>
SQL> SELECT
SELECT loc
loc la base de données
22 FROM
FROM dept;
dept;

Base de données

Affichage des
données
LOC
LOC
-------------
-------------
NEW
NEW YORK
YORK
DALLAS
DALLAS
CHICAGO
CHICAGO
BOSTON
BOSTON

8
Exemple de SELECT
SQL> SELECT *
2 FROM dept;

DEPTNO DNAME LOC


--------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> SELECT deptno, loc


2 FROM dept;
DEPTNO LOC
--------- -------------
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON

9
Exemple de SELECT

SQL>
SQL> SELECT
SELECT deptno
deptno SQL> SELECT DISTINCT deptno
22 FROM
FROM emp;
emp; 2 FROM emp;

DEPTNO DEPTNO
--------- ---------
10 10
30 20
10 30
20
...
14 rows selected.

10
L’Alias de Colonne

• Permet de renommer un en-tête de colonne (champs)


• Suit immédiatement le nom de la colonne ; le mot-clé AS
peut être placé entre le nom et l’alias est optionnel

• Doit obligatoirement être inclus entre guillemets (") s’il


contient des espaces, des caractères spéciaux ou si les

majuscules/minuscules doivent être différenciées

11
Le littéral

• Un littéral est un caractère, une expression, ou un nombre


inclus dans la liste SELECT.

• Les valeurs littérales de type date et caractère doivent être


placées entre simples quotes (').

12
Utilisation de littéral et d’Alias

SQL> SELECT ename AS name, sal salary


2 FROM emp;

SQL> SELECT ename, job, deptno


2 FROM emp
3 WHERE job='CLERK';

ENAME JOB DEPTNO


---------- --------- ---------
JAMES CLERK 30
SMITH CLERK 20
ADAMS CLERK 20
MILLER CLERK 10

13
Les opérateurs arithmétiques et logiques

14
Les opérateurs de comparaison

15
Utilisation des Opérateurs de Comparaison

SQL> SELECT ename, sal, comm


2 FROM emp
3 WHERE sal<=comm;

ENAME SAL COMM


---------- --------- ---------
MARTIN 1250 1400
SQL> SELECT ename, sal
2 FROM emp
3 WHERE sal BETWEEN 1000 AND 1500;

ENAME SAL
---------- --------- Limite Limite
MARTIN 1250
TURNER 1500 inférieure supérieure
WARD 1250
ADAMS 1100
MILLER 1300

16
Utilisation des Opérateurs de Comparaison

SQL> SELECT empno, ename, sal, mgr


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

EMPNO ENAME SAL MGR


--------- ---------- --------- ---------
7902 FORD 3000 7566
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788

17
Utilisation des Opérateurs de Comparaison

SQL> SELECT ename


2 FROM emp
3 WHERE ename LIKE 'S%';

SQL> SELECT ename


2 FROM emp
3 WHERE ename LIKE '_A%';

ENAME
----------
JAMES
WARD

18
Utilisation des Opérateurs de Comparaison

SQL> SELECT ename, mgr


2 FROM emp
3 WHERE mgr IS NULL;

ENAME MGR
---------- ---------
KING

19
Utilisation des Opérateurs logiques

SQL> SELECT empno, ename, job, sal


2 FROM emp
3 WHERE sal>=1100
4 AND job='CLERK';

EMPNO ENAME JOB SAL


--------- ---------- --------- ---------
7876 ADAMS CLERK 1100
7934 MILLER CLERK 1300

20
Utilisation des Opérateurs logiques
... WHERE ... NOT BETWEEN ... AND ...
... WHERE ... IS NOT IN ...
... WHERE ... NOT LIKE ...
... WHERE ... IS NOT NULL

SQL> SELECT ename, job


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

ENAME JOB
---------- ---------
KING PRESIDENT
MARTIN SALESMAN
ALLEN SALESMAN
TURNER SALESMAN
WARD SALESMAN

21
Utilisation de l’opérateurs de Concaténation

SQL> SELECT ename ||' '||'is a'||' '||job


2 AS "Employee Details"
3 FROM emp;

Employee
Employee Details
Details
-------------------------
-------------------------
KING
KING is
is aa PRESIDENT
PRESIDENT
BLAKE
BLAKE is
is aa MANAGER
MANAGER
CLARK
CLARK is
is aa MANAGER
MANAGER
JONES
JONES is
is aa MANAGER
MANAGER
MARTIN
MARTIN is
is aa SALESMAN
SALESMAN
...
...
14
14 rows
rows selected.
selected.

22
Exemple de tri des enregistrements
SQL> SELECT ename, job, deptno, hiredate
2 FROM emp
3 ORDER BY hiredate DESC;

ENAME JOB DEPTNO HIREDATE


---------- --------- --------- ---------
ADAMS CLERK 20 12-JAN-83
SCOTT ANALYST 20 09-DEC-82
MILLER CLERK 10 23-JAN-82
JAMES CLERK 30 03-DEC-81
FORD ANALYST 20 03-DEC-81
KING PRESIDENT 10 17-NOV-81
MARTIN SALESMAN 30 28-SEP-81
...
14 rows selected.

23
Exemple de tri des enregistrements

SQL> SELECT ename, deptno, sal


2 FROM emp
3 ORDER BY deptno, sal DESC;

ENAME DEPTNO SAL


---------- --------- ---------
KING 10 5000
CLARK 10 2450
MILLER 10 1300
FORD 20 3000
...
14 rows selected.

24
Types de Jointures en SQL

Equijointure
Equijointure Non-équijointure
Non-équijointure

Jointure
Jointure externe
externe Autojointure
Autojointure

25
Exemple d’équijointure

SQL> SELECT empno, ename, emp.deptno, dept.deptno ,


2 dept.loc
3 FROM emp, dept
4 WHERE emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC


----- ------ ------ ------ ---------
7839 KING 10 10 NEW YORK
7698 BLAKE 30 30 CHICAGO
7782 CLARK 10 10 NEW YORK
7566 JONES 20 20 DALLAS
...
14 rows selected.

26
Exemple de non-équijointure

SQL> SELECT e.ename, e.sal, s.grade


2 FROM emp e, salgrade s
3 WHERE e.sal
4 BETWEEN s.losal AND s.hisal;

ENAME SAL GRADE


---------- --------- ---------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
...
14 rows selected.

27
Exemple de Jointures Externes

SQL> SELECT e.ename, d.deptno, d.dname


2 FROM emp e, dept d
3 WHERE e.deptno(+) = d.deptno
4 ORDER BY e.deptno;

ENAME DEPTNO DNAME


---------- --------- -------------
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.

28
Exemple de l’autojointures

SQL> SELECT worker.ename||' works for '||manager.ename


2 FROM emp worker, emp manager
3 WHERE worker.mgr = manager.empno;

WORKER.ENAME||'WORKSFOR'||MANAG
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
-------------------------------
BLAKE
BLAKE works
works for
for KING
KING
CLARK
CLARK works
works for
for KING
KING
JONES
JONES works
works for
for KING
KING
MARTIN
MARTIN works
works for
for BLAKE
BLAKE
...
...
13
13 rows
rows selected.
selected.

29
Fonction de regroupement de données

Les fonctions de groupe agissent sur des groupes de lignes et

donnent un résultat par groupe

• AVG ([DISTINCT|ALL]n)

• COUNT ({ *|[DISTINCT|ALL]expr})

• MAX ([DISTINCT|ALL]expr)

• MIN ([DISTINCT|ALL]expr)

• SUM ([DISTINCT|ALL]n)

30
Utilisation des fonctions de regroupement
SQL> SELECT AVG(sal), MAX(sal),
2 MIN(sal), SUM(sal)
3 FROM emp
4 WHERE job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)


-------- --------- --------- ---------
1400 1600 1250 5600

SQL> SELECT COUNT(*)


2 FROM emp
3 WHERE deptno = 30;

COUNT(*)
---------
6

31
Utilisation des fonctions de regroupement

SQL> SELECT AVG(comm)


2 FROM emp;

AVG(COMM)
---------
550

SQL> SELECT AVG(NVL(comm,0))


2 FROM emp;

AVG(NVL(COMM,0))
----------------
157.14286

32
Création de Groupes de Données

EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000 2916.6667
10 1300
20 800 "salaire DEPTNO AVG(SAL)
20 1100 moyen pour ------- ---------
20 3000 2175 chaque 10 2916.6667
20 3000 département
20 2975 de la table 20 2175
30 1600 EMP" 30 1566.6667
30 2850
30 1250 1566.6667
30 950
30 1500
30 1250

33
Exemple de création de groupes de données

SQL> SELECT deptno, AVG(sal)


2 FROM emp
3 GROUP BY deptno;

DEPTNO AVG(SAL)
--------- ---------
10 2916.6667
20 2175
30 1566.6667

34
Exemple de création de groupes de données

SQL> SELECT deptno, job, sum(sal)


2 FROM emp
3 GROUP BY deptno, job;

DEPTNO JOB SUM(SAL)


--------- --------- ---------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
...
9 rows selected.

35
Imbrication des Fonctions de Groupe

SQL> SELECT max(avg(sal))


2 FROM emp
3 GROUP BY deptno;

MAX(AVG(SAL))
-------------
2916.6667

36
Utilisation de la clause HAVING

La clause HAVING permet restreindre les groupes

• Les lignes sont regroupées.


• La fonction de groupe est appliquée.
• Les groupes qui correspondent à la clause HAVING sont
affichés.

37
Exemple de l’utilisation de HAVING

SQL> SELECT deptno, max(sal)


2 FROM emp
3 GROUP BY deptno
4 HAVING max(sal)>2900;

DEPTNO MAX(SAL)
--------- ---------
10 5000
20 3000

38
Exemple de l’utilisation de HAVING

SQL> SELECT job, SUM(sal) PAYROLL


2 FROM emp
3 WHERE job NOT LIKE 'SALES%'
3 GROUP BY job
4 HAVING SUM(sal)>5000
5 ORDER BY SUM(sal);

JOB PAYROLL
--------- ---------
ANALYST 6000
MANAGER 8275

39
Les Sous-Interrogations
Syntaxe
SELECT select_list
FROM tables
WHERE expr operator (SELECT select_list
FROM tables );

• La sous-interrogation (requête interne) est exécutée une


fois avant la requête principale (une sous-interrogation ne
doit pas contenir la clause ORDER BY).
• Le résultat de la sous-interrogation est utilisé par la
requête principale (externe).
40
Types de Sous-Interrogations

Sous-interrogation
Sous-interrogation Sous-interrogation
Sous-interrogation
mono-ligne
mono-ligne multi-ligne
multi-ligne
Opérateurs mono-ligne Opérateurs multi-ligne

41
Exemple de Sous-Interrogations mono-ligne

SQL> SELECT ename, job


2 FROM emp
3 WHERE job = CLERK
4 (SELECT job
5 FROM emp
6 WHERE ename = 'ADAMS')
7 AND sal > 1100
8 (SELECT sal
9 FROM emp
10 WHERE ename = 'ADAMS');

ENAME
ENAME JOB
JOB
----------
---------- ---------
---------
MILLER
MILLER CLERK
CLERK

42
Exemple de Sous-Interrogations mono-ligne

SQL> SELECT ename, job, sal


800
2 FROM emp
3 WHERE sal =
4 (SELECT MIN(sal)
5 FROM emp);

ENAME
ENAME JOB
JOB SAL
SAL
----------
---------- ---------
--------- ---------
---------
SMITH
SMITH CLERK
CLERK 800
800

43
Exemple de Sous-Interrogations mono-ligne

SQL> SELECT deptno, MIN(sal)


2 FROM emp
3 GROUP BY deptno
800
4 HAVING MIN(sal) >
5 (SELECT MIN(sal)
6 FROM emp
7 WHERE deptno = 20);

44
Exemple de Sous-Interrogations multi-ligne

SQL> SELECT empno, ename, job 1300


2 FROM emp 1100
800
3 WHERE sal < ANY 950
4 (SELECT sal
5 FROM emp
6 WHERE job = 'CLERK')
7 AND job <> ''CLERK';

EMPNO
EMPNO ENAME
ENAME JOB
JOB
---------
--------- ----------
---------- ---------
---------
7654
7654 MARTIN
MARTIN SALESMAN
SALESMAN
7521
7521 WARD
WARD SALESMAN
SALESMAN

45
Exemple de Sous-Interrogations multi-ligne

SQL> SELECT empno, ename, job1566.6667


2 FROM emp 2175
2916.6667
3 WHERE sal > ALL
4 (SELECT avg(sal)
5 FROM emp
6 GROUP BY deptno)

EMPNO
EMPNO ENAME
ENAME JOB
JOB
---------
--------- ----------
---------- ---------
---------
7839
7839 KING
KING PRESIDENT
PRESIDENT
7566
7566 JONES
JONES MANAGER
MANAGER
7902
7902 FORD
FORD ANALYST
ANALYST
7788
7788 SCOTT
SCOTT ANALYST
ANALYST

46
Les Sous-Interrogations Synchronisées
Syntaxe: SELECT outer1, outer2, ...
FROM table1 alias1
WHERE outer1 operator (SELECT inner1
FROM table2 alias2
WHERE alias1.outer2 = alias2.inner1);
La sous-interrogation est exécutée pour chaque enregistrement
de la requête principale.
Nouvelle ligne candidate (requête externe)

Exécuter la requête interne utilisant une


valeur de la ligne candidate

Utiliser la valeur(s) de la requête interne


qualifiant la ligne candidate

47
Exemple de Sous-Interrogations Synchronisées

Recherchez tous les employés dont le salaire est supérieur au


salaire moyen de leur département
SQL> SELECT empno, sal, deptno Chaque fois que la requête
2 FROM emp outer externe est traitée,
3 WHERE sal > (SELECT AVG(sal) la requête interne
4 FROM emp inner est exécutée.
5 WHERE outer.deptno= inner.deptno);

EMPNO
EMPNO SAL
SAL DEPTNO
DEPTNO
--------
-------- ---------
--------- ---------
--------- Opérateur mono.ligne
7839
7839 5000
5000 10
10 ou muti-ligne
7698
7698 2850
2850 30
30
7566
7566 2975
2975 20
20
...
...
66 rows
rows selected.
selected.

48
Les Sous-Interrogations Synchronisées et
l'Opérateur EXISTS

• Pour chaque enregistrement de la requête principale, une


recherche d’enregistrement est effectuée dans la sous-
interrogation.
• La recherche dans la sous-interrogation est interrompue
dès une ligne a été trouvée, la condition de la requête
principale est vraie.
• La condition de la requête principale est fausse si aucune
ligne n’a été trouvée dans la sous-interrogation.
49
Exemple de l’utilisation de l’opérateur EXISTS

Recherchez les employés ayant au moins une personne sous


leur responsabilité.
SQL> SELECT empno, ename, job, deptno
2 FROM emp outer
3 WHERE EXISTS (SELECT empno
4 FROM emp inner
5 WHERE inner.mgr = outer.empno);

EMPNO ENAME JOB DEPTNO


--------- ---------- --------- ---------
7839 KING PRESIDENT 10
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...
6 rows selected.

50
Exemple de l’utilisation de l’opérateur EXISTS

Recherchez tous les départements qui ne comprennent pas


d'employés.
SQL> SELECT deptno, dname
2 FROM dept d
3 WHERE NOT EXISTS (SELECT '1'
4 FROM emp e
5 WHERE d.deptno = e.deptno);

DEPTNO
DEPTNO DNAME
DNAME
---------
--------- ----------
----------
40
40 OPERATIONS
OPERATIONS

51
Les Opérateurs Ensemblistes

• Intersect
• Union / Union All
• Minus
Table Emp Table EMPHISTORY

52
Exemple de l'Opérateur UNION
Affichez le nom, le poste et le département de tous les
employés
SQL> SELECT ename, job, deptno
2 FROM emp
3 UNION
4 SELECT name, title, deptid
5 FROM emp_history;

ENAME JOB DEPTNO


---------- --------- ---------
ADAMS CLERK 30
ALLEN SALESMAN 30
ALLEN SALESMAN 20
BALFORD CLERK 20
BLAKE MANAGER 30
...
20 rows selected.

53
Exemple de l'Opérateur INTERSECT
Affichez les différents noms, numéros et postes des
employés présents dans les tables EMP et EMPHISTORY.

SQL> SELECT ename, empno, job


2 FROM emp
3 INTERSECT
4 SELECT name, empid, title
5 FROM emp_history;

ENAME
ENAME EMPNO
EMPNO JOB
JOB
----------
---------- ---------
--------- ---------
---------
ALLEN
ALLEN 7499
7499 SALESMAN
SALESMAN
CLARK
CLARK 7782
7782 MANAGER
MANAGER
SCOTT
SCOTT 7788
7788 ANALYST
ANALYST

54
Exemple de l'Opérateur MINUS
Affichez le nom,le numéro et le poste de tous les employés
ayant quitté la société.
SQL> SELECT name, empid, title
2 FROM emp_history
3 MINUS
4 SELECT ename, empno, job
5 FROM emp;

NAME
NAME EMPID
EMPID TITLE
TITLE
---------- ---------
---------- --------- ---------
---------
BALFORD
BALFORD 6235
6235 CLERK
CLERK
BRIGGS
BRIGGS 7225
7225 PAY
PAY CLERK
CLERK
JEWELL
JEWELL 7001
7001 ANALYST
ANALYST
SPENCER
SPENCER 6087
6087 OPERATOR
OPERATOR
...
...
66 rows
rows selected.
selected.

55

Vous aimerez peut-être aussi