Upload
others
View
19
Download
2
Embed Size (px)
Citation preview
Le langage SQL
Le langage SQL 1 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Le langage SQL 2 42
Sommaire
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Le langage SQL 3 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Introduction
Introduction
La mise œuvre pratique du modegravele relationnel de donneacutees estreacutealiseacutee par un logiciel le Systegraveme de Gestion de Bases de DonneacuteesRelationnel ou sgbdr (en anglais dbms ou rdbms pour RelationalDatabase Management System)La grande majoriteacute des sgbdr utilisent les requecirctes du langage sqlpour permettre agrave lrsquoutilisateur de communiquer avec le sgbdr et demanipuler les donneacutees (sql Structured Query Language ou langagede requecirctes structureacute)La connaissance approfondie de sql deacutepasse largement le cadre dece cours On abordera ici seulement quelques notions de baseRemarque chaque sgbd impleacutemente un laquo dialecte raquo leacutegegraverementdiffeacuterent de la norme sql ce qui oblige parfois agrave quelquesmodifications
Le langage SQL 4 42
Introduction
Lrsquoarchitecture sur laquelle repose le sgbdr est celle declient-serveur 1
Figure 1 ndash lrsquoarchitecture trois tiers
Deux types de requecirctes sql existent 1 mises agrave jour creacuteationsuppression de relations
ajoutmodificationsuppression drsquoentiteacutes dans les relations 2 consultation de donneacutees provenants drsquoune ou plusieurs relations
selon certains critegraveresIci on choisit de deacutecouvrir les bases de sql par lrsquointerface dephpMyAdmin qui permet agrave la fois drsquointeragir en ligne de commandeet graphiquement (dans une page web)
1 Vous pouvez visionner cette videacuteo sur le sujet du deacuteveloppement web qui expliqueassez bien les trois tiers en jeu dans les applications web
Le langage SQL 5 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Le langage SQL 2 42
Sommaire
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Le langage SQL 3 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Introduction
Introduction
La mise œuvre pratique du modegravele relationnel de donneacutees estreacutealiseacutee par un logiciel le Systegraveme de Gestion de Bases de DonneacuteesRelationnel ou sgbdr (en anglais dbms ou rdbms pour RelationalDatabase Management System)La grande majoriteacute des sgbdr utilisent les requecirctes du langage sqlpour permettre agrave lrsquoutilisateur de communiquer avec le sgbdr et demanipuler les donneacutees (sql Structured Query Language ou langagede requecirctes structureacute)La connaissance approfondie de sql deacutepasse largement le cadre dece cours On abordera ici seulement quelques notions de baseRemarque chaque sgbd impleacutemente un laquo dialecte raquo leacutegegraverementdiffeacuterent de la norme sql ce qui oblige parfois agrave quelquesmodifications
Le langage SQL 4 42
Introduction
Lrsquoarchitecture sur laquelle repose le sgbdr est celle declient-serveur 1
Figure 1 ndash lrsquoarchitecture trois tiers
Deux types de requecirctes sql existent 1 mises agrave jour creacuteationsuppression de relations
ajoutmodificationsuppression drsquoentiteacutes dans les relations 2 consultation de donneacutees provenants drsquoune ou plusieurs relations
selon certains critegraveresIci on choisit de deacutecouvrir les bases de sql par lrsquointerface dephpMyAdmin qui permet agrave la fois drsquointeragir en ligne de commandeet graphiquement (dans une page web)
1 Vous pouvez visionner cette videacuteo sur le sujet du deacuteveloppement web qui expliqueassez bien les trois tiers en jeu dans les applications web
Le langage SQL 5 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Le langage SQL 3 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Introduction
Introduction
La mise œuvre pratique du modegravele relationnel de donneacutees estreacutealiseacutee par un logiciel le Systegraveme de Gestion de Bases de DonneacuteesRelationnel ou sgbdr (en anglais dbms ou rdbms pour RelationalDatabase Management System)La grande majoriteacute des sgbdr utilisent les requecirctes du langage sqlpour permettre agrave lrsquoutilisateur de communiquer avec le sgbdr et demanipuler les donneacutees (sql Structured Query Language ou langagede requecirctes structureacute)La connaissance approfondie de sql deacutepasse largement le cadre dece cours On abordera ici seulement quelques notions de baseRemarque chaque sgbd impleacutemente un laquo dialecte raquo leacutegegraverementdiffeacuterent de la norme sql ce qui oblige parfois agrave quelquesmodifications
Le langage SQL 4 42
Introduction
Lrsquoarchitecture sur laquelle repose le sgbdr est celle declient-serveur 1
Figure 1 ndash lrsquoarchitecture trois tiers
Deux types de requecirctes sql existent 1 mises agrave jour creacuteationsuppression de relations
ajoutmodificationsuppression drsquoentiteacutes dans les relations 2 consultation de donneacutees provenants drsquoune ou plusieurs relations
selon certains critegraveresIci on choisit de deacutecouvrir les bases de sql par lrsquointerface dephpMyAdmin qui permet agrave la fois drsquointeragir en ligne de commandeet graphiquement (dans une page web)
1 Vous pouvez visionner cette videacuteo sur le sujet du deacuteveloppement web qui expliqueassez bien les trois tiers en jeu dans les applications web
Le langage SQL 5 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Introduction
Introduction
La mise œuvre pratique du modegravele relationnel de donneacutees estreacutealiseacutee par un logiciel le Systegraveme de Gestion de Bases de DonneacuteesRelationnel ou sgbdr (en anglais dbms ou rdbms pour RelationalDatabase Management System)La grande majoriteacute des sgbdr utilisent les requecirctes du langage sqlpour permettre agrave lrsquoutilisateur de communiquer avec le sgbdr et demanipuler les donneacutees (sql Structured Query Language ou langagede requecirctes structureacute)La connaissance approfondie de sql deacutepasse largement le cadre dece cours On abordera ici seulement quelques notions de baseRemarque chaque sgbd impleacutemente un laquo dialecte raquo leacutegegraverementdiffeacuterent de la norme sql ce qui oblige parfois agrave quelquesmodifications
Le langage SQL 4 42
Introduction
Lrsquoarchitecture sur laquelle repose le sgbdr est celle declient-serveur 1
Figure 1 ndash lrsquoarchitecture trois tiers
Deux types de requecirctes sql existent 1 mises agrave jour creacuteationsuppression de relations
ajoutmodificationsuppression drsquoentiteacutes dans les relations 2 consultation de donneacutees provenants drsquoune ou plusieurs relations
selon certains critegraveresIci on choisit de deacutecouvrir les bases de sql par lrsquointerface dephpMyAdmin qui permet agrave la fois drsquointeragir en ligne de commandeet graphiquement (dans une page web)
1 Vous pouvez visionner cette videacuteo sur le sujet du deacuteveloppement web qui expliqueassez bien les trois tiers en jeu dans les applications web
Le langage SQL 5 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Introduction
Introduction
La mise œuvre pratique du modegravele relationnel de donneacutees estreacutealiseacutee par un logiciel le Systegraveme de Gestion de Bases de DonneacuteesRelationnel ou sgbdr (en anglais dbms ou rdbms pour RelationalDatabase Management System)La grande majoriteacute des sgbdr utilisent les requecirctes du langage sqlpour permettre agrave lrsquoutilisateur de communiquer avec le sgbdr et demanipuler les donneacutees (sql Structured Query Language ou langagede requecirctes structureacute)La connaissance approfondie de sql deacutepasse largement le cadre dece cours On abordera ici seulement quelques notions de baseRemarque chaque sgbd impleacutemente un laquo dialecte raquo leacutegegraverementdiffeacuterent de la norme sql ce qui oblige parfois agrave quelquesmodifications
Le langage SQL 4 42
Introduction
Lrsquoarchitecture sur laquelle repose le sgbdr est celle declient-serveur 1
Figure 1 ndash lrsquoarchitecture trois tiers
Deux types de requecirctes sql existent 1 mises agrave jour creacuteationsuppression de relations
ajoutmodificationsuppression drsquoentiteacutes dans les relations 2 consultation de donneacutees provenants drsquoune ou plusieurs relations
selon certains critegraveresIci on choisit de deacutecouvrir les bases de sql par lrsquointerface dephpMyAdmin qui permet agrave la fois drsquointeragir en ligne de commandeet graphiquement (dans une page web)
1 Vous pouvez visionner cette videacuteo sur le sujet du deacuteveloppement web qui expliqueassez bien les trois tiers en jeu dans les applications web
Le langage SQL 5 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Introduction
Lrsquoarchitecture sur laquelle repose le sgbdr est celle declient-serveur 1
Figure 1 ndash lrsquoarchitecture trois tiers
Deux types de requecirctes sql existent 1 mises agrave jour creacuteationsuppression de relations
ajoutmodificationsuppression drsquoentiteacutes dans les relations 2 consultation de donneacutees provenants drsquoune ou plusieurs relations
selon certains critegraveresIci on choisit de deacutecouvrir les bases de sql par lrsquointerface dephpMyAdmin qui permet agrave la fois drsquointeragir en ligne de commandeet graphiquement (dans une page web)
1 Vous pouvez visionner cette videacuteo sur le sujet du deacuteveloppement web qui expliqueassez bien les trois tiers en jeu dans les applications web
Le langage SQL 5 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Vocabulaire et syntaxe du langage sql
Vocabulaire et syntaxe du langage sql
Dans le vocabulaire de sql et des BdD I une relation est appeleacutee une table I une entiteacute est appeleacutee une ligne I un attribut drsquoune entiteacute est appeleacute une colonne
Quelques points de syntaxe sql I insensibiliteacute agrave la casse (majusculeminuscule) Bonne pratique
eacutecrire les mots-cleacutes sql en majuscule I caractegraveres espaces et indentation non significatifs I point virgule en fin de requecircte I les noms de table drsquoattributs ne peuvent contenir drsquoespace Bonne
pratique utiliser le caractegravere laquounderlineraquo comme seacuteparateurexemple id_e
Le langage SQL 6 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Creacuteation de BdD et de tables
Exemple
CREATE DATABASE annuaire DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci
Ci-dessus I annuaire est le nom de la BdD I utf8 est lrsquoencodage qui sera utiliseacute (lrsquoensemble des caractegraveres
disponibles) I utf8_general_ci repreacutesente lrsquoassemblage crsquoest agrave dire les regravegles
qui seront utiliseacutees pour comparer les chaicircnes de caractegraveres(exemple laquoeacuteraquo est-il avant ou apregraves laquoeraquo ou sont-ils consideacutereacuteseacutegaux )
I Pour supprimer une BdD (creacuteeacutee par erreur)
DROP DATABASE annuaire
Le langage SQL 7 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Remarques attention une suppression est irreacuteversible dans lrsquointerface graphique de phpMyAdmin tregraves chargeacutee ecirctreattentif agrave ce qursquoon fait (et eacuteviter de cliquer nrsquoimporte ougrave )privileacutegier les commandes sql dans lrsquoonglet sql mecircme si toutpeut ecirctre fait soit en ligne de commande soit graphiquementpour lancer lampp 2 dans un terminal
eleve-nsiPC14~$ sudo optlampplampp start
puis taper le mot de passe du compte eleve-nsi On peut alorsacceacuteder agrave lrsquointerface web sur un naviguateur agrave lrsquourl localhostphpmyadmin
2 Linux Apache MariaDB PHP PerlLe langage SQL 8 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Creacuteation drsquoune table
CREATE TABLE usager (nom VARCHAR(60)prenom VARCHAR(60)adresse VARCHAR(300)cp VARCHAR(5)code_barre CHAR(15) PRIMARY KEY)
Les types les plus utiliseacutes de sql I numeacuterique table 1I texte table 2I booleacuteen TINYINT(1) (1 est la largeur drsquoaffichage)I date dureacutee instant table 3
Remarques I sql gegravere uniquement les numeacuteriques deacutecimaux I la gestion des dates est tregraves complexe I les chaicircnes de caractegraveres sont entoureacutees de guillemets simples
ABC Pour obtenir lrsquoapostrophe le doubler linformatique
Le langage SQL 9 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Table 1 ndash Types numeacuteriques en sql
nom du type exactapprocheacute descriptionSMALLINT exact entier 16 bits signeacuteINTEGER exact entier 32 bits signeacuteINT exact alias pour INTEGERBIGINT exact entier 64 bits signeacute
DECIMAL(t f) exact deacutecimal signeacute de t chiffresdont f apregraves la virgule
REAL approcheacute flottant 32 bitsDOUBLE PRECISION approcheacute flottant 64 bits
Le langage SQL 10 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Table 2 ndash Types texte en sql
nom du type description
CHAR(n)Chaicircne drsquoexactement n caractegraveres Les ca-ractegraveres manquants sont compleacuteteacutes pardes espaces
VARCHAR(n) Chaicircne drsquoau plus n caractegraveresTEXT Chaicircne de taille quelconque
Table 3 ndash Types date en sql
nom descriptionDATE une date au format rsquoAAAA-MM-JJrsquoTIME une heure au format rsquohhmmssrsquo
TIMESTAMP un instant (date et heure) au formatrsquoAAAA-MM-JJ hhmmssrsquo
Le langage SQL 11 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Figure 2 ndash Types les plus utiliseacutes en sql
Le langage SQL 12 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Les contraintes drsquoentiteacute (clef primaire) lrsquoattribut code_barre de latable usager preacuteceacutedemment creacuteeacutee est deacuteclareacute comme clef primaireune clef primaire peut ecirctre composeacutee Exemple
CREATE TABLE point2D_rgb ( x REAL y REALr SMALLINT g SMALLINT b SMALLINTPRIMARY KEY (x y))
Remarques I Mysql nrsquoimpose pas qursquoune table ait toujours une clef primaire
(donc en theacuteorie il peut y avoir des doublons) mais en pratique onen creacutee toujours une
I on peut aussi creacuteer une colonne jouant le rocircle de clef primairesouvent appeleacute id (identificateur) de type entier etauto-increacutementeacute Un exemple (artificiel)
CREATE TABLE personne (id_pers INT AUTO_INCREMENT PRIMARY KEYnom VARCHAR(60)prenom VARCHAR(60))
Le langage SQL 13 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Les contraintes de reacutefeacuterence Avec lrsquoexemple de la BdDmediatheque
CREATE TABLE livre (titre VARCHAR(300)editeur VARCHAR(90)annee INTisbn CHAR(14) PRIMARY KEY)
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATEFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Remarques I on peut donner le mecircme nom de colonne dans 2 tables diffeacuterentes
(mais crsquoest deacuteconseilleacute)I on peut creacuteer des clefs eacutetrangegraveres compositesI un bon tutoriel sur sql w3schoolscomsqlI on peut aussi speacutecifier qursquoun attribut ne peut ecirctre indeacutefini avec la
syntaxe NOT NULL ou qursquoil doit ecirctre unique avec le mot clefUNIQUE
Le langage SQL 14 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Creacuteation de BdD et de tables
Les contraintes utilisateurs peuvent ecirctre speacutecifieacutees avec le mot clefCHECK suivi drsquoune formule booleacuteenne Exemple pour une BdD degestion de produits en vente dans un commerce
CREATE TABLE produit (id INT PRIMARY KEYnom VARCHAR(100) NOT NULLquantite INT NOT NULLprix DECIMAL(102) NOT NULLCHECK (quantite gt= 0 AND prix gt= 0))
Ex 1 Lire et analyser les requecirctes sql placeacutees au deacutebut du fichiermediathequesql Eacutenoncer toutes les contraintes drsquointeacutegriteacute associeacutees auxtables
Le langage SQL 15 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Insertion drsquoeacuteleacutements dans une table suppression drsquounetable
Syntaxe de lrsquoinsertion pour lrsquoexemple de la table auteur de la BdDmediatheque
INSERT INTO auteur VALUES (97 Ritchie Dennis)(98 Voltaire)
Remarque les contraintes drsquointeacutegriteacute sont veacuterifieacutees au moment delrsquoinsertionSyntaxe de la suppression drsquoune table
DROP TABLE emprunt
Remarque si une table contient une cleacute primaire reacutefeacuterenceacutee par lacleacute eacutetrangegravere drsquoune autre table elle ne pourra ecirctre supprimeacutee Lasuppression des tables doit se faire dans un certain ordre
Ex 2 Regrouper les termes synonymes colonne entiteacute domaineattribut ligne scheacutema base de donneacutees type column row
Le langage SQL 16 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 3 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice quiconsistait agrave creacuteer une BdD correspondant agrave un annuaire teacuteleacutephoniqueDonner la commande Mysql permettant de creacuteer la table avec unmaximum de contraintes drsquointeacutegriteacute Testervalider votre solution sousphpMyAdmin
Iuml Ex 4 Reprendre la modeacutelisation obtenue en correction de lrsquoexercice surla creacuteation drsquoune BdD pour un bulletin scolaire Donner les commandesMysql permettant de creacuteer les tables avec un maximum de contraintesdrsquointeacutegriteacute Donner les ordre Mysql permettant de supprimer ces tablesune fois qursquoelle existent Testervalider vos reacuteponses sous phpMyAdmin
Iuml Ex 5 Pour chacune des seacutequences drsquoordre Mysql suivantes dire quelleinstruction provoque une erreur On suppose que la BdD ne contientaucune table au deacutebut de chaque seacutequence
Le langage SQL 17 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
1 DROP TABLE acheteur eacuteviter lidentificateur laquoclientraquo mot reacuteserveacute
CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
2 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100) prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
Le langage SQL 18 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
3 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT nom VARCHAR (100)id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (nom) REFERENCES produit(nom))
Le langage SQL 19 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
4 CREATE TABLE acheteur (id_a INT PRIMARY KEYnom VARCHAR (100)prenom VARCHAR (100)points_fidelite INT NOT NULLCHECK (points_fidelite gt= 0))
CREATE TABLE produit (id_p INT PRIMARY KEYnom VARCHAR (100)prix DECIMAL(102))
CREATE TABLE commande (id_a INT id_p INTdatec DATE NOT NULLFOREIGN KEY (id_a) REFERENCES acheteur(id_a)FOREIGN KEY (id_p) REFERENCES produit(id_p))
INSERT INTO commande VALUES (0 0 2020-03-02)
Le langage SQL 20 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
Iuml Ex 6 On considegravere les deux tables suivantes CREATE TABLE joueur (jid INT PRIMARY KEY
nom VARCHAR (100) NOT NULL)
CREATE TABLE partie (j1 INT j2 INTscore1 INT NOT NULLscore2 INT NOT NULLFOREIGN KEY (j1) REFERENCES joueur (jid)FOREIGN KEY (j2) REFERENCES joueur (jid)CHECK (j1 ltgt j2))
Ces tables stockent des reacutesultats de parties entre des joueurs Listertoutes les contraintes drsquointeacutegriteacute et pour chacune donner des ordres sqlviolant ces contraintes
Iuml Ex 7 Modifier les ordres de creacuteation de table de lrsquoexercice preacuteceacutedentpour prendre en compte les modifications suivantes
La table partie contient en plus une colonne jour non NULLindiquant la date agrave laquelle la partie a eu lieu les scores ne peuvent pas ecirctre neacutegatifs deux joueurs ne peuvent pas jouer deux fois le mecircme jour
Le langage SQL 21 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Consultation des donneacutees
Il srsquoagit ici 1 de reacuteussir agrave traduire dans le langage des requecirctes sql des questions
qursquoun utilisateur se pose sur les donneacutees (correspondant agrave desinformations effectivement preacutesentes dans la BdD)
2 drsquoexeacutecuter ces requecirctes puis de reacutecupeacuterer les tables qursquoelles renvoientpour qursquoelles soient eacuteventuellement traiteacutees ulteacuterieurement
Sur lrsquoexemple de la meacutediathegraveque des questions possibles agrave uninstant donneacute sont I quels livres sont emprunteacutes par un usager dont le code-barre (de la
carte) est connu I un livre dont on a lrsquoisbn est-il emprunteacute I quels sont les usagers en retard pour rendre leurs livres I quels sont les livres eacutecrits par tel auteur qui sont empruntables I quel est le nombre total de livres emprunteacutes
Le langage SQL 22 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Pour illustrer ce paragraphe on va creacuteer la BdD de la meacutediathegraveque(preacute-remplie avec une liste de livres drsquoauteurs et drsquoemprunts) enlrsquoimportant depuis un fichier sql sous phpMyAdmin Tester au furet agrave mesure les requecirctes de ce paragraphe sur cette BdDDeacutemarrer les serveurs de lampp
eleve-nsiPC14~$ sudo optlampplampp start
Ouvrir un navigateur agrave lrsquourl 127001phpmyadmin Dans lrsquoongletImporter de phpMyAdmin cliquer sur le bouton Parcourirseacutelectionner dans lrsquoarborescence le fichier mediathequesql(preacutealablement teacuteleacutechargeacute) Cliquer sur le bouton Exeacutecuter (en bas agravedroite) Les requecirctes du fichier sont alors exeacutecuteacutees et on voit dansle panneau de gauche qursquoune BdD mediatheque a eacuteteacute creacuteeacuteeRelire la structure des diffeacuterentes tables de cette BdD donneacuteespage 24 et 25
Le langage SQL 23 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
CREATE TABLE usager (nom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULLadresse VARCHAR(300) NOT NULLcp VARCHAR(5) NOT NULLville VARCHAR(60) NOT NULLemail VARCHAR(60) NOT NULLcode_barre CHAR(15) PRIMARY KEY)
CREATE TABLE livre (titre VARCHAR(300) NOT NULLediteur VARCHAR(90) NOT NULLannee INT NOT NULLisbn CHAR(14) PRIMARY KEY)
CREATE TABLE auteur (a_id INT PRIMARY KEYnom VARCHAR(90) NOT NULLprenom VARCHAR(90) NOT NULL)
Le langage SQL 24 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
CREATE TABLE auteur_de (a_id INT isbn CHAR(14)FOREIGN KEY (a_id) REFERENCES auteur(a_id)FOREIGN KEY (isbn) REFERENCES livre(isbn)PRIMARY KEY (a_id isbn))
CREATE TABLE emprunt (code_barre CHAR(15)isbn CHAR(14) PRIMARY KEYretour DATE NOT NULLFOREIGN KEY (code_barre) REFERENCES usager(code_barre)FOREIGN KEY (isbn) REFERENCES livre(isbn))
Le langage SQL 25 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Pour obtenir la liste des titres des livres publieacutes apregraves 1990
SELECT titre FROM livre WHERE annee gt= 1900
La clause WHERE doit ecirctre suivie drsquoune expression booleacuteenne Pourreacutecupeacuterer les titres des livres publieacutes entre 1900 et 1990 par lrsquoeacutediteurDargaud
SELECT titre FROM livre WHERE annee gt= 1970 ANDannee lt= 1990 ANDediteur = Dargaud
Possibiliteacute drsquoutiliser un filtre avec LIKE
SELECT titre FROM livre WHERE titre LIKE Asteacuterix
Ci-dessus la chaicircneAsteacuterixqursquoon appelle un motif regroupe toutes les chaicircnes contenant lachaicircne de caractegraveres Asteacuterix preacuteceacutedeacutee et suivie de zeacutero ouplusieurs caractegraveres (gracircce au caractegravere rsquorsquo 3)
3 Voir ce lien pour plus de deacutetailsLe langage SQL 26 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Possibiliteacute de reacutecupeacuterer plusieurs informations (colonnes) de la table
SELECT titre isbn FROM livre WHERE annee gt= 1900
Possibiliteacute de reacutecupeacuterer toutes les colonnes avec
SELECT FROM livre WHERE annee gt= 1990
Possibiliteacute de renommer les informations reacutecupeacutereacutees avec AS
SELECT titre AS le_titre FROM livre WHERE annee gt= 1990
Le langage SQL 27 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Possibiliteacute drsquoappliquer une fonction drsquoagreacutegation agrave lrsquoensemble desvaleurs drsquoune colonne reacutecupeacutereacutees qui sont alors reacutesumeacutees en uneseule valeur
COUNT renvoie le nombre de lignes trouveacuteesMIN renvoie la plus petite valeur trouveacuteeMAX renvoie la plus grande valeur trouveacuteeAVG renvoie la moyenne des valeurs (numeacuteriques) trouveacuteesSUM renvoie la somme des valeurs (numeacuteriques) trouveacutees
Exemple trouver le nombre total de livres dont le titre contientAsteacuterix et le nommer total
SELECT COUNT (titre) AS total FROM livreWHERE titre LIKE Asteacuterix
La requecircte suivante eacutequivaut agrave la preacuteceacutedente
SELECT COUNT () AS total FROM livreWHERE titre LIKE Asteacuterix
Le langage SQL 28 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Autres exemples
SELECT MIN (annee) AS inf FROM livreSELECT MAX (annee) AS sup FROM livre
Possibiliteacute drsquoordonner les reacutesultats dans un ordre ascendant oudescendant
SELECT titre FROM livre WHERE annee gt= 1990ORDER BY titre ASC
Possibiliteacute de retirer les doublons drsquoun attribut avec DISTINCT
SELECT DISTINCT annee FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Remarque attention ce qui preacutecegravede ne marche plus si on exeacutecute
SELECT DISTINCT annee isbn FROM livre WHERE annee gt= 2010ORDER BY annee ASC
Le langage SQL 29 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Si on veut reacutecupeacuterer un jeu drsquoinformations relieacutees entre elles maisreacuteparties dans deux tables on dit qursquoon reacutealise une jointure destables On doit pour cela donner le critegravere (de jointure) qui reacutecupegravereseulement certaines lignes preacutesentes dans la deuxiegraveme tableExemple on veut connaicirctre toutes les informations sur les livresemprunteacutes agrave savoir titre editeur et annee et isbn
SELECT FROM empruntJOIN livre ON empruntisbn = livreisbn
Pour nrsquoavoir que le titre et la date de retour des livres agrave rendre avantle 01 feacutevrier 2021
SELECT livretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnWHERE empruntretour lt 2020-02-01
Le langage SQL 30 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Consultation des donneacutees
Possibiliteacute de faire des jointures sur plus de deux tables
SELECT usagernom usagerprenomlivretitre empruntretour FROM empruntJOIN livre ON empruntisbn = livreisbnJOIN usager ON usagercode_barre = empruntcode_barreWHERE empruntretour lt 2020-02-01
Possibiliteacute de faire des alias pour eacutecrire des requecirctes plus concises
SELECT unom uprenom ltitre eretour FROM emprunt AS eJOIN livre AS l ON eisbn = lisbnJOIN usager AS u ON ucode_barre = ecode_barreWHERE eretour lt 2020-02-01
Le langage SQL 31 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Modification des donneacutees Suppression de lignes
Modification des donneacutees ndash Suppression de lignes
Pour supprimer toutes les lignes drsquoune table veacuterifiant une conditionon utilise DELETE
DELETE FROM emprunt WHERE code_barre = 9347012819311582
Attention opeacuteration irreacuteversible Rappel on ne peut supprimer des lignes qui contiennent descolonnes reacutefeacuterenceacutees ailleurs (cleacutes eacutetrangegraveres)Si une suppression qui peut porter sur plusieurs lignes provoqueune erreur (pex pour un problegraveme de cleacute) aucune suppression nrsquoestreacutealiseacutee comportement laquotout-ou-rienraquoExemple
DELETE FROM usager WHERE cp = 75001 OR cp = 75002
Si aucun usager du 75001 nrsquoa emprunteacute de livre mais qursquoau moinsun du 75002 en a emprunteacute un aucune suppression nrsquoest faite
Le langage SQL 32 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Modification des donneacutees Mise agrave jour de lignes
Mise agrave jour de lignes
Pour remplacer certaines colonnes des lignes drsquoune table veacuterifiantune certaine condition on utilise UPDATE
UPDATE usager SET email = spetithmailcomWHERE code_barre = 934701281931582
Il est possible de manipuler ainsi de manipuler directement desattributs par exemple ajouter 30 jours agrave une date
UPDATE emprunt SET retour = retour + INTERVAL 30 DAYWHERE retour gt= 2020-04-01
Remarque eacutetant donneacute lrsquoirreacuteversibiliteacute des modifications on doitgeacuteneacuteralement faire des sauvegardes de secours Exemple
CREATE TABLE usager_copie LIKE usagerINSERT INTO usager_copie SELECT FROM usager
Le langage SQL 33 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Requecirctes imbriqueacutees
Requecirctes imbriqueacutees
Ces requecirctes permettent drsquoeffectuer des recherches sur des tablestemporaires sans avoir agrave creacuteer celles-ci Trois exemples
SELECT titre FROM livre WHERE annee =(SELECT MIN(annee) FROM livre)
SELECT titre FROM livre WHERE annee =(SELECT annee FROM livre WHERE titre = Moby-Dick)
SELECT titre FROM livre WHERE annee IN(SELECT annee FROM livre WHERE titre LIKE Asteacuterix)
Le langage SQL 34 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Sommaire
1 Introduction
2 Vocabulaire et syntaxe du langage sql
3 Creacuteation de BdD et de tables
4 Insertion drsquoeacuteleacutements dans une table suppression drsquoune table
5 Consultation des donneacutees
6 Modification des donneacuteesSuppression de lignesMise agrave jour de lignes
7 Requecirctes imbriqueacutees
8 Exercices
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
Exercices
Iuml Ex 8 On utilise la BdD mediatheque Donner le code Mysql de chacunedes requecirctes ci-dessous Les mots en police fixe donnent une indicationsur les attributs et les tables agrave utiliser dans la requecircte
1 Tous les titres de livre2 Tous les noms drsquousager3 Tous les noms drsquousager en retirant les doublons4 Les titres des livres publieacutes avant 19805 Les titres des livres dont le titre contient la lettre laquoAraquo6 Les isbn des livres agrave rendre pour le 010120207 Les noms drsquoauteurs trieacutes par ordre alphabeacutetique8 Les noms drsquousagers vivant dans le 12e ou 13e arrondissement de
Paris (codes postaux 75012 et 75013)
Le langage SQL 35 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
9 Les noms et adresses des usagers nrsquohabitant pas dans une rue (lachaicircne laquoRueraquo ne doit pas apparaicirctre dans lrsquoadresse)
10 Les annees et titres des livres publieacutes lors drsquoune anneacutee bissextile Onrappelle que ce sont les anneacutees divisibles par 4 mais pas cellesdivisibles par 100 sauf si elles sont divisibles par 400
Iuml Ex 9 Soit la BdD mediatheque deacutejagrave utiliseacutee Donner le code sql dechacune des requecirctes ci-dessous Les mots en police fixe donnent uneindication sur les attributs et les tables agrave utiliser dans la requecircte
1 Le titre des livres emprunteacutes2 Le titre des livres emprunteacutes agrave rendre avant le 310320203 Le nom et prenom de lrsquoauteur du livre rsquo1984rsquo4 Le nom et le prenom des usagers ayant emprunteacute des livres sans
doublons (ie si un usager a emprunteacute plusieurs livres il ne doitapparaicirctre qursquoune fois dans la liste)
5 Mecircme requecircte que preacuteceacutedemment avec les noms et preacutenoms trieacutespar ordre alphabeacutetique
Le langage SQL 36 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
6 Les titres des livres publieacutes strictement avant rsquoDunersquo7 Les noms et prenoms des auteurs des livres trouveacutes agrave la question
preacuteceacutedente8 Comme agrave la question preacuteceacutedente en retirant les doublons9 Le nombre de reacutesultats trouveacutes agrave la question preacuteceacutedente
Iuml Ex 10 Soir la BdD mediatheque Formuler simplement en franccedilais lesrequecirctes sql suivantes
1 SELECT FROM livre WHERE titre LIKE Robot2 SELECT nom prenom FROM usager WHERE ville = Guingamp3 SELECT unom uprenom
FROM usager AS uJOIN emprunt AS e ON ucode_barre = ecode_barreWHERE retour lt 2020-04-02
Le langage SQL 37 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
5 SELECT ltitreFROM livre AS lWHERE lisbn IN (SELECT isbn FROM livre
WHERE annee gt 1990)6 Reacuteeacutecrire la requecircte preacuteceacutedente de faccedilon agrave nrsquoutiliser qursquoune seule
clause SELECT
Iuml Ex 11 Soir la BdD mediatheque Calculer tous les auteurs distincts ayantcollaboreacute sur un ouvrage et les renvoyer sous la forme (id1 n1 p1 id2n2 p2 t) ougrave les idi sont les identificateurs de chaque auteur ni leursnoms pi leurs preacutenoms et t le titre sur lequel ils ont collaboreacute Si parexemple trois auteurs ont collaboreacute sur un mecircme livre on souhaite avoirtous les couples drsquoauteurs sur trois lignes diffeacuterentes Rechercher unecontrainte permettant de ne pas afficher deux fois le mecircme couple
Le langage SQL 38 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
Iuml Ex 12 On considegravere les trois tables de la page 41 creacuteeacutees par les troisrequecirctes ci-dessousCREATE TABLE x (a INT PRIMARY KEY b INT CHECK (b gt= 0))CREATE TABLE y (c INT PRIMARY KEY d INT CHECK (d lt= 30))CREATE TABLE z (a INT c INT e INT
FOREIGN KEY (a) REFERENCES x(a)FOREIGN KEY (c) REFERENCES y(c)UNIQUE (a c))
Pour chacune des requecirctes Mysql suivantes calculer son reacutesultat agrave lamain
1 SELECT FROM x WHERE b gt 32 SELECT DISTINCT e FROM z WHERE e gt 10 AND e lt 503 SELECT FROM y WHERE c 2 = 0 ORDER BY d ASC4 SELECT xa xb FROM x
JOIN z ON za = xaWHERE ze lt 9
Le langage SQL 39 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
5 SELECT DISTINCT xb yd FROM xJOIN z ON za = xaJOIN y ON yc = zc
Le langage SQL 40 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
Table 4 ndash La table x
a b1 12 23 24 25 16 97 1
Table 5 ndash La table y
c d9 910 1011 912 2013 3014 915 116 1017 10
Table 6 ndash La table z
a c e1 11 302 14 95 15 17 17 31 10 502 9 82 15 153 17 194 16 125 10 202 11 307 14 97 9 12
Le langage SQL 41 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42
Exercices
Iuml Ex 13 On considegravere les trois tables de lrsquoexercice preacuteceacutedent Pourchacune des modifications ci-dessous indiquer si elle reacuteussit ou si elleeacutechoue Si elle reacuteussit indiquer comment la table est modifieacutee Si elleeacutechoue expliquer pourquoi Les questions sont indeacutependantes crsquoest agrave direchacune repart des tables de lrsquoexercice preacuteceacutedent entre chaque question
1 UPDATE x SET b = b + a2 UPDATE x SET b = b - 23 INSERT INTO z VALUES (1 17 1)4 INSERT INTO z VALUES (1 18 1)5 INSERT INTO z VALUES (1 10 1)6 DELETE FROM y WHERE c gt= 12 AND c lt= 137 DELETE FROM y WHERE c gt= 12 AND c lt= 148 INSERT INTO y VALUES (40 20)9 INSERT INTO y VALUES (20 40)10 DELETE FROM z WHERE a 2 = 0 OR c 2 = 0 OR e 2 = 0
Le langage SQL 42 42