Post on 07-Apr-2017
Ramzi Trabelsi
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 colonnesFROM nom des tablesWHERE 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
EpreuvesCodeEpNomEpCoefEp
EtudiantsCodeEtNomEtPrenomEtVilleEt…
NotesCodeNtNoteNtAvoir
Note
appartenir
1,11,N
1,1
0,NMCD
2014-20157
EpreuvesCodeEpNomEpCoefEp
EtudiantsCodeEtNomEtPrenomEtVilleEt…
NotesCodeNtNoteNt#CodeEp#CodeEt
1,1
0,NMLD
Etude de cas
2014-20158
MPD
Création de tableCREATE 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 tablesCREATE 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
AgentIdAgent
...
FournisseurIdFourS
...
FournitureIdFourT
...
CollectiviteIdCollect
...
ServiceIdService
...Commander
IdComDépendre Rattacher
1,1
1,n1,1
1,n 0,n1,n
0,n
Autre exemple de BD
2014-201523
FournisseurIdFourS FNom FAdresse FType
CommandeIdCom 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*12FROM 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, SalaireFROM AgentORDER 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, SalaireFROM AgentWHERE Service_Id = 10;
Sélection des Lignes
SELECT ANom, Fonction, SalaireFROM AgentWHERE 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, SalaireFROM AgentWHERE 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_IdFROM ServiceWHERE 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), SalaireFROM AgentWHERE 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=CodeEtWHERE Notes.CodeEt=Etudiants.CodeEt
FROM Notes N, Etudiants EWHERE N.CodeEt=E.CodeEt
SELECT N.CodeNt, N.NoteNt, E.NomEt, E.PrenomEtFROM Notes N, Etudiants EWHERE N.CodeEt=E.CodeEt ANDN.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.IdServiceFROM Agent Ag, Service SeWHERE 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, FonctionFROM AgentWHERE Service_Id = ( SELECT Service_Id
FROM Agent WHERE ANom = 'Dupont' ) ;
2014-201531
SELECT ANom, Salaire, Service_IdFROM AgentWHERE Salaire = ( SELECT MIN (Salaire)
FROM Agent );
•MIN, MAX,AVG,SUM,COUNT •Si une sous-interrogation retourne plus d'une ligne
SELECT ANom, Salaire, Service_IdFROM AgentWHERE 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 AgentGROUP 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 SelectSELECT codeEp,AVG(NoteNt)FROM Table1, Table2WHERE JoitureAND Autres_fGroup By (codeEp)HAVING AVG(NoteNt) >12ORDER BY AVG(NoteNt) DESC
2014-201533
Groupement
2014-201534
SELECT Categorie,SUM(Qte) as S_Qte FROM ProduitWHERE Couleur=‘Rouge’GROUP BY CategorieHAVING SUM(Qte)>100ORDER BY SUM(Qte) DESC
Le nom , prénom et note DS de tous les étudiants
2014-201535
1
SELECT NomEt , PrenomEt, NoteNt as Notes_DSFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND 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_DSFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND 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 NWHERE E.CodeEt = N.CodeEtAND 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_DSFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp='DS'AND NoteNt > SELECT AVG(NoteNT)
FROM NotesWHERE 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_ExamenFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp='EX‘AND NoteNt IS NOT NULLORDER 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 NWHERE E.CodeEt = N.CodeEtAND CodeEp='EX'AND NoteNt IS NULL
Le maximum en DS , EX et NP
2014-201542
8
SELECT CodeEp,NomEp, Max(NoteNt) AS max_NoteFROM Notes GROUP BY CodeEp
Le maximum en Devoir Surveillé , Examen et Présentiel
2014-201543
9
SELECT NomEp, Max(NoteNt) AS max_NoteFROM Notes N, Epreuves EWHERE N.CodeEP= E.CodeEpGROUP BY NomEp
Le nom et Prénom de l’étudiant ayant la note de DS la plus élevée SELECT NomEt, PrenomET , NoteNtFROM Etudiants E, Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp='DS‘ AND NoteNt =
2014-201544
10
SELECT MAX(NoteNT)FROM NotesWHERE 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 EtWHERE Et.CodeEt = N.CodeETAND N.CodeEp=Ep.CodeEpGROUP 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 EtWHERE Et.CodeEt = N.CodeETAND N.CodeEp=Ep.CodeEpGROUP BY NomEt , PrenomEtORDER 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 EtWHERE Et.CodeEt = N.CodeETAND N.CodeEp=Ep.CodeEpGROUP BY NomEt , PrenomEtHAVING SUM(NoteNt*CoefEp ) >=10ORDER 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 , NoteNtFROM Etudiants E, Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp=‘NP‘ AND SexeEt='F'AND NoteNt = SELECT MAX(NoteNT)
FROM Notes N, Etudiants EWhere N.CodeEt=E.CodeEtAND 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 NWHERE E.CodeEt = N.CodeEtGROUP BY (VilleEt)
La note d’examen maximale par ville et par sexe
2014-201550
16
SELECT VilleEt, MAX(NoteNt)FROM Etudiants E, Notes NWHERE E.CodeEt = N.CodeEtAND 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 NWHERE E.CodeEt = N.CodeEtAND CodeEp = 'EX'GROUP BY VilleEt , SexeEtHAVING MAX(NoteNt)>15 ;
2014-201552
Fournisseur
CodeFNomFVilleF
BoutiqueCodeBNomBVilleB
PieceCodePNomPCouleurPPoidsPNbrP
Fournit
Qte
VendQte
1,N0,N
1,N
1,N
2014-201553
BoutiqueCodeBNomBVilleB
PieceCodePNomPcCouleurPPoidsP
Note#CodeP#CodeBQteVend
2014-201554
Fournisseur
CodeFNomFVilleF
BoutiqueCodeBNomBVilleB
PieceCodePNomPCouleurPPoidsP
Fournit
Qte
0,N 1,N
1,N
2014-201555
Fournisseur
CodeFrNomFrVilleFr
BoutiqueCodeBNomBVilleB
PieceCodePNomPCouleurPPoidsP
Fournit#CodeP#CodeF#CodeBQteFrn
2014-201556
CodeF
NomF
VilleF
F1 P.M.S
Tunis
F2 S.T.M
Tunis
F3 F.R.P
Sousse
F4 M.T SfaxF5 N.X Tuni
sF6 K.L Sous
se
CodeP
NomP CouleurP
PoidsP
Pc1 Papier
Rouge 500
Pc2 Plateau
Vert 30
Pc3 Rideau
Vert 450
Pc3 Cadre Orange 250Pc4 Verre Rouge 20Pc5 Assiet
teOrange 40
CodeB
NomB
VilleB
B1 Promi TunisB2 Fonis TunisB3 Breco SousseB4 Bord NabeulB5 Halu BizerteB6 Bonp
roSfax
CodeF
CodeP
CodeB
QteFrn
F1 Pc1 B1 200F1 Pc2 B2 150F2 Pc3 B1 600F4 Pc1 B2 100F1 Pc4 B1 300F3 Pc6 B3 250