[(colonne1, colonne2, ...)]
SELECT [colonne1, colonne2, ...]
FROM nom_table2
[WHERE ...]
Vous n'êtes bien sûr pas obligés de préciser dans quelles colonnes se fait l'insertion, si vous sélectionnez une valeur pour toutes
les colonnes de la table. Ce sera cependant rarement le cas puisque nous avons des clés primaires auto-incrémentées.
Avec cette requête, il est absolument indispensable (sinon l'insertion ne se fera pas), d'avoir le même nombre de colonnes dans
l'insertion et dans la sélection, et qu'elles soient dans le même ordre.
Si vous n'avez pas le même nombre de colonnes, cela déclenchera une erreur. De plus, si l'ordre n'est pas bon, vous aurez
probablement une insertion erronée.
Nous allons donc insérer le résultat de notre requête qui sélectionne les id de l'espèce et la race directement dans notre table
Animal.
Pas de souci, mais il faut également insérer le nom, le sexe, etc.
En effet ! Mais c'est très facile. Souvenez-vous, vous pouvez très bien faire des requêtes de ce type :
Code : SQL
SELECT 'Yoda' AS nom;
Et donc, en combinant avec notre requête précédente :
Code : SQL
SELECT id AS race_id, espece_id FROM Race WHERE nom = 'Maine coon';
Vous pouvez obtenir très facilement, et en une seule requête, tous les renseignements indispensables à l'insertion de notre petit
Yoda !
Code : SQL
SELECT 'Yoda', 'M', '2010-11-09', id AS race_id, espece_id
FROM Race WHERE nom = 'Maine coon';
Attention à ne pas oublier les guillemets autour des chaînes de caractères, sinon MySQL va essayer de trouver la
colonne Yoda de la table Race, et forcément ça générera une erreur.
Si tout se passe bien, cette requête devrait vous donner ceci :
Yoda M 2010-11-09 race_id espece_id
Yoda M 2010-11-09 5
2
Les noms qui sont donnés aux colonnes n'ont pas d'importance, mais vous pouvez les changer avec des alias si cela vous
perturbe.
Venons-en maintenant à notre super insertion !
Code : SQL
INSERT INTO Animal
(nom, sexe, date_naissance, race_id, espece_id)
-Je précise les colonnes puisque je ne donne pas une valeur pour
Partie 2 : Index, jointures et sous-requêtes
124/414
www.openclassrooms.com
SELECT [colonne1, colonne2, ...]
FROM nom_table2
[WHERE ...]
Vous n'êtes bien sûr pas obligés de préciser dans quelles colonnes se fait l'insertion, si vous sélectionnez une valeur pour toutes
les colonnes de la table. Ce sera cependant rarement le cas puisque nous avons des clés primaires auto-incrémentées.
Avec cette requête, il est absolument indispensable (sinon l'insertion ne se fera pas), d'avoir le même nombre de colonnes dans
l'insertion et dans la sélection, et qu'elles soient dans le même ordre.
Si vous n'avez pas le même nombre de colonnes, cela déclenchera une erreur. De plus, si l'ordre n'est pas bon, vous aurez
probablement une insertion erronée.
Nous allons donc insérer le résultat de notre requête qui sélectionne les id de l'espèce et la race directement dans notre table
Animal.
Pas de souci, mais il faut également insérer le nom, le sexe, etc.
En effet ! Mais c'est très facile. Souvenez-vous, vous pouvez très bien faire des requêtes de ce type :
Code : SQL
SELECT 'Yoda' AS nom;
Et donc, en combinant avec notre requête précédente :
Code : SQL
SELECT id AS race_id, espece_id FROM Race WHERE nom = 'Maine coon';
Vous pouvez obtenir très facilement, et en une seule requête, tous les renseignements indispensables à l'insertion de notre petit
Yoda !
Code : SQL
SELECT 'Yoda', 'M', '2010-11-09', id AS race_id, espece_id
FROM Race WHERE nom = 'Maine coon';
Attention à ne pas oublier les guillemets autour des chaînes de caractères, sinon MySQL va essayer de trouver la
colonne Yoda de la table Race, et forcément ça générera une erreur.
Si tout se passe bien, cette requête devrait vous donner ceci :
Yoda M 2010-11-09 race_id espece_id
Yoda M 2010-11-09 5
2
Les noms qui sont donnés aux colonnes n'ont pas d'importance, mais vous pouvez les changer avec des alias si cela vous
perturbe.
Venons-en maintenant à notre super insertion !
Code : SQL
INSERT INTO Animal
(nom, sexe, date_naissance, race_id, espece_id)
-Je précise les colonnes puisque je ne donne pas une valeur pour
Partie 2 : Index, jointures et sous-requêtes
124/414
www.openclassrooms.com
