2. 2014-20152
Pour faire des interrogations sur les données de ma base :
• QBE (Query By Exemple)
• SQL (Structured Query Langage),
• ...
SQL : standard de fait (norme ANSI) il permet :
- la création, interrogation et manipulation des données d'une base
- déclarer les relations, créer les occurrences
- faire toute opération définie par l'algèbre relationnelle.
SELECT liste des colonnes
FROM nom des tables
WHERE conditions
Le Langage SQL
3. 2014-20153
Langage de Définition de Données CREATE, ALTER, DROP,
RENAME, TRUNCATE
Langage de Manipulation de Données INSERT, UPDATE, DELETE
Langage d'Interrogation des Données SELECT
Langage de Contrôle des Données GRANT, DENY, REVOKE
Le Langage SQL
Quatre grandes familles de commandes
4. 2014-20154
LE LANGAGE SQL : Définition des données
1 – Création de table: CREATE TABLE
2 – Modification de la table : ALTER TABLE
5. Modélisation à plusieurs niveaux
5
Réel
Modèle
conceptuel
Indépendant du
modèle de
données
Indépendant du
SGBD
Modèle
logique
Dépendant du
modèle de
données
Indépendant du
SGBD
Codasyl Relationnel Objet XML
Modèle
Physique
Dépendant du
modèle de
données
Dépendant du
SGBD
Oracle MySQL MS.ACESS SQL
SERVER
Médecin effectue Visite
16. Création de tables
CREATE TABLE Notes(
CodeNt VARCHAR(10) PRIMARY KEY
NoteNt NUMERIC,
CodeEp VARCHAR(10) ,
CodeEt VARCHAR(10),
Etudiants(CodeEt));
ALTER TABLE Etudiants ADD CONSTRAINT PK_CodeNt
PRIMARY KEY(CodeNt);
ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEp
CodeEp FOREIGN KEY REFERENCES Epreuves(CodeEp);
ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEt
CodeEp FOREIGN KEY REFERENCES Etudiants(CodeEt);2014-201516
17. 2014-201517
LE LANGAGE SQL : modification des données
1 – Insertion dans la base : Insert
2 – Suppression dans la base : Delete
3 – Modification dans la base : Update
18. 2014-201518
INSERT INTO Agent (IdAgent, Anom, Aprenom) VALUES (25236, 'Dalton', 'Joe');
• Pour insérer une ligne dans une table on utilise la commande
SQL INSERT
Le Langage SQL : Mise-à-jour des données
DELETE FROM Agent WHERE IdAgent = 25236 ;
• Pour supprimer des données dans une table on utilise la commande
SQL DELETE
UPDATE Agent SET ANom = ‘DURANT’
WHERE Salaire = 2500 ;
• Pour modifier des données dans une table on utilise la commande
SQL UPDATE
19. 2014-201519
LE LANGAGE SQL : Interrogation des données
1 – Interrogation de la base : LID
2 – Les jointures
3 – Les sous-interrogations et fonctions de groupe
20. 2014-201520
SELECT Sélection des colonnes à interroger.
FROM Choix des tables à partir desquelles on fait la sélection.
WHERE Sélection des lignes (application d'un filtre).
Le Langage SQL : Interrogation des données
21. 2014-201521
Sélectionner des colonnes spécifiques
• Choix des colonnes par la clause SELECT.
• Afficher toutes les colonnes d'une table.
SELECT *
FROM Animaux ;
SELECT ID, Espèce, Nom
FROM Animaux;
ID Espèce Nom
-- ------ ---
1 Chien Bidou
2 Chat Groucha
3 Yeti Georges
4 Elephant Dumbo
5 Girafe Flip Flap
23. 2014-201523
Fournisseur
IdFourS FNom FAdresse FType
Commande
IdCom Agent_Id FourT_Id FourS_Id DateC DateL Prix Quantite
Service
IdService SNom Collect_Id
Agents
IdAgent ANom APrenom DateE Fonction Responsable Salaire
Service_Id
Collectivité
IdCollect CDesignation
Fourniture
IdFourT FDesignation Quantite_Stock
Commission
Autre exemple de BD
24. 2014-201524
Expressions Arithmétiques
• Créer des expressions sur des données de type NUMBER ou DATE avec : + - * /
SELECT ANom, Salaire*12
FROM Agent ; Remarque : la colonne salaire*12
existe uniquement à l’affichage.
SELECT ANom, Salaire*12 AS ‘Salaire Annuel’
FROM Agent ;
• Alias sur colonne : AS
• La clause ORDER BY permet de trier les lignes : ASC DESC
SELECT ANom, Fonction, Salaire
FROM Agent
ORDER BY Salaire DESC;
25. 2014-201525
Il est possible de limiter le nombre de lignes rapportées en utilisant la clause WHERE :
• permet d'exprimer une condition.
SELECT ANom, Fonction, Salaire
FROM Agent
WHERE Service_Id = 10;
Sélection des Lignes
SELECT ANom, Fonction, Salaire
FROM Agent
WHERE ANom = 'Dupont'
AND APrenom LIKE '_ea%';
chaîne de caractères• permet de faire des comparaisons
Opérateurs de comparaison logiques . = > >= < <= != <>
Opérateurs de comparaison . BETWEEN, AND, IN, LIKE, IS NULL
Opérateurs logiques . AND, OR, NOT
26. 2014-201526
SELECT ANom, APrenom, Fonction, Salaire
FROM Agent
WHERE DateE BETWEEN #08-AOU-93#
AND #08- AOU-99#;
Opérateurs de comparaison
• On utilise l'opérateur BETWEEN pour tester l'appartenance à un intervalle.
SELECT IdService, SNom, Collect_Id
FROM Service
WHERE Collect_Id IN (38,42,69,01);
• On utilise l'opérateur IN pour tester l'appartenance à une liste de valeurs.
format des dates par défaut
27. 2014-201527
SELECT UPPER(ANom), CONCAT(ANom, APrenom), Salaire
FROM Agent
WHERE LOWER(Fonction) = ‘directeur ’;
Fonctions Mono-Ligne
• LOWER convertit en minuscule
• UPPER convertit en majuscule
• INITCAP convertit l’initiale en capitale
• CONCAT concatène des valeurs
• SUBSTR retourne une sous-chaîne
• LENGTH retourne un nombre de caractères
• ROUND(col,n) arrondit une valeur à n décimales spécif.
• TRUNC (col,n) tronque une valeur à n décimales spécif.
• MOD(m,n) retourne le reste de la division de m par n
28. 2015-201628
SELECT *
FROM Notes, Etudiants
Les jointures
WHERE
CodeEt=CodeEt
WHERE
Notes.CodeEt=Etudiants.CodeEt
FROM Notes N, Etudiants E
WHERE
N.CodeEt=E.CodeEt
SELECT N.CodeNt, N.NoteNt, E.NomEt, E.PrenomEt
FROM Notes N, Etudiants E
WHERE
N.CodeEt=E.CodeEt
AND
N.CodeNt=‘N0045’
29. 2014-201529
• Une jointure est utilisée pour rechercher les données dans plusieurs
tables.
• Les lignes sont reliées grâce aux valeurs communes contenues dans
les clés primaires et étrangères.
• La condition de jointure s’exprime dans le WHERE.
Les jointures
SELECT Ag.ANom , Ag.Service_Id ,
Se.IdService
FROM Agent Ag, Service Se
WHERE Ag.Service_Id = Se.IdService ;
30. 2014-201530
Les Sous-Interrogations
• Il est possible d'imbriquer une, ou plusieurs, interrogation (SELECT) dans une autre.
• On parle alors de sous-interrogation.
• Elle est exécutée avant la requête principale ; son résultat est utilisé par la requête
principale.
• Elle permet de rechercher des données basées sur un critère inconnu.
SELECT ANom, Fonction
FROM Agent
WHERE Service_Id = ( SELECT Service_Id
FROM Agent
WHERE ANom = 'Dupont' ) ;
31. 2014-201531
SELECT ANom, Salaire, Service_Id
FROM Agent
WHERE Salaire = ( SELECT MIN (Salaire)
FROM Agent );
•MIN, MAX,AVG,SUM,COUNT
•Si une sous-interrogation retourne plus d'une ligne
SELECT ANom, Salaire, Service_Id
FROM Agent
WHERE Salaire = ( SELECT MIN (Salaire)
FROM Agent
GROUP BY Service_Id );
Il faut remplacer = par IN (opérateur multi-lignes).
Réponses Multi-Lignes (1/2)
32. 2014-201532
Réponses Multi-Lignes (2/2)
• Autre exemple
SELECT Service_Id, AVG(Salaire)
FROM Agent
GROUP BY Service_Id
HAVING AVG(Salaire) > ( SELECT AVG(Salaire)
FROM Agent
WHERE Service_Id = 10 );
Salaire moyen par service, dont le salaire moyen est
supérieur à celui du service 10.
35. Le nom , prénom et note DS de
tous les étudiants
2014-201535
1
SELECT NomEt , PrenomEt, NoteNt as Notes_DS
FROM Etudiants E , Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp=‘DS’;
36. Le nom , prénom et note DS de
tous les étudiants ayant une note
entre 8 et 12
2014-201536
2
SELECT NomEt , PrenomEt, NoteNt as Notes_DS
FROM Etudiants E , Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp=‘DS’
AND NoteNt BETWEEN 8 AND 12;
37. Le nombre des étudiants ayant une
note entre 8 et 12 en DS
2014-201537
3
SELECT Count(*)
FROM Etudiants E , Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp=‘DS’
AND NoteNt BETWEEN 8 AND 12;
38. Max et Min des notes de DS
2014-201538
4
SELECT Max(NoteNt),Min(NoteNt)
FROM Notes
WHERE CodeEp=‘DS’
39. Le nom , prénom et note DS de
tous les étudiants ayant une note
supérieure à la moyenne des DS
2014-201539
5
SELECT NomEt , PrenomEt, NoteNt as Notes_DS
FROM Etudiants E , Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp='DS'
AND NoteNt > SELECT AVG(NoteNT)
FROM Notes
WHERE CodeEp= 'DS'
Calcul de la moyenne des notes DS
40. Le nom , prénom et Examen triés
de la note la plus petite à la plus
grande
2014-201540
6
SELECT NomEt , PrenomEt, NoteNt as Notes_Examen
FROM Etudiants E , Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp='EX‘
AND NoteNt IS NOT NULL
ORDER BY NoteNt ASC ;
41. Le nom , prénom des étudiants
n’ayant pas passé l’examen
2014-201541
7
SELECT NomEt , PrenomEt
FROM Etudiants E , Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp='EX'
AND NoteNt IS NULL
42. Le maximum en DS , EX et NP
2014-201542
8
SELECT CodeEp,NomEp, Max(NoteNt) AS max_Note
FROM Notes
GROUP BY CodeEp
43. Le maximum en Devoir Surveillé ,
Examen et Présentiel
2014-201543
9
SELECT NomEp, Max(NoteNt) AS max_Note
FROM Notes N, Epreuves E
WHERE N.CodeEP= E.CodeEp
GROUP BY NomEp
44. Le nom et Prénom de l’étudiant
ayant la note de DS la plus élevée
SELECT NomEt, PrenomET , NoteNt
FROM Etudiants E, Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp='DS‘
AND NoteNt =
2014-201544
10
SELECT MAX(NoteNT)
FROM Notes
WHERE CodeEp= 'DS'
Trouver le max note DS
45. Le nom , prénom et moyenne
générale de la matière
2014-201545
11
SELECT NomEt, PrenomEt, SUM(NoteNt*CoefEp )
FROM Epreuves Ep, Notes N , Etudiants Et
WHERE Et.CodeEt = N.CodeET
AND N.CodeEp=Ep.CodeEp
GROUP BY NomEt , PrenomEt
46. Le nom , prénom et moyenne
générale triés par Moy Générale
2014-201546
12
SELECT NomEt, PrenomEt, SUM(NoteNt*CoefEp )
FROM Epreuves Ep, Notes N , Etudiants Et
WHERE Et.CodeEt = N.CodeET
AND N.CodeEp=Ep.CodeEp
GROUP BY NomEt , PrenomEt
ORDER BY SUM(NoteNt*CoefEp ) DESC
47. Le nom , prénom et moyenne
générale triés (seule moy>=10)
*HAVING n’est utilisée qu’avec GROUP BY quand il s’agit de
filtrer selon l’une des fonctions de groupement
2014-201547
13
SELECT NomEt, PrenomEt, SUM(NoteNt*CoefEp )
FROM Epreuves Ep, Notes N , Etudiants Et
WHERE Et.CodeEt = N.CodeET
AND N.CodeEp=Ep.CodeEp
GROUP BY NomEt , PrenomEt
HAVING SUM(NoteNt*CoefEp ) >=10
ORDER BY SUM(NoteNt*CoefEp ) DESC
48. Le nom et prénom de la fille ayant
la plus grande note de NP
2014-201548
14
SELECT NomEt, PrenomET , NoteNt
FROM Etudiants E, Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp=‘NP‘
AND SexeEt='F'
AND NoteNt = SELECT MAX(NoteNT)
FROM Notes N, Etudiants E
Where N.CodeEt=E.CodeEt
AND SexeEt= 'F'
Trouver La note TP la plus
élevée obtenue par une fille
49. Le maximum et minimum de note
par Ville
2014-201549
15
SELECT VilleEt, MAX(NoteNt) , MIN(NoteNt)
FROM Etudiants E, Notes N
WHERE E.CodeEt = N.CodeEt
GROUP BY (VilleEt)
50. La note d’examen maximale par
ville et par sexe
2014-201550
16
SELECT VilleEt, MAX(NoteNt)
FROM Etudiants E, Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp = 'EX'
GROUP BY VilleEtol , SexeEt;
51. La note d’examen maximale par
ville et par sexe dépassant 15
2014-201551
17
SELECT VilleEt, MAX(NoteNt)
FROM Etudiants E, Notes N
WHERE E.CodeEt = N.CodeEt
AND CodeEp = 'EX'
GROUP BY VilleEt , SexeEt
HAVING MAX(NoteNt)>15 ;