SQL requetes
hobow
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
SamFish Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
SamFish Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Voilà je suis nouveau sur le forum et j'apprends actuellement la créations de tables et les requêtes SQL. Je viens vers vous afin de savoir si c'est celles-ci sont correctes et pouvoir progresser. Je m'excuse par avance de mes erreurs.... :oups:
Voici mon schéma (BDD d'un zoo)
ANIMAL (id_a ,nom_a, datenaiss_a, id_m, id_endroit, race_fam, ori_fam)
ENFANT (id_enf, nom_enf,datenaiss_enf, id_a_pere,id_a_mere)
FAMILLE(race_fam,ori_fam)
ENDROIT (id_e, type_e, superf_e,nbmaxoccupant_e)
MENU (id_menu,quteviande_menu,qutelegume_menu)
Voici ma table animal qui je pense est fausse car je n'ai pas intégré les clés étrangères id_e,race_fam et origine_fam mais je ne sais pas où mentionner ""FOREIGN KEY" "
CREATE TABLE ANIMAL
( id_a CHAR(6) NOT NULL PRIMARY KEY
, nom_a VARCHAR(20) NOT NULL
, datenaiss_a DATE(10) NOT NULL
, id_menu CHAR(6) NOT NULL REFERENCES MENU (ID_MENU)
, id_endroit CHAR(6) NOT NULL REFERENCES ENDROIT(ID_ENDROIT)
, race_fam VARCHAR 20) NOT NULL
, race_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(RACE_FAM)
, ori_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(ORI_FAM);)
Et voici mes requêtes :
1.Liste de tous les animaux qui sont parents et le nombre d'enfants qu'ils ont
SELECT nom_a
FROM ANIMAL
GROUP BY ENFANT
2.Liste des animaux dont les deux parents sont connus
SELECT id_a_pere,id_a_mere
FROM ENFANT
3.Moyenne de la qté de viande servie dans le menu des singes
SELECT AVG(quteviande_menu)
FROM MENU
WHERE FAMILLE='singe'
Je vous remercie par avance pour votre aide et vos corrections
Bonne journée
H.
Voilà je suis nouveau sur le forum et j'apprends actuellement la créations de tables et les requêtes SQL. Je viens vers vous afin de savoir si c'est celles-ci sont correctes et pouvoir progresser. Je m'excuse par avance de mes erreurs.... :oups:
Voici mon schéma (BDD d'un zoo)
ANIMAL (id_a ,nom_a, datenaiss_a, id_m, id_endroit, race_fam, ori_fam)
ENFANT (id_enf, nom_enf,datenaiss_enf, id_a_pere,id_a_mere)
FAMILLE(race_fam,ori_fam)
ENDROIT (id_e, type_e, superf_e,nbmaxoccupant_e)
MENU (id_menu,quteviande_menu,qutelegume_menu)
Voici ma table animal qui je pense est fausse car je n'ai pas intégré les clés étrangères id_e,race_fam et origine_fam mais je ne sais pas où mentionner ""FOREIGN KEY" "
CREATE TABLE ANIMAL
( id_a CHAR(6) NOT NULL PRIMARY KEY
, nom_a VARCHAR(20) NOT NULL
, datenaiss_a DATE(10) NOT NULL
, id_menu CHAR(6) NOT NULL REFERENCES MENU (ID_MENU)
, id_endroit CHAR(6) NOT NULL REFERENCES ENDROIT(ID_ENDROIT)
, race_fam VARCHAR 20) NOT NULL
, race_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(RACE_FAM)
, ori_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(ORI_FAM);)
Et voici mes requêtes :
1.Liste de tous les animaux qui sont parents et le nombre d'enfants qu'ils ont
SELECT nom_a
FROM ANIMAL
GROUP BY ENFANT
2.Liste des animaux dont les deux parents sont connus
SELECT id_a_pere,id_a_mere
FROM ENFANT
3.Moyenne de la qté de viande servie dans le menu des singes
SELECT AVG(quteviande_menu)
FROM MENU
WHERE FAMILLE='singe'
Je vous remercie par avance pour votre aide et vos corrections
Bonne journée
H.
A voir également:
- SQL requetes
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Jointure sql ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
3 réponses
Il faudrait optimiser le modèle et les tables.
ZOA_ANIMAL (
ZOA_ID_ANIMAL
ZOA_NOM_ANIMAL
ZOA_DESCRIPTION
ZOA_DATE_NAISS
ZOA_ID_MENU
ZOA_ID_ENDROIT
ZOA_ID_FAMILLE
ZOA_ID_PERE
ZOA_ID_MERE)
ZOP_PARENT (
ZOP_ID_PARENT
ZOP_ID_ENFANT
ZOP_DESCRIPTION)
ZOE_ENDROIT (
ZOE_ID_ENDROIT
ZOE_TYPE_ENDROIT
ZOE_DESCRIPTION
ZOE_SUPERFICIE
ZOE_MAX_OCC)
ZOM_MENU (
ZOM_ID_MENU,
ZOM_QTE_VIANDE
ZOM_QTE_LEGUME)
ZOF_FAMILLE (
ZOF_ID_FAMILLE
ZOF_RACE_FAMILLE
ZOF_ORIGINE)
Pour ce qui est des index, chaque ID de chaque table (sauf la table ENF_ENFANT) est
une pk.
Pour les FK, ce sont des contraintes qu'il faut ajouter aux tables.
Requêtes :
1. Liste de tous les animaux qui sont parents et le nombre d'enfants qu'ils ont :
SELECT ZOP_ID_PARENT, ZOP_ID_ENFANT, ZOP_DESCRIPTION FROM ZOP_PARENT GROUP BY ZOP_ID_PARENT, ZOP_DESCRIPTION;
// Comme cela, on a tous les parents avec leurs enfants et leur lien (description : PERE, MERE)
2. SELECT ZOP_ID_ENFANT, ZOP_ID_PARENT GROUP BY ZOP_ID_ENFANT HAVING COUNT (*) > 1;
3. SELECT AVG (ZOM_QTE_VIANDE)
FROM ZOM_MENU,
ZOF_FAMILLE,
ZOA_ANIMAL
WHERE ZOF_ID_FAMILLE = ZOA_ID_FAMILLE
AND ZOF_RACE_FAMILLE = 'SINGE'
AND ZOA_ID_MENU = ZOM_ID_MENU;
Pourquoi j'ai mis des ZO devant les tables, c'est simplement pour les associer à un système quelconque.
Dans votre cas, on parle de ZOO. alors j'ai mis ZO. De plus, le fait de mettre le préfixe de 3 lettres de la table
devant chaque colonne de celle-ci fait en sorte que si j'avais un SELECT A.DESCRIPTION FROM ANIMAL A
c'est moins évident à lire que SELECT ZOA_DESCRIPTION FROM ZOA_ANIMAL.
On voit immédiatement de quelle table ça provient.
C'est encore plus pratique quand on a 3 colonnes descriptions (imaginez a.description, b.description, c.description).
ZOA_ANIMAL (
ZOA_ID_ANIMAL
ZOA_NOM_ANIMAL
ZOA_DESCRIPTION
ZOA_DATE_NAISS
ZOA_ID_MENU
ZOA_ID_ENDROIT
ZOA_ID_FAMILLE
ZOA_ID_PERE
ZOA_ID_MERE)
ZOP_PARENT (
ZOP_ID_PARENT
ZOP_ID_ENFANT
ZOP_DESCRIPTION)
ZOE_ENDROIT (
ZOE_ID_ENDROIT
ZOE_TYPE_ENDROIT
ZOE_DESCRIPTION
ZOE_SUPERFICIE
ZOE_MAX_OCC)
ZOM_MENU (
ZOM_ID_MENU,
ZOM_QTE_VIANDE
ZOM_QTE_LEGUME)
ZOF_FAMILLE (
ZOF_ID_FAMILLE
ZOF_RACE_FAMILLE
ZOF_ORIGINE)
Pour ce qui est des index, chaque ID de chaque table (sauf la table ENF_ENFANT) est
une pk.
Pour les FK, ce sont des contraintes qu'il faut ajouter aux tables.
Requêtes :
1. Liste de tous les animaux qui sont parents et le nombre d'enfants qu'ils ont :
SELECT ZOP_ID_PARENT, ZOP_ID_ENFANT, ZOP_DESCRIPTION FROM ZOP_PARENT GROUP BY ZOP_ID_PARENT, ZOP_DESCRIPTION;
// Comme cela, on a tous les parents avec leurs enfants et leur lien (description : PERE, MERE)
2. SELECT ZOP_ID_ENFANT, ZOP_ID_PARENT GROUP BY ZOP_ID_ENFANT HAVING COUNT (*) > 1;
3. SELECT AVG (ZOM_QTE_VIANDE)
FROM ZOM_MENU,
ZOF_FAMILLE,
ZOA_ANIMAL
WHERE ZOF_ID_FAMILLE = ZOA_ID_FAMILLE
AND ZOF_RACE_FAMILLE = 'SINGE'
AND ZOA_ID_MENU = ZOM_ID_MENU;
Pourquoi j'ai mis des ZO devant les tables, c'est simplement pour les associer à un système quelconque.
Dans votre cas, on parle de ZOO. alors j'ai mis ZO. De plus, le fait de mettre le préfixe de 3 lettres de la table
devant chaque colonne de celle-ci fait en sorte que si j'avais un SELECT A.DESCRIPTION FROM ANIMAL A
c'est moins évident à lire que SELECT ZOA_DESCRIPTION FROM ZOA_ANIMAL.
On voit immédiatement de quelle table ça provient.
C'est encore plus pratique quand on a 3 colonnes descriptions (imaginez a.description, b.description, c.description).
Bonsoir,
Merci beaucoup pour votre réponse, c'est vrai que c'est beaucoup plus clair ! :)
Cependant, je n'ai pas encore compris pour les clé étrangère (fk)... Est-ce que le script SQL de ma table est tout de même correct en terme de données ? Et en gardant ma table de base avec "enfant" à la place de "parent"
CREATE TABLE ANIMAL
( id CHAR(6) NOT NULL PRIMARY KEY
, nom VARCHAR(20) NOT NULL
, date_naiss DATE(10) NOT NULL
, menu CHAR(6) NOT NULL REFERENCES MENU (ID_MENU)
, zoa_id_endroit CHAR(6) NOT NULL REFERENCES ENDROIT(ID_ENDROIT)
, zoa_race_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(RACE_FAM)
, zoa_ori_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(ORI_FAM)
;)
Encore merci !
H.
Merci beaucoup pour votre réponse, c'est vrai que c'est beaucoup plus clair ! :)
Cependant, je n'ai pas encore compris pour les clé étrangère (fk)... Est-ce que le script SQL de ma table est tout de même correct en terme de données ? Et en gardant ma table de base avec "enfant" à la place de "parent"
CREATE TABLE ANIMAL
( id CHAR(6) NOT NULL PRIMARY KEY
, nom VARCHAR(20) NOT NULL
, date_naiss DATE(10) NOT NULL
, menu CHAR(6) NOT NULL REFERENCES MENU (ID_MENU)
, zoa_id_endroit CHAR(6) NOT NULL REFERENCES ENDROIT(ID_ENDROIT)
, zoa_race_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(RACE_FAM)
, zoa_ori_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(ORI_FAM)
;)
Encore merci !
H.