Chapitre 4 SQL Partie1
Chapitre 4 SQL Partie1
Chapitre 4 SQL Partie1
Chapitre 4 :
Le langage
SQL
I. INTRODUCTION 2
SQL est un acronyme pour “Structured Query Language” qui a été
conçu par IBM. C’est maintenant le langage le plus utilisé dans les
SGBD-R. Le langage SQL est un langage de définition (LDD) et de
manipulation (LMD) de bases de données relationneles,
SQL permet de :
définir les données (CREATE, ALTER, DROP)
interroger la base et formuler des requêtes (SELECT)
manipuler les données (INSERT, UPDATE, DELETE)
contrôler l’accès aux données (GRANT, REVOKE)
II. Le Language de 3
Manipulation des Données
A. langage de requête
SELECT [DISTINCT] nom-cols [AS
nom-cols]
FROM nom-tables
[ WHERE conditions]
[ GROUP BY nom-cols]
[ HAVING conditions ]
[ ORDER BY nom-cols [ASC|DESC] ]
1. Interrogation d’une 4
seule table
Soit le schéma relationnel suivant:
Employé (N_Emp, Nom, Prénom,
DateNaissance, Region, Salaire,
#N_Dept,#N_sup)
Département (N_Dept, NomD, #Directeur)
Projet (N_Projet ,NomP, Lieu, #N_Dept)
Travaille (#N_Emp, #N_Pro, Heures)
a. PROJECTION 5
SELECT Nom_Colonne
FROM Nom_Table
WHERE critère ;
Exemple :
Requête : La liste des employes habitant à
Dakar,
SQL : SELECT N_Emp
FROM Employe
WHERE Region=‘Dakar’;
c. Opérateurs de comparaison
8
=,>,<,>=,<=,<> (ou !=)
In et not in
AND , OR
Requête : quels sont les employés (N_Emp, Nom ,
prenom) qui travaillent au departement 12 qui
habitent thies, dakar ou St louis et qui ont un salaire
superieur à 300 000 ?
SQL :
SELECT N_Emp, Nom , prenom
FROM Employe
WHERE N_Dept=12 AND Salaire>300000 AND (
region=‘Dakar’ OR region=‘Thies’ OR region=‘St
louis’) ;
c. Opérateurs de comparaison
9
=,>,<,>=,<=,<> (ou !=)
In et not in
AND , OR
Requête : quels sont les employés (N_Emp, Nom ,
prenom) qui travaillent au departement 12 qui
habitent thies, dakar ou St louis et qui ont un salaire
superieur à 300 000 ?
SQL : OU
SELECT N_Emp, Nom , prenom
FROM Employe
WHERE N_dept= 12 AND Salaire>300000 AND Region
in (‘Dakar’,’Thies’,’St louis’) ;
c. Opérateurs de comparaison
10
LIKE : appartenance à une chaîne de caractères
‘_’ remplace n'importe quel caractère
‘%’ remplace n'importe quelle chaîne de caractères
Exemple 1:
Requête : Quels sont les noms de projet qui commencent par
Sen?
SQL :
SELECT NomP
FROM projet
WHERE NomP like ‘Sen%’;
Exemple 2:
Requête : Quels sont les noms de projet possédant un ‘a’ en
seconde position ?
SQL :
SELECT NomP
FROM projet
WHERE NomP like ‘_a%’;
c. Opérateurs de comparaison
11
BETWEEN : appartenance à un intervalle
Exemple :
Requête : Quels sont les salariés gagnant entre
200 000 et 500 000 ?
SQL : SELECT N_Emp,Nom,Prenom, Salaire
FROM Employe
WHERE Salaire BETWEEN 200000 AND
500000;
c. Opérateurs de comparaison
12
IS NULL et IS NOT NULL
Exemple :
Requête : quels sont les employés dont
la date de naissance n’a pas été
renseignée
SQL : SELECT N_Emp, Nom, Prenom
FROM Employe
WHERE Datenaiss IS NULL;
d. Tri des résultats 13
ORDER BY
SELECT attribut1, attribut2, ...
FROM Nom_table
ORDER BY attribut1 [ASC], attribut2 [DESC], ... ;
Exemple :
Requête : Les employes classés par departement
et du plus grand salaire au plus petit salaire
SQL : SELECT *
FROM Employe
ORDER BY N_dept ASC, Salaire DESC;
e. Nom de colonne 14
Rencontre (NomGagnant,Nomperdant
,LieuTournoi,Annee,Score)
Sponsor (NomSponsor,LieuTournoi,Annee,
Adresse,MtContribution)
Application 1 26
Exprimez sur cette base de données les requêtes suivantes :
Q1 : Nom et primes des joueurs sponsorisés par Orange entre 2004 et 2009
Q4 : Nom des joueurs ayant gagné une prime supérieur à 500000 en 2009
unesous-interrogation qui ne
ramène aucune ligne se
termine avec un code d'erreur.
unesous-interrogation
ramenant plusieurs lignes
provoquera aussi, dans ce cas,
une erreur
3. requêtes imbriquées 31
ensemblistes
Dans une requête utilisant des opérateurs ensemblistes :
Tous les SELECT doivent avoir le même nombre de colonnes
sélectionnées, et leur types doivent être un à un identiques.
Les doubles sont éliminés (DISTINCT implicite).
Les noms de colonnes sont ceux du premier SELECT.
On peut combiner le résultat de plus de deux SELECT au
moyen des opérateurs UNION, INTERSECT, MINUS.
SELECT ... UNION SELECT ... MINUS SELECT ...
Expresion évaluée de gauche à droite. Modification de l'ordre
d'évaluation par des parenthèses.
SELECT ...
UNION (SELECT ...
MINUS
SELECT ...)
Les opérateurs 37
ensemblistes
Exemple : Lister tous les enseignants
SELECT Nom, Prénom
FROM MdC
UNION
SELECT Nom, Prénom
FROM Professeur ;
Coment interpréter une 38
requête complexe
multitable
on considère les?
tables spécifiées dans la clause FROM
on effectue la jointure de ces tables selon le critère de
jointure de la clause WHERE
on sélectionne les lignes de la jointure sur la base des
autres conditions de la clause WHERE
on classe ces lignes en groupes comme spécifié dans la
clause GROUP BY
on ne retient que les groupes qui vérifient la clause
HAVING
de chacun de ces groupes, on extrait les valeurs
demandées dans la clause SELECT
les valeurs demandées sont ordonnées selon la clause
ORDER BY éventuelle.
Coment interpréter une 39
requête complexe
multitable
Exemple :
?
SELECT N°Client, COUNT(*), SUM(QtéCom)
FROM Commande C, LigneCom L
WHERE C.N°Com = L.N°Com
AND N°Pro = ‘PA 60’
GROUP BY N°Client
HAVING COUNT(*) >= 2
ORDER BY N°Client
III.Le Language de 40
Manipulation des Données :
1. la modification de données
A. Insertion de nouveaux n-uplets
Syntaxe:
INSERT INTO nom_table(nom_col1, nom_col2,...)
VALUES (val1, val2...)
Exemple :
INSERT INTO Emp (N_emp, Nom, Prénom, date_naiss,region,
salaire,N_dept,Chef)
VALUES(96035, ‘Diop’, ‘Khadim’, 1990-01-12, “Fatick”, 100000, 12,
90053);
III.Le Language de 41
Manipulation des Données :
1. la modification de données
B. Insertion de nouveaux n-uplets avec select
Il est possible d'insérer dans une table des lignes
provenant d'une autre table. La syntaxe est la suivante :
INSERT INTO nom_table(nom_col1, nom_col2, ...)
SELECT ...
Exemple : Insérer dans la table Bonus les noms, prenoms
et salaires des directeurs.
INSERT INTO bonus
SELECT nom,prenom salaire FROM emp WHERE fonction =
'directeur';
III. Le Language de
42
Manipulation des Données :
1. la modification de données
C. Modification de lignes
La commande UPDATE permet de modifier les valeurs d'une ou
plusieurs colonnes, dans une ou plusieurs lignes existantes d'une
table. La syntaxe est la suivante :
UPDATE nom_table
SET nom_col1 = {expression1 | ( SELECT ...) },
nom_col2 = {expression2 | ( SELECT ...) }
[WHERE critère];
Exemple : Augmenter de 10% les salaires des ingénieurs.
UPDATE emp
SET salaire = salaire * 1.1
WHERE fonction = 'ingenieur' ;
III. Le Language de 43
Manipulation des Données :
1. la modification de données
D. Suppression de lignes
La commande DELETE permet de supprimer des lignes d'une
table.
Syntaxe :
DELETE FROM nom_table
WHERE critère;
Toutes les lignes pour lesquelles le critère est évalué à vrai
sont supprimées. En l'absence de clause WHERE, toutes
les lignes de la table sont supprimées.
Exemple :
DELETE FROM emp
WHERE fonction = ‘retraité‘;
VI. Le language de 44
définition de données
1. Création d'une table
CREATE TABLE nom_table
(nom_col1 TYPE1,[NOTNULL/
PRIMARY KEY/FOREIGN KEY]
nom_col2 TYPE2,[.../.../...]
...);
Types acceptés :
CHAR(longueur), VARCHAR(longueur)
SMALLINT, INTEGER, DECIMAL(m,n), FLOAT, SERIAL(n)
DATE
VI. Le language de
45
définition de données
1. Création d'une table
définition de données
2. Suppresion et modification d'une table
DROP TABLE nom_table ;
Exemple : DROP TABLE Etudiant ;
Modification d'une table
Ajoût d'une ou plusieurs colonnes :
ALTER TABLE nom_table
ADD(nom_col1 TYPE1, nom_col2 TYPE2, ...);
option : [BEFORE nom_col_before]
Exemple : On aimerait connaître le téléphone des étudiants
ALTER TABLE Etudiant
ADD(Téléphone DECIMAL(10,0)
BEFORE NDep);
VI. Le language de 47
définition de données
2. Suppresion et modification d'une table
Suppression d'une colonne :
ALTER TABLE nom_table
DROP nom_col;
Attention aux problèmes d'intégrité !
Modification d’une table :
ALTER TABLE nom_table
MODIFY(nom_col1 TYPE1,nom_col2 TYPE2,...);
Exemple : Un nom peut dépasser 20 caractères
ALTER TABLE Etudiant
MODIFY(Nom Char(25));
VI. Le language de 48
définition de données
2. Suppresion et modification d'une table
Changement de nom de tables ou de colonnes :
RENAME TABLE ancien_nom TO nouveau_nom ;
RENAME COLUMN nom_relation.ancien_nom_col TO
nouveau_nom_col ;
Exemple :
RENAME COLUMN Etudiant.DateNaissance
TO BirthDay;