RamziTrabelsi
1
Chapitre III : Le langage de
commande SQL
2014-2015
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
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
2014-20154
LE LANGAGE SQL : Définition des données
1 – Création de table: CREATE TABLE
2 – Modification de la table : ALTER TABLE
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
2014-20156
Epreuves
CodeEp
NomEp
CoefEp
Etudiants
CodeEt
NomEt
PrenomEt
VilleEt
…
Notes
CodeNt
NoteNt
Avoir
Note
appartenir
1,11,N
1,1
0,N
MCD
2014-20157
Epreuves
CodeEp
NomEp
CoefEp
Etudiants
CodeEt
NomEt
PrenomEt
VilleEt
…
Notes
CodeNt
NoteNt
#CodeEp
#CodeEt
1,1
0,N
MLD
Etude de cas
2014-20158
MPD
Création de table
CREATE TABLE nom_de_la_table (    
colonne1 type_donnees [Contrainte],    
colonne2 type_donnees,    
colonne3 type_donnees,    
colonne4 type_donnees )
Type_données : VARCHAR(taille) INTEGER
NUMERIC (ou DECIMAL ou DEC)  DATE
Contrainte : NOT NULL , PRIMARY KEY, FORIGN
KEY, UNIQUE
2014-20159
Création de tables
CREATE TABLE Etudiants(
CodeEt VARCHAR(50) PRIMARY KEY,
NomEt VARCHAR(50) NOT NULL,
PrenomEt VARCHAR(50) NOT NULL,
VilleEt VARCHAR(50) );
2014-201510
Création de tables
CREATE TABLE Epreuves (
CodeEp VARCHAR(10),
NomEp VARCHAR(50) UNIQUE,
CoefEp NUMERIC NOT NULL);
ALTER TABLE Epreuves ADD CONSTRAINT
PK_CodeEp PRIMARY KEY(CodeEp) ;
2014-201511
Création de tables
CREATE TABLE Etudiants(
CodeEt VARCHAR(10) PRIMARY KEY,
NomEp VARCHAR(50) NOT NULL,
NomEt VARCHAR(50) NOT NULL,
VilleEt VARCHAR(50));
2014-201512
Création de tables
CREATE TABLE Etudiants(
CodeEt VARCHAR(10),
NomEp VARCHAR(50) NOT NULL,
NomEt VARCHAR(50) NOT NULL,
VilleEt VARCHAR(50));
ALTER TABLE Etudiants ADD CONSTRAINT
PK_CodeEt PRIMARY KEY(CodeEp) ;
2014-201513
Création de tables
CREATE TABLE Notes(
CodeNt VARCHAR(10) PRIMARY KEY
NoteNt NUMERIC,
CodeEp VARCHAR(10) FOREIGN KEY REFERENCES
Epreuves(CodeEp),
CodeEt VARCHAR(10) FOREIGN KEY REFERENCES
Etudiants(CodeEt));
2014-201514
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 FK_CodeEp
CodeEp FOREIGN KEY REFERENCES Epreuves(CodeEp);
ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEt
CodeEp FOREIGN KEY REFERENCES Etudiants(CodeEt);
2014-201515
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
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
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
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
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
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
2014-201522
Agent
IdAgent
...
Fournisseur
IdFourS
...
Fourniture
IdFourT
...
Collectivite
IdCollect
...
Service
IdService
...
Commander
IdCom
Dépendre Rattacher
1,1
1,n1,1
1,n 0,n
1,n
0,n
Autre exemple de BD
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
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;
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
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
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
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’
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 ;
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' ) ;
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)
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.
Syntaxe Select
SELECT codeEp,AVG(NoteNt)
FROM Table1, Table2
WHERE Joiture
AND Autres_f
Group By (codeEp)
HAVING AVG(NoteNt) >12
ORDER BY AVG(NoteNt) DESC
2014-201533
Groupement
2014-201534
SELECT Categorie,SUM(Qte) as S_Qte
FROM Produit
WHERE Couleur=‘Rouge’
GROUP BY Categorie
HAVING SUM(Qte)>100
ORDER BY SUM(Qte) DESC
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’;
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;
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;
Max et Min des notes de DS
2014-201538
4
SELECT Max(NoteNt),Min(NoteNt)
FROM Notes
WHERE CodeEp=‘DS’
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
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 ;
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
Le maximum en DS , EX et NP
2014-201542
8
SELECT CodeEp,NomEp, Max(NoteNt) AS max_Note
FROM Notes
GROUP BY CodeEp
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
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
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
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
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
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
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)
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;
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 ;
2014-201552
Fournisseur
CodeF
NomF
VilleF
Boutique
CodeB
NomB
VilleB
Piece
CodeP
NomP
CouleurP
PoidsP
NbrP
Fournit
Qte
Vend
Qte
1,N0,N
1,N
1,N
2014-201553
Boutique
CodeB
NomB
VilleB
Piece
CodeP
NomPc
CouleurP
PoidsP
Note
#CodeP
#CodeB
QteVend
2014-201554
Fournisseur
CodeF
NomF
VilleF
Boutique
CodeB
NomB
VilleB
Piece
CodeP
NomP
CouleurP
PoidsP
Fournit
Qte
0,N 1,N
1,N
2014-201555
Fournisseur
CodeFr
NomFr
VilleFr
Boutique
CodeB
NomB
VilleB
Piece
CodeP
NomP
CouleurP
PoidsP
Fournit
#CodeP
#CodeF
#CodeB
QteFrn
2014-201556
CodeF NomF VilleF
F1 P.M.S Tunis
F2 S.T.M Tunis
F3 F.R.P Sousse
F4 M.T Sfax
F5 N.X Tunis
F6 K.L Sousse
CodeP NomP CouleurP PoidsP
Pc1 Papier Rouge 500
Pc2 Plateau Vert 30
Pc3 Rideau Vert 450
Pc3 Cadre Orange 250
Pc4 Verre Rouge 20
Pc5 Assiette Orange 40
CodeB NomB VilleB
B1 Promi Tunis
B2 Fonis Tunis
B3 Breco Sousse
B4 Bord Nabeul
B5 Halu Bizerte
B6 Bonpro Sfax
CodeF CodeP CodeB QteFrn
F1 Pc1 B1 200
F1 Pc2 B2 150
F2 Pc3 B1 600
F4 Pc1 B2 100
F1 Pc4 B1 300
F3 Pc6 B3 250

Chap 3 : structered query language

  • 1.
    RamziTrabelsi 1 Chapitre III :Le langage de commande SQL 2014-2015
  • 2.
    2014-20152 Pour faire desinterrogations 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éfinitionde 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 à plusieursniveaux 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
  • 6.
  • 7.
  • 8.
  • 9.
    Création de table CREATETABLE nom_de_la_table (     colonne1 type_donnees [Contrainte],     colonne2 type_donnees,     colonne3 type_donnees,     colonne4 type_donnees ) Type_données : VARCHAR(taille) INTEGER NUMERIC (ou DECIMAL ou DEC)  DATE Contrainte : NOT NULL , PRIMARY KEY, FORIGN KEY, UNIQUE 2014-20159
  • 10.
    Création de tables CREATETABLE Etudiants( CodeEt VARCHAR(50) PRIMARY KEY, NomEt VARCHAR(50) NOT NULL, PrenomEt VARCHAR(50) NOT NULL, VilleEt VARCHAR(50) ); 2014-201510
  • 11.
    Création de tables CREATETABLE Epreuves ( CodeEp VARCHAR(10), NomEp VARCHAR(50) UNIQUE, CoefEp NUMERIC NOT NULL); ALTER TABLE Epreuves ADD CONSTRAINT PK_CodeEp PRIMARY KEY(CodeEp) ; 2014-201511
  • 12.
    Création de tables CREATETABLE Etudiants( CodeEt VARCHAR(10) PRIMARY KEY, NomEp VARCHAR(50) NOT NULL, NomEt VARCHAR(50) NOT NULL, VilleEt VARCHAR(50)); 2014-201512
  • 13.
    Création de tables CREATETABLE Etudiants( CodeEt VARCHAR(10), NomEp VARCHAR(50) NOT NULL, NomEt VARCHAR(50) NOT NULL, VilleEt VARCHAR(50)); ALTER TABLE Etudiants ADD CONSTRAINT PK_CodeEt PRIMARY KEY(CodeEp) ; 2014-201513
  • 14.
    Création de tables CREATETABLE Notes( CodeNt VARCHAR(10) PRIMARY KEY NoteNt NUMERIC, CodeEp VARCHAR(10) FOREIGN KEY REFERENCES Epreuves(CodeEp), CodeEt VARCHAR(10) FOREIGN KEY REFERENCES Etudiants(CodeEt)); 2014-201514
  • 15.
    Création de tables CREATETABLE Notes( CodeNt VARCHAR(10) PRIMARY KEY NoteNt NUMERIC, CodeEp VARCHAR(10) , CodeEt VARCHAR(10), Etudiants(CodeEt)); 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-201515
  • 16.
    Création de tables CREATETABLE 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 descolonnes à 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 colonnesspé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
  • 22.
  • 23.
    2014-201523 Fournisseur IdFourS FNom FAdresseFType 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éerdes 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 possiblede 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 jointureest 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 • Ilest 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.
  • 33.
    Syntaxe Select SELECT codeEp,AVG(NoteNt) FROMTable1, Table2 WHERE Joiture AND Autres_f Group By (codeEp) HAVING AVG(NoteNt) >12 ORDER BY AVG(NoteNt) DESC 2014-201533
  • 34.
    Groupement 2014-201534 SELECT Categorie,SUM(Qte) asS_Qte FROM Produit WHERE Couleur=‘Rouge’ GROUP BY Categorie HAVING SUM(Qte)>100 ORDER BY SUM(Qte) DESC
  • 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 Mindes 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 enDS , EX et NP 2014-201542 8 SELECT CodeEp,NomEp, Max(NoteNt) AS max_Note FROM Notes GROUP BY CodeEp
  • 43.
    Le maximum enDevoir 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 etPré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 etpré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 etminimum 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’examenmaximale 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’examenmaximale 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 ;
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
    2014-201556 CodeF NomF VilleF F1P.M.S Tunis F2 S.T.M Tunis F3 F.R.P Sousse F4 M.T Sfax F5 N.X Tunis F6 K.L Sousse CodeP NomP CouleurP PoidsP Pc1 Papier Rouge 500 Pc2 Plateau Vert 30 Pc3 Rideau Vert 450 Pc3 Cadre Orange 250 Pc4 Verre Rouge 20 Pc5 Assiette Orange 40 CodeB NomB VilleB B1 Promi Tunis B2 Fonis Tunis B3 Breco Sousse B4 Bord Nabeul B5 Halu Bizerte B6 Bonpro Sfax CodeF CodeP CodeB QteFrn F1 Pc1 B1 200 F1 Pc2 B2 150 F2 Pc3 B1 600 F4 Pc1 B2 100 F1 Pc4 B1 300 F3 Pc6 B3 250