BD CH5 SQL 2018-2019 LID Part1
BD CH5 SQL 2018-2019 LID Part1
BD CH5 SQL 2018-2019 LID Part1
1
PLAN DU COURS
A. Langage d’interrogation des données LID
B. Langage de manipulation des données LMD
A. Chapitre 3 : Langage de définition des données LDD
2
A. LANGAGE
D’INTERROGATION DES
DONNEES LID
3
CHAPITRE 1 : LANGAGE
D’INTERROGATION DES DONNEES LID
1.Requêtes simples
2.Fonctions mono-lignes
3.Fonctions de groupes
4.Jointures
5.Opérateurs ensemblistes
6.Sous-interrogations
4
1.REQUETES SIMPLES
SELECT [DISTINCT ] {*, colonne [as] [alias], …}
FROM table;
SELECT : indique les colonnes à récupérer
DISTINCT : supprime les doublons
FROM : indique les tables recherchées
5
REGLES D’ECRITURE
DES ORDRES SQL
Indifférence entre majuscules et minuscules
Ecriture sur plusieurs lignes
Clauses sont généralement placées sur des lignes distinctes
Tabulations et indentations permettent une meilleure lisibilité
6
SELECTION DE TOUTES
LES COLONNES
SELECT * FROM dept;
7
SELECTION D’UNE OU
PLUSIEURS COLONNES
SELECT deptno, dname FROM dept;
8
EXPRESSIONS
ARITHMETIQUES
Expression contenant des données de type NUMBER , DATE
et des opérateurs arithmétiques
Opérateur Description
+ Addition
- Soustraction
* Multiplication
/ Division
9
UTILISATION DES OPERATEURS
ARITHMETIQUES
SELECT job_id, job_title, min_salary, max_salary, max_salary -
min_salary FROM dept;
10
VALEUR NULL
NULL représente une valeur non disponible, non affectée
NULL # zéro, espace ou chaîne vide
SELECT employee_id, first_name, last_name , commission_pct
From employees;
11
VALEUR NULL DANS LES
EXPRESSIONS ARITHMETIQUES
Les expressions arithmétiques comportant une valeur NULL
sont évaluées à NULL
SELECT first_name, last_name , (1+commission_pct )*salary
From employees;
12
ALIAS DE COLONNE
Renomme un en-tête de colonne
Suit le nom de colonne
Doit obligatoirement être inclus entre guillemets s’il contient
des espaces, des caractères spéciaux ou si la casse est
respectée
SELECT first_name as "prénom", last_name as nom ,salary as
salaire, commission_pct as commission,
salary*(1+commission_pct) as "salaire majoré “ From
employees;
13
OPERATEUR DE
CONCATENATION
Concatène des colonnes ou des chaines de caractères
Est représenté par le symbole ||
La colonne résultante est une expression caratère
SELECT employee_id, last_name || ' ' || first_name as "nom
et prénom " FROM employees;
14
ELIMINATION DES DOUBLONS
Ajouter le mot-clé DISTINCT
SELECT distinct deptno FROM emp;
15
SELECTION DES LIGNES
Filtrer la sélection au moyen de la clause whère
SELECT [DISTINCT] {*, column [as] [alias] , … }
FROM table
WHERE condition(s);
16
CHAINES DE CARACTERES
ET DATES
Les constantes chaînes de caractères et dates doivent être
placées entre simples quotes.
La recherche tient compte de la casse pour les chaînes et du
format pour les dates
Le format de date par défaut est 'DD-MM-YY'
SELECT ename, job, deptno FROM emp
WHERE ename ='JAMES';
17
OPERATEURS DE COMPARAISONS
OPERATEUR DESCRIPTION
= Egal à
< Inférieur à
> Supérieur à
<> Ou != Différent
18
AUTRES OPERATEURS DE
COMPARAISONS
OPERATEUR DESCRIPTION
BETWEEN val1 AND val2 val1 <= val <= val2
19
UTILISATION DE
L’OPERATEUR BETWEEN
SELECT ename, sal FROM emp
WHERE sal BETWEEN 1000 AND 1500;
20
UTILISATION DE L’OPERATEUR IN
IN permet de comparer une expression avec une liste de
valeurs
SELECT empno, ename, sal, mgr FROM emp
WHERE mgr in (7902, 7566, 7788);
21
UTILISATION DE L’OPERATEUR LIKE
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
22
UTILISATION DE L’OPERATEUR LIKE
23
UTILISATION DE L’OPERATEUR IS NULL
24
OPERATEURS LOGIQUES
OPERATEUR DESCRIPTION
25
UTILISATION DE L’OPERATEUR AND
26
UTILISATION DE L’OPERATEUR OR
SELECT * FROM emp WHERE sal >= 1100 OR job='CLERK';
TABLE DE VERITE OR
OR TRUE FALSE UNKNOWN
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE UNKNOWN
UNKNOWN TRUE UNKNOWN UNKNOWN
27
UTILISATION DE L’OPERATEUR NOT
28
REGLES DE PRIORITE
1 Les parenthèses
3 NOT
4 AND
5 OR
29
REGLES DE PRIORITE
SELECT ename, job, sal FROM emp
WHERE job='SALESMAN' OR job='PRESIDENT'
AND sal > 1500;
30
REGLES DE PRIORITE
SELECT ename,job,sal FROM emp
WHERE (job='SALESMAN' OR job='PRESIDENT')
AND sal > 1500;
31
TRI : CLAUSE ORDER BY
Tri des lignes avec la clause ORDER BY
SELECT ename, job, deptno, hiredate FROM EMP
WHERE job <> 'CLERK'
ORDER BY hiredate;
32
TRI DECROISSANT
SELECT ename, job, deptno, hiredate FROM EMP
WHERE job <> 'CLERK'
ORDER BY hiredate DESC;
33
TRI SUR L’ALIAS DE COLONNE
SELECT empno, ename, sal * 12 “Annuel”
FROM EMP WHERE deptno = 10
ORDER BY Annuel DESC;
34
TRI SUR PLUSIEURS COLONNES
SELECT empno, deptno, sal FROM EMP
ORDER BY deptno, sal DESC;
35
2. FONCTIONS MONO-LIGNES
A.Types de fonctions
B.Fonctions caractères
C.Fonctions numériques
D.Fonctions dates
E.Fonctions de conversion
F.Autres Fonctions
36
A.TYPES DE FONCTIONS
1.Fonctions mono-ligne : agissent sur une seule ligne et
ramènent un seul résultat
2.Fonctions multi-lignes : manipulent des groupes de
lignes et ramènent un seul résultat
37
B. FONCTIONS CARACTERES
38
1.FONCTIONS DE CONVERSION
MAJUSCULES / MINUSCULES
39
EXEMPLES DE FONCTIONS DE
CONVERSION MAJUSCULES /
MINUSCULES
SELECT ename, lower(ename) , upper(ename), initcap(ename)
FROM EMP;
40
2.FONCTIONS DE MANIPULATION
DE CARACTERES
CONCAT : concatène la première chaîne avec la seconde = ||
SUBSTR : extrait une sous chaîne d’une autre chaîne
LENGTH : taille d’une chaîne en caractères
INSTR : position d’une chaîne de caractères dans une autre chaîne
Select empno, ename, substr(ename, 1,3), instr(ename,'ES'),
length(ename) From emp ;
41
2.FONCTIONS DE MANIPULATION
DE CARACTERES
TRIM : élimine les espaces à gauche et à droite
LTRIM : élimine les espaces à gauche
RTRIM : élimine les espaces à droite
SELECT ' Foued OUELBANI ' as "nom prénom", length(' Foued OUELBANI ') as Taille,
Ltrim(' Foued OUELBANI ') as ltrim, length(Ltrim(' Foued OUELBANI ')) as "taille ltrim",
rtrim(' Foued OUELBANI ') as rtrim, length(rtrim(' Foued OUELBANI ')) as "taille rtrim",
trim(' Foued OUELBANI ') as trim, length( trim(' Foued OUELBANI ')) as "taille rtrim"
FROM dual;
42
2.FONCTIONS DE MANIPULATION
DE CARACTERES
LPAD : complète une chaîne de caractères sur la gauche avec
une autre chaîne pour avoir n caractères.
RPAD : complète une chaîne de caractères sur la droite avec
une autre chaîne pour avoir n caractères.
43
2.FONCTIONS DE MANIPULATION
DE CARACTERES
44
2.FONCTIONS DE MANIPULATION
DE CARACTERES
REPLACE : remplace toutes les occurrences de la chaîne
recherchée par une autre
TRANSLATE : remplace chaque caractère recherché par son
correspondant dans la chaîne principale
45
C. FONCTIONS NUMERIQUES
ROUND : Arrondi la valeur à la précision spécifiée
TRUNC : tronque la valeur à la précision spécifiée
FLOOR (x) : si n<x<n+1 alors FLOOR(x)=n
CEIL (x) : si n<x<n+1 alors CEIL(x)=n+1
MOD : reste d’une division
REMAINDER (m, n) : reste d’une division calculé comme
suit :
r=m-(n*round(m/q,0) )
46
C. FONCTIONS NUMERIQUES
SELECT ROUND(123.453,0), ROUND(123.553,0), ROUND(123.453,2),
ROUND(123.455,2), ROUND(123.453,-1), ROUND(163.453,-2)
FROM dual;
47
C. FONCTIONS NUMERIQUES
48
C. FONCTIONS NUMERIQUES
SELECT MOD(1260,430), MOD(1260,430.5) FROM dual
49
D. FONCTIONS DATES
1.Ajout ou soustraction d’un nombre à une date
2.Soustraction de deux dates afin de déterminer le nombre de
jours entre deux dates
3.Ajout d’un nombre d’heures à une date en divisant le nombre
d’heures par 24
50
D. FONCTIONS DATES
MONTHS_BETWEEN : nombre de mois entre deux dates
SELECT sysdate, MONTHS_BETWEEN(sysdate,'01/07/2018') ,
MONTHS_BETWEEN('30/10/1990','20/10/1990') FROM DUAL
51
D. FONCTIONS DATES
NEXT_DAY : date du 1 jour semaine
er
52
D. FONCTIONS DATES
ROUND : arrondi une date
TRUNC : tronque une date
SELECT sysdate, MONTHS_BETWEEN(sysdate,'01/07/2018') ,
ROUND(MONTHS_BETWEEN(sysdate,'01/07/2018'),0),
TRUNC(MONTHS_BETWEEN(sysdate,'01/07/2018'))
FROM DUAL
53
D. FONCTIONS DATES
TO_CHAR : convertit une date en une chaine selon un format
54
D. FONCTIONS DATES
SELECT systimestamp,
extract(day from systimestamp) as Jour,
extract(month from systimestamp) as Mois,
extract(year from systimestamp) as Année,
extract(hour from systimestamp)+2 as Hour,
extract(minute from systimestamp) as Minute,
trunc(extract(second from systimestamp)) as Second
FROM dual;
54
F.AUTRES FONCTIONS
1.NVL : remplace une valeur nulle
2.NVL2 (expr,val1,val2) : si expr n’est pas nulle elle est remplacée val1 sinon par val2
3.NULLIF (val1,val2) : si val1= val2 la valeur NULL est retournée sinon val1
4.Coalesce (exp1,expr2,expr3,…) : retourne la première valeur non nulle
5.Decode (expr, val1, val11, val2, val21, …. Valn, valn1, default) :
retourne valn1 si expr = valn sinon default
6.Case : évalue une liste de conditions et retourne un résultat parmi les cas possibles
7.Rank : retourne le rang de chaque ligne au sein de la partition d'un ensemble de
résultats
8.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
9.ROW_NUMBER : retourne le numéro séquentiel d'une ligne d'une partition d'un
ensemble de résultats, en commençant à 1 pour la première ligne de chaque partition
10.First_value : retourne la première valeur d’une partition
11.Last_value : retourne la dernière valeur d’une partition
55
F.AUTRES FONCTIONS (NVL,
NVL2)
SELECT empno, ename, sal, comm, NVL(comm,0),
NVL(to_char(comm), 'Pas de commission'),
NVL2(comm,comm*100/sal,0),
to_char(NVL2(comm,comm*100/sal,0)) || '%'
FROM emp;
56
F.AUTRES FONCTIONS (NULLIF)
SELECT sal / comm FROM emp;
SELECT NULLIF(ename, ename), NULLIF(100, 200), sal, comm,
trunc(sal / NULLIF(comm, 0),2)
FROM emp;
57
F.AUTRES FONCTIONS (COALESCE)
SELECT coalesce(Null,5) from dual;
58
F.AUTRES FONCTIONS
(DECODE)
SELECT empno,ename,job, deptno, decode(deptno,10,
'ACCOUNTING', 20, 'RESEARCH', 'DEP. INCONNU ')
FROM emp ORDER BY deptno;
59
F.AUTRES FONCTIONS (CASE)
SELECT empno, ename, deptno,
case deptno
when 10 then 'Accounting'
when 20 then 'RESEARCH'
else 'INCONNU'
end as departement
FROM emp order by 4;
60
F.AUTRES FONCTIONS (CASE)
SELECT empno, ename, deptno,
case
when deptno < 10 or deptno >20 then 'INCONNU‘
else to_char(deptno)
end as departement
FROM emp order by 4;
61