Professional Documents
Culture Documents
CH Lid
CH Lid
Les fonctions
Les sous intérrogations
Les jointures
Les opérateurs ensemblistes
Plan
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
2 Les fonctions
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>;
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
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
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
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
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
Exemples
1 SELECT employee id,first name FROM employees WHERE first name=’James’;
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
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
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
Syntaxe
SELECT * | { [DISTINCT] <colonne> | <expression> [alias],...}
FROM <nom table>;
[ WHERE condition(s) ]
[ORDER BY {<colonne>, <expression>, <alias>} [ASC | 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Exemple 1
SELECT last name, TO CHAR(hire date, ’fm DD Month YYYY’) AS HIREDATE FROM
employees;
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
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
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
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
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
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 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.
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
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
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
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
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
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
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
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
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
Exemple 2
SELECT COUNT(*)
FROM employees
WHERE department id in(80,90);
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
Remarque
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
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
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
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
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
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
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
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
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
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
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
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
Syntaxe
SELECT <colonne1>[, <colonne2>,..., <colonneN>]
FROM <nom table>
WHERE <expression> OPERATEUR (SELECT SELECT <colonne1>[, <colonne2>,...,
<colonneN>] FROM <nom table>)
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
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
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
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
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
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
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
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
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
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
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
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
90/90