Langage SQL - Partie 2
Langage SQL - Partie 2
Langage SQL - Partie 2
Cheikh KACFAH
[email protected]
LMD: LANGAGE DE
MANIPULATION DE DONNÉES
• Les instructions principales du DML sont:
• INSERT
• SELECT
• DELETE
• UPDATE
2
LMD: SELECT - I
• L’instruction SELECT est l’instruction la plus complexe du langage SQL.
• Néanmoins, elle offre une grande flexibilité pour la recherche d’information dans les tables.
[ORDER BY colonne [{ASC | DESC}] [, ...]]; les colonnes utilisées pour le tri
3
LMD: SELECT - II
• Éléments généraux sur la clause SELECT :
• Il est possible de préfixer une colonne par : « nom de la table. » (permet de lever l’ambiguïté);
• ⚠Malgré sa ressemblance, l’instruction SELECT n’est pas lié l’opération de sélection (restriction)
de l’algèbre relationnelle
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éfixées par les noms de tables
4
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;
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
5
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 relationnelle
• Lorsque la clause WHERE est omise, toutes les lignes sont affichées (équivalent à WHERE TRUE).
WHERE age > 35 ; lignes de la table Client qui ont dans la colonne age une valeur strictement sup. à 35
6
LMD: SELECT - IV
• La clause SELECT TOP :
LIMIT 10 OFFSET 20 ; renvoi les titres des 10 films « suivants » 20 « premiers » films
- SELECT nomRealisateur Les noms de réalisateurs ayant réalisé plusieurs films seront dupliqués
FROM Film ;
- SELECT DISTINCT nomRealisateur Chaque nom de réalisateur apparaîtra une seule fois
FROM Film ;
8
LMD: SELECT - VI
• Les alias de colonne ou de table
• 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
• Égal : =
• Ou logique : OR ou ||
FROM Pays ;
11
LMD: SELECT - IX
• Opérateurs de la clause WHERE – opérateurs de recherche textuelle :
- SELECT nom_colonne [, …]
WHERE colonne IN (valeur1, valeur2, ...); Les valeurs possibles sont listées entre () et séparées par des ,
FROM Film
13
LMD: SELECT - XI
• Opérateurs de la clause WHERE – intervalle de valeurs possibles :
- SELECT nom_colonne [, …]
FROM Client
14
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;
FROM (SELECT * FROM Film WHERE genre = ‘Action’) AS FilmDAction Résultats du SELECT vus comme une table
FROM Client
WHERE idPays = (SELECT idPays FROM Pays WHERE nomPays = ‘Cameroun’) AND … vu comme une seule valeur*
filmPrefere IN ( SELECT idFilm FROM Film WHERE nomrealisateur=‘NTAMACK’ ); … vu comme une liste de valeurs
15
LMD: SELECT - XIII
• SQL propose plusieurs fonctions d’agrégation agissant comme des fonctions de calcul
statistique sur les données :
• Selon les SGBD, plusieurs autres fonctions d’agrégation sont disponibles : valeur
médiane, écart type, variance et plusieurs autres.
16
LMD: SELECT - XIII
• Les fonctions d’agrégation ne sont possibles que dans la clause
SELECT et HAVING.
- 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 film disponibles en DVD. Un film présent sur plusieurs DVDs sera compté autant de fois
FROM Dvd ;
- SELECT COUNT(DISTINCT idFilm) Nombre de film disponibles en DVD, chaque film étant compté une seule fois
FROM Dvd ;
17
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;
• 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).
FROM Dvd
GROUP BY idFilm ;
18
LMD: SELECT - XIV
• Clause HAVING :
GROUP BY idPays
HAVING NbFilms>5 ;
19
LMD: SELECT - XIV
• Clause ORDER BY :
FROM Artiste
20
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).
22
LMD: SELECT - XVII (JOINTURES)
• Correspondances entre les jointures de l’algèbre relationnelle
et leur implémentation sous MySQL
FROM nom_table1
FROM Film AS f
• Différence
SELECT DISTINCT A.col1 [, A.col2, ...]
FROM TableA AS A LEFT JOIN TableB AS B
ON A.col1 = B.col1 [AND A.col2 = B.col2, …]
WHERE B.col1 IS NULL ;
25
LMD: INSERT - I
• L’instruction INSERT :
VALUES (‘CM’ , ‘Cameroun’ , ‘Camfranglais’); …Et donc insérer les données dans cet ordre
VALUES (‘CM’, ‘Cameroun’ , ‘Camfranglais’) , …Et donc insérer les données dans l’ordre de définition*
(‘NG’ , ‘Nigéria’ , ‘Igbo’); … Et on peut insérer plusieurs données à la fois (dans tous les cas)
26
LMD: INSERT - II
• Même s’il est possible d’omettre le nom des colonnes, il est recommandé de les
spécifier afin de simplifier les cas éventuels où la structure de la table serait modifiée.
• Il peut arriver d’utiliser une requête imbriquée afin d’aller chercher la valeur d’une clé
primaire pour l’utiliser à titre de clé étrangère.
VALUES (‘NDO’ ,
‘Daniel’ ,
‘1947/05/25’ );
27
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…
SELECT expression ;
GROUP BY F.paysOrigine;
28
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écifiée, la table est entièrement vidée de son contenu.
29
LMD: UPDATE
• L’instruction UPDATE permet de modifier les valeurs d’attributs d’une ou
plusieurs lignes.
• Si la clause WHERE n’est pas spécifiée, toutes les lignes de la table sont
modifié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'
- UPDATE Client SET ville=‘Yaoundé’ ; Change les villes de tous les clients en Yaoundé
30
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, SIGN
• DIV, MOD,
• PI, COS, SIN, TAN, ACOS, ASIN, ATAN, ATAN2, RADIANS, DEGREES
• RAND,
• FORMAT
• STR_TO_DATE, DATE_FORMAT
32
LDD: VUES - I
• Les vues sont des requêtes stockées qui, lorsqu'elles sont
invoquées, produisent un résultat
AS select_statement ;
AS SELECT titre, nomRealisateur, prenomRealisateur, genre, duree FROM Film WHERE duree>140 ;
AS SELECT c.idClient, CONCAT(prenomClient, ' ', nomClient) AS client, COUNT(*) as 'nombre emprunts'
34
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 efficace pour l'accès aux enregistrements.
• Désavantages:
• Types d’index
• 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 NULL
35
RÉFÉRENCES
• Chantal Gribaumont, Administrez vos bases de données avec MySQL.
https://openclassrooms.com/