Vous êtes sur la page 1sur 12

Classes Préparatoires aux Grandes Ecoles

Filière: MP
Matière : Informatique

Langage SQL
1. Introduction
SQL signifie «Structured Query Language », c'est-à-dire «Langage d'interrogation
Structuré ». En fait SQL est un langage complet de gestion de bases de données
relationnelles. Il a été conçu par IBM dans les années 70. Il est devenu le langage standard
des systèmes de gestion de bases de données (SGBD) relationnelles (SGBDR). C'est à la fois
un langage:
d'interrogation de la base de données (commande : SELECT),
de manipulation (modification) des données (commandes : INSERT, UPDATE,
DELETE),
de définition des données (commandes : CREATE, ALTER, DROP),
de contrôle de l'accès aux données (commandes : GRAN, REVOKE).
Le langage SQL est utilisé par les principaux SGBDR : DB2, Oracle, SQL Server,
Microsoft Access, PostgreSQL, SQLite, MySQL... . Chacun de ces SGBDR a cependant sa
propre variante du langage. Ce support de cours présente un noyau de commandes
disponibles sur l'ensemble de ces SGBDR, et leur implantation dans SQLite pendant les
séances de TP.

2. Interrogation d’une base de données : SELECT


L’utilisation la plus courante de SQL consiste à lire des données issues de la base de
données. Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements
dans un tableau de résultat. Cette commande peut sélectionner une ou plusieurs colonnes
d’une table. Auteur : Abdellatif Hajraoui
2.1. Commande basique
L’utilisation basique de cette commande s’effectue de la manière suivante :
SELECT nom_colonne_1, nom_colonne_2, …, nom_colonne_n FROM nom_table
Cette requête va sélectionner (SELECT) les colonnes «nom_colonne_1, nom_colonne_2,
…, nom_colonne_n » provenant (FROM) de la table appelé «nom_table».
Exemple : Imaginons une table d’une base de données d’une entreprise, appelée
«EMPLOYE» qui contient des informations sur ses employés.

EMPLOYE
1
NSS Nom Prenom Salaire Departement
175457 Aissaoui Hamid 8500 Marketing
183982 Saadani Adil 6000 Production
195484 Amrani Louay 10500 Conception
295060 Fawzi Siham 7500 Vente

Si l’ont veut avoir la liste de toutes les départements des employés, il suffit d’effectuer la
requête suivante :
SELECT Departement FROM Employe
Résultat :

Marketing
Production
Conception
Vente

Pour obtenir les noms et les prénoms des employés, il faut alors faire la requête suivante:
SELECT Nom, Prenom FROM Employe
Résultat :
Aissaoui Hamid
Saadani Adil
Amrani Louay
Fawzi Siham
Auteur : Abdellatif Hajraoui
Il est possible de retourner automatiquement toutes les colonnes d’une table. Au lieu de
lister toutes les colonnes, il faut simplement utiliser le caractère « * ». Il s’utilise de la
manière suivante :
SELECT * FROM Employe
Cette requête retourne exactement les mêmes colonnes qu’il y a dans la table de tous les
enregistrements.

2.2. Les commandes DISTINCT et ALL

2
L’utilisation de la commande SELECT en SQL permet de lire toutes les données d’une ou
plusieurs colonnes. Cette commande peut potentiellement afficher des lignes en doubles.
Pour éviter des redondances dans les résultats il faut simplement ajouter DISTINCT après le
mot SELECT.
La commande ALL indique que les doublons peuvent apparaître dans le résultat d'une
requête, elle constitue une commande par défaut de SELECT.
L’utilisation basique de l’une de ces deux commandes consiste alors à effectuer la requête
suivante :
SELECT DISTINCT | ALL nom_colonne FROM nom_table
Exemple : Prenons le cas concret d’une table «librairie » qui contient les informations d’une
liste de livres :

Librairie
ISBN Titre Editeur Prix
1565926978 ORACLE SQL : THE ESSENTIAL REFERENCE O'REILLY 330.00
1565929489 ORACLE : COURS ET EXERCICES O'REILLY 286.00
2212092857 INITIATION A SQL EYROLLES 183.00
2744009296 SQL - COURS ET EXERCICES CAMPUS PRESS 62.00

2744090034 Apprendre à programmer en Java EYROLLES 286.00

2840725029 SQL- COURS ET EXERCICES ENI 140.00

Pour sélectionner uniquement les titres des livres sans doublons il faut utiliser la requête
suivante :
SELECT DISTINCT Titre FROM Librairie
Résultat :
Auteur : Abdellatif Hajraoui
ORACLE SQL : THE ESSENTIAL REFERENCE
ORACLE SQL - COURS ET EXERCICES
INITIATION A SQL
SQL- COURS ET EXERCICES
Apprendre à programmer en Java

Ce résultat affiche volontairement qu’une seule fois le livre «SQL » grâce à l’utilisation de
la commande DISTINCT qui n’affiche que les résultats distincts.

2.3. La commande WHERE


3
La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base de
données qui respectent une condition. Cela permet d’obtenir uniquement (filtrer) les
informations désirées.
Syntaxe :
La commande WHERE s’utilise en complément à une requête utilisant SELECT. La façon la
plus simple de l’utiliser est la suivante :
SELECT nom_colonnes FROM nom_table WHERE condition

L'expression conditionnelle peut être construite à l'aide de plusieurs prédicats constitués


d'opérateurs de comparaisons (voir tableau ci-dessous) et séparées par des opérateurs
logiques AND, OR ou NOT.
SELECT nom_colonnes FROM nom_table WHERE condition1 AND (condition2
OR condition3)
Dans l'expression conditionnelle, les chaînes de caractères sont mentionnées entre
guillemets ('') ou entre cottes ('), les dates entre dièses (#) et les valeurs numériques
directement sans aucun signe particulier.
La clause WHERE peut accueillir une sous-requête de sélection limitant ainsi les
enregistrements sélectionnables dans la requête principale.
Opérateurs de comparaisons
Il existe plusieurs opérateurs de comparaisons. La liste ci-jointe présente quelques uns des
opérateurs les plus couramment utilisés.

Auteur : Abdellatif Hajraoui

Exemples:
Dans la table «Librairie», pour obtenir seulement la liste des livres de l’éditeur
«EYROLLES», il faut effectuer la requête suivante :
SELECT * FROM Librairie WHERE Editeur = ' EYROLLES '
4
Résultat :

2212092857 INITIATION A SQL EYROLLES 183.00


2744090034 Apprendre à programmer en Java EYROLLES 286.00

Dans la table «Employé», pour obtenir seulement la liste des employés qui ont un salaire
entre 7000 et 9000, il faut effectuer la requête suivante :
SELECT * FROM Employe WHERE Salaire >= 7000 AND Salaire <= 9000
Résultat :
175457 Aissaoui Hamid 8500 Marketing
295060 Fawzi Siham 7500 Vente

Cette même requête peut être écrite avec l’opérateur BETWEEN :


SELECT * FROM Employe WHERE Salaire BETWEEN 7000 AND 9000

L’opérateur BETWEEN est utilisé dans une requête SQL pour sélectionner un
intervalle de données. Ce dernier peut être constitué de chaînes de caractères, de nombres ou
de dates. L’exemple le plus concret consiste par exemple à récupérer uniquement les
enregistrements entre 2 dates définies.
Exemple: WHERE date_Embauche BETWEEN #01-01-2010# AND #31-12-2014#
L’opérateur BETWEEN peut être utilisé avec l’opérateur logique NOT (NOT
BETWEEN) pour sélectionner des données qui ne sont pas inclues dans un intervalle.

Dans la table «Employé», pour avoir les noms et prénoms des employés qui travaillent
uniquement dans les départements: Production ou Conception ou Vente, voici 2 requêtes qui
retourneront les mêmes résultats, l’une utilise plusieurs OR, tandis que l’autre utilise
l’opérateur IN.
SELECT Nom, Prenom FROM Employe WHERE Departement = ' Production ' OR
Departement = ' Conception ' OR Departement = ' Vente ' Auteur : Abdellatif Hajraoui
SELECT Nom, Prenom FROM Employe WHERE Departement IN ( ' Production ', '
Conception ' , ' Vente ')

La syntaxe utilisée avec l’opérateur IN est plus simple que d’utiliser une succession
d’opérateur OR. En effet, entre les parenthèses il n’y a pas de limite du nombre d’arguments.
Cette syntaxe peut être associée à l’opérateur NOT (NOT IN)pour recherche toutes les
lignes qui ne sont pas égales à l’une des valeurs stipulées

Dans la table «Librairie», si l’ont souhaite obtenir uniquement la liste des livres dont le
titre commence par ‘SQL’, il faut effectuer la requête en utilisant l’opérateur LIKE:
5
SELECT * FROM Librairie WHERE Titre LIKE ' SQL% '
Résultat :

2744009296 SQL- COURS ET EXERCICES CAMPUS PRESS 62.00


2840725029 SQL- COURS ET EXERCICES ENI 140.00

L’opérateur LIKE permet d’effectuer une recherche sur un modèle particulier. Il est par
exemple possible de rechercher les enregistrements dont la valeur d’une colonne commence
par telle ou telle lettre. Les modèles de recherches sont multiples, mais il ressemble très
généralement à l’un des exemples suivants :
LIKE ‘%a’ : le caractère « % » est un caractère joker qui remplace tous les autres
caractères. Ainsi, ce modèle permet de rechercher toutes les chaines de caractère qui se
termine par un «a».
LIKE ‘a%’ : ce modèle permet de rechercher toutes les lignes de « colonne » qui
commence par un « a ».
LIKE ‘%a%’ : ce modèle est utilisé pour rechercher tous les enregistrements qui
utilisent le caractère « a ».
LIKE ‘pa%on’ : ce modèle permet de rechercher les chaines qui commence par « pa »
et qui se terminent par « on », comme « pantalon » ou « pardon ».
LIKE ‘a_c’ : peu utilisé, le caractère « _ » (underscore) peut être remplacé par
n’importe quel caractère, mais un seul caractère uniquement (alors que le symbole
pourcentage « % » peut être remplacé par un nombre incalculable de caractères . Ainsi, ce
modèle permet de retourner les lignes « aac », « abc » … « azc ».

L’opérateur IS NULL est utilisé dans une requête SQL pour filtrer les résultats qui
contiennent la valeur NULL. Il convient d’utiliser la syntaxe suivante :
SELECT * FROM Table WHERE Nom_colonne IS NULL
A l’inverse, pour obtenir uniquement les enregistrements qui ne sont pas null, il convient
d’utiliser L’opérateur IS NOT NULL.
Auteur : Abdellatif Hajraoui
La clause LIMIT est à utiliser dans une requête SQL pour spécifier le nombre maximum
de résultats que l’ont souhaite obtenir.
Exemple : dans la table «Employe», si l’ont souhaite obtenir uniquement les informations
des 3 premiers enregistrements :
SELECT * FROM Employe LIMIT 3
La clause LIMIT est souvent associé à un OFFSET, c’est-à-dire effectuer un décalage sur
le jeu de résultat. Par exemple, la requête suivante retourne les enregistrements de 3 à 6 de la
table Employe:
SELECT * FROM Employe LIMIT 4 OFFSET 2

6
2.4. Les fonctions d'agrégation
Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs
enregistrements, il s’agit des fonctions d’agrégations statistiques. Ce sont des fonctions qui
accomplissent un calcul sur plusieurs valeurs et retournent un résultat. Les principales sont
données dans le tableau ci-dessous:
Exemples : dans la table «Employé»:
Pour obtenir le nombre des employés:
SELECT count (*) FROM Employe
Pour obtenir le nombre des départements:
SELECT count (distinct departement) FROM Employe
Pour obtenir la somme des salaires des employés:
SELECT sum (salaire) FROM Employe
Pour obtenir le plus grand salaire:
SELECT max (salaire) FROM Employe

Fonction Description
AVG retourne la moyenne des valeurs d'un groupe.
COUNT retourne le nombre d'éléments figurant dans un groupe.
MAX retourne la valeur maximale de l'expression.
MIN retourne la valeur minimale de l'expression.
SUM retourne la somme de toutes les valeurs
STDEV retourne l'écart type de toutes les valeurs de l'expression spécifiée.
VAR retourne la variance de toutes les valeurs de l'expression spécifiée.

2.5. La commande GROUP BY


La commande GROUP BY spécifie des groupes dans lesquels les lignes de sortie doivent
être placées et calcule une valeur de résumé pour chacun des groupes si des fonctions Auteur : Abdellatif Hajraoui
d'agrégation sont employées avec la commande SELECT.
De façon générale, la commande GROUP BY s’utilise de la façon suivante :
SELECT colonne1, fonction(colonne2) FROM table GROUP BY colonne1
Exemples : dans la table «Employé»:
Pour obtenir le nombre des employés de chaque département:
SELECT departement, count (NSS) FROM Employe GROUP BY departement
Pour obtenir la somme des salaires des employés de chaque département:
SELECT departement, sum (salaire) FROM Employe GROUP BY departement

7
La clause HAVING en SQL est presque similaire à WHERE à la seule différence que
HAVING permet de filtrer en utilisant les fonctions d’agrégation. HAVING est très souvent
utilisé en même temps que GROUP BY. L’utilisation de HAVING se fait de la manière
suivante :
SELECT colonne1, fonction (colonne2) FROM nom_table GROUP BY colonne1
HAVING fonction(colonne2) operateur valeur

Exemple : dans la table «Employé», on souhaite récupérer la somme des salaires des
employés de chaque département dont cette somme est supérieur à 15000.
SELECT departement, sum (salaire) FROM Employe GROUP BY departement
HAVING sum (salaire) >= 15000

2.6. La commande ORDER BY


La commande ORDER BY permet de classer alphabétiquement (ou trier numériquement ou
chronologiquement) les données retournées par la requête de sélection de la façon suivante :
SELECT colonne1, colonne2 FROM table ORDER BY colonne1

Le critère de la clause ORDER BY peut être soit le nom, soit le numéro d'une des colonnes
sélectionnées par la requête.
Exemple : on souhaite retourner le nom et le salaire de chaque employé, classé par ordre
croissant du salaire :
SELECT nom, salaire FROM Employe ORDER BY salaire

Par défaut les résultats sont classés par ordre ascendant (croissant) ASC, toutefois il est
possible d’inverser l’ordre en utilisant le suffixe DESC (décroissant) après le nom de la
colonne.
SELECT nom, salaire FROM Employe ORDER BY salaire DESC

Par ailleurs, il est possible de trier sur plusieurs colonnes en les séparant par une virgule.
Exemple : on souhaite retourner le nom et le salaire de chaque employé, classé par ordre Auteur : Abdellatif Hajraoui
croissant du salaire et par ordre alphabétique du nom:
SELECT nom, salaire FROM Employe ORDER BY salaire, nom

2.7. Les requêtes imbriquées (les sous-requêtes)


Les requêtes de sélection peuvent également être utilisées comme sous-requêtes dans une
clause conditionnelle WHERE. Les sous-requêtes permettent de sélectionner dans un premier
temps un jeu d'enregistrements dans une table tierce qui servira de condition de sélection
dans la requête principale.

8
Exemple 1: on souhaite afficher le nom, le prénom et le salaire de l’employé qui a le plus
grand salaire:
SELECT nom, prenom, salaire FROM Employe WHERE salaire = (SELECT max
(salaire) FROM Employe)
Exemple 2: on souhaite retourner le nom, le prénom et le salaire des employés qui ont un
salaire plus grand que le salaire moyen:
SELECT nom, prenom, salaire FROM Employe WHERE salaire >(SELECT avg
(salaire) FROM Employe)

2.8. Les commandes d'alias


Dans le langage SQL il est possible d’utiliser des alias pour renommer temporairement une
colonne ou une table dans une requête. Cette astuce est particulièrement utile pour faciliter la
lecture des requêtes.
Syntaxe :
SELECT colonne1 AS c1, colonne2 AS C2 FROM table1 AS T1

La clause AS affectant un alias à une table ou une colonne, peut être remplacé par un simple
espace blanc.
Exemple :
SELECT departement AS D, sum (salaire) AS SS FROM Employe AS E GROUP BY D
HAVING SS >= 15000

Ou bien

SELECT departement D, sum (salaire) SS FROM Employe E GROUP BY D HAVING


SS >= 15000

3. Les jointures
Un bon moyen de retrouver les données de plusieurs tables consiste à effectuer la jointure
des tables. Les jointures en SQL permettent d’associer plusieurs tables dans une même Auteur : Abdellatif Hajraoui
requête.
L’opération de jointure porte sur 2 tables qui doivent avoir au moins un attribut défini
dans le même domaine.
La condition de jointure peut porter sur l'égalité d'un ou de plusieurs attributs définis dans
le même domaine (mais n'ayant pas forcément le même nom) (l'équijointure).
Les n-uplets de la table résultat sont formés par la concaténation des n-uplets des relations
d'origine qui vérifient la condition de jointure.
Des jointures plus complexes que l'équijointure peuvent être réalisées en généralisant
l'usage de la condition de jointure à d'autres critères de comparaison que l'égalité (<,>,
<=,>=, <>).
9
Il y a d’autres cas de jointures, incluant des jointures sur la même table.

Pour bien illustrer cette notion de jointure, prenons l’exemple d’une la base de données
constituée de deux relations EMPLOYE et DEPARTEMENT dont les schémas
relationnelles sont:
EMPLOYE (IdE, Nom, Prenom, Salaire, #IdD)
DEPARTEMENT (IdD, Nom, #IdChef)
 IdE (identité de l’employé) et IdD (identité du département) sont respectivement les clés
primaires des deux relations EMPLOYE et DEPARTEMENT.
 L'attribut IdD (identité du département) de la relation EMPLOYE fait référence à la clé
primaire de la relation DEPARTEMENT.
 L'attribut IdChef (identité du chef de département) de la relation DEPARTEMENT fait
référence à la clé primaire de la relation EMPLOYE.
On donne ci-dessous deux exemples de tables représentant ces deux relations.
EMPLOYE
IdE Nom Prenom Salaire IdD
1 Amrani Hamid 10000 1
2 Saadani Adil 9000 1
3 Fawzi Imane 7500 1
4 El hassani Najwa 9500 2
5 Alaoui Siham 6000 2
6 Hamidi Said 5500 2

DEPARTEMENT
IdD Nom IdChef
1 Marketing 1
2 Vente 4
Auteur : Abdellatif Hajraoui
3.1. Jointure d'égalité (équijointure)
Une jointure d'égalité symbolisée par INNER JOIN crée une relation de correspondance
entre des tables. C’est un type de jointures très communes pour lier plusieurs tables entre-
elles pour retourner des enregistrements lorsqu’il y a au moins une ligne dans chaque
colonne qui correspond à la condition de jointure.
Exemple 1 : Si on veut retourner les informations de chaque Employé avec les
informations du département où il travaille, il convient d’utiliser la requête suivante :
SELECT * FROM Employe, departement WHERE Employe.IdD=Departement.IdD

Cette requête retourne la table suivante:

10
IdE Nom Prenom Salaire IdD IdD Nom IdChef
1 Amrani Hamid 10000 1 1 Marketing 1
2 Saadani Adil 9000 1 1 Marketing 1
3 Fawzi Imane 7500 1 1 Marketing 1
4 El hassani Najwa 9500 2 2 Vente 4
5 Alaoui Siham 6000 2 2 Vente 4
6 Hamidi Said 5500 2 2 Vente 4

On constate dans le résultat de cette requête, que la colonne IdD est en double. Pour l’éviter,
on doit spécifier les noms des colonnes à afficher.
Exemple 2 : Maintenant, si on veut retourner l’identité, le nom, le prénom de chaque
Employé et le nom du département où il travaille, on utilisera la requête suivante :
SELECT IdE, E.nom, prenom, D.nom FROM Employe AS E, departement AS D WHERE
E.IdD=D.IdD

Ou bien la requête suivante qui utilise la commande JOIN …. ON:

SELECT IdE, E.nom, prenom, D.nom FROM Employe AS E JOIN Departement AS D


ON E.IdD=D.IdD

Exemple 3 : si on veut retourner l’identité, le nom et le prénom de chaque Employé


travaillant dans le département ‘Marketing’, on utilisera la requête suivante :
SELECT IdE, E.nom, prenom FROM Employe E, departement D WHERE
E.IdD=D.IdD AND D.nom='Marketing'
Ou:
SELECT IdE, E.nom, prenom, D.nom FROM Employe AS E JOIN Departement AS D
ON E.IdD=D.IdD WHERE D.nom='Marketing'

Exemple 4 : si on veut retourner le nom de chaque département avec le nom et le


Auteur : Abdellatif Hajraoui
prénom du chef de ce département, on utilisera la requête suivante :
SELECT D.nom, E.nom, prenom FROM departement AS D, Employe AS E WHERE
IdChef =E.IdE
Ou:
SELECT D.nom, E.nom, prenom FROM Departement AS D JOIN Employe AS E ON
IdChef =E.IdE

Exemple 5 : si on veut retourner IdE, nom et prenom des employés du départemen


dont Nom du Chef=Amrani:
11
SELECT IdE, E.nom, prenom FROM Employe AS E ,departement AS D WHERE
E.IdD=D.IdD AND IdChef = (SELECT E.IdE FROM Employe E WHERE
E.Nom='Amrani')

Auteur : Abdellatif Hajraoui

12

Vous aimerez peut-être aussi