SQL
Structured Query Language
ESG Prépas 2012/2013
Langages de requêtes
Types des requêtes SQL :
Langage de Définition de Données ( LDD )
Création des tables
Modifications des structures des tables.
Suppression des tables.
…
Langage de Manipulation de Données ( LMD )
Sélection des données.
Insertion des données.
Modifications des données.
Suppression des données.
Langage de définition des données (LDD)
Création d’une table :
Exercice :
Créer la table : Clients (num, nom, dateNaissance)
Solution :
CREATE TABLE Clients (
num numeric,
nom text,
dateNaissance date,
PRIMARY KEY (num)
)
Langage de définition des données (LDD)
Création d’une table :
Exercice :
Créer la table : Clients (num, nom, dateNaissance,id_ville)
Villes (id, nom)
Solution :
CREATE TABLE Clients (
num numeric,
nom text,
dateNaissance date,
PRIMARY KEY (num)
FOREIGN KEY (id_ville) references VILLES(id)
)
Langage de définition des données
Modification d’une table :
ALTER TABLE Table ADD COLUMN NomCol Type
ALTER TABLE Table DROP COLUMN NomCol
Suppression d’une table :
DROP TABLE NomTable
Exercice : Soit la table suivante : Clients(num,nom,dateNaissance)
1- Ajouter la colonne suivante « prenom » de type Text.
2- Supprimer la colonne « dateNaissance »
3- Supprimer la table Clients.
Solution :
1- ALTER TABLE Clients ADD COLUMN prenom TEXT
2- ALTER TABLE DROP COLUMN dateNaissance
3- DROP TABLE Clients
Langage de manipulation des données
LMD
Sélection des données.
Insertion des données.
Modifications des données.
Suppression des données.
Insertion Mises à jour
Insertion d’une nouvelle ligne dans une table :
INSERT INTO Table VALUES(Val1,Val2,….)
NB : Si « Val » est de type TEXT ou DATE, il faut
l’écrire entre deux quottes.
Insertion Mises à jour
Exercice :
Soit la table suivante
Etudiant(Num,Nom,Prenom,Age)
- Insérer l’étudiant suivant sachant que le dérnier
étudiant dans la table a le numéro 4 :
Omari Mehdi 21 ans
Solution :
Insert into Etudiant values(5,’Omari’,’Mehdi’,21);
Modification
Modifier des lignes dans une table :
UPDATE Table
SET column1=Val1,column2=Val2,…
[WHERE condition]
Modification
Table etudiants :
Pour chaque requête donner le nombre de lignes affectées et
le changement appliqué:
Update etudiants set Nom=‘Yaakoubi’ where ID=1
Update etudiants set Prenom=‘Ayman’ where ID=2
Update etudiants set Nom=‘Test’,Prenom=‘Test’ where Age=20
Update etudiants Set Age=30
Update etudiants set Age=Age+1
Suppression
Supprimer des lignes dans une table :
DELETE FROM Table
[WHERE condition]
Suppression
Table etudiants :
Pour chaque requête donner le nombre de lignes supprimées :
Delete from etudiants where ID=2
Delete from etudiants where Age=20
Delete from etudiants where Prenom=‘Youssef’
Delete from etudiants where Age=20 or Prenom=‘Sara’
Delete from etudiants
Sélection des données : SELECT
Syntaxe
SELECT <liste d’attributs projetés>
FROM <liste des tables>
[ WHERE <liste des critères de restriction et de jointure> ]
[ GROUPE BY <liste des attributs de regroupement des données> ]
[ HAVING <liste des critères sur les groupe des données> ]
[ ORDER BY <attributs de trie> ]
Sélection des données : SELECT
Table etudiants :
• Listes des noms, prénom et age des étudiants :
SELECT Nom, Prenom, Age FROM etudiants
• Liste des toutes les informations sur les étudiants :
SELECT ID, Nom, Prenom, Age, Note, GSM FROM etudiants
SELECT * FROM etudiants
Sélection des données : SELECT
Table etudiants :
• Listes des prénom des étudiants :
SELECT Prenom FROM etudiants
• Listes des prénom des étudiants sans répétition :
SELECT DISTINCT Prenom FROM etudiants
Sélection et tri des données
• Listes des étudiants trié en ordre croissant par nom:
SELECT * FROM etudiants ORDER BY nom ASC
SELECT * FROM etudiants ORDER BY nom
Sélection et tri des données
• Listes des étudiants trié en ordre croissant prénom puis par Age :
SELECT * FROM etudiants ORDER BY prenom,age
Sélection et tri des données
• Listes des étudiants trié en ordre croissant par nom puis par prénom et
par Age :
SELECT * FROM etudiants ORDER BY nom,prenom,age
Sélection et tri des données
• Listes des étudiants trié en ordre décroissant par nom:
SELECT * FROM etudiants ORDER BY nom DESC
• Listes des étudiants trié en ordre décroissant prénom puis par Age :
SELECT * FROM etudiants ORDER BY prenom,age DESC
• Listes des étudiants trié en ordre décroissant par nom puis par prénom et
par Age :
SELECT * FROM etudiants ORDER BY nom,prenom,age DESC
Sélection et tri des données
• Listes des étudiants trié en ordre croissant par Age et décroissant par Note :
SELECT * FROM etudiants ORDER BY Age ASC, Note DESC
Fonctions
5 fonctions prédéfinies :
COUNT, SUM, MIN, MAX, AVG
Principe :
S'applique à l'ensemble des valeurs d'une colonne d'une table
Produit une valeur unique
Fonctions - Exemples
Quelle est la meilleure note ?
Resultats (de Pierre) SELECT MAX(Note) FROM Resultats 15
Matiere Coef Note Quelle est la plus mauvaise note ?
Maths 4 15 SELECT MIN(Note) FROM Resultats 9
Sc Nat 3 9 Quelle la somme pondérée des notes ?
SELECT SUM(Note*Coef) FROM Resultats 193
Sc Phy 3 12
Quelle est la moyenne (pondérée) de Pierre ?
Français 2 13
SELECT SUM(Note*Coef)/SUM(Coef) FROM Resultats
Sc Hum 2 11
12,06
Anglais 1 10 Nombre de matières?
Sport 1 12
SELECT COUNT(*) FROM Resultats
SELECT COUNT(Matiere) FROM Resultats
La clause WHERE
Syntaxe :
SELECT attrs
FROM tables
WHERE condition
Rq : Condition peut être simple ou composée.
Opérateurs
La condition peut formée sur des noms d'attributs ou des
constantes avec :
Opérateurs de comparaison : =, >, <, <=, >=, <>
Opérateurs logiques : AND, OR, NOT
Autres opérateurs : IN, BETWEEN+AND, LIKE
Opérateurs
Liste des étudiants ayant une note plus que 14 :
SELECT * FROM etudiants WHERE note>=14
Liste des étudiants qui ont 19 ans :
SELECT * FROM etudiants WHERE age=19
Liste des noms et prénoms des étudiants qui n’ont
pas 19 ans :
SELECT nom,prenom FROM etudiants WHERE
age<>19
Opérateurs
Liste des étudiants qui n’on pas de GSM :
SELECT * FROM etudiants WHERE gsm=''
SELECT * FROM etudiants WHERE gsm is NULL
Liste des étudiants qui eu des notes entre 14 et 19 :
SELECT * FROM etudiants WHERE note>=14 AND
note<=19
SELECT * FROM etudiants WHERE note
BETWEEN 14 AND 19
Opérateurs
Liste des étudiants qui ont eu les notes 14,18 et
19 :
SELECT * FROM etudiants WHERE note=14
OR note=18 OR note=19
SELECT * FROM etudiants WHERE note IN
(14,18,19)
Liste des étudiants dont le prénom commence
par ‘H’ :
SELECT * FROM etudiants WHERE prenom
LIKE 'H%'
Opérateurs
Liste des étudiants dont le nom contient la lettre ‘A’ :
SELECT * FROM etudiants WHERE nom LIKE '%A%'
Liste des étudiants dont le nom se termine par la lettre ‘IM’ :
SELECT * FROM etudiants WHERE nom LIKE '%IM'
Liste des étudiants dont le prénom commence par ‘YOSR’ et
contient au plus 5 caractères :
SELECT * FROM etudiants WHERE prenom LIKE 'YOSR_'
Jointure entre tables
Classes(CODE, NomCL)
Etudiants(ID, Nom, Prenom, #ID_CLASSE)
Etudiants
Classes
ID
Nom CODE
Prenom NomCL
ID_CLASSE
Jointure entre tables
Classes(CODE, NomCL)
Etudiants(ID, Nom, Prenom, #ID_CLASSE)
CODE NomCL
1 ECT 2
2 MP
ID Nom Prenom ID_CLASSE
1 Kania Saad 1
2 Mourabit Leila 1
3 Jalal Taoufik 2
Jointure entre tables
SELECT * FROM etudiants, classes
ID Nom Prenom ID_CLASSE CODE NomCL
1 Kania Saad 1 1 ECT 2
1 Kania Saad 1 2 MP
2 Mourabit Leila 1 1 ECT 2
2 Mourabit Leila 1 2 MP
3 Jalal Taoufik 2 1 ECT 2
3 Jalal Taoufik 2 2 MP
Jointure entre tables
SELECT * FROM etudiants, classes
ID Nom Prenom ID_CLASSE CODE NomCL
1 Kania Saad 1 1 ECT 2
2 Kania Saad 1 2 MP
3 Mourabit Leila 1 1 ECT 2
4 Mourabit Leila 1 2 MP
5 Jalal Taoufik 2 1 ECT 2
6 Jalal Taoufik 2 2 MP
Jointure entre tables
Classes(CODE, NomCL)
Etudiants(ID, Nom, Prenom, #ID_CLASSE)
SELECT * FROM Etudiants, Classes
WHERE ID_CLASSE=CODE
Jointure entre tables
SELECT Nom,Prenom,NomCL FROM Etudiants,
Classes WHERE ID_CLASSE=CODE
Nom Prenom NomCL
Kania Saad ECT 2
Mourabit Leila ECT 2
Jalal Taoufik MP
Jointure entre tables
Classes(ID, NomCL)
Etudiants(ID, Nom, Prenom, #ID_CLASSE)
SELECT * FROM Etudiants, Classes
WHERE ID_CLASSE= ID
SELECT * FROM Etudiants, Classes
WHERE ID_CLASSE=Classes.ID
Jointure entre tables
Immeuble (ID, adresse, ville)
Appartement(ID , Numero, #ID_IMMEUBLE)
Chambre(ID, surface, #ID_APPARTEMENT)
Liste des surfaces des chambres situé à Rabat :
SELECT Chambre.ID,surface FROM
Chambre,Appartement,Immeuble WHERE
ID_APPARTEMENT=Appartement.ID AND
ID_IMMEUBLE=Immeuble.ID AND ville='Rabat'
Partitionnement des résultats
Syntaxe
GROUP BY liste_attributs
HAVING condition avec fonction
Cette clause regroupe les résultats par valeur selon la condition
Dans l'ordre, on effectue
la sélection SELECT … FROM … WHERE ….
le partitionnement GROUP BY
on retient les partitions intéressantes HAVING
on trie avec ORDER BY.
Partitionnement des résultats - Exemples
Quelle est la note moyenne pour chaque coefficient ?
Résultats (de Pierre)
Matière Coef Note Matière Coef Note
Maths 4 15 Maths 4 15
Sc Hum 2 11 Sc Nat 3 9
Sc Nat 3 9 Sc Phy 3 12
Anglais 1 10 Anglais 1 10
Français 2 13 Sport 1 12
Sc Phy 3 12 Français 2 13
Sport 1 12 Sc Hum 2 11
Partitionnement des résultats - Exemples
Résultats (de Pierre)
Quelle est la note moyenne pour chaque coefficient ?
Matière Coef Note
SELECT coef, Avg(note) as Moyenne Coef Moyenne
Maths 4 15
1 11
FROM Résultats
Sc Hum 2 11 2 12
GROUP BY coef;
Sc Nat 3 9 3 10.5
4 15
Anglais 1 10
Quels sont les coefficients auxquels participe une seule
Français 2 13 matière ?
Sc Phy 3 12 SELECT coef
Coef
FROM Résultats GROUP BY coef 4
Sport 1 12
HAVING count(*)=1;
Opérateurs ensemblistes
Union
L’objectif de la commande UNION de SQL est de
combiner ensemble les résultats de deux requêtes.
Intersect
Donne l’intersection des résultats de deux requêtes
SQL.
Minus
Donne la différence des résultats de deux requêtes
SQL.
Exemples Opérateurs Ensemblistes
UNION
retrouver toutes les dates où il y a des ventes
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
MINUS
retrouver toutes les dates où il y a des ventes
au magasin, mais pas sur Internet.
SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales
INTERSECT
retrouver toutes les dates où il y a les deux
types de ventes
SELECT Date FROM Store_Information
INTERSECT
SELECT Date FROM Internet_Sales