un passage quasi-obligatoire pour faire des sites web dynamiques

18.SQL par l'exemple

18.1.Introduction

Ce "cours" un peu particulier s'applique sur des exemples et est loin d'être exhaustif.
Dans la suite du tutorial nous considérerons ces 3 tables suivantes:
Films
idFilm Titre Réalisateur
1 Matrix Réalisateur de Matrix
2 La soupe aux choux Réalisateur de la soupe aux choux
Acteurs
idActeur Nom Prénom
1 Dupont Paul
2 Durand Jean
3 Durand Jeanne
Rôle
idActeur idFilm Personnage
1 1 Neo
2 1 Simone
3 2 Extra-terrestre
A partir de ces tables, nous allons faire quelques exercices.

18.2.Comment peut-on créer ces tables avec MySQL?

Table films:
CREATE TABLE films (idFilm INT not null AUTO_INCREMENT, Titre VARCHAR (255) not null ,
 Réalisateur VARCHAR (255) not null , PRIMARY KEY (idFilm))
Table acteurs:
CREATE TABLE acteurs (idActeur INT not null AUTO_INCREMENT, 
Nom VARCHAR (255) not null , Prénom VARCHAR (255) not null , PRIMARY KEY (idActeur))
Table Rôle:
CREATE TABLE role (idActeur INT not null, idFilm INT not null , Personnage VARCHAR (255))
rem
  • idFilm et idActeur sont des clés primaire (uniques) dont on laisse le serveur de base de données donner une valeur (AUTO_INCREMENT)
  • Les champs texte sont de type VARCHAR (chaînes de caractères de taille variable) de taille maximale de 255 caractères.

18.3.Comment peut-on insérer les données?

Table films:
INSERT INTO films (Titre,Réalisateur) VALUES ('Matrix','Réalisateur de Matrix')
INSERT INTO films (Titre,Réalisateur) VALUES ('La soupe aux choux','Réalisateur de la soupe aux choux')
Table acteurs:
INSERT INTO acteurs (Nom,Prénom) VALUES ('Dupont','Paul')
INSERT INTO acteurs (Nom,Prénom) VALUES ('Durand','Jean')
INSERT INTO acteurs (Nom,Prénom) VALUES ('Durand','Jeanne')
Table role:
INSERT INTO role (idActeur,idFilm,Personnage) VALUES ('1','1','Neo')
INSERT INTO role (idActeur,idFilm,Personnage) VALUES ('2','1','Simone')
INSERT INTO role (idActeur,idFilm,Personnage) VALUES ('3','2','Extra-terrestre')

18.4.Voici comment supprimer ces données

Si l'on veux supprimer le film "La soupe aux choux", on peut utiliser une des 2 requêtes suivantes:
DELETE FROM films where idFilm=2
DELETE FROM films where Titre='La soupe aux choux'
remCela a pour effet de supprimer toutes les entrées où idFilm=2 (unique donc pas de problème) ou toutes les entrées ayant 'La soupe aux choux' comme titre (il pourrait y en avoir plusieurs).

18.5.Voici comment modifier des données:

Si l'on veux changer le nom du réalistaur de Matrix, on peut utiliser une des 2 requêtes suivantes:
UPDATE films SET Réalisateur='John Woo' where id=1
UPDATE films SET Réalisateur='John Woo' where Réalisateur='Réalisateur de Matrix'
Les données sont insérées, il va falloir les traiter maintenant.

18.6.Et enfin, voici comment traiter les données:

Comptons les éléments, par exemple comptons le nombre de films de notre BD.
SELECT COUNT(*) FROM films
Récupérons maintenant tous les titres de films.
SELECT titre FROM films
Beaucoup plus dificile, affichons l'ensemble des couple titre, nom de l'acteur, prénom de l'acteur et rôle joué.
SELECT f.titre,a.nom,a.prénom,r.personnage FROM films f,acteurs a,role r WHERE r.idFilm=f.idFilm and a.idActeur=r.idActeur
remCette requête mérite une attention particulière et quelques explications:
  • On peut tout d'abord remarquer que l'on a toujours la même structure SELECT blabla FROM blabla WHERE blabla
  • Ici on a mis des alias films f, acteurs a, role r. f représente films, a représente acteurs et r role.
  • On choisit les champs à afficher le titre du film, le nom et le prénom des acteurs et le rôle joué
  • Dans l'instruction WHERE, on fait ce que l'on appelle une jointure.
Le résultat obtenu est le suivant:
Titre Nom Prénom Personnage
Matrix Dupont Paul Neo
Matrix Durand Jean Simone
La soupe aux choux Durand Jeanne Extra-terrestre