Vous êtes sur la page 1sur 45

Base de Données

(Chapitre 03)
Langage SQL
Dr. Aymen LOUATI
Mail contact: Aymen.louati@live.fr
Phone contact: +216 95335375

AU 2018-2019
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, de manipulation des données, de gestion de la sécurité, …
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. SQL est le standard pour la
définition, la manipulation et le contrôle de BD relationnelles.
Les commandes SQL sont regroupées en trois principales catégories :
• LDD (Langage de Définition des Données) : commandes pour créer (CREATE), modifier (ALTER) ou supprimer
(DROP) les objets de la BD.
• LMD (Langage de Manipulation des Données) : commandes pour ajouter (INSERT), modifier (UPDATE), supprimer
(DELETE) ou extraire (SELECT) des données et ceux pour verrouiller (LOCK TABLE) les tables.
• LCD (Langage de Contrôle de Données) : commandes pour la validation (COMMIT) et l’annulation (ROLLBACK) des
transactions, pour autoriser (GRANT) ou interdire (REVOKE) des accès aux objets d’une base de données.

19/04/2019 2
II. Définition de données (LDD)
II.1. Création des tables
Syntaxe : Pour créer une table, nous faisons recours à l’instruction suivante :
CREATE TABLE nom_table (
Col1 type1 [NOT NULL],
Col2 type2 [NOT NULL],
...,
Contrainte1,
Contrainte2,

);
L’option NOT NULL implique que la valeur nulle est interdite dans cette colonne, nous l’utilisons généralement pour
les colonnes utilisées comme clé dans une table.
19/04/2019 3
II. Définition de données (LDD)
II.1. Création des tables
Type des données :

 NUMBER( N ) : Entier à N chiffres Pour chaque colonne que l'on crée, il faut préciser le type de données que le
champ va contenir. Celui-ci peut être un des types suivants :
 NUMBER( N , M ) : Réel à N chiffres au total (virgule comprise), M après la virgule.
 DATE : Date complète (date et/ou heure) (pour les dates par exemple on a le format : ‘JJ-MM-AAAA’).
 VARCHAR( N ), VARCHAR2( N ) : chaîne de N caractères (entre ‘ ‘) dont les espaces enfin de la chaîne seront
éliminés (longueur variable).
 CHAR( N ) : Chaîne de N caractères (longueur fixe).

19/04/2019 4
II. Définition de données (LDD)
II.1. Création des tables
Contraintes d’intégrité : Une contrainte d’intégrité est une règle qui permet de contrôler la valeur d’une colonne.
Nous utilisons la clause CONSTRAINT pour décrire les contraintes qui doivent être satisfaites pour que les instructions
d’insertion, modification et suppression soient possibles.
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.
On peut utiliser des contraintes pour imposer le respect de l’une des règles suivantes :
UNIQUE : Imposer que la valeur d’un attribut donné soit unique dans la table.
PRIMARY KEY : Identifier une ou plusieurs colonnes comme étant une clé primaire.
FOREIGN KEY : Imposer que la valeur d’une ou de plusieurs colonnes existe dans une autre table pour appliquer la
jointure entre eux.
CHECK : Imposer que la valeur d’une ou de plusieurs colonnes soit conforme à une expression donné.
CHECK est un mot associé à une condition d’intégrité référentielle par rapport à une clé unique ou primaire
19/04/2019 5
II. Définition de données (LDD)
II.1. Création des tables
Création :
 CONSTRAINT nom_contrainte UNIQUE (col1, col2, …) : interdit qu’une colonne, ou la concaténation de plusieurs
colonnes, contiennent deux valeurs identiques.
 CONSTRAINT nom_contrainte PRIMARY KEY (col1, col2, …): l’ensemble des colonnes col1, col2, … forment la clé
primaire de la table.
 CONSTRAINT nom_contrainte FOREIGN KEY (col_clé_étrangère) REFERENCES nom_table (col_référence) : l’attribut
de la table en cours représente la clé étrangère qui fait référence à la clé primaire de la table indiquée.
 CONSTRAINT nom_contrainte CHECK (condition) : contrainte là où on doit obligatoirement satisfaire la condition
telle qu’elle est énoncée.

19/04/2019 6
II. Définition de données (LDD)
II.1. Création des tables
Exemple :

Création de la table Frs:


CREATE TABLE Frs ( num_f NUMBER(5),
nom VARCHAR2(10),
ville VARCHAR2(10),
CONSTRAINT PK_Frs PRIMARY KEY(num_f) ) ;

19/04/2019 7
II. Définition de données (LDD)
II.1. Création des tables
Exemple :
Création de la table Article:
CREATE TABLE Article ( num_a NUMBER(5),
des VARCHAR2(10),
couleur VARCHAR2(10),
num_f NUMBER(5),
CONSTRAINT PK_Article PRIMARY KEY(num_a),
CONSTRAINT U_des UNIQUE(des),
CONSTRAINT FK_Article_Frs FOREIGN KEY(num_f)
REFERENCES Frs (num_f)
);
19/04/2019 8
II. Définition de données (LDD)
II.2. Renommer des tables
Syntaxe : Pour changer le nom d’une table, nous faisons recours à l’instruction suivante :

RENAME Ancien_Nom
TO Nouveau_Nom ;

Exemple :
Etant donné l’entité Frs, si nous souhaitons la renommer par Frs1, nous écrivons:
RENAME Frs
TO Frs1 ;

19/04/2019 9
II. Définition de données (LDD)
II.3. Destruction des tables
Syntaxe : Pour supprimer une table ainsi que son contenu, nous utilisons l’instruction qui suit :

DROP TABLE nom_table ;

Remarque : la suppression d’une table engendre la perte des données qu’elle contient.

Suppression de la table Frs ainsi que son contenu :


DROP TABLE Frs ;

19/04/2019 10
II. Définition de données (LDD)
II.4. Modification des tables
Il existe plusieurs modifications que le nous pouvons effectuer sur une table de base de données.
Ajout d’attribut : Après avoir créé la base de données, des tâches de maintenance semblent être parfois
nécessaires. D’où l’ajout d’un nouvel attribut :

ALTER TABLE nom_table


ADD (col type, …) ;

Exemple :
Etant donné la table Frs, l’ajout du champ date_naissance à cette table revient à écrire :
ALTER TABLE Frs
ADD (date_naissance DATE) ;
19/04/2019 11
II. Définition de données (LDD)
II.4. Modification des tables
Modification des attributs : Après avoir créé une table de la base de données, nous pouvons modifier le
type d’un attribut en utilisant l’instruction suivante :

ALTER TABLE nom_table


MODIFY (col type, …) ;

Exemple :
Modifier le nombre de chiffres du champ Prix_achat de la table Article nécessite le recours à l’instruction :
ALTER TABLE Article
MODIFY (Prix_achat NUMBER(12,3)) ;

19/04/2019 12
II. Définition de données (LDD)
II.4. Modification des tables
Ajout de contraintes : Après avoir créé la base de données, nous pouvons 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 Frs qui permet d’obliger des insertions de nom en majuscule :
ALTER TABLE Frs
ADD CONSTRAINT CK_nom CHECK (nom = UPPER(nom)) ;

19/04/2019 13
II. Définition de données (LDD)
II.4. Modification des tables
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 ;

Exemple :
Supprimer la contrainte ck_nom de la table Frs :
ALTER TABLE Frs
DROP CONSTRAINT CK_nom ;

19/04/2019 14
II. Définition de données (LDD)
II.4. Modification des tables
Désactivation de contraintes : Pour désactiver une contrainte (elle est par défaut active), nous procédons
comme indique la syntaxe de cette instruction :
ALTER TABLE nom_table
DISABLE CONSTRAINT nom_contrainte ;

Exemple :
Désactiver la contrainte ck_nom de la table Frs :
ALTER TABLE Frs
DISABLE CONSTRAINT CK_nom ;

19/04/2019 15
II. Définition de données (LDD)
II.4. Modification des tables
Activation de contraintes : Pour activer une contrainte, nous procédons comme indique la syntaxe de
cette instruction :
ALTER TABLE nom_table
ENABLE CONSTRAINT nom_contrainte ;

Exemple :
Activer la contrainte ck_nom de la table Frs :
ALTER TABLE Frs
ENABLE CONSTRAINT CK_nom ;

19/04/2019 16
III. Manipulation des données (LMD)
III.1. Ajout de données
Syntaxe : Pour ajouter un tuple dans une table, nous procédons comme suit:
INSERT INTO nom_table
VALUES (valeur_attribut1, valeur_attribut2, … ) ;
Ou nous pouvons utiliser :
INSERT INTO nom_table (attribut1, attribut2, … )
VALUES (valeur_attribut1, valeur_attribut2, … ) ;
Exemple :
Étant donné la table Frs (num_f, nom, ville). Si nous souhaitons insérer les informations d’un nouvel fournisseur
disposant des informations suivantes (F4, Alyani Sami, Gabès), nous écrivons:
INSERT INTO Frs VALUES (‘F4’, ‘Alyani Smi’, ‘Gabès’) ;

19/04/2019 17
III. Manipulation des données (LMD)
III.2. Modification des données
Syntaxe : Pour modifier la valeur d’un attribut relatif à un ou plusieurs tuples d’une table, nous procédons
comme suit :
UPDATE nom_table
SET attribut1 = valeur1, attribut2 = valeur2, …
[WHERE condition] ;
Exemple :
Étant donné la table Frs (num_f, nom, ville). Si le fournisseur Alyani Sami habite maintenant à Tunis, nous écrivons
dans ce cas :
UPDATE Frs
SET Ville=’TUNIS’ WHERE num_f=’F4’ ;

19/04/2019 18
III. Manipulation des données (LMD)
III.3. Suppression des données

Syntaxe : Il s’agit de supprimer un ou plusieurs tuples d’une table. Pour ce faire, nous écrivons:
DELETE FROM nom_table [WHERE condition] ;

Exemple : Si nous souhaitons supprimer le fournisseur de num_f = F4 de la table Frs, nous écrivons:

DELETE FROM Frs WHERE num_f=’F4’ ;

19/04/2019 19
IV. Interrogation de données
IV.1. Généralités
Il s’agit de chercher un ou plusieurs tuples de la base de données.

Syntaxe : L’ordre SELECT possède six clauses différentes, dont seules les deux premières sont obligatoires. 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…] ;
19/04/2019 20
IV. Interrogation de données
IV.2. Projection
Tous les attributs d’une table : SELECT * FROM nom_table ;
Remarque : Il est possible de mettre le mot clé facultatif DISTINCT après l’ordre SELECT. Il permet d’éliminer les
duplications : si, dans le résultat, plusieurs lignes sont identiques, une seule sera conservée.
Exemple : Liste de tous les fournisseurs
SELECT * FROM Frs ;
Quelques colonnes : SELECT col1, col2, …
FROM nom_table ;
Exemple : Liste des noms des Frs sans duplication
SELECT DISTINCT nom FROM Frs ;

19/04/2019 21
IV. Interrogation de données
IV.3. Restriction
Les restrictions se traduisent en SQL à l’aide du prédicat « WHERE » comme suit :
SELECT col1, col2, … 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,
pour les types caractères, la relation d’ordre est l’ordre lexicographique.

19/04/2019 22
IV. Interrogation de données
IV.3. Restriction
Nous résumons les principales formes de restrictions dans ce qui suit :

19/04/2019 23
IV. Interrogation de données
IV.3. Restriction

19/04/2019 24
IV. Interrogation de données
IV.3. Restriction

19/04/2019 25
IV. Interrogation de données
IV.3. Restriction

19/04/2019 26
IV. Interrogation de données
IV.3. Restriction

19/04/2019 27
IV. Interrogation de données
IV.3. Restriction
Remarque :
Nous pouvons trouver, de même, les négations des prédicats BETWEEN, NULL, LIKE, IN à savoir :
NOT BETWEEN, NOT NULL, NOT LIKE, NOT IN et NOT.
Le tableau suivant donne des principales fonctions prédéfinies :

19/04/2019 28
IV. Interrogation de données
IV.4. Tri

19/04/2019 29
IV. Interrogation de données
IV.5. Regroupement

19/04/2019 30
IV. Interrogation de données
IV.5. Regroupement

19/04/2019 31
IV. Interrogation de données
IV.5. Regroupement

19/04/2019 32
IV. Interrogation de données
IV.6. Opérateurs Ensemblistes

19/04/2019 33
IV. Interrogation de données
IV.6. Opérateurs Ensemblistes

19/04/2019 34
IV. Interrogation de données
IV.6. Opérateurs Ensemblistes

19/04/2019 35
IV. Interrogation de données
IV.7. Jointure

19/04/2019 36
IV. Interrogation de données
IV.7. Jointure

19/04/2019 37
IV. Interrogation de données
IV.8. Requêtes Imbriquées
Les requêtes imbriquées facilitent la construction des requêtes. Nous pouvons employer des requêtes imbriquées
pour joindre deux requêtes.
La construction de la commande SELECT supérieure dépend du nombre de valeurs renvoyées par la requête
imbriquée.

Les nums des Frs ayant la même ville que celle du client numéro ‘C2’

19/04/2019 38
IV. Interrogation de données
IV.8. Requêtes Imbriquées
fournit

fournit

fournit

19/04/2019 39
IV. Interrogation de données
IV.8. Requêtes Imbriquées

19/04/2019 40
IV. Interrogation de données
IV.9. Fonctions de regroupements
Regroupements :
 Les colonnes du SELECT doivent toutes apparaître dans le GROUP BY.
 Les noms de colonnes dans le HAVING doivent aussi être dans le GROUP BY (ou être fonction d’agrégat).
 La clause GROUP BY va regrouper les lignes qui sont identiques sur les colonnes mentionnées dans le GROUP BY.

19/04/2019 41
IV. Interrogation de données
IV.9. Fonctions de regroupements

19/04/2019 42
IV. Interrogation de données
IV.9. Fonctions de regroupements

19/04/2019 43
IV. Interrogation de données
IV.9. Fonctions de regroupements
Différence entre where et having :
 WHERE sélectionne les lignes de la requête avant de faire les groupes. Il agit donc avant les regroupements.
 HAVING sélectionne les groupes une fois qu’ils sont constitués. Il agit donc après les regroupements.

19/04/2019 44
Merci..

Dr. Aymen LOUATI


Aymen.louati@live.fr

2018-2019

Vous aimerez peut-être aussi