You are on page 1of 89

Extraction de données

Les fonctions
Les sous intérrogations
Les jointures
Les opérateurs ensemblistes

Plan

1 Extraction de données 4 Les jointures


Instruction SELECT Jointure interne
Restriction de données Jointure externe
Tri de données Equijointure / Non-équijointure
2 Les fonctions Auto-jointure
Les fonctions mono-ligne Jointure naturelle
Les fonctions de caractères Produit cartésien
Les fonctions numériques 5 Les opérateurs ensemblistes
Les fonctions de dates L’opérateur UNION
Les fonctions de conversion L’opérateur UNION ALL
Autres fonctions L’opérateur INTERSECT
Les fonctions analytiques L’opérateur MINUS
Les fonctions multi-lignes
3 Les sous intérrogations
Les sous-intérrogations monoligne
Les sous-intérrogations multi-lignes

2/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Plan

1 Extraction de données 4 Les jointures


Instruction SELECT
Restriction de données 5 Les opérateurs ensemblistes
Tri de données

2 Les fonctions

3 Les sous intérrogations

3/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Instruction SELECT
Syntaxe
SELECT * | { [DISTINCT] <colonne> | <expression> [alias],...}
FROM <nom table>;

SELECT : indique les colonnes à afficher


DISTINCT : supprime les doublons
FROM : indique les tables contenant les colonnes

Exemple 1
SELECT * FROM departments;

4/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Instruction SELECT
Exemple 2
SELECT department id, department name FROM departments;

Exemple 3
SELECT DISTINCT department id FROM employees;

5/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Expressions arithmétiques
Expressions contenant des données de type NUMBER, DATE et des
opérateurs arithmétiques

Exemple
SELECT last name, first name, salary+1000, commission pct*100 FROM employees;

6/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Valeur NULL

NULL représente une valeur non disponible, non affectée


NULL est différente de zéro, espace ou chaı̂ne vide

Exemple
SELECT last name, first name, commission pct FROM employees;

7/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Valeur NULL et expressions arithméthiques

Les expressions arithmétiques comportant une valeur NULL


renvoient toujours une valeur NULL

Exemple
SELECT last name, salary, salary+commission pct, salary*commission pct FROM employees;

8/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Allias de colonne
Un alias de colonne :
Renomme un entête de colonne
Est utile avec les calculs
Suit immédiatement le nom d’une colonne (le mot clé facultatif AS peut également
être utilisé entre le nom de la colonne et l’alias)
Nécessité des guillemets (”alias”) s’il contient des espaces ou des caractères spéciaux
(# $), ou s’il distingue les majuscules des minuscules

Exemple
SELECT last name nom, first name AS prénom, salary*12 ”revenu annuel” FROM employees;

9/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateur de concaténation

Concatène des colonnes ou des chaines de caractères


Est représenté par le symbole ||
La colonne résultante est une expression de type caratère

Exemple
SELECT department id||’ ** ’||department name AS ”département” from departments;

10/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Restriction de données: la clause WHERE


Restreindre les lignes renvoyées à l’aide la clause WHERE

Syntaxe
SELECT * | { [DISTINCT] <colonne> | <expression> [alias],...}
FROM <nom table>
[WHERE <condition(s)>];

Exemple
SELECT employee id, last name, department id
FROM employees
WHERE department id= 80;

11/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Chaı̂nes de caractères et dates

Les chaı̂nes de caractères et les dates sont incluses entre apostrophes.


Les valeurs de type caractère distinguent les majuscules des minuscules
Les valeurs de type date sont sensibles au format
Le format de date par défaut est DD-MM-RR

Exemples
1 SELECT employee id,first name FROM employees WHERE first name=’James’;

2 SELECT employee id,first name FROM employees WHERE first name=’JAMES’;


=> aucune ligne sélectionnée

12/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs de comparaison

13/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs de comparaison
L’opérateur BETWEEN

Exemple 1
SELECT first name, salary FROM employees
WHERE salary BETWEEN 15000 AND 20000;

Exemple 2
SELECT first name, salary FROM employees
WHERE first name BETWEEN ’V’ AND ’X’;

14/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs de comparaison
L’opérateur IN

Exemple 1
SELECT first name, department id FROM employees
WHERE department id IN (10,20);

Exemple 2
SELECT first name, last name FROM employees
WHERE first name IN (’James’,’David’,’Diana’);

15/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs de comparaison
L’opérateur LIKE

L’opérateur LIKE permet de rechercher des chaı̂nes de caractères à l’aide de caractères


génériques
Les conditions de recherche peuvent contenir des caractères ou des nombres littéraux
% représente Zéro ou plusieurs caractères
représente un caractère

Exemple
SELECT first name FROM employees
WHERE first name LIKE ’S e%’ ;

16/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs de comparaison
L’opérateur IS NULL

L’opérateur IS NULL permet de tester la présence de valeurs NULL.

Exemple
SELECT first name, manager id FROM employees
WHERE manager id IS NULL;

17/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs logiques

18/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs logiques
L’opérateur AND

Exemple
SELECT last name, job id, salary FROM employees
WHERE salary >=10000 AND job id LIKE ’%MAN%’;

19/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs logiques
L’opérateur OR

Exemple
SELECT last name, job id, salary FROM employees
WHERE salary >=10000 OR job id LIKE ’%MAN%’;

20/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs logiques
L’opérateur NOT

Exemple
SELECT last name, job id FROM employees
WHERE job id NOT IN (’IT PROG’, ’ST CLERK’, ’SA REP’) ;

21/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs logiques
Règles de priorité

22/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Opérateurs logiques
Règles de priorité

Exemple 1
SELECT last name, job id, salary FROM employees
WHERE job id= ’SA MAN’ OR job id= ’AD VP’ AND salary > 12000;

Exemple 1
SELECT last name, job id, salary FROM employees
WHERE ( job id= ’SA MAN’ OR job id= ’AD VP’ ) AND salary > 12000;

23/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Tri de données: la clause ORDER BY


La clause ORDER BY:
permet de triez les lignes extraites
ASC : ordre croissant (par défaut)
DESC : ordre décroissant
toujours la dernière clause dans l’instruction SELECT

Syntaxe
SELECT * | { [DISTINCT] <colonne> | <expression> [alias],...}
FROM <nom table>;
[ WHERE condition(s) ]
[ORDER BY {<colonne>, <expression>, <alias>} [ASC | DESC] ] ;

Exemple 1: tri par ordre décroissant


SELECT last name, hire date FROM employees
ORDER BY hire date DESC ; –ou bien ORDER By 2 DESC

24/90
Extraction de données
Les fonctions Instruction SELECT
Les sous intérrogations Restriction de données
Les jointures Tri de données
Les opérateurs ensemblistes

Tri de données: la clause ORDER BY


Exemple 2: tri par alias de colonne
SELECT employee id, last name, salary*12 ”Salaire Annuel”
FROM employees
ORDER BY ”Salaire Annuel”; –ou bien ORDER By 3

Exemple 3: tri selon plusieurs colonnes


SELECT employee id, last name, salary*12 ”Salaire Annuel”
FROM employees
ORDER BY ”Salaire Annuel”, last name DESC; —ou bien ORDER By 3, 2 DESC

25/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Plan

1 Extraction de données 4 Les jointures

2 Les fonctions 5 Les opérateurs ensemblistes


Les fonctions mono-ligne
Les fonctions analytiques
Les fonctions multi-lignes

3 Les sous intérrogations

26/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions

Il existe 3 types de fonctions dans le language SQL


Fonctions mono-ligne: manipulent une seule ligne et ramènent un
seul résultat
Fonctions analytiques: manipulent plusieurs lignes et ramènent un
plusieurs résultats
Fonctions multi-lignes: manipulent plusieurs lignes et ramènent un
seul résultat

27/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de caractères


Fonctions de conversion majuscules/minuscules

Exemple
SELECT first name, lower(first name) , upper(first name), initcap(first name) FROM employees;

28/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de caractères


Fonctions de manipulation de caractères

29/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de caractères


Fonctions de manipulation de caractères

Exemple
SELECT first name, last name, job id,
CONCAT(first name,last name) ”Nom et prénom”,
LENGTH (last name) ”longueur nom”,
INSTR(last name,’a’) ”position a”,
LPAD(last name,10,’*’),
RPAD(last name,10,’*’)
FROM employees
WHERE SUBSTR(job id, 4) = ’REP’;

30/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions numériques

31/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions numériques

Exemple
SELECT commission pct+0.2,
ROUND(commission pct+0.2),
TRUNC(commission pct+0.2),
FLOOR(commission pct+0.2),
CEIL(commission pct+0.2)
FROM employees where department id=80;

32/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de dates

Dans la base de données Oracle, les dates sont stockées dans un


format numériques interne: siècle, année, mois, jour, heures, minutes
et secondes
Le format de date par défaut est ’DD-MON-YY’
SYSDATE est une fonction qui renvoie :
La date
L’heure

33/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de dates


Calcul arithmétique sur les dates

Calcul arithmétique sur des dates:


ajout ou soustraction d’un nombre de jour à une date afin d’obtenir une date
résultante
Ajout ou soustraction d’un nombre d’heures à une date en divisant le nombre d’heures
par 24
soustraction d’une date d’une autre afin de déterminer le nombre de jours entre les
deux dates

Exemple
SELECT first name,
(SYSDATE-hire date) AS jours,
(SYSDATE-hire date)/7 AS semaines
FROM employees;

34/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de dates

35/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de dates

Exemple
SELECT systimestamp,
extract(year from systimestamp) as Année,
extract(month from systimestamp) as Mois,
extract(day from systimestamp) as Jour,
extract(hour from systimestamp) as Hour,
extract(minute from systimestamp) as Minutes,
extract(second from systimestamp) as Secondes
FROM dual;

36/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de conversion


Conversion implicite

Pour les affectations, le serveur Oracle peut convertir


automatiquement les types de données suivants:

L’expression salary=‘2000’ entraı̂ne la conversion implicite de la


chaı̂ne ‘2000’ en valeur numérique 2000
L’expression hire date>’01-Jan-90’ entraı̂ne la conversion implicite
de la chaı̂ne ’01-Jan-90’ en date

37/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de conversion


Conversion explicite

38/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de conversion


Conversion explicite: fonction TO CHAR

39/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de conversion


Conversion explicite:fonction TO CHAR

Exemple 1
SELECT last name, TO CHAR(hire date, ’fm DD Month YYYY’) AS HIREDATE FROM
employees;

fm permet de supprimer les espaces de remplissage ou les zéros de


début

Exemple 2
SELECT first name, TO CHAR(salary, ’$99,000.00’) SALARY FROM employees;

40/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions de conversion


Conversion explicite:fonctions TO DATE / TO NUMBER

Exemple 1 Exemple 2
select first name, hire date from emp Select first name, salary from employees
where hire date>to date(’01/01/1982’,’DD- where salary>=to number(’15000’);
MM-YYYY’);

41/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Autres fonctions
Fonction DECODE

La fonction decodepermet de faire un traitement conditionnel sur les données :

Syntaxe
Decode (expr, val1, res1, val2, res2, . . . . ValN, resN, default)
retourne res1 si expr = val1, res2 si expr=val2,...,resN si expr=valN sinon default

Exemple
SELECT first name,department id, decode(department id,10, ’ACCOUNTING’, 20, ’RESEARCH’,
’DEP. INCONNU ’) AS ”NOM DEPARTEMENT” FROM employees;

42/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Autres fonctions
Fonction NVL / NVL2

NVL(expr,val): retourne val si expr est NULL


NVL2(expr,val1,val2): retourne val1 si expr est NOT NULL et val2 si expr est NULL
expr peut être de type date, les caractère et valeur numérique. Les types de données de expr
et val doivent correspondre.

Exemple
SELECT first name, salary, commission pct,
NVL(commission pct,0),
NVL(to char(commission pct), ’Pas de commission’) AS ”commission ?”,
NVL2(commission pct,commission pct*salary,0) AS ”commision”,
to char(NVL2(commission pct,commission pct*100/salary,0)) || ’%’ AS ”pourcentage commission”
FROM employees;

43/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Autres fonctions
Fonction NULLIF

NULLIF (expr1, expr2) : retourne NULL si expr1= expr2, sinon


retourne expr1

Exemple
SELECT first name, LENGTH(first name) nbr1, last name, LENGTH(last name) nbr2,
NULLIF(LENGTH(first name), LENGTH(last name)) result FROM employees;

44/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Autres fonctions
Fonction COALESCE

Coalesce (exp1,expr2,expr3,. . . ) : retourne la première valeur non


nulle

Exemple
select Coalesce(NULL,1,NULL,7) from dual;
=> retourne 1

45/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Autres fonctions
Fonction CASE

La fonction case évalue une liste de conditions et retourne un résultat parmi les cas possibles

Syntaxe

1 case <expression>
when <valeur1> then <resultat1>
.
.
.
when <valeurN> then <resultatN>
else resultat
end
2 case
when <condition1> then <resultat1>
.
.
.
when <conditionN> then <resultatN>
else resultat
end

46/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Autres fonctions
Fonction CASE

Exemple
SELECT first name, department id,
case department id
when 10 then ’Accounting’
when 20 then ’RESEARCH’
else ’INCONNU’
end as departement
FROM employees;

47/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques

Les fonctions analytiques calculent une valeur globale basée sur un groupe de lignes. Ils
diffèrent des fonctions de groupe (ou d’agrégation) en ce qu’ils renvoient plusieurs lignes
pour chaque groupe.
Les fonctions analytiques sont la dernière série d’opérations effectuées dans une requête à
l’exception de la clause finale ORDER BY. Par conséquent, elles analytiques ne peuvent
apparaı̂tre que dans la liste de sélection ou clause ORDER BY.

Syntaxe d’une fonction analytique


fonction analytique(expression) OVER( [clause partitionnement] [clause ordre])

clause partitionnement: sous forme PARTITION BY expression1,expression2,...,expressionN


: définit les groupes de partitionnement
clause ordre: sous forme ORDER BY expression1,expression2,...,expressionN
[NULLSFIRST|LAST] : définit l’ordre à l’intérieur de chaque partition
NULLSFIRST/LAST: indique si les valeurs nulles seront en premier ordre/dernier
ordre

48/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques


Fonction ROW NUMBER()

La fonction row number() retourne le numéro séquentiel d’une ligne


dans une partition de résultats, en commençant à 1 pour la première
ligne de chaque partition.

Exemple 1
SELECT employee id,department id, salary, row number() over(order by salary DESC) ”N Salaire”
FROM employees ;

49/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques


Fonction ROW NUMBER()

Exemple 2 Exemple 3
SELECT employee id,department id, salary, SELECT employee id,department id,job id,
row number() over(partition by salary, row number() over(partition by
department id order by salary DESC) ”Rang department id,job id order by salary DESC)
Salaire” FROM employees; ”Rang Salaire” FROM employees;

50/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques


Fonction RANK()

La fonction rank() retourne le rang dechaque ligne au sein de la


partition d’un ensemble de résultats

Exemple
SELECT employee id,department id, salary, rank() over(partition by department id order by salary
DESC) ”Rang Salaire” FROM employees;

51/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques


Fonction DENSE RANK()

La fonction dense rank() retourne le rang des lignes à l’intérieur de


la partition d’un ensemble de résultats,sans aucun vide dans le
classement

Exemple
SELECT employee id,department id, salary, dense rank() over(partition by department id order by
salary DESC) ”Rang Salaire” FROM employees;

52/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques


Fonction FIRST VALUE()

La fonction first value() retourne la première valeur d’une partition

Exemple
SELECT employee id,department id, salary, first value(salary) over(partition by department id
order by salary ) as first valeur from employees;

53/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions analytiques


Fonction LAST VALUE()

La fonction last value() retourne la dernière valeur d’une partition

Exemple
SELECT employee id,department id, salary, last value(salary) over(partition by department id
order by salary ) as last valeur from employees;

54/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes

Les fonctions multi-lignes (appelées aussi de groupe ou d’agrégation) opèrent sur


des ensembles de lignes afin de renvoyer un seul résultat par groupe.
Les fonctions de groupe les plus utilisées:
AVG([distinct | all] expr) : valeur moyenne en ignorant les valeurs NULL
COUNT ([* | distinct | all] expr) : nombre de lignes où expr est différente
de NULL. Le caractère * comptabilise toutes les lignes sélectionnées
MAX ([distinct | all] expr) : valeur maximale en ignorant les valeurs NULL
MIN([ distinct | all] expr) : valeur minimale en ignorant les valeurs NULL
STDDEV([distinct | all] expr) : ecart-type en ignorant les valeurs NULL
SUM([distinct | all] expr) : somme en ignorant les valeurs NULL
VARIANCE([distinct | all] expr) : variance en ignorant les valeurs NULL

55/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes

Syntaxe
SELECT [colonne,] fonction groupe(colonne), ...
FROM <nom table>
[WHERE <condition>]
[GROUP BY colonne]
[ORDER BY colonne];

Exemple 1
SELECT trunc(AVG(salary),3), SUM(salary), MAX(hire date), MIN(hire date)
FROM employees
WHERE department id in(80,90);

56/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes

Exemple 2
SELECT COUNT(*)
FROM employees
WHERE department id in(80,90);

=>retourne le nombre de lignes qui vérifient la condition de la clause WHERE

Exemple 3
SELECT COUNT(commission pct) ”count”, COUNT(all commission pct) ”all”,
COUNT(DISTINCT commission pct) ”distinct”
FROM employees
WHERE department id in(80,90);

=>COUNT(expr) /COUNT(all expr): retourne le nombre de ligne ayant des valeurs non NULL de expr
=>COUNT(distinct expr): retourne le nombre de ligne ayant des valeurs non NULL et DISTINCT de expr

57/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes

Remarque

Les fonctions de groupe ignorent les valeurs NULL de la colonne


Exemple:
SELECT trunc(AVG(commission pct) ,3) FROM employees;

La fonction NVL force les fonctions de groupe à inclure les valeurs


NULL
Exemple:
SELECT trunc(AVG( NVL(commission pct,0) ) ,3) FROM employees;

58/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


La clause GROUP BY

Exemple 1
SELECT department id, trunc(AVG(salary),3)
FROM employees WHERE department id in(80,90)
GROUP BY department id;

Notez Bien
Toute colonne ou expression de la liste SELECT qui ne constitue pas une fonction d’agrégation
doit figurer dans la clause GROUP BY
Exemple:
SELECT department id, job id, trunc(AVG(salary),3)
FROM employees WHERE department id in(80,90)
GROUP BY department id, job id

59/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


La clause HAVING

La clause HAVING permet de restreindre l’affichage des résultats de


groupes à ceux qui vérifient la condition dans cette clause
Les lignes sont regroupées
La fonction de groupe est appliquée
Les groupes qui correspondent à la clause HAVING sont affichés

Syntaxe
SELECT [colonne,] fonction groupe(colonne), ...
FROM <nom table>
[WHERE <condition>]
[GROUP BY colonne]
[HAVING <condition groupe>]
[ORDER BY colonne];

60/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


La clause HAVING

Exemple 1
SELECT department id, MAX(salary)
Exemple 2
FROM employees SELECT department id, MAX(salary)
WHERE job id LIKE ’%REP’ FROM employees
GROUP BY department id WHERE job id LIKE ’%REP’
ORDER BY department id; GROUP BY department id
HAVING MAX(salary)>=10000
ORDER BY department id;

61/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


L’opérateur ROLLUP

L’opérateur ROLLUP : calcule des agrégats (SUM, COUNT, MAX,


MIN, AVG) à tous les niveaux de totalisation sur une hiérarchie de
dimensions et calcule le total général selon l’ordre de gauche à droite
dans la clause GROUP BY
S’il y a n colonnes de regroupements, GROUP BY ROLLUP génère
n+1 niveaux de totalisation
ROLLUP (a, b, c)
(a, b, c)
(a, b)
(a)
()

62/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


L’opérateur ROLLUP

Exemple
SELECT Department id, JOB id,manager id, SUM (SALARY)
FROM EMPLOYEES
WHERE DEPARTMENT ID in (10,20,30)
GROUP BY Rollup(Department id, JOB id,manager id);

63/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


L’opérateur CUBE

L’opérateur CUBE : calcule des agrégats (SUM, COUNT, MAX, MIN, AVG) à
différents niveaux d’agrégation comme ROLLUP mais de plus permet de calculer
toutes les combinaisons d’agrégations :
L’opérateur CUBE: calcule des sous-totaux pour toutes les combinaisons
possibles d’un ensemble de colonnes de regroupement
Si la clause CUBE contient n colonnes, CUBE calcule 2n combinaisons de totaux
CUBE (a, b, c)
(a, b, c)
(a, b)
(a, c)
(a)
(b, c)
(b)
(c)
()

64/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


L’opérateur CUBE

Exemple
SELECT Department id, JOB id, SUM (SALARY)
FROM EMPLOYEES
WHERE DEPARTMENT ID in (10,20,30)
GROUP BY Cube(Department id, JOB id);

65/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


La fonction GROUPING

Les lignes de totaux correspondent génaralement aux lignes ayant


des valeurs NULL
=>possibilité de confusion si les lignes contiennent déja des valeurs
NULL !
La fonction GROUPING permet d’éliminer cette ambiguité. Elle
accepte une seule colonne comme paramètre et retourne:
1 si la colonne contient une valeur null généré dans le cadre d’un
sous-total par un ROLLUP ou CUBE
0 pour une autre valeur, y compris les valeurs NULL stockées

66/90
Extraction de données
Les fonctions Les fonctions mono-ligne
Les sous intérrogations Les fonctions analytiques
Les jointures Les fonctions multi-lignes
Les opérateurs ensemblistes

Les fonctions multi-lignes


La fonction GROUPING

Exemple
SELECT Department id, JOB id, SUM (SALARY),
GROUPING(Department id), GROUPING( JOB id)
FROM EMPLOYEES
WHERE DEPARTMENT ID in (10,20,30)
GROUP BY Cube(Department id, JOB id);

67/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Plan

1 Extraction de données 4 Les jointures

2 Les fonctions 5 Les opérateurs ensemblistes

3 Les sous intérrogations


Les sous-intérrogations monoligne
Les sous-intérrogations multi-lignes

68/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Les sous intérrogations

69/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Les sous intérrogations

Syntaxe
SELECT <colonne1>[, <colonne2>,..., <colonneN>]
FROM <nom table>
WHERE <expression> OPERATEUR (SELECT SELECT <colonne1>[, <colonne2>,...,
<colonneN>] FROM <nom table>)

Mettre les sous-interrogations entre parenthèses


La clause order by de la sous-interrogation n’est pas nécessaire
Utilisez des opérateurs de comparaison monolignes avec les sous-interrogations monolignes,
et des opérateurs de comparaison multilignes avec les sous interrogations multilignes
opérateurs mono-ligne (>,>= ,<, <=, . . . )
opérateurs multi-lignes (IN, ALL, ANY)
La sous-interrogation (requête interne) est exécutée une seule fois avant la requête principale
Le résultat de la sous-interrogation est utilisé par la requête principale (requête externe)
Une sous-interrogation est utilisée dans les clauses suivantes :
WHERE
HAVING
FROM

70/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Les sous intérrogations monoligne

Renvoient une seule ligne


Utilisent des operateurs de comparaison monolignes (= , >, >= , <
, <= , <>)

Exemple 1
SELECT last name, job id, salary
FROM employees
WHERE job id =( SELECT job id FROM employees WHERE employee id=124 );

71/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Les sous intérrogations monoligne


Exemple 2
SELECT last name, job id, salary
FROM employees
WHERE salary =(SELECT max(salary) FROM employees )

Exemple 3
SELECT department id, min(salary)
FROM employees
GROUP BY department id
HAVING min(salary) > (SELECT MIN(salary) FROM employees WHERE department id= 20)

72/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Les sous intérrogations multi-lignes

Renvoient plusieurs lignes


Utilisent des opérateurs de comparaison multiligne (IN, ANY, ALL)

Exemple 1
SELECT employee id, last name, job id, salary
FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE job id = ’SA MAN’)
AND job id <> ’SA MAN’;

73/90
Extraction de données
Les fonctions
Les sous-intérrogations monoligne
Les sous intérrogations
Les sous-intérrogations multi-lignes
Les jointures
Les opérateurs ensemblistes

Les sous intérrogations multi-lignes

Exemple 2
SELECT employee id, last name, job id, salary
FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE job id = ’SA MAN’)
AND job id <> ’SA MAN’;

74/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Plan

1 Extraction de données 4 Les jointures


Jointure interne
2 Les fonctions Jointure externe
Equijointure / Non-équijointure
Auto-jointure
3 Les sous intérrogations Jointure naturelle
Produit cartésien

5 Les opérateurs ensemblistes

75/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Les jointures
Une jointure permet d’extraire des données à partir de plusieurs tables (et / ou vues) en
utilisant des conditions de jointure
La condition de jointure peut être exprimée:
dans la clause WHERE: WHERE table1.C1=table2.C1
dans la clause ON: ON table1.C1=table2.C1
Précéder le nom de la colonne par le nom de la table lorsque nom de la colonne figure dans
plusieurs tables
Il existe deu types de jointure:
jointure interne
jointure externe
Dans ce qui suit on utilisera les tables tab1 et tab2 suivantes pour les exemples:

76/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Jointure interne
Une jointure interne (appelé aussi jointure simple) est une jointure de deux tables ou plus
qui retourne uniquement les lignes qui satisfont la condition de jointure

Syntaxe
SELECT T1.colonne1, . . . ,T1.colonneN,T2.colonne1, . . . ,T2.colonneM
FROM T1 [ INNER ] JOIN T2
ON <condition jointure>
WHERE <condition>

Exemple
SELECT tab1.a, tab1.b, tab2.a,tab2.b
FROM tab1 INNER JOIN tab2
ON tab1.a=tab2.a and tab1.b=tab2.b;

77/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Jointure externe

Une jointure externe étend le résultat d’une jointure interne


Une jointure externe renvoie toutes les lignes qui satisfont la condition de jointure et renvoie
également une partie ou l’ensemble des lignes d’une table pour lesquelles aucune ligne de
l’autre table satisfait la condition de jointure. Il existe 3 types de jointures externe:
jointure externe gauche: jointure entre A et B => afficher les lignes de A qui ne
satisfont pas la condition de jointure
jointure externe droite: jointure entre A et B => afficher les lignes de B qui ne
satisfont pas la condition de jointure
jointure externe complète: jointure entre A et B => afficher les lignes de A et B qui
ne satisfont pas la condition de jointure

Syntaxe
SELECT T1.colonne1, . . . ,T1.colonneN,T2.colonne1, . . . ,T2.colonneM
FROM T1 {LEFT | RIGHT | FULL} [ OUTER ] JOIN T2
ON <condition jointure>
WHERE <condition>

78/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Jointure externe

Exemple 3:
SELECT tab1.a, tab1.b,
Exemple 1: Exemple 2:
tab2.a,tab2.b
SELECT tab1.a, tab1.b, SELECT tab1.a, tab1.b,
FROM tab1 FULL OUTER JOIN
tab2.a,tab2.b tab2.a,tab2.b
tab2
FROM tab1 LEFT OUTER JOIN FROM tab1 RIGHT OUTER JOIN
ON tab1.a=tab2.a and
tab2 tab2
tab1.b=tab2.b;
ON tab1.a=tab2.a and ON tab1.a=tab2.a and
tab1.b=tab2.b; tab1.b=tab2.b;

79/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Equijointure / Non-equijointure

Une équijointure est une Une non-équijointure est une


jointure avec une condition jointure avec une condition
de jointure contenant un de jointure contenant un
opérateur d’égalité (= , opérateur d’inégalité (< ,<=
LIKE , etc) , > , >= , BETWEEN , etc)
Exemple 1: Exemple 2:
SELECT tab1.a, tab1.b, tab2.a,tab2.b SELECT tab1.a, tab2.a, tab2.c
FROM tab1 LEFT OUTER JOIN tab2 FROM tab1 INNER JOIN tab2 $
ON tab1.a=tab2.a; ON tab1.a>=tab2.a and tab1.a<=tab2.c;

80/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Auto-jointure

Une auto-jointure est une jointure d’une table avec elle-même


(réflexivité)

Exemple
SELECT t1.a, t2.b, t2.c
FROM tab1 t1 INNER JOIN tab1 t2
ON t2.c=t1.a

81/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Jointure naturelle
Une jointure naturelle est basée sur toutes les colonnes des deux tables portant le même nom
Elle sélectionne les lignes des deux tables dont les valeurs sont identiques dans toutes les
colonnes qui correspondent
Si les colonnes portant le même nom présentent des types de données différents, une erreur
est renvoyée

Exemple
SELECT department id, department name, location id, city
FROM departments NATURAL JOIN locations
WHERE location id <>1700;
=
SELECT department id, department name, location id, city
FROM departments INNER JOIN locations
USING (location id)
WHERE location id <>1700;
=
SELECT department id, department name, departments.location id, city
FROM departments INNER JOIN locations
ON departments.location id = locations.location id
WHERE departments.location id <>1700;

82/90
Jointure interne
Extraction de données
Jointure externe
Les fonctions
Equijointure / Non-équijointure
Les sous intérrogations
Auto-jointure
Les jointures
Jointure naturelle
Les opérateurs ensemblistes
Produit cartésien

Produit cartésien
On obtient un produit cartésien lorsque :
Une condition de jointure est omise
Une condition de jointure est incorrecte
A chaque ligne de la table 1 sont jointes toutes les lignes de la table 2
Le nombre de lignes renvoyées est égal n1*n2 où n1 est le nombre de lignes de la table 1 n2
est le nombre de lignes de la table 2

Exemple
SELECT tab1.a, tab2.b
FROM tab1 CROSS JOIN tab2
WHERE tab1.a IN(1,2) ;

83/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

Plan

1 Extraction de données 4 Les jointures

2 Les fonctions 5 Les opérateurs ensemblistes


L’opérateur UNION
3 Les sous intérrogations L’opérateur UNION ALL
L’opérateur INTERSECT
L’opérateur MINUS

84/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

Les opérateurs ensemblistes

85/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

L’opérateur UNION
Le nombre de colonnes et le type des colonnes doivent être identiques dans les 2 ordres
SELECT
L’opérateur UNION intervient sur toutes les colonnes

Exemple 1
SELECT employee id, job id, salary FROM employees
WHERE job id IN(’AC MGR’,’AD VP’)ORDER BY employee id;

Exemple 2
SELECT employee id, job id, salary FROM employees
WHERE salary >= 15000 ORDER BY employee id;

86/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

L’opérateur UNION

Exemple 3
SELECT employee id, job id, salary FROM employees WHERE job id IN(’AC MGR’,’AD VP’)

UNION

SELECT employee id, job id, salary FROM employees WHERE salary >= 15000
ORDER BY employee id;

87/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

L’opérateur UNION ALL

Renvoie le même résultat que UNION sans élimination des doublons

Exemple
SELECT employee id, job id, salary FROM employees WHERE job id IN(’AC MGR’,’AD VP’)

UNION ALL

SELECT employee id, job id, salary FROM employees WHERE salary >= 15000
ORDER BY employee id;

88/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

L’opérateur INTERSECT

Exemple
SELECT employee id, job id, salary FROM employees WHERE job id IN(’AC MGR’,’AD VP’)

INTERSECT

SELECT employee id, job id, salary FROM employees WHERE salary >= 15000
ORDER BY employee id;

89/90
Extraction de données
L’opérateur UNION
Les fonctions
L’opérateur UNION ALL
Les sous intérrogations
L’opérateur INTERSECT
Les jointures
L’opérateur MINUS
Les opérateurs ensemblistes

L’opérateur MINUS

Exemple 1
SELECT employee id, job id, salary Exemple 2
FROM employees
SELECT employee id, job id, salary
WHERE job id IN(’AC MGR’,’AD VP’) FROM employees
WHERE salary >= 15000
MINUS

SELECT employee id, job id, salary MINUS


FROM employees
WHERE salary >= 15000 SELECT employee id, job id, salary
FROM employees
ORDER BY employee id; WHERE job id IN(’AC MGR’,’AD VP’)
ORDER BY employee id;

90/90

You might also like