Systèmes d’Information et Application Année Universitaire 2018-2019 SIA TD3 SQL – Le langage de manipulation des données (LMD) – partie 1 Emmanuel Fruchart
Contact Web: http://happymaths.pagesperso-orange.fr Email: happy.maths@orange.fr
Descriptif du TD Objectif : Savoir interroger et modifier les données d’une base de données déjà implémentée. Partie 1 : travail sur une seule table. Supports : SQL : le Langage de Manipulation des Données.
Contenu du TD Rappel de cours LMD SQL sur une seule table 0h30 Etude de cas Insertion, interrogation, modification, suppression de données sur une base existante 1h30 TNE 3 Exercice 2h
Langage de Manipulation des Données (LMD) Présentation Langage de Manipulation des Données (LMD)
LMD : Langage de Manipulation des Données LMD (DML en anglais) : Le LMD est l'ensemble des commandes permettant de : insérer des données. interroger des données. modifier des données. supprimer des données. d’une base de données relationnelle.
LMD : Insertion des données Présentation LMD : Insertion des données
LMD : Insertion de données dans une table Instruction standard SQL INSERT INTO nom_table VALUES (val_col1, val_col2, …); Les valeurs de toutes les colonnes doivent être renseignées, éventuellement avec la valeur NULL. INSERT INTO nom_table(col1, col2, …) Seules les colonnes 1, 2 sont renseignées, autres valeurs positionnées à NULL, ou à valeur par défaut de la colonne.
LMD : Interrogation des données d’une seule table Présentation LMD : Interrogation des données d’une seule table
LMD : Interrogation d’une seule table Instruction standard SQL SELECT [ALL | DISTINCT] clause_de_selection FROM nom_table [WHERE critere_de_selection] [GROUP BY clause_de_regroupement] [HAVING critere_de_regroupement] [ORDER BY critere_de_tri];
LMD : Interrogation d’une seule table Options de la clause de sélection ALL permet de garder tous les t-uplets même ceux en double (option par défaut) DISTINCT permet d'éliminer les doublons.
LMD : Mise à jour des données Présentation LMD : Mise à jour des données
LMD : Mise à jour de données Instruction standard SQL UPDATE nom_table SET col1 = expr1, col2 = expr2, … [WHERE critere_de_selection]; Avec cette syntaxe, les colonnes 1, 2, … des lignes vérifiant éventuellement un critère de sélection seront mises à jour.
LMD : Suppression des données Présentation LMD : Suppression des données
LMD : Suppression de données Instruction standard SQL DELETE FROM nom_table [WHERE critere_de_selection]; Avec cette syntaxe, les lignes vérifiant éventuellement un critère de sélection seront supprimées. Si aucun critère de type WHERE n'est spécifié, toutes les données de la table sont effacées.
Etude de cas : utilisation du LMD Présentation Etude de cas : utilisation du LMD
Etude de cas : schéma relationnel BDCours
Insertion de données (jeu de données) Présentation Insertion de données (jeu de données)
Etude de cas : insertions 1 insert into annee values (2014, 'Année Scolaire 2014-2015', 150, 150); insert into periode values ('1T', 'Premier trimestre'); insert into classe values ('2ND1', 'Seconde 1'); insert into matiere values ('FRAN', 'Français');
Etude de cas : insertions 2 insert into professeur values ('MOREAUPA', 'Moreau', 'Patrick', 'H', '1986-07-01', 'FRAN'); insert into professeur_rem ('CASTELAI', 'Castelain', 'Alice', 'F', NULL, 'FRAN'); insert into enseignement values (2014, '1T', ‘TSES', ‘FRAN', ‘MOREAUPA', 11.5);
Interrogation de données (une seule table) : Présentation Interrogation de données (une seule table) : Clauses de sélection
Etude de cas : interrogation SELECT nom FROM professeur; Ou SELECT ALL nom FROM professeur; On garde tous les noms, même ceux en double. SELECT DISTINCT nom FROM professeur; On élimine les éventuels doublons.
Etude de cas : interrogation nom Dubois Leroy Moreau Durand Morel Fournier Petit Garcia Thomas Girard Lambert Lefebvre Martinez Roussel nom Dubois Leroy Moreau Durand Morel Fournier Petit Garcia Thomas Girard Lambert Lefebvre Martinez Roussel ALL / DISTINCT
Etude de cas : interrogation SELECT * FROM professeur; Ou SELECT id_professeur, nom, prenom, sexe, date_naissance, id_matiere FROM professeur; Le symbole * représente l'ensemble des colonnes de la table professeur. SELECT nom, prenom, date_naissance On n’affiche que le contenu des colonnes spécifiées.
Etude de cas : interrogation id_professeur nom prenom sexe date_naissance id_matiere DUBOISAM Dubois Amélie F 1980-01-30 ANGL LEROYTHO Leroy Thomas H 1985-06-05 DUBOISGE Gérard 1981-02-25 FRAN MOREAUPA Moreau Patrick 1986-07-01 DURANDST Durand Stéphane 1983-04-15 HGEO MORELSTE Morel Stéphanie 1990-11-16 FOURNIER Fournier Nicolas 1989-10-21 MATH PETITCHR Petit Christophe 1982-03-20 GARCIATH Garcia Thierry 1988-09-26 PHCH THOMASVI Vincent 1991-12-11 GIRARDAN Girard Antoine 1992-01-21 PHIL LAMBERTA Lambert Alice NULL LEFEBVRE Lefebvre Géraldine 1987-08-31 SCVT MARTINEZ Martinez Nathalie 1993-02-14 LEROYPHI Philippe 1984-05-10 SECS ROUSSELJ Roussel Jeanne
Etude de cas : interrogation Incorporation de colonnes constantes chaînes SELECT nom, prenom, sexe, 'DATE DE NAISSANCE', date_naissance FROM professeur; numériques SELECT 2015, nom, prenom, sexe, date_naissance FROM professeur;
Etude de cas : interrogation nom prenom sexe DATE DE NAISSANCE date_naissance Dubois Amélie F 1980-01-30 Leroy Thomas H 1985-06-05 Gérard 1981-02-25 Moreau Patrick 1986-07-01 Durand Stéphane 1983-04-15 Morel Stéphanie 1990-11-16 Fournier Nicolas 1989-10-21 Petit Christophe 1982-03-20 Garcia Thierry 1988-09-26 Vincent 1991-12-11 Girard Antoine 1992-01-21 Lambert Alice NULL Lefebvre Géraldine 1987-08-31 Martinez Nathalie 1993-02-14 Philippe 1984-05-10 Roussel Jeanne
Etude de cas : interrogation Utilisation de fonctions arithmétiques SELECT id_annee - 2000, desc_annee FROM annee; SELECT id_annee, nb_filles + nb_garcons FROM annee; SELECT id_annee, 'Pourcentage de filles :', nb_filles * 100 / (nb_filles + nb_garcons)
Etude de cas : interrogation id_annee - 2000 desc_annee 14 Année Scolaire 2014-2015 15 Année Scolaire 2015-2016 id_annee nb_filles + nb_garcons 2014 300 2015 299 id_annee Pourcentage de filles : nb_filles * 100 / (nb_filles + nb_garcons) 2014 50.0000 2015 52.5084
Etude de cas : interrogation Utilisation de fonctions arithmétiques ensemblistes SELECT COUNT(*) FROM professeur; SELECT COUNT(DISTINCT nom) FROM professeur; SELECT MAX(nb_filles), MIN(nb_filles) FROM annee; SELECT SUM(nb_filles), AVG(nb_garcons)
Etude de cas : interrogation COUNT(prenom) 16 COUNT(DISTINCT nom) 14 MAX(nb_filles) MIN(nb_filles) 157 150 SUM(nb_filles) AVG(nb_garcons) 307 146.0000
Etude de cas : interrogation Utilisation de fonctions littérales Majuscules, minuscules SELECT UPPER(nom), LOWER(prenom), date_naissance FROM professeur; Concaténation SELECT CONCAT(UPPER(nom), ' ', LOWER(prenom)), date_naissance FROM professeur; Ou SELECT UPPER(nom) || ' ' || LOWER(prenom), date_naissance FROM professeur;
CONCAT(UPPER(nom), ' ', LOWER(prenom)) Etude de cas : interrogation CONCAT(UPPER(nom), ' ', LOWER(prenom)) date_naissance DUBOIS amélie 1980-01-30 LEROY thomas 1985-06-05 DUBOIS gérard 1981-02-25 MOREAU patrick 1986-07-01 DURAND stéphane 1983-04-15 MOREL stéphanie 1990-11-16 FOURNIER nicolas 1989-10-21 PETIT christophe 1982-03-20 GARCIA thierry 1988-09-26 THOMAS vincent 1991-12-11 GIRARD antoine 1992-01-21 LAMBERT alice NULL LEFEBVRE géraldine 1987-08-31 MARTINEZ nathalie 1993-02-14 LEROY philippe 1984-05-10 ROUSSEL jeanne
Etude de cas : interrogation Sous-chaîne SELECT DISTINCT SUBSTRING(prenom FROM 1 FOR 3) FROM professeur; Longueur de la chaîne SELECT ALL prenom, CHARACTER_LENGTH(prenom) FROM professeur;
CHARACTER_LENGTH(prenom) SUBSTRING(prenom FROM 1 FOR 3) Etude de cas : interrogation prenom CHARACTER_LENGTH(prenom) Amélie 6 Thomas Gérard Patrick 7 Stéphane 8 Stéphanie 9 Nicolas Christophe 10 Thierry Vincent Antoine Alice 5 Géraldine Nathalie Philippe Jeanne SUBSTRING(prenom FROM 1 FOR 3) Amé Tho Gér Pat Sté Nic Chr Thi Vin Ant Ali Nat Phi Jea
Interrogation de données (une seule table) : Présentation Interrogation de données (une seule table) : Critères de sélection
Etude de cas : interrogation Mots clés =, <>, <, >, <=, >= SELECT * FROM professeur WHERE nom = 'Leroy'; WHERE nom > 'Lombart'; SELECT * FROM annee WHERE nb_filles > 150;
Etude de cas : interrogation Mots clés AND et OR SELECT * FROM professeur WHERE (nom = 'Leroy') OR (prenom = 'Géraldine'); WHERE (nom > 'Lombart') AND (prenom < 'Marc'); SELECT * FROM enseignement WHERE (id_periode = '1T') AND ( (moyenne_classe >= 12) OR (moyenne_classe < 8.5) );
Etude de cas : interrogation Mots clés IN et BETWEEN SELECT * FROM enseignement WHERE moyenne_classe BETWEEN 11.0 AND 11.5; SELECT * FROM professeur WHERE prenom IN ('Jacques', 'Thomas', 'Pierre'); WHERE prenom IN ('Géraldine', 'Thomas', 'Antoine') AND nom < 'Latour';
Etude de cas : interrogation Mot clé LIKE On cherche des valeurs chaînes de caractères correspondant à un modèle donné. Le caractère '%' modélise une chaine quelconque de caractères (incluant une chaine vide), et le caractère '_' modélise 1 seul caractère. SELECT * FROM professeur WHERE nom LIKE '_e_o_'; WHERE prenom LIKE '___r%';
Etude de cas : interrogation Mot clé NOT SELECT * FROM enseignement WHERE moyenne_classe NOT BETWEEN 8.0 AND 14.0; SELECT * FROM professeur WHERE prenom NOT IN ('Amélie', 'Thomas', 'Gérard', 'Stéphane', 'Patrick'); SELECT * FROM professeur WHERE prenom NOT LIKE '___r%';
Etude de cas : interrogation Mots clés IS NULL et IS NOT NULL SELECT nom, prenom FROM professeur WHERE date_naissance IS NULL; SELECT nom, prenom FROM professeur WHERE date_naissance IS NOT NULL and prenom NOT LIKE '_____t%';
Etude de cas : interrogation Utilisation de fonctions littérales SELECT UPPER(nom), LOWER(prenom), date_naissance FROM professeur WHERE CHARACTER_LENGTH( CONCAT(nom, prenom)) BETWEEN 12 AND 15; SELECT prenom FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 3) IN ('Pie', 'Mar', 'Dan', 'Pat') AND date_naissance IS NOT NULL;
Interrogation de données (une seule table) : Clauses de regroupement Présentation Interrogation de données (une seule table) : Clauses de regroupement
Etude de cas : interrogation Les colonnes dans la clause GROUP BY sont obligatoirement présentes dans la clause de sélection, accompagnées de fonctions de groupe ! SELECT nom, COUNT(*) FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 1) <> 'J' GROUP BY nom; SELECT id_annee, SUBSTRING(id_professeur FROM 1 FOR 1), AVG(moyenne_classe) FROM enseignement GROUP BY id_annee, SUBSTRING(id_professeur FROM 1 FOR 1);
SUBSTRING(id_professeur FROM 1 FOR 1) Etude de cas : interrogation nom COUNT(*) Dubois 2 Durand 1 Fournier Garcia Girard Lambert Lefebvre Leroy Martinez Moreau Morel Petit Thomas id_annee SUBSTRING(id_professeur FROM 1 FOR 1) AVG(moyenne_classe) 2014 D 11.755555576748318 F 10.633333206176758 G 12.766667048136393 L 12.833333333333334
Interrogation de données (une seule table) : Critères de regroupement Présentation Interrogation de données (une seule table) : Critères de regroupement
Etude de cas : interrogation On élimine certains groupes selon un critère sur le groupe. SELECT nom, COUNT(*) FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 1) <> 'J' GROUP BY nom HAVING COUNT(*) > 1; SELECT id_annee, SUBSTRING(id_professeur FROM 1 FOR 1), AVG(moyenne_classe) FROM enseignement GROUP BY id_annee, SUBSTRING(id_professeur FROM 1 FOR 1) HAVING AVG(moyenne_classe) > 12.0;
SUBSTRING(id_professeur FROM 1 FOR 1) Etude de cas : interrogation nom COUNT(*) Dubois 2 Leroy id_annee SUBSTRING(id_professeur FROM 1 FOR 1) AVG(moyenne_classe) 2014 G 12.766667048136393 L 12.833333333333334
Interrogation de données (une seule table) : Présentation Interrogation de données (une seule table) : Critères de tri
Etude de cas : interrogation Tri sur une seule colonne : ASC tri croissant DESC tri décroissant. Tri par défaut : ASC. SELECT DISTINCT prenom FROM professeur ORDER BY prenom; Ou … ORDER BY prenom ASC; ORDER BY 1;
Etude de cas : interrogation prenom Alice Amélie Antoine Christophe Géraldine Gérard Jeanne Nathalie Nicolas Patrick Philippe Stéphane Stéphanie Thierry Thomas Vincent
Etude de cas : interrogation Tri sur plusieurs colonnes : SELECT nom, prenom FROM professeur WHERE SUBSTRING(prenom FROM 1 FOR 3) IN ('Ant', 'Mar', 'Dan', 'Pat') ORDER BY prenom DESC, nom ASC; Ou … ORDER BY 2 DESC, 1 ASC;
Etude de cas : interrogation nom prenom Moreau Patrick Girard Antoine