50
Le langage SQL Le langage SQL 1 / 42

Le langage SQL

  • Upload
    others

  • View
    19

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Le langage SQL

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

  • Introduction
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 2: Le langage SQL

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

  • Introduction
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 3: Le langage SQL

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

  • Introduction
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 4: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 5: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 6: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 7: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 8: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 9: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 10: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 11: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 12: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 13: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 14: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 15: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 16: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 17: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 18: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 19: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 20: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 21: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 22: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 23: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 24: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 25: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 26: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 27: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 28: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 29: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 30: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 31: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 32: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 33: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 34: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 35: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 36: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 37: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 38: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 39: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 40: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 41: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 42: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 43: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 44: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 45: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 46: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 47: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 48: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 49: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices
Page 50: Le langage SQL

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
  • Vocabulaire et syntaxe du langage sql
  • Creacuteation de BdD et de tables
  • Insertion deacuteleacutements dans une table suppression dune table
  • Consultation des donneacutees
  • Modification des donneacutees
    • Suppression de lignes
    • Mise agrave jour de lignes
      • Requecirctes imbriqueacutees
      • Exercices