Institut Supérieur des Sciences Appliquées et de Technologie de Sousse
Ingénierie des Bases de Données
Licence en Sciences Informatique
Imen MOALLA
[email protected] Année universitaire : 2020-2021
Le Langage SQL
( Structured Query Language)
2
Présentation de SQL
SQL est un langage déclaratif destiné à la
manipulation de bases de données au sein des
SGBDR qui répandant à la fois aux problématiques
de création des objets de base de données
(modèle), de manipulation des données, de gestion
de la sécurité, et de traitements locaux de données
Il est utilisé par les principaux SGBDR du marché :
Oracle, SQL Server, MySQL, Access, DB2,…
3
Présentation de SQL
Langage de définition de données (schéma, LDD)
Création de table (relation): CREATE TABLE
Modification de table (relation): ALTER TABLE
Suppression de table (relation): DROP TABLE
Vues: CREATE VIEW
Langage de manipulation de données (schéma,
LMD)
Insertion de tuples: INSERT
Mise à jour des tuples : UPDATE
Suppression de tuples : DELETE
4
Présentation de SQL
Langage de contrôle de données (LCD)
Pour gérer les droits sur les objets de la base (création
des utilisateurs et affectation de leurs droits)
GRANT et REVOKE
Langage de contrôle de données (TCL)
Pour la gestion des transactions (validation ou annulation
de modifications de données dans la BD)
BEGIN et END TRANSACTION
COMMIT et ROLLBACK
5
Création des tables
La création d’une table consiste à définir son nom,
les colonnes qui la composent et leurs type
Syntaxe
Pour créer une table, on fait recours à l’instruction
suivante :
CREATE TABLE nom_table
( Nom_attribut 1 type1,
Nom_attribut 2 type2,
……,
PRIMARY KEY (nom_attribut_clé),
FOREIGN KEY (nom_attribut_clé_étrangère)
REFERENCES nom_table( nom_attribut_clé_étrangère ) );
6
Création des tables
Type des données
- NUMBER( N ) : Entier à N chiffres
- NUMBER( N , M ) : Réel à N chiffres au total, M après la
virgule.
- DATE : Date complète (date et/ou heure)
- VARCHAR( N ), VARCHAR2( N ) : chaîne de N caractères
(longueur variable).
- CHAR( N ) : Chaîne de N caractères (longueur fixe).
7
Contraintes d'intégrité
Une contrainte d'intégrité est une règle qui définit la
cohérence d'une donnée ou d'un ensemble de données
de la BD
Contrainte sur une colonne (contrainte-col)
NULL/NOTNULL : Interdit une colonne de contenir une valeur nulle
UNIQUE : Interdit deux tuples de la relation aient la même valeur pour
l'attribut.
PRIMARY KEY: définit l'attribut comme la clé primaire
8
Contraintes d'intégrité
Contrainte sur une table (contrainte-table)
UNIQUE (liste d'attributs): Interdit que deux tuples de la
relation aient les mêmes valeurs pour l'ensemble des attributs
de la liste.
PRIMARY KEY(liste d'attributs): Définit les attributs de la liste
comme la clé primaire
FOREIGN KEY (liste d'attibuts) REFERENCES nom-table
[(nomes-cols)]: Contrôle l'intégrité référentielle entre les
attributs de la liste et la table et ses colonnes spécifiées
9
Exemple de création de tables
Etudiant (NumEtud, NomEtud, PrenomEtud, #NumClass)
Classe (NumClass, NomClass)
CREATE TABLE CLASSE (
NUMCLASSE NUMBER(5),
NOMCLASSE VARCHAR2(10),
PRIMARY KEY(NUMCLASSE) ) ;
CREATE TABLE ETUDIANT (
NumEtud NUMBER(5) PRIMARY KEY,
NOM VARCHAR2(10),
PRENOM VARCHAR2(10),
NUMCLASSE VARCHAR2(10),
FOREIGN KEY(NUMCLASSE) REFERENCES CLASSE(NUMCLASSE) );
10
Suppression / Modification d’une table
Suppression des tables
Syntaxe
Pour supprimer le contenu d’une table ainsi que son schéma, on
utilise l’instruction qui suit :
DROP TABLE nom_table ;
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 ;
11
Suppression / Modification d’une table
Modification des tables
Il existe plusieurs modifications que l’on peut effectuer sur une table
donnée:
Ajout d’attributs
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 (attribut type);
Exemple
Ajouter le champ Numéro téléphone à la table Etudiant revient à
écrire :
ALTER TABLE Etudiant
ADD (Num_tel varchar(10));
12
Suppression / Modification d’une table
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 Num_tel de la table
Etudiant nécessite le recours à l’instruction :
ALTER TABLE Etudiant
MODIFY (Num_tel varchar(8));
13
Manipulation de données
Ajout de données
Pour ajouter une ligne (tuple) dans une table, on procède
comme suit :
INSERT INTO nom_table
VALUES ( valeur_attribut1, valeur_attribut2, … ) ;
Exemple
Etant donné la table Etudiant (NumEtud, 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) ;
14
Manipulation de données
Modification de données
Pour modifier la valeur d’un attribut relatif à un ou plusieurs
tuples d’une table, on procède comme suit :
UPDATE nom_table
SET attribut1 = valeur1, attribut2 = valeur2
[WHERE condition];
Exemple
Modifier la ville de l’étudiant Salah Ben Salah qui habite
maintenant à Tunis, on écrit dans ce cas :
UPDATE ETUDIANT
SET VILLE=TUNIS
WHERE NumEtud=1234;
15
Manipulation de données
Suppression de données
Il s’agit de supprimer un ou plusieurs tuples d’une table.
Pour ce faire, on écrit :
DELETE FROM nom_table
[WHERE condition];
Exemple
Supprimer l’étudiant de NumEtd 1234 de la table
Etudiant, on écrit :
DELETE FROM ETUDIANT
WHERE NumEtd =1234 ;
16
Interrogation de données
Généralités
Il s’agit de chercher un ou plusieurs tuples de la base de données.
Syntaxe :
Ai un nom d’attribut (de colonne)
SELECT A1,…., A2 Rj un nom de relation (de table)
FROM définit à partir de quelles
FROM R1,……., Rm
tables le résultat est calculé
[WHERE [condition] WHERE définit les prédicats de
sélection du résultat
Group by <expression>; Group by regroupe les lignes pour les
valeurs égales dans les colonnes
Having <expression>; mentionnées
Having sélectionne les groupes de
Order by [ DESC/ASC];] lignes satisfaisant la condition
Order by précise si le tri se fait de
manière croissante (par défaut) ou
décroissante 17
Interrogation de données
Projection
Tous les attributs d’une table :
SELECT *
FROM nom_table;
Exemple
Afficher la liste de tous les étudiants
SELECT * FROM ETUDIANT;
Quelques attributs :
SELECT attribut1, attribut2,…
FROM nom_table;
Exemple
Afficher la liste des noms des étudiants
SELECT NOM
FROM ETUDIANT;
18
Interrogation de données
Restriction
Les restrictions se traduisent en SQL à l’aide du prédicat « WHERE »
comme suit :
SELECT attribut1, attribut2, FROM nom_table
WHERE conditions;
Une conditions simple est la comparaison entre deux
expressions ou plus au moyen d’un opérateur logique (=, !=, <,
<=, >, >=)
Exemple 1
Liste des étudiants qui s’appellent Ali
SELECT * FROM ETUDIANT
WHERE PRENOM = ‘ALI’;
19
Interrogation de données
Exemple 3
Liste des étudiants qui ne s’appellent pas Ali
SELECT * FROM ETUDIANT
WHERE PRENOM != ‘ALI’;
Exemple 4
Liste des étudiants ayant les NumEtd inférieurs à 100
SELECT * FROM ETUDIANT
WHERE NumEtd < 100;
Exemple 5
Liste des étudiants ayant les NumEtd compris entre 100 et 200
SELECT * FROM ETUDIANT
WHERE NumEtd BETWEEN 100 AND 200 ;
20
Interrogation de données
Jointures
La jointure permet de combiner deux ou plusieurs tables afin d’en
extraire des données.
La jointure est réalisé à l’aide d’une colonne commune aux tables
qui habituellement est la clé primaire
Lorsqu’une colonne projetée se retrouve dans les deux tables à
joindre, le nom de la colonne projetée doit être précédé du nom
de la table d’où les données seront extraites
Lorsqu’une colonne projetée se retrouve dans une seule parmi les
tables à joindre, il n’est pas nécessaire d’indiquer le nom de la
table
21
Interrogation de données
Exemple de requête de jointure simple:
TableA (idTableA,colonne1,colonne2)
TableB (idTableB, colonne1, colonne2, #idtableA)
SELECT TableA.colonne1, colonne 2
FROM TableA, TableB
WHERE TableA.idTableA= TableB.idTableA
Les alias de table servent à nommer temporairement les tables
de jointure pour écourter l’instruction SQL et la rendre plus lisible.
SELECT TA.colonne1, colonne2, colonne3
FROM TableA TA, TableB TB
WHERE TA.idTableA= TB.idTableA
22
Interrogation de données
Exemple de jointure sur la même table :
Lister des couples de films de la même année.
SELECT f1.Title, f2.Title
FROM Film f1, Film f2
WHERE f1.Title <> f2.Title AND f1.Year = f2.Year
23
Interrogation de données
Exemple de jointure entre deux tables :
Lister les salles de cinéma affichant des films de
2005
SELECT t.TheaterName
FROM Film f, Theater t
WHERE f.Title = t.Title
AND f.Director = t.Director
AND f1.Year = 2005; 24
Interrogation de données
Exemple de jointure entre deux tables:
STUDENTS [StudNb, Name, Address]
INSCRIPTION [CourseCode, Year, Time, #StudNb]
Lister les noms des étudiants inscrits dans le cours
BD1-2019
SELECT S.Name
FROM Students S, INSCRIPTION I
WHERE (S.StudNb=I.StudNB) and (I.CourseCode = ’BD1-
2019’) ;
25
Fonctions d’aggrégation
Une fonction d’aggregation calcule une valeur à partir d’une
liste de valeurs dans une colonne.
SQL permet AUSSI de grouper des tuples d’une relation selon
certains critères, comme la valeur d’une autre colonne.
Ces opérateurs sont appliqués dans une clause SELECT
SUM: somme des valeurs des tuples sélectionnées
AVG: moyenne des valeurs
MIN: valeur Minimum
MAX: valeur Maximum
COUNT: nombre de tuples sélectionnées
26
Fonctions d’aggrégation
Exemple:
STUDENTS [Number, Name, Address, Age]
INSCRIPTION [#StudNb, #CourseCode, Year, Time]
COURSE [CourseCode, CourseT itle, CreditNb, HoursNb]
Trouver la moyenne d’age des étudiants habitant Blois
SELECT AVG (Age) FROM STUDENTS
WHERE Address = ’Blois’ ;
Combien d’étudiants avons nous?
SELECT count(*)
FROM STUDENTS ;
27
Fonctions d’aggrégation
Exemple:
STUDENTS [Number, Name, Address, Age]
INSCRIPTION [StudNb, CourseCode, Year, Time]
COURSE [CourseCode, CourseT itle, CreditNb, HoursNb]
Donner le nom et l'Age de l’étudiant le plus âgé
SELECT S.Name, S.Age
FROM STUDENTS S
WHERE S.Age = (SELECT MAX (S2.age) FROM STUDENTS S2);
28