Introduction au langage SQL et ses commandes
Introduction au langage SQL et ses commandes
I. Présentation de SQL
SQL signifie Structured Query Language est le langage des bases de données relationnelles répandant à
la fois aux problématiques de création des objets de base de données (modèle), de manipulation des
données (algèbre relationnelle), de gestion de la sécurité (droits d’accès), de traitements locaux de
données (procédures).[7]
Il s’agit d’un langage non procédural qui 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 relationnelles (SGBDR) depuis 1986.
Il est utilisé par les principaux SGBDR du marché : Oracle, SQL Server, MySQL, Access, DB2, …
Remarque : Il existe plusieurs implémentations de SQL chez les principaux éditeurs (Voir Annexes).
Dans le reste de ce chapitre, l’implémentation utilisée est celle du SGBD Oracle.
Contraintes d’intégrité
Définition : Dans la définition d’une table, on peut indiquer des contraintes d’intégrité portant sur
une ou plusieurs colonnes.
Les contraintes possibles sont : UNIQUE, PRIMARY KEY, FOREIGN KEY … REFERENCES et
CHECK.
Chaque contrainte doit être nommée pour pouvoir la mettre à jour ultérieurement.
Création :
- CONSTRAINT nom_contrainte UNIQUE (colonne1, colonne2, …) : interdit qu’une colonne,
ou la concaténation de plusieurs colonnes, contiennent deux valeurs identiques.
29
Chapitre 5 : Le langage SQL
- Exemple :
CREATE TABLE CLASSE (
NUMCLASSE NUMBER(5),
NOMCLASSE VARCHAR2(10)
);
Exemple : Etant donné l’entité ETUDIANT, si on souhaite la renommer par STUDENT, on écrit :
RENAME ETUDIANT
TO STUDENT ;
30
Chapitre 5 : Le langage SQL
Remarque : Attention, la suppression d’une table engendre la perte des données qu’elle contient.
Exemple : Pour supprimer la table ETUDIANT ainsi que son contenu, on fait recours à l’instruction :
DROP TABLE ETUDIANT ;
Exemple : Etant donné la table Commande, l’ajout du champ Montant à cette table revient à écrire :
ALTER TABLE COMMANDE
ADD (MONTANT NUMBER(10,3)) ;
Modification des attributs : Après avoir créé la base de données, on peut modifier le type d’un attribut en
utilisant l’instruction suivante :
ALTER TABLE nom_table
MODIFY (attribut type, …) ;
Exemple : Modifier le nombre de chiffres du champ Montant de la table Commande nécessite le recours
à l’instruction :
ALTER TABLE COMMANDE
MODIFY (MONTANT NUMBER(12,3)) ;
Ajout de contraintes : Après avoir créé la base de données, on peut ajouter une nouvelle contrainte
d’intégrité grâce à l’instruction suivante :
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte definition_contrainte ;
Exemple : Ajouter une contrainte à la table Commande qui permet d’obliger des insertions de montants
positifs
ALTER TABLE COMMANDE
ADD CONSTRAINT CK_MONTANT CHECK(MONTANT >= 0) ;
Suppression de contraintes : Pour supprimer une contrainte, on procède comme indique la syntaxe de
cette instruction :
ALTER TABLE nom_table
DROP CONSTRAINT nom_contrainte ;
31
Chapitre 5 : Le langage SQL
Exemple : Etant donné la table Etudiant(NCE, nom, prenom, ville). Si on souhaite insérer les informations
d’un nouvel étudiant disposant des informations suivantes (1234, Ben Salah, Salah, Djerba), on écrit :
INSERT INTO ETUDIANT
VALUES (1234, ‘BEN SALAH’, ‘SALAH’, ‘DJERBA’) ;
Exemple : Etant donné la table Etudiant (NCE, nom, prenom, ville). Si jamais l’étudiant Salah Ben Salah
habite maintenant à Tunis, on écrit dans ce cas :
UPDATE ETUDIANT
SET VILLE=’TUNIS’
WHERE NCE=1234 ;
32
Chapitre 5 : Le langage SQL
Syntaxe :
L’ordre SELECT possède six clauses différentes, dont seules les deux premières sont obligatoires.[9]
Elles sont données ci-dessous dans l’ordre dans lequel elles doivent apparaître quand elles sont
utilisées :
SELECT …
FROM …
[WHERE …
GROUP BY …
HAVING …
ORDER BY …] ;
IV.2. Projection
Tous les attributs d’une table :
SELECT *
FROM nom_table ;
Remarque : Il est possible de mettre le mot clé facultatif DISTINCT derrière l’ordre SELECT. Il permet
d’éliminer les duplications : si, dans le résultat, plusieurs lignes sont identiques, une seule sera
conservée.
Quelques attributs :
SELECT attribut1, attribut2, …
FROM nom_table ;
IV.3. Restriction
Les restrictions se traduisent en SQL à l’aide du prédicat « WHERE » comme suit :
SELECT attribut1, attribut2, …
FROM nom_table
WHERE predicat ;
Un prédicat simple est la comparaison de deux expressions ou plus au moyen d’un opérateur logique.
Les trois types d’expressions (arithmétiques, caractères ou dates) peuvent être comparées au moyen des
opérateurs d’égalité ou d’ordre (=, !=, <, <=, >, >=) :
- pour les types date, la relation d’ordre est l’ordre chronologique
33
Chapitre 5 : Le langage SQL
34
Chapitre 5 : Le langage SQL
Exemple : Liste des étudiants ayant les noms commençant par ‘A’ et contenant au moins 2
caractères.
SELECT *
FROM ETUDIANT
WHERE NOM LIKE ‘A_%’ ;
Remarque :
On peut trouver, de même, les négations des prédicats BETWEEN, NULL, LIKE, IN, EXISTS à savoir :
NOT BETWEEN, NOT NULL, NOT LIKE, NOT IN et NOT EXISTS.
IV.4. Tri
Les lignes constituant le résultat d’un SELECT sont obtenues dans un ordre indéterminé. La clause
ORDER BY précise l’ordre dans lequel la liste des lignes sélectionnées sera donnée.
Syntaxe :
ORDER BY exp1 [DESC], exp2 [DESC], …
L’option facultative DESC donne un tri par ordre décroissant. Par défaut, l’ordre est croissant.
Le tri se fait d’abord selon la première expression, puis les lignes ayant la même valeur pour la première
expression sont triées selon la deuxième, …
Remarque : Les valeurs nulles sont toujours en tête quel que soit l’ordre du tri (ascendant ou
35
Chapitre 5 : Le langage SQL
descendant).
Exemple : Liste des étudiants ordonnés par ordre croissant des NCE et décroissant des noms
SELECT *
FROM ETUDIANT
ORDER BY NCE, NOM Desc;
IV.5. Regroupement
IV.5.1. La clause GROUP BY
Il est possible de subdiviser une table en groupes, chaque groupe étant l’ensemble de lignes ayant une
valeur commune.
Syntaxe :
GROUP BY exp1, exp2, …
Cette clause groupe en une seule ligne toutes les lignes pour lesquelles exp1, exp2, … ont la même
valeur.
Remarques :
- Cette clause se place juste après la clause WHERE, ou après la clause FROM si la clause
WHERE n’existe pas.
- Des lignes peuvent être éliminées avant que le groupe ne soit formé grâce à la clause WHERE.
Exemples :
Liste des départements ainsi que le nombre de leurs employés
SELECT DEPT, COUNT(*)
FROM EMP
GROUP BY DEPT;
Liste des départements ainsi que le nombre de leurs secrétaires
SELECT DEPT, COUNT(*)
FROM EMP
WHERE POSTE = ‘SECRETAIRE’
GROUP BY DEPT;
Remarque : Le prédicat suit la même syntaxe que celui de la clause WHERE. Cependant, il ne peut
porter que sur des caractéristiques de groupe (fonctions de groupe ou expression figurant dans la clause
GROUP BY)
Exemple :
36
Chapitre 5 : Le langage SQL
IV.6.2. Différence
L’opérateur MINUS permet d’ôter d’une sélection les lignes obtenues dans une deuxième sélection.
Exemple : Liste des départements qui ont des employés dans la première filiale mais pas dans la
deuxième
SELECT DEPT FROM EMP1
MINUS
SELECT DEPT FROM EMP2;
IV.6.3. Intersection
L’opérateur INTERSECT permet d’obtenir l’ensemble des lignes communes à deux interrogations.
Exemple : Liste des départements qui ont des employés dans les deux filiales
SELECT DEPT FROM EMP1
INTERSECT
SELECT DEPT FROM EMP2;
IV.7. Jointure
IV.7.1. Définition
Quand on précise plusieurs tables dans la clause FROM, on obtient le produit cartésien des tables.
Le produit cartésien de deux tables offre en général peu d’intérêt.
Ce qui est normalement souhaité, c’est de joindre les informations de diverses tables, en précisant
quelles relations les relient entre elles. C’est la clause WHERE qui permet d’obtenir ce résultat. Elle vient
limiter cette sélection en ne conservant que le sous-ensemble du produit cartésien qui satisfait le
prédicat.
Exemple : Liste des noms des étudiants avec les noms de leurs classes
37
Chapitre 5 : Le langage SQL
Exemple : Lister les employés qui ont un supérieur en indiquant pour chacun le nom de son supérieur
SELECT [Link] EMPLOYE, [Link] SUPERIEUR
FROM EMP, EMP SUPE
WHERE [Link] = [Link] ;
V. Contrôle de données
V.1. Gestion des utilisateurs
Tout accès à la base de données s’effectue par l’intermédiaire de la notion d’utilisateur (compte Oracle).
Chaque utilisateur est défini par :
- un nom d’utilisateur
- un mot de passe
- un ensemble de privilèges
Exemple :
CREATE USER ALI IDENTIFIED BY Ae3OPd ;
Exemple :
CREATE USER ALI IDENTIFIED BY A23ePs ;
38
Chapitre 5 : Le langage SQL
L’utilisation de CASCADE signifie que la suppression de l’utilisateur est accompagné par la suppression
de tous les schémas qu’il a créé.
Exemple :
DROP USER Ali CASCADE ;
Remarque : Des droits peuvent être accordés à tous les utilisateurs par un seul ordre GRANT en utilisant
le mot réservé PUBLIC à la place du nom d’utilisateur.
Principaux Privilèges :
SELECT : lecture
INSERT : insertion
UPDATE : mise à jour
DELETE : suppression
DBA, ALL : tous les privilèges
Si la clause WITH GRANT OPTION est spécifiée, le bénéficiaire peut à son tour assigner le privilège qu’il
a reçu à d’autres utilisateurs.
Exemples :
GRANT SELECT
ON ETUDIANT
TO PUBLIC ;
Syntaxe :
39
Chapitre 5 : Le langage SQL
REVOKE privilège
[ON table]
FROM utilisateur ;
Exemples :
REVOKE SELECT
ON ETUDIANT
FROM Ali ;
40
Annexes
Annexes
1
Annexe II : La normalisation
Annexe II : La normalisation
Utilisateurs
Conversion du modèle EA
en un ensemble de relations
Spécification des
exigences des
utilisateurs Utilisation de la normalisation en tant
Ensemble de qu’une technique de validation,
Formulaires utilisés et relations bien conçues pour vérifier la structure de
états générés au sein Seconde relations.
de l’entreprise approche
2
Annexe II : La normalisation
Sources de données
3
Annexe III : Implémentation de SQL chez les principaux éditeurs
4
Annexe III : Implémentation de SQL chez les principaux éditeurs
5
Annexe IV : Présentation de quelques fonctions SQL
I. Fonctions arithmétiques
ABS(n) : valeur absolue de n
MOD(n1, n2) : n1 modulo n2
POWER(n, e) : n à la puissance e
ROUND(n[,p]) : arrondit n à la précision p (0 par défaut)
SIGN(n) : -1 si n< 0, 0 si n=0 et 1i n>0
SQRT(n) : racine carré de n
TO_CHAR(n, format) : convertit n en chaîne de caractères
TRUNC(n[,p]) : tronque n à la précision p (0 par défaut)
GREATEST(n1, n2, …) : maximum de n1, n2, …
LEAST(n1, n2, …) : minimum de n1, n2, …
TO_NUMBER(chaîne) : convertit la chaîne de caractères en numérique
LENGTH(chaîne)
prend comme valeur la longueur de la chaîne.
6
Annexe IV : Présentation de quelques fonctions SQL
Le dernier paramètre "n" permet de rechercher la nième occurrence de la sous-chaîne dans la chaîne.
Ce paramètre facultatif vaut 1 par défaut.
UPPER(chaîne)
convertit les minuscules en majuscules
LOWER(chaîne)
convertit les majuscules en minuscules
LTRIM(chaîne, car)
supprime les caractères à l’extrémité gauche de la chaîne "chaîne" tant qu’ils appartiennent à l’ensemble
de caractères "car".
RTRIM(chaîne, car)
fonction analogue à LTRIM mais, les caractères étant supprimés à l’extrémité droite de la chaîne.
TO_CHAR
La fonction TO_CHAR permet de convertir un nombre ou une date en chaîne de caractère en fonction
d’un format :
Pour les nombres : TO_CHAR(nombre, format)
nombre est une expression de type numérique
format est une chaîne de caractère pouvant contenir les caractères suivants :
- 9 représente un chiffre (non représenté si non significatif)
- 0 représente un chiffre (représenté même si non significatif)
- . point décimal apparent
- , une virgule apparaîtra à cet endroit
- $ un $ précèdera le premier chiffre significatif
- B le nombre sera représente par des blancs s’il vaut zéro
- MI le signe négatif sera à droite
- PR un nombre négatif sera entre < >
7
Annexe IV : Présentation de quelques fonctions SQL
TO_NUMBER(chaîne)
convertit une chaîne de caractères en nombre (quand la chaîne de caractères est composée de
caractères numériques)
ASCII(chaîne)
donne le code ASCII du premier caractère de chaîne.
CHR(n)
donne le caractère de code ASCII(n)
TO_DATE(chaîne, format)
permet de convertir une chaîne de caractères en donnée de type date. Le format est identique à celui de
la fonction TO_CHAR.
TRUNC(date, précision)
tronque la date à la précision spécifiée (similaire à ROUND).
SYSDATE
a pour valeur la date et l’heure courante du système d’exploitation hôte.
8
Annexe IV : Présentation de quelques fonctions SQL
NVL(exp, val)
permet de remplacer une valeur NULL de « exp » du par une valeur par défaut « val »
9
Bibliographie
Bibliographie
[2] Thomas CONNOLLY, Carolyn BEGG « Systèmes de bases de données. Approche pratique de
la conception, de l’implémentation et de l’administration (cours et exercices)» Les éditions Reynald
Goulet Inc. 2005.
[4] Pierre CRESCENZO « Support de cours magistraux de Bases de données » disponible sur le
site : « [Link] » visité le 12/04/2007.
[5] Pierre CARRIER, Rémy HUDON, Suzanne JEAN « Bases de données dans le développement
de systèmes » Gaêtan Morin 1991.
[7] Frédéric BROUARD, Christian SOUTOU « SQL : Synthèse de cours & exercices corrigés».
Collection Synthex. Pearson Education 2005.