Académique Documents
Professionnel Documents
Culture Documents
Riadh ZAAFRANI
1ère année Licence Computer Science
Parcours: GLSI
Avril 2020
1
Plan du cours
2
2
1
SQL: Structured Query Language
Historique
2
SQL: LMD
Commandes de manipulation
SQL: LMD
INSERT
Syntaxe
INSERT INTO { nom_table}[ ( nom_col)* ] { VALUES (valeur)* | sous_requête };
Exemples
INSERT INTO Pays VALUES (‘France’, 20000, ‘Europe’);
INSERT INTO Pays(NomPays, Population) VALUES (‘Allemagne’, 15000);
INSERT INTO Pays (SELECT NomP, Pop, Cont
FROM Pays_Asiatiques );
3
SQL: LMD
INSERT INTO … SELECT
La clause INSERT INTO … SELECT permet d'insérer de nouvelles lignes
dans la table à partir d'une table ou vue existante.
Syntaxes:
SQL: LMD
UPDATE
La clause UPDATE … SET permet de modifier des lignes d’une table.
Syntaxe
UPDATE <nom_table>
SET{ <nom_col>* = <sous_requête> |
nom_col = {<valeur> | <sous_requête>}}*
[WHERE <condition>];
Exemples
/*Augmenter de 100 les populations de tous les pays*/
UPDATE Pays →
SET Population = Population +100;
/*MAJ à 65000 la population de la France*/
UPDATE Pays
SET Population = 65000 →
WHERE NomPays = ‘France’;
8
4
SQL: LMD
UPDATE
Exemples (Suite)
/*MAJ l’adresse des fournisseurs Européens
à ‘France’*/
UPDATE Fournisseur
SET AdrF = ‘France’
WHERE AdrF IN (SELECT NomPays
FROM Pays
WHERE Continent = ‘Europe’);
SQL: LMD
DELETE
La clause DELETE permet de supprimer des lignes d’une table.
Syntaxe
DELETE FROM <nom_table>
[WHERE <condition>];
Exemples
/*Supprimer tous les fournisseurs*/
DELETE FROM Fournisseur ;
→ Vider la table Fournisseur
10
10
5
Plan du cours
11
11
SQL: LMD
Langage d’interrogation: SELECT
Syntaxe générale:
12
12
6
SQL: LMD
De l’algèbre relationnelle au SQL: Projection, Sélection
En algèbre: En SQL
13
13
SQL: LMD
De l’algèbre relationnelle au SQL: Projection, Sélection
Exemples:
14
7
SQL: LMD
De l’algèbre relationnelle au SQL: Union, Intersection, Différence
En algèbre: En SQL
SELECT * FROM R
R∪S → UNION
SELECT * FROM S ;
SELECT * FROM R
R∩S → INTERSECT
SELECT * FROM S ;
SELECT * FROM R
R-S → MINUS
SELECT * FROM S ;
15
15
SQL: LMD
De l’algèbre relationnelle au SQL: UNION, INTERSECT, MINUS
Exemples:
/*Les détails de la France et de la Chine */
(SELECT *
FROM Pays
WHERE NomPays = ‘France’)
UNION (SELECT *
FROM Pays
WHERE NomPays = ‘Chine’);
/*Le nom et la population des pays dont la population
est comprise entre 10000’000 et 170000’000 habitants */
(SELECT NomPays, Population
FROM Pays
WHERE Population >=10000)
INTERSECT (SELECT NomPays, Population
FROM Pays
WHERE Population <=170000);
/*Les détails des pays Européens à part l’Allemagne*/
(SELECT *
FROM Pays
WHERE Continent = ‘Europe’)
MINUS (SELECT *
FROM Pays
WHERE NomPays = ‘Allemagne’);
16
16
8
SQL: LMD
De l’algèbre relationnelle au SQL: PRODUIT CARTESIEN
En algèbre: En SQL
RxS → SELECT R.*,S.*
FROM R, S;
Exemple
SELECT F.*,P.*
FROM Fournisseur F, Pays P;
17
17
SQL: LMD
De l’algèbre relationnelle au SQL: JOINTURE NATURELLE
En algèbre: En SQL
R S → SELECT R.*,S.*
cond
FROM R, S
Exemple
WHERE R.A1 = S.A1
/*tous les fournisseurs avec les détails de leurs
pays*/ AND R.A2 = S.A2
SELECT F.*,P.* …
FROM Fournisseur F, Pays P AND R.An = S.An;
WHERE F.AdrF = P.NomPays; Avec A1, ..., An: Attributs communs à R et S
18
18
9
SQL: LMD
De l’algèbre relationnelle au SQL: Théta-jointure sur une même table
Exemple
/* Comparaison des populations des pays: Toutes les paires de pays telles
que le premier pays a une population plus petite que le deuxième pays */
SELECT P1.NomPays, P1.Population, P2.NomPays, P2.Population
FROM Pays P1, Pays P2
WHERE P1.Population < P2.Population;
NB: La table Pays est renommée en P1 et P2
P1 P2
19
19
SQL: LMD
De l’algèbre relationnelle au SQL: DIVISION
En algèbre: En SQL
R÷S → SELECT
<attributs_de_projection>
FROM <nom_table1>
WHERE NOT EXISTS
(SELECT *
FROM <nom_table2>
WHERE <condition>
AND NOT EXISTS
(SELECT *
FROM <noms_tables>
WHERE <jointures>));
20
20
10
SQL: LMD
De l’algèbre relationnelle au SQL: DIVISION
Exemple
/*Nom des Fournisseurs qui fournissent
tous les produits rouges*/
SELECT F.NomF
FROM Fournisseur F
WHERE NOT EXISTS
(SELECT *
FROM Produit P
WHERE P.Couleur = ‘Rouge’
AND NOT EXISTS
(SELECT *
FROM FournProd FP
WHERE FP.NumP = P.NumP
AND FP.NumF = F.NumF));
21
21
SQL: LMD
SQL et Algèbre relationnelle
En SQL En algèbre:
SELECT A1,…, An
FROM R1,…,Rm → Project(Select (R1x...xRm, conditions), A1,...,An)
WHERE <conditions>;
Exemple
/*Noms des fournisseurs et continents correspondants*/
22
11
SQL: LMD
Dissimilitudes entre l’algèbre relationnelle et le SQL
Les règles ne sont pas les mêmes dans la théorie (Algèbre
relationnelle) et dans la pratique (SQL)
En SQL :
une relation peut contenir plusieurs tuples identiques (mais on peut
éviter cela en utilisant la clause DISTINCT dans le SELECT),
une relation peut être triée (ORDER BY),
il existe une valeur spéciale dite indéfinie (NULL) utilisée pour
remplir un champ dont on ne connaît pas la valeur.
En SQL, si plusieurs attributs ont le même nom, pour résoudre
l’ambiguïté, on spécifie la relation à laquelle l’attribut appartient.
23
23
Plan du cours
24
24
12
SQL: LMD
Ecriture des conditions: Opérateurs de comparaison
25
25
26
13
SQL: LMD
Ecriture des conditions: IN, BETWEEN, LIKE
IN, NOT IN: Appartenance/Non
appartenance à un ensemble
WHERE monnaie IN
→ WHERE monnaie = ‘Dinar’
(‘Dinar’, ‘Dollar’, ‘Euro’)
OR monnaie = ‘Dollar’
OR monnaie = ‘Euro’
BETWEEN, NOT BETWEEN:
Appartenance/Non appartenance à un
intervalle
→ WHERE population BETWEEN 50 AND 60 WHERE population >= 50
LIKE, NOT LIKE: Condition partielle AND population <= 60
→ WHERE pays LIKE ‘%lande’
(Irlande, Islande, Finlande, Hollande)
%: 0 ou n caractères
→ WHERE pays LIKE ‘I_lande’
_: exactement 1 caractère
(Irlande, Islande)
27
27
SQL: LMD
Ecriture des conditions: Valeur NULL
Une valeur inconnue ou non définie:
/**/SELECT nom /**/SELECT nom
FROM PAYS FROM PAYS
WHERE montagne IS NULL; WHERE montagne IS NOT NULL;
→Pays Bas → Autriche, Suisse
Opérations:
population > 0
→si la population est NULL le résultat est false
population = NULL
→le test retourne toujours false
→Correct: population IS NULL
population + NULL
→l'expression retourne NULL 28
28
14
SQL: LMD
Ecriture des conditions -- Blocs emboités
Base de données exemple:
29
29
SQL: LMD
Ecriture des conditions -- Blocs emboités: IN
/*Nom et couleur des produits livrés par le fournisseur 1*/
30
30
15
SQL: LMD
Ecriture des conditions -- Blocs emboités: ANY
/*Numéro des fournisseurs de produits rouges*/
SELECT NumF
FROM PF
WHERE NumP = ANY ( SELECT NumP FROM P →
WHERE couleur = 'rouge' ) ;
/*Numéro des fournisseurs qui fournissent des produits dont le numéro est
inférieur à au moins un des produits coûtant plus que 1000*/
SELECT NumF
FROM PF
WHERE NumP < ANY ( SELECT NumP
FROM P
WHERE Prix > 1000 ) ;
31
31
SQL: LMD
Ecriture des conditions -- Blocs emboités: ALL
/*Numéro des fournisseurs qui fournissent des produits dont le numéro est inférieur à tous
les numéros des produits coûtant plus que 1000*/
SELECT NumF
FROM PF
WHERE NumP < ALL ( SELECT NumP
FROM P
WHERE Prix > 1000 ) ;
/*Numéros des fournisseurs qui ne fournissent que des produits rouges*/
SELECT NumF
FROM F
WHERE ‘Rouge' = ALL( SELECT couleur
FROM P
WHERE NumP IN ( SELECT NumP
FROM PF
WHERE PF.NumF=F.NumF)) ;
32
32
16
Plan du cours
33
33
SQL: LMD
Traitement des résultats
34
34
17
SQL: LMD
Fonctions sur les colonnes
Attributs calculés
SELECT NomPays, Population*1000/surface
FROM Pays;
Opérateurs d’agrégation:
Opérateurs sur attributs numériques
SUM: somme des valeurs des tuples sélectionnés
AVG : moyenne
Opérateurs sur tous types d’attributs
MIN: minimum
MAX : maximum
COUNT: nombre de tuples sélectionnés
35
35
SQL: LMD
Fonctions sur les colonnes
/*Minimum, maximum et moyenne des populations des pays Européens ainsi que surface
totale et nombre des pays Européens*/
36
18
SQL: LMD
Noms des attributs: AS
Suppression des doubles: DISTINCT
/**/SELECT MIN(population) AS min_pop,
MAX(population) AS max_pop,
AVG(population) AS avg_pop ,
SUM(surface) AS sum_surface,
COUNT(*) AS count
FROM PAYS
WHERE continent = ‘Europe’ ;
37
SQL: LMD
Tri des tuples résultats: ORDER BY
38
38
19
SQL: LMD Groupement: GROUP BY
39
Attention: la condition dans HAVING a exactement une valeur pour chaque groupe.
Chaque attribut dans HAVING est:
soit inclus dans GROUP BY
soit inclus dans opérateur d'agrégation 40
40
20
SQL: LMD GROUP BY ..HAVING
/*Donner le nom et la moyenne des populations des continents */
SELECT continent, AVG(population)
FROM Pays
GROUP BY continent ;
41
42
42
21
SQL: LMD
Quelques fonctions SQL
43
43
Conclusion
44
44
22
Institut Supérieur d’Informatique
Riadh ZAAFRANI
1ère année Licence Computer Science Parcours: GLSI
23