0% ont trouvé ce document utile (0 vote)
12 vues6 pages

Introduction au langage SQL

Ce document décrit les principales commandes SQL pour interroger une base de données, notamment les commandes SELECT, WHERE, ORDER BY, GROUP BY et les fonctions d'agrégation.

Transféré par

A. Rashîd ZONGO
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues6 pages

Introduction au langage SQL

Ce document décrit les principales commandes SQL pour interroger une base de données, notamment les commandes SELECT, WHERE, ORDER BY, GROUP BY et les fonctions d'agrégation.

Transféré par

A. Rashîd ZONGO
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CHAPITRE 4: LE LANGAGE SQL

(1ère Partie : RECHERCHE DE DONNEES)

Base de données exemple


Nous utiliserons comme base de données exemple la base de données RH (Ressources
Humaines) suivante.
DEPARTEMENT (num_dep, nom_dep, ville_dep)
EMPLOYES (num_emp, nom_emp, sexe_emp, fonction_emp, numresp_emp, dateemb_emp,
sala_emp, comm_emp, num_dep )
PRIMES ( num_emp, fonction_emp, sala_emp, comm_emp )
GRADE ( num_grade, salmin_grade, salmax_grade)
Avec
Num_dep : numéro de département
Nom_dep : nom du département
Ville_dep : ville où est situé le département
num_emp : numéro de l'employé
nom_emp : nom de l'employé
sexe_emp : sexe de l'employé
fonction_emp : fonction de l'employé
Numresp_emp : numéro du responsable de l'employé (qui est aussi un
employé)
Dateemb_emp : date d'embauche de l'employé
Num_grade : libellé du grade
Sala_emp : salaire de l'employé
Salmin_grade : salaire mini pour ce grade
Comm_emp : commission perçu par l'employé
Salmax_grade: salaire maxi pour ce grade

I LA COMMANDE SELECT

I.1 Syntaxe
Une requête simple, ou autrement appelée une projection, sert à sélectionner un ensemble
d'attribut dans une table. SELECT est la commande de base du SQL destinée à extraire des
données d’une base ou calculer de nouvelles données à partir d’existantes...
Voici la syntaxe générale d'une commande SELECT :
SELECT [DISTINCT ou ALL] * ou liste de colonnes
FROM nom de table ou de la vue
[WHERE prédicats]
[GROUP BY ordre des groupes]
[HAVING condition]
[ORDER BY ] liste de colonnes

16
L'ordre SQL SELECT est composé de 6 clauses dont 4 sont optionnelles.
Clauses de l'ordre SELECT :
SELECT Spécification des colonnes du résultat

FROM Spécification des tables sur lesquelles porte l'ordre

WHERE Filtre portant sur les données (conditions à remplir pour


que les lignes soient présentes dans le résultat)
GROUP Définition d'un groupe (sous ensemble)
BY

HAVING Filtre portant sur les résultats (conditions de


regroupement des lignes)
ORDER Tri des données du résultat
BY

Remarque : le filtre WHERE permet de filtrer les données des tables tandis que le filtre
HAVING permet de filtrer les données du résultat...

I.2 L’opérateur * (étoile)


Le caractère * (étoile) ramène toutes les colonnes de la table précisée dans la clause FROM de
la requête.
Select *
From DEPARTEMENT

I.3 L’opérateur distinct ou (all)


Pour ne pas avoir de redondance (de doubles) dans la sélection on utilise l'expression 'distinct'
Select distinct nom_dep
From DEPARTEMENT

I.4 L’opérateur As
AS sert à donner un nom à de nouvelles colonnes créées par la requête. Il est vraiment utile
pour donner des noms significatifs.
SELECT nom_emp as NOM, sexe_emp as FEMME
FROM EMPLOYES
WHERE sexe_emp = 'F'

I.5 L’opérateur de concaténation (||)


Il est souvent nécessaire de concaténer certaines colonnes, pour ce faire on utilise l’opérateur
de concaténation.
SELECT nom_emp || ' est ' || fonction_emp as NomFonction
FROM EMPLOYES

17
I.6 Les opérateurs mathématiques de base
On, peut utiliser les opérateurs mathématiques de base pour construire de nouvelles colonnes
(+,-, *, /).
SELECT nom_emp, sala_emp * 1.18 as salaireTTC
FROM EMPLOYES

II Requêtes avec la clause WHERE


La clause WHERE permet d'inclure une condition à la sélection, on l'appelle aussi
restriction.
Exemple : On veut le numéro d'employé, le nom ainsi que le numéro de département des
employés qui appartiennent au département n°30 et dont leur fonction est ouvrier.
Pour cela on tape la requête suivante :
Select num_emp, nom_emp, num_dep
From EMPLOYES
Where num_dep = 30 and fonction_emp = 'Ouvrier'
Il existe différentes catégories d'opérateurs pour exprimer une expression logique :
II .1 Connecteurs logiques
AND
OR
NOR (négation du OR)
Exemple : num_dep = 30 OR fonction_emp ='Ouvrier'  On doit satisfaire au moins
une condition il faut soit être du département 30 soit Ouvrier voire les deux.
II.2 Comparateurs de chaînes de caractères
Between … And
Il permet de sélectionner une valeur se trouvant dans un intervalle. Ce comparateur fonctionne
aussi bien avec une chaîne de caractère qu'avec des nombres.
Exemple : On veut les employés qui on un salaire compris entre 140000 et 200000.
Select num_emp, nom_emp
From EMPLOYES
Where sala_emp Between 140000 and 200000
On pourra noter qu'il peut être remplacé par la combinaison de 2 opérateur <, >
Not between … and
Il permet de sélectionner les valeurs qui ne font pas partie de l'intervalle.
In
Ce comparateur sert à sélectionner une valeur parmi une liste de valeur.

18
Exemple:
On veut le nom et numéro des employés qui font partie des départements 30, 50 ou 45.
Select num_emp, nom_emp
From EMPLOYES
Where num_dep IN( 30, 50, 45 )
On notera aussi que cette requête aurait pu être réalisé avec plusieurs = (num_dep = 30 and
num_dep = 50 and num_dep = 45)
Not in
Pour sélectionner les valeurs qui ne sont pas dans le liste.
Like
Il permet de comparer du texte. Pour cela on lui ajoute des caractères spéciaux :
Le caractère '%' permet de remplacer une suite de caractère
Exemple : nom_emp LIKE ‘M%’ sélectionne tous les employés dont nom_emp commence
par un M.
Le caractère '_' permet de remplacer un caractère dans une chaine de caractère.
Exemple : nom_emp LIKE ‘M_rtin’, on obtient tous les noms du type Martin, Murtin,…
Les caractères [-] permettent de sélectionner dans un intervalle.
Exemple : nom_emp LIKE ‘[B-D]%’, on sélectionne les nom_emp dont la première lettre du
nom est entre le B et le D.
Not like
Idem que ci-dessus excepté qu'on sélectionne les valeurs extérieures.
II.3 Restriction sur les valeurs manquantes
IS NULL
IS NOT NULL
On les utilise pour sélectionner les lignes où il y a une valeur manquante.
Exemple : on veut connaître les employés où le numéro de responsable n'a pas été saisi
Select *
From EMPLOYES
Where numresp_emp IS NULL;

III Requêtes avec la clause ORDER BY


Elle sert à classer par ordre croissant ou décroissant le résultat d'une requête. Par défaut il
tri par ordre croissant. Les extensions asc et desc indiquent respectivement si le tri est
croissant ou décroissant.

19
Exemple
On veut la liste des employés du département 30 par ordre croissant de leur salaire.
Select num_emp, nom_emp, fonction_emp, sala_emp
From EMPLOYES
Where num_dep = 30
Order by sala_emp asc
NB : noter que le asc n'est pas obligatoire ici car il est mis par défaut
On pourra aussi trier avec plusieurs critères. Par exemple on veut sélectionner les employés en
les triant par salaire décroissant et par ordre alphabétique des noms. C'est à dire que pour ceux
qui auront le même salaire ils seront classés dans l'ordre alphabétique.
Select num_emp, nom_emp, fonction_emp, sala_emp
From EMPLOYES
Order by sala_emp desc, nom_emp asc

IV Requêtes avec des fonctions d’agrégations


Les fonctions agrégats permettent de faire du dénombrement, déterminer un maximum, un
minimum, faire des moyennes … Par exemple au lieu d'avoir en sortie la liste de tous les
salaires on pourra avoir simplement la moyenne des salaires.
Voici la liste de ces fonctions :
COUNT permet de compter le nombre de valeurs d'un ensemble.
SUM permet de faire la somme des valeurs d'un ensemble.
AVG permet de calculer la moyenne des valeurs d'un ensemble.
MAX permet de calculer la valeur maximale d'un ensemble.
MIN permet de calculer la valeur minimale d'un ensemble.
Exemple : On veut la moyenne des salaires des employés qui sont ouvriers.
Select AVG (sala_emp)
From EMPLOYES
Where fonction_emp = ‘ouvrier’

V Requêtes avec la clause GROUP BY


Elle sert à grouper les résultats d'une requête. Cela permet une meilleure lisibilité.
Par exemple on voudra avoir la moyenne des salaires des employés par département. Pour
cela on tape la requête suivante :
Select num_dep, AVG(sala_emp)
From EMPLOYES
Group by num_dep

20
On a donc dans une colonne chaque département et dans l'autre la moyenne des salaires des
employés de chaque département.
Remarque : Il est possible de faire des groupes dans les groupes.
Exemple : On veut faire la moyenne des salaires par département et par fonction au sein de
chaque département et compter le nombre de personnes. Par exemple pour comparer la
moyenne des salaires des ouvriers par département et de même pour les autres fonctions.
Select num_dep, fonction_emp, COUNT(*), AVG (sala_emp)
From EMPLOYES
Group by num_dep, fonction_emp (on les groupe d'abord par num_dep
puis par fonction_emp)
Pour appliquer des restrictions sur ces " sous-tables " on utilise la commande Having qui est
en gros l'équivalent du Where pour les groupes.
Voici un exemple : On veut la liste des fonctions avec leur moyenne de salaire mais
seulement s’il y a plus d'une personne qui a cette fonction.
Select fonction_emp, COUNT(*), AVG (sala_emp)
From EMPLOYES
Group by fonction_emp
Having count(*) > 1

VI Requêtes multi-relations
Les requêtes multi-relations représentent en fait les jointures. Une jointure sert à lier des
champs de différentes tables, mettre une relation entre eux. Il faut que les champs que l'on
souhaite lier soient du même type.
Exemple :
On voudrait par exemple le numéro et nom des employés travaillant dans le département 30 et
40, ainsi que le nom de ce département. Donc on veut avoir pour un employé son numéro, son
nom et le nom de son département. Dans ce cas on voit bien que le nom des départements ne
sont pas dans la table des EMPLOYES et inversement le numéro et nom des employés ne sont
pas dans celle des DEPARTEMENT. Par conséquent on a besoin des 2 tables et on a besoin
de les " lier " pour qu'à chaque fois qu'on va avoir un numéro de département l'on ait le nom
qui correspondant. Voici la requête nécessaire :
Select num_emp, nom_emp, nom_dep
From EMPLOYES, DEPARTEMENT
Where EMPLOYES.num_dep = DEPARTEMENT.num_dep
And EMPLOYES.num_dep in (30, 40)

21

Vous aimerez peut-être aussi