Exercice SQL
Fermé
nistarok
Messages postés
304
Date d'inscription
vendredi 27 juillet 2012
Statut
Membre
Dernière intervention
18 avril 2023
-
15 nov. 2016 à 15:19
nistarok Messages postés 304 Date d'inscription vendredi 27 juillet 2012 Statut Membre Dernière intervention 18 avril 2023 - 16 nov. 2016 à 11:13
nistarok Messages postés 304 Date d'inscription vendredi 27 juillet 2012 Statut Membre Dernière intervention 18 avril 2023 - 16 nov. 2016 à 11:13
A voir également:
- Pilote, avion vol sql
- Pilote son windows 10 - Télécharger - Pilotes & Matériel
- A quoi sert le mode avion - Guide
- Télécharger pilote imprimante hp - Télécharger - Pilotes & Matériel
- Pilote hdmi windows 10 - Télécharger - Pilotes & Matériel
- Pilote canon lbp 2900 - Télécharger - Pilotes & Matériel
1 réponse
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
16 nov. 2016 à 00:27
16 nov. 2016 à 00:27
Bonjour,
Nous ne sommes pas là pour faire les exercices à ta place.
Donc je veux bien t'aider (et éventuellement corriger) mais c'est tout.
La première réponse que tu donnes est fausse....
Ne connais tu pas les JOINTURES sur les tables ?
Car NUMAV < 300.... voudrait dire que tu ne cherches que les NUMÉROS d'avions qui seraient inférieur à 300 ... et non leur CAPACITE.
Et puis... à la question "quels sont les pilotes...." je ne suis pas sûr que seul leur ID suffise... mais je pense qu'il faut prendre leur nom également.
Bref...
La requête serait du genre :
Pour les autres questions... tu vas devoir utiliser des fonctions comme MAX / MIN
Je te laisse chercher...
PS: Tu peux t'amuser à tester en LOCAL en installant par exemple un xampp sur ton ORDI et en accédant à la BDD depuis phpmyadmin ou via un logiciel comme HeidiSql (https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql
Le code de création des tables est le suivant :
Tu pourras t'amuser à ajouter (ou modifier) des entrées dans tes différentes tables et ainsi tester tes requêtes pour voir ce qu'elles te retournent.
Par contre... j'ai l'impression que ton niveau de SQL est très bas..... commence par suivre quelques tutos sur le net avant de te lancer.
Nous ne sommes pas là pour faire les exercices à ta place.
Donc je veux bien t'aider (et éventuellement corriger) mais c'est tout.
La première réponse que tu donnes est fausse....
Ne connais tu pas les JOINTURES sur les tables ?
Car NUMAV < 300.... voudrait dire que tu ne cherches que les NUMÉROS d'avions qui seraient inférieur à 300 ... et non leur CAPACITE.
Et puis... à la question "quels sont les pilotes...." je ne suis pas sûr que seul leur ID suffise... mais je pense qu'il faut prendre leur nom également.
Bref...
La requête serait du genre :
SELECT * FROM vol V LEFT JOIN pilote P ON P.NUMPIL = V.NUMPIL LEFT JOIN avion A ON A.NUMAV = V.NUMAV WHERE A.CAPACITE > 300
Pour les autres questions... tu vas devoir utiliser des fonctions comme MAX / MIN
Je te laisse chercher...
PS: Tu peux t'amuser à tester en LOCAL en installant par exemple un xampp sur ton ORDI et en accédant à la BDD depuis phpmyadmin ou via un logiciel comme HeidiSql (https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql
Le code de création des tables est le suivant :
-- -------------------------------------------------------- -- Hôte: 127.0.0.1 -- Version du serveur: 5.6.12-log - MySQL Community Server (GPL) -- Serveur OS: Win32 -- HeidiSQL Version: 9.1.0.4867 -- -------------------------------------------------------- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8mb4 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -- Export de la structure de la base pour test3 CREATE DATABASE IF NOT EXISTS `test3` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `test3`; -- Export de la structure de table test3. avion CREATE TABLE IF NOT EXISTS `avion` ( `NUMAV` int(11) NOT NULL AUTO_INCREMENT, `NOMAV` varchar(50) DEFAULT NULL, `CAPACITE` varchar(50) DEFAULT NULL, `LOC` varchar(50) DEFAULT NULL, PRIMARY KEY (`NUMAV`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- L'exportation de données n'été pas sélectionné. -- Export de la structure de table test3. pilote CREATE TABLE IF NOT EXISTS `pilote` ( `NUMPIL` int(11) NOT NULL AUTO_INCREMENT, `NOMPIL` varchar(50) DEFAULT NULL, ` ADR` varchar(50) DEFAULT NULL, `SAL` double DEFAULT NULL, PRIMARY KEY (`NUMPIL`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; -- L'exportation de données n'été pas sélectionné. -- Export de la structure de table test3. vol CREATE TABLE IF NOT EXISTS `vol` ( `NUMVOL` int(11) NOT NULL AUTO_INCREMENT, `NUMPIL` int(11) DEFAULT NULL, `NUMAV` int(11) DEFAULT NULL, `VILLE_DEP` varchar(50) DEFAULT NULL, `VILLE_ARR` varchar(50) DEFAULT NULL, `H_DEP` datetime DEFAULT NULL, `H_ARR` datetime DEFAULT NULL, PRIMARY KEY (`NUMVOL`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- L'exportation de données n'été pas sélectionné. /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; /*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
Tu pourras t'amuser à ajouter (ou modifier) des entrées dans tes différentes tables et ainsi tester tes requêtes pour voir ce qu'elles te retournent.
Par contre... j'ai l'impression que ton niveau de SQL est très bas..... commence par suivre quelques tutos sur le net avant de te lancer.
16 nov. 2016 à 10:40
Oui je suis nul en sql j'en ai jamais fait. Après l'idée n'est pas qu'on file la réponse toute cuite ça sert à rien. C'est juste que je ne sais pas quel est le début de la logique de ce langage.
En fait donc mon idée c'était ça :
Alors je commence par un select vu que c'est la commande qui affiche. J'ai vu que la base "VOL" contient "numpil" (clé de pilote) et "numav" (clé de avion). Mes collègues m'ont dit que les clés (je sais pas si elles sont étrangères ou primaires) sont fixes alors moi j'avais dans l'idée que cette clé prend le paramètre de sa table si on le recherche (exemple si capacite = 300 alors numav = 300).
Soit :
SELECT numpil (je choisis les noms du pilote) FROM vol (dans la table vol qui a les clés des deux autres tables) WHERE numav < 300 (où numav = capacité est strictement supérieur à 300)
Mais... Non.
Bon si je comprends ta première explication :
SELECT * (je sélectionne tout les résultats)
FROM vol V (depuis la table vol, parce qu'il y a les clés de numav et numpil ?)
LEFT JOIN pilote P ON P.numpil = V.numpil (on croise / on joint les pilotes de la table numpil avec ceux de la table vol d'où l'intérêt mettre les variables "P" et "V")
LEFT JOIN avion A ON A.numav = V.numav (on croise / on joint les avions de la table numav avec ceux de la table vol d'où l'intérêt mettre les variables "A" et "V")
WHERE A.capacite > 300 (où la capacité de l'avion (table avion définie par "A" est supérieure à 300)
En résumé on met en croise les noms de pilotes de la table "pilote" et de la table "vol quand les résultats sont égaux, idem pour les avions quand la capacité de ces avions est strictement supérieure à 300.
Bon je vais réfléchir sur la 2.
16 nov. 2016 à 10:57
Oui. tu as 20/20 ^^
16 nov. 2016 à 11:13
Je vois pas trop comment l'écrire mais je vais essayer :
Je sais que c'est pas ça j'arrive pas à ordonner tout ça.
L'idée c'est de faire croiser les noms de pilotes de la table numpil avec celle de numvol quand l'adresse du pilote (P.adr) est identifique à la ville d'atterrissage de l'avion (V.ville_att). Après le min est pas cohérent mais je sais pas où le mettre. Il doit me manquer quelque chose c'est clair.