Vous êtes sur la page 1sur 10

ISIT’COM M.

HARZALLAH

Chapitre IV : Le langage SQL


(Structured Query Language)

Le langage SQL est un ensemble de commandes permettant la définition et la manipulation des bases de
données relationnelles.

A- Le Langage de Définition des Données (LDD)


La définition des données dans SQL permet la description des objets manipulés par le SGBD. Ces
objets peuvent être des objets logiques (les tables et les synonymes) et les objets physiques (les espaces de
stockage, les index etc.).
Dans cette partie on s'intéresse à la définition des objets logiques. Les opérations de définition des tables
regroupent la création, la modification de structure et la suppression.

I- Création des tables


La création d'une table consiste à définir son nom, les attributs qui la compose et leurs types.
Syntaxe :
CREATE TABLE nomTable (définition attr1, definition attr2, ….);
▪ Le nomTable doit être un nom unique dans la base.
▪ La définition d'un attribut consiste à préciser successivement son nom, son type, sa taille et
éventuellement les contraintes d'intégrités en mentionnant :
o Si cet attribut peut avoir ou non des valeurs null : NULL ou NOT NULL
o Si cet attribut est une clé primaire : CONSTRAINT pk_NomContraite PRIMARY KEY
o Si cet attribut est une clé étrangère : CONSTRAINT fk_NomContrainte REFERENCES
nomTable_Reference (NomAttribut_Reference)
o etc.
▪ Définition d'attribut : nomAttribut type [(taille)] [NULL | NOT NULL]

Les types de données les plus utilisés sont :

Type Définition
CHAR(n) ou VARCHAR(n) chaîne de n caractères, n ne dépasse pas 240.
DATE date dont le format standard est JJ-MM-AA
NUMBER(n) nombre entier de taille n, n ne dépasse pas 105
NUMBER(n,m) nombre réel pouvant avoir n chiffres avant la virgule et m chiffres après la
virgule
Exemple :
1) création de la table Filière
CREATE TABLE Filiere
( CodeFiliere VARCHAR(2),
Definition VARCHAR(20),
NbreAnnee NUMBER(1),
DateCreat DATE,
Diplôme VARCHAR(40));
Or codeFiliere est une clé primaire donc lors de la création on doit :
▪ Préciser qu'il doit avoir toujours une valeur dans chaque tuple
▪ ajouter une contrainte indiquant qu'il s'agit d'une clé primaire pour la table.
1/10
ISIT’COM M.HARZALLAH

Donc la requête de création de Filière sera comme suit :


CREATE TABLE Filiere
( CodeFiliere VARCHAR(2) NOT NULL
CONSTRAINT pk_Filiere PRIMARY KEY,
Definition VARCHAR(20),
NbreAnnee NUMBER(1),
DateCreat DATE,
Diplôme VARCHAR(40));
2) Création de la table Etudiant
CREATE TABLE Etudiant
( NumEtud NUMBER(5) NOT NULL
CONSTRAINT pk_Etudiant PRIMARY KEY,
Nom VARCHAR(20),
Prenom VARCHAR(20),
DateNais DATE,
Lieu VARCHAR(10)
CodeFil VARCHAR(2));

Or codeFil est une clé étrangère donc lors de la création on doit ajouter une contrainte indiquant qu'il s'agit
d'une clé étrangère et que cet attribut fait référence à la clé primaire codeFilière dans la table Filiere.

Donc la requête de création de Etudiant sera comme suit :


CREATE TABLE Etudiant
( NumEtud NUMBER(5) NOT NULL
CONSTRAINT pk_Etudiant PRIMARY KEY,
Nom VARCHAR(20),
Prenom VARCHAR(20),
DateNais DATE,
Lieu VARCHAR(10)
CodeFil VARCHAR(2)
CONSTRAINT fk_Etud_Filiere REFERENCES Filiere(CodeFiliere));

II- Modification de la structure d'une table


La modification de la structure d'une table peut concerner :
▪ L'ajout d'attributs
▪ La modification d'attributs
▪ La suppression d'attributs

II.1- Ajout d'attributs


Syntaxe :
ALTER TABLE nomTable ADD (définition_Attr, …);
Définition_Attr est de même forme que celle utilisée dans la commande CREATE.
NB : Il n'est pas possible d'ajouter un attribut avec l'option NOT NULL sauf si la table est vide (n'a aucun tuple)
impossible
Exemple : Ajoutons les attributs NumTel et Annee dans Etudiant. Annee est obligatoire. Supposons que la
table est vide.
ALTER TABLE Etudiant ADD (NumTel NUMBER(8), Annee NUMBER(1) NOT NULL);

2/10
ISIT’COM M.HARZALLAH
II.2- Modification d'attributs
Les modifications possibles sont :
▪ Accroître la taille : toujours possible
▪ Réduire la taille : seulement si la colonne ne contient que des valeurs nulles,
▪ Modifier le type : seulement si la colonne ne contient que des valeurs nulles,
▪ Supprimer l'interdiction de présence de valeurs nulles ( passage de NOT NULL à NULL) : toujours
possible
Syntaxe :
ALTER TABLE nomTable MODIFY (définition_Attr, …);
Définition_Attr est de même forme que celle utilisée dans la commande CREATE.
Exemple :
1) Modifier le type et accroître la taille : représenter les numéros de téléphone sous la forme 71 234 567 et
non pas sous la forme 71234567
ALTER TABLE Etudiant MODIFY (NumTel VARCHAR(10));
2) Supprimer l'interdiction de présence de valeurs nulles : supposons que pour des besoins on accepte une
valeur null pour l'attribut année
ALTER TABLE Etudiant MODIFY (annee NUMBER(1));

II.3- Suppression d'attributs


Syntaxe :
ALTER TABLE nomTable DROP (Nom_Attr, …);
Nom_attr : indique seulement le nom de l'attribut
Exemple : Suppression de l'attribut annee :
ALTER TABLE Etudiant DROP (annee);

III- Suppression d'une table


Syntaxe :
DROP TABLE nomTable;
Exemple : Suppression de la table Etudiant :
DROP TABLE Etudiant.
NB : Il n'est pas possible de supprimer une table T1 qui a une clé primaire qui joue le rôle d'une clé étrangère
dans une autre table T2. En effet, il faut supprimer tous les tuples de T2 qui font référence aux tuples de T1
avant de supprimer la table T1.

3/10
ISIT’COM M.HARZALLAH

B- Le Langage de Manipulation des Données (LMD)


La manipulation des données dans SQL permet la consultation, la mise à jour et la suppression des données
d'une base de données relationnelle.

I- Consultation des données


I.1- Recherche simple dans une table : Expression de projection
La forme la plus simple d'une requête de consultation consiste à rechercher toutes les lignes d'une table
donnée.
Syntaxe :
SELECT *
FROM nomTable;
Exemple : lister le contenu de la table étudiant
SELECT *
FROM Etudiant;

Dans la pratique, on se limite souvent à quelques-uns des attributs. Dans ce cas, la clause SELECT prend la
forme suivante :

SELECT attribut1, attribut2, …


FROM nomTable;
Exemple : Lister le numéro, le nom et le prénom des étudiants
SELECT NumEtud, Nom, Prenom
FROM Etudiant;
NB :Dans le cas de projection d'une table, on peut avoir des valeurs qui se répètent. Pour indiquer qu'il faut afficher toutes les
valeurs (avec redondance) ou seulement celles qui sont distinctes, il faut précéder l'attribut par ALL ou DISTINCT, par
défaut c'est ALL.
Exemple : Afficher tous les codeFil des étudiants
SELECT CodeFil
FROM Etudiant;
Dans ce cas on a une liste où le même code filière se répète plusieurs fois.
Solution SELECT Distinct CodeFil
FROM Etudiant;

I.2- Recherche avec qualification : Expression de Sélection


Dans le plus part des cas, les requêtes de recherche ne portent pas sur la totalité d'une table. Seules quelques
lignes sont donc à sélectionner selon une certaine condition. Cette condition s'exprime dans la clause
WHERE de qualification qui vient après la clause FROM.
Syntaxe :
SELECT [ * | liste attributs]
FROM nomTable
WHERE Condition;
La condition est composée généralement de trois termes :
▪ Un nom d'attribut ou une expression
▪ Un opérateur de comparaison : Il existe deux catégories d'opérateur de comparaison : Logique et SQL

4/10
ISIT’COM M.HARZALLAH
▪ Une constante, un nom d'attribut ou une liste de valeur. La liste de valeurs peut être le résultat d'une
sous-requête

a) Opérateurs de comparaison logique

Opérateur Signification
= Egal
> Supérieur
>= Supérieur ou égal
< Inférieur
<= Inférieur ou égal
<> ou != Différent
AND Le résultat retourne Vrai si les deux conditions retourne vrai
OR Le résultat retourne Vrai si l'une des deux conditions retourne Vrai
NOT Permet d'inverser une condition

b) Opérateurs de comparaison SQL

Opérateur Signification
[NOT] BETWEEN b1 AND b2 Teste si la variable est [Non] comprise entre b1 et b2
[NOT] IN (liste de valeur) Teste si la variable est [non] présente dans la liste
IS [NOT] NULL Teste si la variable est [non] null
[NOT] LIKE chaîne générique Teste la [non] ressemblance avec une chaîne de caractère obtenu à
partir de la chaîne générique
% : remplace un ou plusieurs caractères
_ : remplace un seul caractère

Exemple :
1) Sélectionner tous les étudiants (Numéro, nom et prénom ) dont le codeFil est "TM"
SELECT NumEtud, Nom, Prenom
FROM Etudiant
WHERE CodeFil = "TM";
2) Sélectionner toutes les filières dont le nombre d'années est compris entre 3 et 4
SELECT *
FROM Filiere
WHERE nbreAnnee BETWEEN 3 AND 4;
3) Sélectionner tous les étudiants (Numero, nom et prénom ) dont le codeFil est "TM" et le nom commence
par "B"
SELECT NumEtud, Nom, Prenom
FROM Etudiant
WHERE CodeFil = "TM"
AND nom LIKE "B%";

c) Expression Arithmétique

Des expressions arithmétiques peuvent être utilisées dans la clause SELECT ou WHERE.
▪ Les opérateurs arithmétiques : +, -, *, et /
▪ Les fonctions arithmétiques :
o ABS(n) : valeur absolue de n
o MOD(m,n) : reste de la division de m par n
o POWER(m,n) : m à la puissance de n
o SQRT(n) racine carrée de n
5/10
ISIT’COM M.HARZALLAH
o Etc.
▪ Les fonctions agrégat : se sont des fonctions qui s'appliquent à un ensemble de valeurs d'un attribut.
Chacune des fonctions suivantes a comme argument un nom de colonne ou une expression.
o AVG: moyenne arithmétique
o COUNT : nombre d'attribut
o MAX : Valeur maximale
o MIN : Valeur minimale
o STDDEV : écart type
o SUM : Somme
o VARIANCE : variance
Exemple :
1) Trouver le nombre d'étudiants
SELECT COUNT(*)
FROM Etudiant;
2) Trouver le nombre d'étudiants de nom différent
SELECT COUNT(DISTINCT nom)
FROM etudiant;

d) Les fonctions de manipulation des chaînes de caractères

▪ LENGTH(ch) : longueur de ch
▪ LOWER(ch) : met en minuscule ch
▪ UPPER(ch) : met en majuscule ch
▪ etc.

I.3- Tri des résultats


Il est possible d'ordonner les résultats. Cet ordre peut être croissant ou décroissant sur un ou plusieurs
attributs ou expressions. Pour cela, il faut ajouter dans la requête la clause ORDER BY.
Syntaxe :
ORDER BY expression [ASC| DESC], …
La valeur par défaut est ASC
Exemple : Donner la liste des étudiants nom, prénom dans un ordre croissant
SELECT nom, prenom
FROM etudiant
ORDER BY nom, Prenom;

I.4- Classification des résultats


Il est possible d'effectuer un regroupement ou une classification des résultats. Cette classification permet de
regrouper les lignes résultats dans des classes ayant chacune la même valeur pour un attribut donnée,
d'effectuer un calcul tel que la moyenne ou la somme des valeurs du groupe et ensuite de rendre le résultat
sous la forme d'une ligne par groupe. Cette classification est possible avec la clause GROUP BY qui doit
suivre la clause WHERE ou FROM (si WHERE est absente).

Syntaxe :
SELECT [ * | liste attributs]
FROM nomTable
[WHERE Condition]
6/10
ISIT’COM M.HARZALLAH
GROUP BY attribut1, …;
NB : les attributs de GROUP BY doivent être mentionnés dans SELECT
Exemple : Trouver le nombre d'étudiant par codeFil
SELECT CodeFil, COUNT(NumEtud)
FROM Etudiant
GROUP BY CodeFil;
Dans la clause GROUP BY nous pouvons effectuer une sélection. Cette sélection permet d'éliminer
quelques-uns des groupes ne vérifiant pas une condition donnée et elle s'effectue avec la clause HAVING.
Syntaxe :
SELECT [ * | liste attributs]
FROM nomTable
[WHERE Condition]
GROUP BY attribut1, …
HAVING condition;
NB : Il faut bien faire la différence entre la clause WHERE qui s'applique à toutes les lignes de la table et la clause
HAVING qui s'applique à un groupe.
Exemple : Supposons on a la table moyenne contenant les moyennes des matières de chaque étudiant :
CREATE TABLE Moyenne
(NumEtud NUMBER(5) NOT NULL
CONSTRAINT pk_Moyenne PRIMARY KEY,
Groupe NUMBER(2),
Maths NUMBER(2,2),
Info NUMBER(2,2),
Traitement NUMBER(2,2),
Elect NUMBER(2,2),
Français NUMBER(2,2),
Anglais NUMBER(2,2));

1) Afficher la moyenne en math des étudiants du groupe 2


SELECT AVG(MATHS)
FROM Moyenne
WHERE Groupe = 2;
2) Afficher la moyenne en maths des étudiants par groupe
SELECT Groupe, AVG(MATHS)
FROM Moyenne
GROUP BY Groupe
ORDER BY Groupe;
3) Afficher les groupes qui ont une moyenne >12 en Maths et > 14 en elect
SELECT Groupe, AVG(Maths), AVG(Elect)
FROM Moyenne
GROUP BY Groupe
HAVING AVG(Maths) >12 AND AVG(Elect) >14;

I.5- Le produit cartésien et la jointure


Dans toutes les requêtes que nous avons présentées, nous avons considéré une seule table. Les données à
chercher peuvent être stockées dans différentes tables. De plus, pour obtenir un résultat, un approchement

7/10
ISIT’COM M.HARZALLAH
entre des données se trouvant dans des tables différentes pourrait être nécessaire. Les opérations permettant
d'effectuer ce rapprochement sont le produit cartésien et la jointure.

a) le produit cartésien

Le produit cartésien consiste à croiser toutes les données d'une table avec celui d'une autre. Tous les
enregistrements de la première table sont liés avec l'enregistrement de la seconde table.
Syntaxe :
SELECT listeAttr_table1, listeAttr_Table2, …
FROM Table1 [alias1] , Table2[alias2], ….;
NB :
▪ Quand on écrit un ordre SELECT qui lie plusieurs tables, il est préférable de :
o Définir un alias pour chaque table qui n'est autre qu'une abréviation du nom de la table (pour besoin de clarté
des requêtes)
o préfixé le nom de l'attribut par le nom de la table ou l'alias de la table pour la clarté.
▪ Si le même nom d'attribut est présent dans plus d'une table de la clause FROM, cet attribut doit être préfixé par le
nom de la table ou de l'alias dans la clause SELECT.
Exemple : Afficher chaque étudiant avec la définition de filière
SELECT NumEtud, Nom, Prenom, CodeFil, Definition
FROM Etudiant, Filiere;
Le problème est que CodeFil se trouve dans Etudiant et Filiere. Il faut donc corriger la requête
SELECT E.NumEtud, E.Nom, E.Prenom, E.CodeFil, F.Definition
FROM Etudiant E, Filiere F;
NB : Un produit cartésien est susceptible de gérer un grand nombre d'enregistrements, sont résultat est rarement exploitable. De
plus cette requête est pénalisante à la fois au niveau du temps de réponse et au niveau espace mémoire nécessaire à son exécution.
Il faut donc toujours ajouter une condition de jointure dans la clause WHERE.

b) Jointure

Les enregistrements d'une table sont reliés avec les enregistrements d'une autre table grâce aux valeurs
communes contenues dans les attributs correspondants : clés primaires et clé étrangères.

La plus part de temps les colonnes qui participent dans la condition de jointure sont une clé primaire et une
clé étrangère et l’opérateur de la condition de jointure est "=".
Syntaxe :
SELECT listeAttr_table1, listeAttr_Table2, …
FROM Table1 [alias1] , Table2[alias2], ….
WHERE table1.Attr = table2.Attr;
Exemple : Afficher les étudiants (NumEtud, nom, prenom, codeFil) et définition de Filière (Definition,
Diplôme)
SELECT E.NumEtud, E.Nom, E.Prenom, E.CodeFil, F.Definition, F.Diplome
FROM Etudiant E, Filiere F
WHERE E.CodeFil = F.CodeFil;

I.6- Union
Cette operation consiste à faire l'union des resultants de deux requetes à condition que ces resultants soient
compatibles, c'est à dire qu'ils aient le même nombre de colonne et les mêmes types de données pour les
colonnes de même position

8/10
ISIT’COM M.HARZALLAH
Syntaxe :
Requête 1
UNION
Requête2;

I.7- Intersection
L'intersection permet d'avoir les lignes communes aux résultats de deux requetes. Les resultants doivent être
compatibles en ce qui concerne leurs structures.
Syntaxe :
Requête 1
INTERSECT
Requête2;

I.8- Différence
L'opérateur MINUS permet d'avoir les lignes qui apparaissent dans le résultat de la première requête et non
dans le résultat de la deuxième.
Syntaxe :
Requête 1
MINUS
Requête2;

II- Modification de données


L'opération de modification consiste à mettre à jour les colonnes d'une table par des nouvelles valeurs.
Syntaxe :
UPDATE nomTable
SET attribut1 = valeur1, …
WHERE condition ;
WHERE permet de selectionner les lignes à mettre à jour.
SET détermine les attributs à mettre à jour.
Valeur1, … : peut être une constante, ou une expression ou résultat d'une sous-requête.
NB :Il n'est pas possible de mettre à jour plus d'une table à la fois.
Exemple : Corriger le nom de l'etudiant Numéro 45 "Mohamed Amine" au lieu de "Med Amina"
UPDATE Etudiant
SET Nom = "Mohamed Amine"
WHERE NumEtud = 45;
Si on a pas ajouté la clause WHERE alors tous les étudiant vont avoir le même nom "Mohamed Amine"

III- Insertion de données


L'insertion consiste à ajouter de nouvelles lignes dans une table. Elle peut affecter tous les attributs d'une
table ou seulement un sous ensemble de ces attributs. Les autres prendront automatiquement des valeurs
nulles).
NB : Les attribut ayant l'option NOT NULL pendant la création de la table, doivent figurer dans la commande d'insertion.
9/10
ISIT’COM M.HARZALLAH
Syntaxe :
INSERT INTO nomTable [(attribut1, …)]
VALUES (valeur1, …);
Exemple: Ajouter un nouveau étudiant
INSERT INTO Etudiant (NumEtud, Nom, Prenom)
VALUES (230, "Ben bey", "Amna");

IV- Suppression de données


La suppression de données consiste à supprimer une ou plusieurs lignes d'une table.
Syntaxe :
DELETE FROM nomTable
WHERE condition;
La condition permet de restreindre les lignes de la table à supprimer. Si la clause WHERE est absente, toutes
les lignes sont supprimées.
NB : La condition peut contenir une sous requette.
Exemple :
1) Supprimer les étudiants dont le codeFil est "BTM"
DELETE FROM Etudiant
WHERE CodeFil = "TM";
2) Supprimer les étudiants dont la moyenne générale est <10. Supposons que toutes les matières sont de
même coéfficient.
DELETE FROM Etudiant
WHERE NumEtud IN
(SELECT NumEtud
FROM Moyenne
WHERE ( (Math + Info + Traitement + Elect + Français +Anglais) /6 )< 10);

10/10

Vous aimerez peut-être aussi