SQL LID - cours de developpement pour bts ig. algo

Transcription

SQL LID - cours de developpement pour bts ig. algo
BTS IG – ALSI
Le langage de requêtes
Le langage de requêtes
1.
2.
La base de données ....................................................2
L’algèbre relationnelle .................................................3
2.1.
La projection .............................................................................................................. 3
2.2.
La sélection (ou restriction)........................................................................................ 3
2.3.
La jointure .................................................................................................................. 4
2.4.
L’union ....................................................................................................................... 4
2.5.
L’intersection ............................................................................................................. 5
2.6.
La différence .............................................................................................................. 6
2.7.
La division.................................................................................................................. 6
Le langage SQL .............................................................7
2.8.
La projection .............................................................................................................. 7
2.9.
La sélection (ou restriction)........................................................................................ 7
2.10.
La jointure .............................................................................................................. 8
2.11.
Les expressions et fonctions................................................................................... 9
2.11.1. les opérateurs arithmétiques : +, -, *, / ............................................................... 9
2.11.2. les fonctions arithmétiques................................................................................. 9
2.11.3. Les fonctions sur les chaînes de caractères ........................................................ 9
2.11.4. Les fonctions sur les dates.................................................................................. 9
2.11.5. Les fonctions de conversion ............................................................................. 10
2.12.
Les fonctions d’agrégat : ...................................................................................... 10
2.13.
Les requêtes imbriquées ....................................................................................... 11
2.14.
La clause GROUP BY................................................. Erreur ! Signet non défini.
2.15.
La clause HAVING ..................................................... Erreur ! Signet non défini.
Rappels : Un système de gestion de bases de données relationnel (SGBDR) rassemble
une ou plusieurs bases de données ainsi que l’ensemble des outils nécessaires à la
manipulation des données.
Il permet de :
- décrire les données et leur structure (type de données) grâce à un langage de
définition de données (LDD),
- manipuler les données par des requêtes d’interrogation et des instructions de
mise à jour grâce au langage de manipulation de données (LMD).
Le langage SQL est pratiquement devenu une norme dans le cadre de la gestion des
données.
1
BTS IG – ALSI
Le langage de requêtes
1. La base de données
La base de données EMP-DEPT utilisée en exemple dans ce cours décrit les
caractéristiques des employés d’une entreprise :
Table EMP : les employés
empno
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ename
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
job
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
mgr
7902
7698
7698
7839
7698
7839
7839
7566
hiredate
17/12/80
20/02/81
22/02/81
02/04/81
28/09/81
01/05/81
09/06/81
09/11/81
17/11/81
08/09/81
23/09/81
03/12/81
03/12/81
23/01/82
7698
7788
7698
7566
7782
sal
800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
comm
300
500
1400
0
deptno
20
30
30
20
30
30
10
20
10
30
20
30
20
10
Signification des colonnes:
- empno : numéro identifiant un employé,
- ename : nom d’employé,
- job : fonction,
- mgr : numéro du responsable (manager) d’un employé,
- hiredate : date d’embauche,
- sal : salaire,
- comm : commissions perçues (uniquement pour les vendeurs, les représentants),
- deptno : numéro de département.
Table DEPT: les départements (au sens service)
deptno
10
20
30
40
dname
ACCOUNTING
RESEARCH
SALES
OPERATIONS
loc
NEW YORK
DALLAS
CHICAGO
BOSTON
Signification des colonnes:
- deptno : numéro identifiant un département,
- dname : nom du département,
- loc : localisation (la ville).
Contraintes d’intégrité référentielle :
- deptno de emp référence deptno de dept
- mgr de emp référence empno de emp
2
BTS IG – ALSI
Le langage de requêtes
2. L’algèbre relationnelle
L’algèbre relationnelle est un outil mathématique permettant de réaliser des calculs
(appelés requêtes) sur des relations.
2.1.
La projection
L’opération de projection permet de retenir uniquement certaines colonnes (champs)
d’une relation.
Syntaxe :
R = Proj (<nom relation> ; <nom des attributs>)
Exemple :
résultat = proj(emp, {ename, empno})
ename empno
SMITH
7369
ALLEN
7499
WARD
7521
JONES
7566
MARTIN
7654
BLAKE
7698
CLARK
7782
SCOTT
7788
KING
7839
TURNER
7844
ADAMS
7876
JAMES
7900
FORD
7902
MILLER
7934
empno
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ename
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
2.2.
job
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
mgr
7902
7698
7698
7839
7698
7839
7839
7566
hiredate
17/12/80
20/02/81
22/02/81
02/04/81
28/09/81
01/05/81
09/06/81
09/11/81
17/11/81
08/09/81
23/09/81
03/12/81
03/12/81
23/01/82
7698
7788
7698
7566
7782
sal
800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
comm
300
500
1400
0
deptno
20
30
30
20
30
30
10
20
10
30
20
30
20
10
La sélection (ou restriction)
La restriction permet d'extraire d'une table les lignes qui satisfont une ou plusieurs
conditions.
Syntaxe :
R = Resctrict (<nom relation> ; <condition>)
Exemple :
résultat = restrict(emp, deptno=20)
3
BTS IG – ALSI
Le langage de requêtes
empno
7369
7566
7788
7876
7902
ename
SMITH
JONES
SCOTT
ADAMS
FORD
job
CLERK
MANAGER
ANALYST
CLERK
ANALYST
mgr
7902
7839
7566
7788
7566
hiredate
17/12/80
02/04/81
09/11/81
23/09/81
03/12/81
sal
800
2975
3000
1100
3000
comm
deptno
20
20
20
20
20
empno
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ename
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
job
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
mgr
7902
7698
7698
7839
7698
7839
7839
7566
hiredate
17/12/80
20/02/81
22/02/81
02/04/81
28/09/81
01/05/81
09/06/81
09/11/81
17/11/81
08/09/81
23/09/81
03/12/81
03/12/81
23/01/82
sal
800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
comm
deptno
20
30
30
20
30
30
10
20
10
30
20
30
20
10
2.3.
7698
7788
7698
7566
7782
300
500
1400
0
La jointure
La jointure agit sur deux tables ou plus. Elle permet de rapprocher les informations
issues de 2 tables ayant un attribut commun (qui ne porte pas forcément le même nom
dans les deux tables).
Syntaxe :
R = Join (<relation1>, <relation2>, <condition de jointure>)
Exemple :
résultat = join(emp, dept, emp.deptno = dept.deptno)
empno
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ename
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
job
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
2.4.
mgr hiredate
7902
17/12/80
7698
20/02/81
7698
22/02/81
7839
02/04/81
7698
28/09/81
7839
01/05/81
7839
09/06/81
7566
09/11/81
17/11/81
7698
08/09/81
7788
23/09/81
7698
03/12/81
7566
03/12/81
7782
23/01/82
sal comm deptno Deptno
Dname
800
20
20 RESEARCH
1600
300
30
30 SALES
1250
500
30
30 SALES
2975
20
20 RESEARCH
1250
1400
30
30 SALES
2850
30
30 SALES
2450
10
10 ACCOUNTING
3000
20
20 RESEARCH
5000
10
10 ACCOUNTING
1500
0
30
30 SALES
1100
20
20 RESEARCH
950
30
30 SALES
3000
20
20 RESEARCH
1300
10
10 ACCOUNTING
loc
DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK
L’union
L'union de deux tables R et S, notée R U S ou UNION(R,S), est une table T de même
schéma (les domaines associés aux colonnes de R sont identiques aux domaines associés
aux colonnes de S), contenant les enregistrements appartenant à R ou à S ou aux deux
tables.
Syntaxe :
R = Union (<relation1>, <relation2>)
4
BTS IG – ALSI
Le langage de requêtes
Exemple :
Relation R1 :
empno
ename
7782 CLARK
7839 KING
7934 MILLER
Relation R2 :
deptno
10
10
10
empno
7782
7788
7876
7902
ename
CLARK
SCOTT
ADAMS
FORD
deptno
10
20
20
20
résultat = union(R1, R2)
empno
7782
7839
7934
7788
7876
7902
2.5.
ename
CLARK
KING
MILLER
SCOTT
ADAMS
FORD
deptno
10
10
10
20
20
20
L’intersection
L'intersection de deux tables R et S, notée R ∩ S ou INTERSECT(R,S), est une table T de
même schéma, contenant les enregistrements appartenant à la fois à R et S.
Syntaxe :
R = Intersect (<relation1>, <relation2>)
Exemple :
Relation R1 :
empno
ename
7782 CLARK
7839 KING
7934 MILLER
Relation R2 :
deptno
10
10
10
empno
7782
7788
7876
7902
ename
CLARK
SCOTT
ADAMS
FORD
résultat = intersect(R1,R2)
empno
ename
7782 CLARK
5
deptno
10
deptno
10
20
20
20
BTS IG – ALSI
2.6.
Le langage de requêtes
La différence
La différence de deux tables R et S, notée R - S ou MINUS(R,S), est une table T de
même schéma, contenant les enregistrements appartenant à R mais pas à S.
R = Minus (<relation1>, <relation2>)
Syntaxe :
Exemple :
Relation R1 :
Relation R2 :
empno
ename
7782 CLARK
7839 KING
7934 MILLER
deptno
10
10
10
empno
7782
7788
7876
7902
ename
CLARK
SCOTT
ADAMS
FORD
deptno
10
20
20
20
Résultat = minus(R1, R2)
empno
ename
7839 KING
7934 MILLER
2.7.
deptno
10
10
La division
La division agit sur deux tables R et S ayant un attribut commun (qui ne porte pas
forcément le même nom dans les deux tables).
Elle est constituée des enregistrements de R qui sont accouplés à chacune des valeurs de
S.
Syntaxe :
R = <nom relation> (<attribut 1> / <attribut 2>) <nom relation>
Exemple :
Relation Conduit :
npilote
1
1
1
2
2
3
Relation Avions :
numavion
1
2
3
1
2
1
navion
description
1 Boeing 747
2 Airbus A320
3 Tupolev
Résultat = Conduit(numavion / navion) Avions
Npilote
1
On obtient dans la relation résultat les numéros des pilotes qui conduisent tous les avions
répertoriés dans la relation Avions.
6
BTS IG – ALSI
Le langage de requêtes
Le langage SQL
Le langage SQL est un outil d’interrogation des SGBDR qui s’appuie sur l’algèbre
relationnelle.
Les mots réservés du langage sont écrits en majuscule.
2.8.
La projection
SELECT [DISTINCT] (<nomattribut1>, [<nomattribut2,…] ) | *
FROM <nom de table> ;
La clause DISTINCT permet d’éliminer les doublons : si dans le résultat plusieurs lignes sont
identiques, une seule sera conservée.
Le symbole * permet d’obtenir tous les attributs sans avoir à tous les citer.
Exemples :
Liste des numéros et noms d’employés
Select ename, empno from emp ;
Liste de tous les employés
Select * from emp ;
Liste des fonctions occupées dans l’entreprise
Select job from emp ;
Remarque : la requête renvoie plusieurs lignes identiques.
Liste des fonctions occupées dans l’entreprise (avec suppression des
lignes identiques)
Select distinct job from emp ;
La clause ORDER BY : Elle permet de trier les résultats suivant différentes expressions
(souvent des noms de colonnes) par ordre croissant (ASC) ou décroissant (DESC).
L’option ASC est prise par défaut pour chacune des expressions citées.
Exemple :
Liste des employés par salaires décroissants
Select ename, sal
from emp
order by sal desc;
2.9.
La sélection (ou restriction)
SELECT [DISTINCT] (<nomattribut1>, [<nomattribut2,…] ) | *
FROM <noms des tables>
WHERE <condition de recherche>
[ AND <condition de recherche> ];
Une condition de recherche est de la forme : argument1 opérateur argument2
7
BTS IG – ALSI
Le langage de requêtes
Les différents opérateurs d’une condition de recherche :
Opérateur
=
!=
<>
>
>=
<
<=
Between ... AND ...
In
Like
Is Null
Any
All
Exemples :
Description
Egal
Différent
Différent
Supérieur
Supérieur ou Egal
Inférieur
Inférieur ou Egal
Entre ... et ...
Dans
Comme
Est indéfini
Au moins 1
Tout
Liste des employés appartenant au département 20
Select ename, empno from emp where deptno = 20 ;
Liste des employés occupant la fonction de vendeur ou analyste
Select ename, empno from emp
where job in ("SALESMAN", "ANALYST") ;
Liste des employés embauchés au mois de septembre 1981
Select ename, empno, hiredate from emp
where hiredate between "01/09/81” and "30/09/81” ;
Liste des employés dont le salaire est compris entre 2000 et 3000
Select * from emp where sal between 2000 and 3000 ;
Liste des employés dont le nom commence par un J
Select * from emp where ename like "J%";
2.10. La jointure
SELECT [DISTINCT] (<nomattribut1>, [<nomattribut2,…] ) | *
FROM <noms des tables>
WHERE <condition de recherche>
[ AND <condition de recherche> ];
Exemple :
Liste des employés ainsi que le nom de leur département
Select ename, dname
from emp, dept
where emp.deptno = dept.deptno
Il est possible d’utiliser un alias pour renommer les tables.
Exemple :
Select ename, dname
8
BTS IG – ALSI
Le langage de requêtes
from emp E, dept D
where E.deptno = D.deptno
2.11. Les expressions et fonctions
Elles sont utilisables après les clauses SELECT, WHERE, HAVING et ORDER BY.
2.11.1.
Exemple :
Select ename, sal + com
from emp
where comm is not null
and comm > 0.25*sal;
2.11.2.
ABS(n)
CEIL(n)
FLOOR(n)
MOD(n,m)
POWER(n,m)
ROUND(n, [m])
TRUNC(n, [m])
SQRT(n)
LEAST(n1,n2…)
GREATEST(n1,n2…)
Exemple :
les opérateurs arithmétiques : +, -, *, /
les fonctions arithmétiques
valeur absolue
le plus petit entier inférieur qui dépasse n
le plus grand entier inférieur à n
reste de la division de m par n
m est élevé à la puissance n
n est arrondi à m décimales (m=0 si omis)
n est tronqué à m décimales (m=0 si omis)
racine carrée
la plus faible valeur parmis n1, n2…
la plus forte valeur parmis n1, n2…
Select ename, greatest(sal, comm) from emp;
Select empno, ename, least(round(sal), round(comm))
From emp
Where round(sal) > 2000;
2.11.3.
Les fonctions sur les chaînes de caractères
LENGTH(c)
longueur de la chaîne
UPPER(c), LOWER(c) conversion en majuscules, minuscules
SUBSTR(c,p [,l])
extrait la sous-chaine de c à partir du p-ième caractère,
ayant pour longueur l
GREATEST(c1,c2…)
LEAST(c1,c2…)
c1 || c2
concatène les chaînes c1 et c2
2.11.4.
•
•
•
Les fonctions sur les dates
Deux dates peuvent être comparées entre elles avec les opérateurs de
comparaison (<, >…).
Une date peut être cherchée dans un intervalle (d between d1 and d2).
Le nombre de jours entre deux dates peut être obtenu par : d1-d2.
9
BTS IG – ALSI
Le langage de requêtes
LEAST(d1,d2…)
GREATEST(n1,n2…)
ADD_MONTHS(d,n)
MONTHS_BETWEEN(d1,d2)
NEXT_DAY(d, jour)
ajoute n mois à la date d et renvoie une date
exprime la différence de mois entre d1 et d2
donne la première date qui suit la date d et qui
Correspond au jour de la semaine donné
Ex : next_day(d, ‘Monday’)
SYSDATE est une variable donnant la date système (la date courante).
Exemple :
select * from emp
Where sysdate-hiredate < 30;
Elle peut être affichée par : select sysdate from dual;
2.11.5.
Les fonctions de conversion
Le format par défaut d’une date est : DD/MON/YY qui correspond à 2 chiffres (jours), 3
lettres (mois), 2 chiffres (année), les champs étant séparés par le symbole /
Par exemple : ’20/AUG/93’
La fonction TO_CHAR(d, format) convertit une date ou une expression de type date en
une chaîne dont le format est précisé.
Par exemple : to_char(d, ‘dd/mm/yy’) renvoie 20/08/93
Exemple :
select ename, to_char(hiredate,’DD/MONTH’)
from emp
Where to_char(hiredate,’yyyy’) = ‘1993’;
La fonction TO_DATE(c, format) convertit une chaîne associée à une date dont le format
est précisé en un objet de type date.
Par exemple : to_date(‘89/16/07’, ‘YY/DD/MM’) retourne la date du 16 juillet 1989.
La fonction TO_NUMBER(c) convertit une chaîne de caractères numériques en un objet de
type numérique.
2.12. Les fonctions d’agrégat :
Les fonctions d’agrégat permettent d'obtenir des informations relatives à un ensemble de
données. Elles s’appliquent à un ensemble de lignes et renvoient une valeur.
count
avg
sum
min
max
dénombre les occurrences d'un attribut
calcule la moyenne d'un attribut
calcule la somme sur un attribut
détermine la plus petite occurrence d'un attribut
détermine la plus grande occurrence d'un attribut
Toutes ces fonctions d'agrégats ignorent les valeurs nulles mais peuvent avoir des
valeurs qui se répètent. Pour préciser qu'il faut tenir compte de toutes les valeurs ou
10
BTS IG – ALSI
Le langage de requêtes
seulement de celles qui sont distinctes, il faut préciser ALL ou DISTINCT ( par défaut,
c'est ALL).
Exemple :
Nombre d’employés appartenant au département 20
Select count(*) from emp where deptno = 20 ;
Salaire le plus élevé
Select max(sal) from emp ;
Nombre de fonctions
Select count(distinct job) from emp;
Select ename, max(sal)
From emp;
Requête mal construite !
2.13. Les requêtes imbriquées
Exemple de requête ;
Liste des employés appartenant au département des Ventes
Select ename
from emp, dept
where emp.deptno = dept.deptno
and dept.dname = "SALES"
Un requête imbriquée est composée de deux ou plusieurs select. Le premier est appelé
requête principale, le ou les suivants, sous-requêtes.
L’exécution se fait en deux temps :
- d’abord les sous-requêtes qui extraient les valeurs intermédiaires
- puis la requête principale s’exécute sur les valeurs intermédiaires
Le lien entre deux Select est réalisé par :
- IN si la sous-requête fournit plusieurs valeurs
- = si la sous-requête ne fournit qu’une seule valeur
Exemples ;
Liste des employés appartenant au département des Ventes
Select ename
from emp
where deptno = ( select deptno
from dept where dname = "SALES");
Liste des départements comportant au-moins un employé
Select dname
from dept
where deptno in (select deptno from emp);
11

Documents pareils