Vous êtes sur la page 1sur 23

Institut Supérieur d’Informatique

Fondements des Bases de Données

Cours 6 : Le langage LMD de SQL

Riadh ZAAFRANI
1ère année Licence Computer Science
Parcours: GLSI

Avril 2020
1

Plan du cours

Présentation de SQL et requêtes


de mise à jour
Les requêtes d’interrogation
Les sous-requêtes
Les fonctions et les regroupements

2
2

1
SQL: Structured Query Language
Historique

 Inventé à IBM San Jose, 1974 ( Astrahan &


Chamberlin )
 Basé sur le calcul de tuple & algèbre relationnelle
 Le langage de SGBD relationnels
 En évolution contrôlée par ANSI (SQL1, 2, 3...)
 Il existe aussi plusieurs dialectes
 Les possibilités basiques sont simples

SQL: Langage de bases de données


 Un sous-langage de programmation
 langage interactif (de requêtes)
 langage imbriqué (embedded )
 Consiste traditionnellement de trois parties:
 Langage de Contrôle de Données: LCD
- Gestion des protections d’accès
 Langage de Définition de Données: LDD
- création, modification, suppression des structures des objets de la BD
(tables, vues,…)
 Langage de Manipulation de Données: LMD
- Ajout, modification, suppression, interrogation des données de la BD
4

2
SQL: LMD
Commandes de manipulation

 INSERT INTO: ajouter un tuple dans une table

 UPDATE: changer des valeurs dans les tuples d’une table

 DELETE FROM: éliminer les tuples d’une table

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:

/**/INSERT INTO < nom_table>


SELECT …

/**/INSERT INTO < nom_table> (attr1, attr2, …, attrm)


SELECT r1, r2, … , rm
FROM …
 Si une valeur n'est pas précisée pour un attribut alors le système insère la valeur
NULL.

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

/*Supprimer les pays ayant plus que


170000’000 d’habitants*/
DELETE FROM Pays
WHERE Population > 170000;

10

10

5
Plan du cours

Présentation de SQL et requêtes de


mise à jour
Les requêtes d’interrogation
Les sous-requêtes
Les fonctions et les regroupements

11

11

SQL: LMD
Langage d’interrogation: SELECT
Syntaxe générale:

SELECT [DISTINCT] (<nom_attribut>)* → liste des attributs de projection

FROM (<nom_table>)* → liste des relations touchées par la question

[WHERE (<condition | jointure>)*] → liste des critères de restriction

[GROUP BY (<nom_attribut>)*] → liste des attributs d’agrégation/groupement

→ liste des critères de restrictions


[HAVING (<condition_sur_le groupe>)* ]
sur les agrégats/ groupes
[ORDER BY (<nom_attribut> [ASC/DESC])*]; → liste des attributs de tri du
résultat

12

12

6
SQL: LMD
De l’algèbre relationnelle au SQL: Projection, Sélection

 En algèbre:  En SQL

Project (R, A1,..., An) → SELECT A1,…, An


FROM R;

Select (R, <condition>) → SELECT *


FROM R
WHERE <condition>;

13

13

SQL: LMD
De l’algèbre relationnelle au SQL: Projection, Sélection
Exemples:

/*Tous les détails des pays Européens (Sélection)*/


SELECT *
FROM Pays
WHERE Continent =‘Europe’;

/*Noms et continents de tous les pays (Projection)*/


SELECT NomPays, Continent
FROM Pays;

/*Noms et continent des pays Européens (Projection+Sélection)*/


SELECT NomPays, Continent
FROM Pays
14
WHERE Continent =‘Europe’;

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*/

SELECT F.NomF, P.Continent


FROM Fournisseur F, Pays P
WHERE F.AdrF = P.NomPays;

→ Project(Select (Fournisseur x Pays, AdrF = NomPays), NomF,Continent)


22

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

Présentation de SQL et requêtes de


mise à jour
Les requêtes d’interrogation
Les sous-requêtes
Les fonctions et les regroupements

24

24

12
SQL: LMD
Ecriture des conditions: Opérateurs de comparaison

 = égal  WHERE Continent = ‘Asie’

 <> différent  WHERE NomF <> ‘Sarra’

 > plus grand que  WHERE Population > 8

 >= plus grand ou égal  WHERE Population >= 8

 < plus petit que  WHERE Surface < 83

 <=plus petit ou égal  WHERE Surface <= 83

25

25

SQL: LMD Ecriture des conditions: Opérateurs logiques


 Tous les prédicats : AND
WHERE population<10 AND surface<500
 Un des prédicats : OR
WHERE population<10 OR surface<500
 Négation de la condition : NOT
/*Noms des pays différents ayant le même nom de villes*/
SELECT P1.nom, P2.nom, P1.ville
FROM PAYS P1, PAYS P2
WHERE P1.ville = P2.ville
AND NOT (P1.nom = P2.nom) ;
 Combinaisons:
/**/WHERE (Population > 15000 AND Continent = ‘Europe’ )
OR NomPays = ‘Japon’
/**/WHERE Population > 15000
AND(Continent = ‘Europe’ OR NomPays = ‘Japon’)
26

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:

P ( NumP, NomP, Couleur , Prix ) les produits


F ( NumF, NomF, TypeF , AdrF ) les fournisseurs
PF ( #NumP, #NumF, quantité ) les livraisons

NumF et NumP dans PF sont des identifiants externes sur P et F


(respectivement)

29

29

SQL: LMD
Ecriture des conditions -- Blocs emboités: IN
/*Nom et couleur des produits livrés par le fournisseur 1*/

Solution 1: jointure déclarative


SELECT NomP, couleur
FROM P, PF
WHERE PF.NumP = P.NumP
AND NumF = 1 ;

Solution 2: la jointure procédurale (par emboîtement)


SELECT NomP, couleur
FROM P
WHERE NumP IN (SELECT NumP →
FROM PF
WHERE NumF = 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

Présentation de SQL et requêtes de mise


à jour
Les requêtes d’interrogation
Les sous-requêtes
Les fonctions et les regroupements

33

33

SQL: LMD
Traitement des résultats

 Fonctions sur les colonnes


 Élimination de tuples répétés (DISTINCT)
 Définition de l’ordre des tuples (ORDER BY)
 Regroupement de résultats (GROUP BY)

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*/

SELECT MIN(population), MAX(population), AVG(population), SUM(surface),


COUNT(*)
FROM Pays
WHERE Continent = ‘Europe’;

/*Surface du Pays européen présentant le minimum de population*/

SELECT surface, MIN(population) SELECT surface


FROM Pays FROM Pays
WHERE population =(SELECT MIN(population)
WHERE continent = ‘Europe’;
FROM Pays
WHERE continent =
Requête illégale !
‘Europe’);
36

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’ ;

/**/SELECT DISTINCT Continent


FROM Pays;
37

37

SQL: LMD
Tri des tuples résultats: ORDER BY

SELECT continent, nom, population


FROM Pays
WHERE surface > 60
ORDER BY continent DESC, nom ASC;

38

38

19
SQL: LMD Groupement: GROUP BY

 Partition de l’ensemble des tuples en groupes homogènes suivant un critère.


/*Donner, pour chaque continent, le minimum, le maximum et la moyenne des populations ainsi
que la surface totale et le nombre de pays*/
SELECT continent, MIN(population), MAX(population), AVG(population),
SUM(surface), COUNT(*)
FROM Pays
GROUP BY continent ;

 Résultat: une ligne par continent (par groupe).


 Attention: chaque attribut dans clause SELECT est:
 soit inclus dans opérateur d’agrégation
 soit inclus dans clause GROUP BY 39

39

SQL: LMD Condition de groupe: HAVING


/*Donner, pour chaque continent ayant une surface supérieure à 2000, le minimum, le
maximum et la moyenne des populations ainsi que la surface totale et le nombre de
pays*/
SELECT continent, MIN(population), MAX(population), AVG(population),
SUM(surface), COUNT(*)
FROM Pays
GROUP BY continent
HAVING SUM(surface) > 2000;

 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 ;

/*Donner le nom et la moyenne des populations des continents dont la


moyenne de population est supérieure aux moyennes des populations de
tous les continents*/
SELECT continent, AVG(population)
FROM Pays
GROUP BY continent
HAVING AVG(population) >= ALL (SELECT
AVG(Population)
FROM Pays
GROUP BY continent); 41

41

SQL: LMD Exemple GROUP BY ..HAVING

/*Donner le nom et la moyenne des populations des continents


dont la moyenne de population est supérieure à la moyenne des
populations de tous les pays*/

SELECT continent, AVG(population)


FROM Pays
GROUP BY continent
HAVING AVG(population) > = (SELECT
AVG(Population)
FROM Pays);

42

42

21
SQL: LMD
Quelques fonctions SQL

 SUBSTR: Trois opérandes


 chaîne de caractères SUBSTR ('abcdefgh', 2, 3 );
 position de la sous sous-chaîne → ‘bcd’
 nombre de caractères à extraire

 UPPER: UPPER (‘lili’);


→ ‘LILI’
 LOWER: LOWER (‘MARLÈNE’);
→ ‘marlène’
 INITCAP: INITCAP (‘MARLÈNE’);
→ ‘Marlène’

43

43

Conclusion

 SQL est un langage assertionnel


 relationnellement complet
+ expressions de valeurs et agrégats
+ mises à jour
 Mais ce n'est pas un langage de programmation complet
 Néanmoins c'est un MUST pour un informaticien
aujourd'hui
 C'est n'est pas tout pour SQL, il y en a encore !

44

44

22
Institut Supérieur d’Informatique

Fondements des Bases de Données

Cours 6 : Le langage LMD de SQL

Riadh ZAAFRANI
1ère année Licence Computer Science Parcours: GLSI

Merci pour votre attention


45

23

Vous aimerez peut-être aussi