Vous êtes sur la page 1sur 37

LICENCE / BACHELOR ANNÉE 1

GESTION DES
BASES DE DONNÉE
2023/2024 - SEMESTRE 1

Cheikh KACFAH
01/09/2023
I

LANGAGE SQL : PRÉSENTATION GÉNÉRALE,


DÉFINITION, INSERTION, MODIFICATION
INTERROGATION DE BD – PARTIE II

Cheikh KACFAH
cheikh.kacfah@institutsaintjean.org
LMD: LANGAGE DE
MANIPULATION DE DONNÉES
• Les instructions principales du DML sont:

• INSER

• SELEC

• DELET

• UPDATE
3
T

LMD: SELECT - I
• L’instruction SELECT est l’instruction la plus complexe du langage SQL

• Néanmoins, elle offre une grande exibilité pour la recherche d’information dans les tables

• Elle est constituée de 2 clauses obligatoires et de 4 clauses optionnelles:

SELECT colonne1 [,colonne2] … les colonnes à af cher

FROM table [, ...] les tables impliquées dans la requête

[WHERE expression] les lignes sélectionnées (condition sur les tuples)

[GROUP BY colonne [, …]] les colonnes utilisées pour l’agrégation

[HAVING expression] les agrégats sélectionnés (condition sur les agrégats)

[ORDER BY colonne [{ASC | DESC}] [, ...]]; les colonnes utilisées pour le tri

4
fl
fi
.

LMD: SELECT - II
• Éléments généraux sur la clause SELECT :

• Cette clause permet de choisir quelle(s) colonne(s) est(sont) retournée(s)

• On sépare les colonnes à retourner par des virgules;

• Il est possible de pré xer une colonne par : « nom de la table. » (permet de lever l’ambiguïté)

• L’usage de * indique que toutes les colonnes sont sélectionnées;

• ⚠Malgré sa ressemblance, l’instruction SELECT n’est pas lié l’opération de sélection (restriction)
de l’algèbre relationnelle

SELECT * FROM Film; sélectionne toutes les colonnes de la table Film

SELECT nom, dateNaissance FROM Client; sélectionne les colonnes nom et date de naissance de la table Client (Projection

SELECT Client.nom, Client.dateNaissance FROM Client; Les colonnes sont pré xées par les noms de tables

5
fi

fi
;

LMD: SELECT - II
• Précisions sur la clause FROM :

• Cette clause permet de choisir quelle(s) table(s) est(sont) utilisée(s) pour la requête;

• On sépare les tables à utiliser dans la requête par des virgules.

SELECT * FROM Film; sélectionne toutes les colonnes de la table Film

SELECT nom, dateNaissance FROM Client; sélectionne les colonnes nom et date de naissance de la table Client (~Projection

SELECT Client.nom, Pays.nom FROM Client, Pays; ??? des tables Clients et Pays avec leurs colonnes nom

LMD: SELECT - III


• Précisions générales sur la clause WHERE :

• La clause WHERE permet d’ajouter une restriction sur les lignes retournées; À rapprocher de la
sélection de l’Algèbre relationnell

• Elle prend la forme d’une expression conditionnelle

• Lorsque la clause WHERE est omise, toutes les lignes sont af chées (équivalent à WHERE TRUE).

- SELECT * FROM Client

WHERE age > 35 ; lignes de la table Client qui ont dans la colonne age une valeur strictement sup. à 35

- SELECT Film.titre, Artiste.nom FROM Film, Artiste

WHERE Film.realisateur = Artiste.idArtiste AND Artiste.idPays = ‘CM’;

7
e

fi
LMD: SELECT - IV
• La clause SELECT TOP :

• Permet de spéci er le nombre de lignes à retourne

• Ce nombre est par défaut à partir de la première ligne, mais on peut


préciser un offset

- SELECT * FROM Client

LIMIT 5 ; renvoi les 5 « premières » lignes de la table Client

- SELECT Film.titre FROM Film

LIMIT 10 OFFSET 20 ; renvoi les titres des 10 lms « suivants » 20 « premiers » lms

- SELECT Film.titre FROM Film

LIMIT 20, 10 ; idem


8
fi
;

fi
r

fi

LMD: SELECT - V
• La clause SELECT DISTINCT :

• SQL n’élimine pas les doublons des lignes retournées;

• La clause DISTINCT permet de retirer les doublons;

• Cette clause peut être utilisée avec les fonctions d’agrégation.

- SELECT nomRealisateur Les noms de réalisateurs ayant réalisé plusieurs lms seront dupliqués

FROM Film ;

- SELECT DISTINCT nomRealisateur Chaque nom de réalisateur apparaîtra une seule fois

FROM Film ;

fi
LMD: SELECT - VI
• Les alias de colonne ou de table

• Permettent d’alléger la syntaxe des requête

• Ont l’avantage de permettre de proposer un nouveau nom de colonne pour la sortie; l’usage
d’apostrophes permet des mots avec espaces;

• Permettent de lever les ambiguïtés sur les noms de tables lors des requêtes récursives

- SELECT nom_colonne [[AS] alias_colonne] [, ...]

FROM nom_table [[AS] alias_table] [, ...];

- SELECT nomA AS nom, prenomA AS prenom FROM Artiste;

- SELECT CONCAT(nomA , ‘ ‘, prenomA) AS 'Nom Artiste' FROM Artiste

- SELECT Enfant.nom, Parent.nom, Parent.age

FROM Pers AS Enfant, Pers AS Parent

WHERE Enfant.parent = Parent.nom;


10

LMD: SELECT - VII


• Opérateurs de la clause WHERE – opérateurs conditionnels :

• Égal : =

• Différent: <> ou != ⚠ <> VS NULL


• Plus grand, plus grand ou égal, plus petit et plus petit ou égal : > , >= , < et <=

• Égalité totale sur une valeur nulle : <=

• Opérateurs de la clause WHERE – opérateurs logiques :

• Et logique : AND ou &

• Ou logique : OR ou ||

• Négation logique : NOT ou !

• Ou exclusif logique : XOR


11

&

>

LMD: SELECT - VIII


• Opérateurs de la clause WHERE – autres opérateurs :

• Test un résultat logique (vrai/faux) : IS

• Inversion logique d’un résultat booléen : IS NOT

• Autres variantes : NOT LIKE, NOT IN, NOT BETWEEN

• Si une valeur est NULL : IS NULL

• Si une valeur n’est pas NULL : IS NOT NULL

- SELECT nomPays, capitale

FROM Pays ;

WHERE pib IS NULL AND population BETWEEN 50 AND 300;

12

LMD: SELECT - IX
• Opérateurs de la clause WHERE – opérateurs de recherche textuelle :

• Recherche d’un patron dans une chaîne de caractères : LIKE

• Chaîne exacte ‘xyz’: LIKE ‘xyz’ (équivalent à =‘xyz’

• Chaînes contenant ‘xyz’: LIKE ‘%xyz%’ , % équivaut à 0 ou


plusieurs caractères. Pour exactement 1 caractère, utiliser _
(underscore

• On peut aller plus loin avec les expressions régulières et l’opérateur


REGEXP. Exemple REGEXP ‘[0-9]+’ recherchera toutes les
chaînes de caractères contenant au moins 1 chiffre
13
)

LMD: SELECT - X
• Opérateurs de la clause WHERE – appartenance à une liste :

• L’opérateur IN permet de spéci er une liste de valeurs possibles pour


une colonne;

• Il est très utilisé dans les requêtes imbriquées

- SELECT nom_colonne [, …]

FROM nom_table [, ...]

WHERE colonne IN (valeur1, valeur2, ...); Les valeurs possibles sont listées entre () et séparées par des ,

- SELECT titre, duree

FROM Film

WHERE realisateur IN ('Ntedju', 'Ntamack');

14

fi

LMD: SELECT - XI
• Opérateurs de la clause WHERE – intervalle de valeurs possibles :

• L’opérateur BETWEEN permet de spéci er un intervalle de valeurs


possibles pour une colonne;

• S’applique autant pour les types numériques qu’alpha numériques.

- SELECT nom_colonne [, …]

FROM nom_table [, ...]

WHERE colonne BETWEEN valeurMin AND valeurMax;

- SELECT nom, prenom

FROM Client

WHERE age BETWEEN 17 AND 77;

15

fi

LMD: SELECT - XII


• Usage de requêtes imbriquées :

• il est possible d’utiliser le résultat d’une requête comme entrée dans une autre;

• ainsi, on peut imbriquer plusieurs requêtes les unes dans les autres;

• ce mécanisme offre des solutions élégantes et puissantes à plusieurs situations;

• Il s’applique à d’autres clauses que le SELECT

- SELECT nomRealisateur, prenomRealisateur

FROM (SELECT * FROM Film WHERE genre = ‘Action’) AS FilmDAction Résultats du SELECT vus comme une table

WHERE annee >= 2018 AND duree < 140

- SELECT nomClient, prenomClient

FROM Client

WHERE idPays = (SELECT idPays FROM Pays WHERE nomPays = ‘Cameroun’) AND … vu comme une seule valeur*

lmPrefere IN ( SELECT idFilm FROM Film WHERE nomrealisateur=‘NTAMACK’ ); … vu comme une liste de valeurs

16
fi

LMD: SELECT - XIII


• SQL propose plusieurs fonctions d’agrégation agissant comme des fonctions de calcul
statistique sur les données :

• valeur minimum : MI

• valeur maximum : MAX

• nombre de valeurs : COUNT

• somme des valeurs : SU

• moyenne des valeurs : AV

• Selon les SGBD, plusieurs autres fonctions d’agrégation sont disponibles : valeur
médiane, écart type, variance et plusieurs autres.

17
N

LMD: SELECT - XIII


• Les fonctions d’agrégation ne sont possibles que dans la clause
SELECT et HAVING.

• Sans la clause GROUP BY, l’usage des fonctions d’agrégation se fait


en considérant toutes les lignes de la table.

- SELECT MIN(duree) AS ‘Durée Min’, MAX(duree) AS ‘Durée Max’, SUM(duree) AS ‘Total durée’, AVG(duree) AS
‘Durée moyenne’

FROM Film

- SELECT COUNT(idFilm) Nombre de lm disponibles en DVD. Un lm présent sur plusieurs DVDs sera compté autant de fois

FROM Dvd ;

- SELECT COUNT(DISTINCT idFilm) Nombre de lm disponibles en DVD, chaque lm étant compté une seule fois

FROM Dvd ;

18
;

fi
fi
fi
fi
LMD: SELECT - XIV
• Clause GROUP BY

• Cette clause permet d’appliquer les fonctions d’agrégation aux sous groupes de lignes
qui ont une valeur commune pour une colonne donnée

• Il est très important de savoir que les fonctions de regroupement et d’agrégation ne


s’appliquent qu’après les jointures de la requête (s’il y en a)

• L‘usage de plusieurs colonnes pour cette clause implique que le regroupement se fera
sur l’ensemble des valeurs provenant de ces colonnes (comme un tout).

- SELECT idFilm AS Film, COUNT(*) AS 'Nombre de DVD

FROM Dvd

GROUP BY idFilm ;

19
:

LMD: SELECT - XIV


• Clause HAVING

• Applique une restriction sur les agrégations ne respectant pas


l’expression donnée

• Ne s’utilise qu’avec la clause GROUP BY;

- SELECT Pays.nomPays, COUNT(*) AS NbFilm

FROM Pays, Film

WHERE Pays.idPays = Film.paysOrigin

GROUP BY idPay

HAVING NbFilms>5 ;

20

LMD: SELECT - XIV


• Clause ORDER BY

• Permet d’ordonner les lignes selon un critère spéci que

• Le tri est ascendant ou descendant (ascendant par défaut);

• On peut trier sur une ou plusieurs colonnes.

- SELECT nom_colonne [, ...

FROM nom_table [, ...]

ORDER BY colonne1 [ASC | DESC] [, colonne2 [ASC | DESC] …]

- SELECT CONCAT (nomArtiste, ‘ ‘, prenomArtiste) AS acteu

FROM Artiste

ORDER BY dateNaissance DESC , acteur ASC;

21

fi
;

LMD: SELECT - XV
• Requêtes corrélées

• Le SQL permet des requêtes plus complexes: les requêtes imbriquées corrélées
(ou sous-requêtes corrélées ou requêtes synchronisées)

• Les requêtes imbriquées exposées précédemment sont appelées requêtes


imbriquées non corrélées

• Une requête imbriquée a la forme suivante :

• Une requête est imbriquée à l’intérieure d’une autre;

• Contrairement aux requêtes non corrélées, la requête interne utilise des


valeurs de la requête externe;

• La résolution de telles requêtes implique que la requête interne est évaluée


pour chaque ligne de la requête externe*
22
:

LMD: SELECT - XVI


• Exemples de requêtes corrélées
• SELECT titre, realisateur

FROM Film AS unFilm

WHERE duree >= ( SELECT AVG(duree) FROM Film AS sousGroupeFilm

WHERE unFilm.categorie = sousGroupeFilm.categorie )

• SELECT nomClient FROM Client AS

WHERE (SELECT COUNT(*) FROM Emprunt AS e

WHERE c.idClient = e.idClient) >= 2 ;

23

LMD: SELECT - XVII (JOINTURES)


• Correspondances entre les jointures de l’algèbre relationnelle
et leur implémentation sous MySQ

• INNER JOIN: Jointure « classique » (thêta jointure

• NATURAL JOIN: Jointure naturell

• LEFT [OUTER] JOIN: Jointure externe gauch

• RIGHT [OUTER] JOIN: Jointure externe droit

• FULL [OUTER] JOIN: Jointure externe (non


implémentée sous MySQL)
24
L

LMD: SELECT - XVIII (JOINTURES)


• Syntax

SELECT nom_colonne1 [, nom_colonne2, ...]

FROM nom_table

{ INNER | { LEFT | RIGHT } [OUTER] } JOIN nom_table2 ON condition_sur_colonnes;

• SELECT CONCAT(a.prenomArtiste, ' ', a.nomArtiste) AS realisateur, f.titre AS lm

FROM Artiste a INNER JOIN Film

ON a.nomArtiste = f.nomRealisateur AND a.prenomArtiste = f.prenomRealisateur

• SELECT f.titre, CONCAT(f.prenomRealisateur, ' ', f.nomRealisateur) AS realisateur, d.numeroDv

FROM Film AS

NATURAL JOIN Dvd AS d;


25
e

fi

LMD: SELECT - XVIII (OP. ENSEMBLISTES)


• Unio
SELECT A.col1 [, A.col2, ...] FROM TableA AS
UNION
SELECT B.col1 [, B.col2, ...] FROM TableB AS

• Intersectio ⚠ Les schémas


doivent être les mêmes
SELECT A.col1 [, A.col2, ...]
FROM TableA AS A INNER JOIN TableB AS
ON A.col1 = B.col1 [AND A.col2 = B.col2, …]

• Différenc
SELECT DISTINCT A.col1 [, A.col2, ...]
FROM TableA AS A LEFT JOIN TableB AS
ON A.col1 = B.col1 [AND A.col2 = B.col2, …
WHERE B.col1 IS NULL ;
26
n

LMD: INSERT - I
• L’instruction INSERT

• Permet l’insertion de lignes i.e. de données dans une table

- INSERT INTO nom_table [(nom_colonne1 [, nom_colonne2...]] [, …)

VALUES ({valeur_colonne1 | DEFAULT} [, valeur_colonne2 | DEFAULT ...] )

- INSERT INTO Pays(id, nom, langue) On peut préciser les colonnes…

VALUES (‘CM’ , ‘Cameroun’ , ‘Camfranglais’); …Et donc insérer les données dans cet ordre

- INSERT INTO Pays On peut ne pas préciser les colonnes…

VALUES (‘CM’, ‘Cameroun’ , ‘Camfranglais’) , …Et donc insérer les données dans l’ordre de dé nition*

(‘NG’ , ‘Nigéria’ , ‘Igbo’); … Et on peut insérer plusieurs données à la fois (dans tous les cas)

27
:

LMD: INSERT - II
• Même s’il est possible d’omettre le nom des colonnes, il est recommandé de les
spéci er a n de simpli er les cas éventuels où la structure de la table serait modi ée

• Il peut arriver d’utiliser une requête imbriquée a n d’aller chercher la valeur d’une clé
primaire pour l’utiliser à titre de clé étrangère.

- INSERT INTO Artiste(nom, prenom, idPays, dateNaissance)

VALUES (‘NDO’ ,

‘Daniel’

(SELECT id FROM Pays WHERE Pays.nom=‘Cameroun’)

‘1947/05/25’ );

28
fi
fi

fi
fi
,

LMD: INSERT - III


• On peut insérer plusieurs lignes grâce à une requête imbriquée.
Il faut cependant que les schémas soient les mêmes…

- INSERT INTO nom_table [(nom_colonne1 [, nom_colonne2...]] [, …)

SELECT expression ;

- INSERT INTO SatsFilms(pays, nbreFilms, dureeMoyenne)

SELECT P.nomPays AS pays, COUNT(F.paysOrigine) AS nbreFIlms, AVG(F.duree) AS dureeMoyenn

FROM Pays AS P , Film AS F

WHERE P.idPays = F.paysOrigin

GROUP BY F.paysOrigine;

29
e

LMD: DELETE
• L’instruction DELETE permet de supprimer des lignes dans une table (une table à la fois).

• Cette instruction ne permet pas de supprimer une table mais son contenu. Si une table est
vidée, elle existe toujours avec le même schéma.

• Si la clause WHERE n’est pas spéci ée, la table est entièrement vidée de son contenu

• ⚠ Attention aux clés étrangères.

- DELETE FROM nom_table [WHERE expression]

- DELETE FROM Client WHERE ville=‘Yaoundé’ ;

- DELETE FROM Emprunt ; Supprime tous les emprunts

30
fi

LMD: UPDATE
• L’instruction UPDATE permet de modi er les valeurs d’attributs d’une ou
plusieurs lignes

• Si la clause WHERE n’est pas spéci ée, toutes les lignes de la table sont
modi ées.

- UPDATE nom_table
📝 Les valeurs peuvent être issues d’une requête
SET nom_colonne1 = valeur1 [, nom_colonne2 = valeur2 …

[WHERE expression]

- UPDATE Client
📝 On peut réutiliser les valeurs courantes
SET nbMaxEmpt = nbMaxEmpt * 2 , ville = 'Yokadouma'

WHERE idClient = ‘CLI001’

- UPDATE Client SET ville=‘Yaoundé’ ; Change les villes de tous les clients en Yaoundé
31
fi
.

fi
fi
]

LMD: FONCTIONS PRÉDÉFINIES


• Il existe un très grand nombre de fonctions disponibles pour le langage SQL.
Voici les plus importantes de MySQL.

• Fonctions mathématiques :

• ABS, SIG

• DIV, MOD,

• POW, SQRT, EXP, LOG, LOG2, LOG10, LN,

• PI, COS, SIN, TAN, ACOS, ASIN, ATAN, ATAN2, RADIANS, DEGREE

• RAND,

• ROUND, FLOOR, CEIL


32

LMD: FONCTIONS PRÉDÉFINIES


• Fonctions de manipulation de chaînes de caractères :

• ASCII, CHAR, LENGTH, LOWER, UPPE

• CONCAT, TRIM, LEFT, RIGHT,

• SUBSTRING, REPLACE, LOCATE,

• FORMA

• Fonctions de manipulation de la date et de l’heure :

• NOW, SYSDATE, DATEDIFF, TIMEDIFF

• YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MICROSECON

• STR_TO_DATE, DATE_FORMAT
33
T

LDD: VUES - I
• Les vues sont des requêtes stockées qui, lorsqu'elles sont
invoquées, produisent un résulta

• Les vues sont de sortes de tables virtuelles dérivées à partir


d’autres tables (appelées tables de base

• On s’en sert pour éviter la réécriture de requêtes complexes et


fréquentes. Elles sont très utiles pour la gestion des droits sur les
tables ou encore la lecture des tables dont les structures changent

• Une vue peut servir de base à une autre vue


34
t

LDD/DML: VUES - II
- CREATE [OR REPLACE] VIEW nom_vue [( colonne1 [, colonne2 ...])

AS select_statement

- DROP VIEW nom_vue1 [, nom_vue2 …]

- CREATE OR REPLACE VIEW FilmLon

AS SELECT titre, nomRealisateur, prenomRealisateur, genre, duree FROM Film WHERE duree>140

- CREATE OR REPLACE VIEW StatEmprunteu

AS SELECT c.idClient, CONCAT(prenomClient, ' ', nomClient) AS client, COUNT(*) as 'nombre emprunts

FROM Client c NATURAL JOIN Emprunt

GROUP BY e.idClient ⚠ Nommage, ALTER TABLE

- DROP VIEW FilmLong, StatEmprunteur; 🔎 Modi cation, Insertion, etc.

35
fi
;

LDD: INDEX
• Un index est une structure de données qui améliore la vitesse des opérations dans une table. Ils
peuvent être créés à l'aide d'une ou de plusieurs colonnes, ce qui permet à la fois des
recherches aléatoires rapides et un tri ef cace pour l'accès aux enregistrements

• Désavantages

• Ils prennent de la place en mémoir

• Ils ralentissent les requêtes d'insertion, modi cation et suppression*

• Types d’inde

• Simple: index standard, permettant des doublons et des valeurs NUL

• Unique: index ne permettant pas des doublons mais autorisant des valeurs NULL. Lors de
la déclaration d’une PRIMARY KEY le SGBD construit un index UNIQUE n’autorisant pas
les valeurs NUL

• Fulltext: index utilisé pour la recherche textuelle

36
x

fi
fi
L

RÉFÉRENCES
• Chantal Gribaumont, Administrez vos bases de données avec MySQL.
https://openclassrooms.com/

• Stéphane Crozat, Algèbre relationnelle - librecours.net, Costech UT

• Laurent Audibert, Bases de données : de la modélisation au


SQL, Ellipses, 200

• M. Chériet et J-C Demers, GPA-775 Bases de données, Université du


Quebec - ETS, 201

• MySQL Documentation, https://dev.mysql.com/doc/


9

Vous aimerez peut-être aussi