Aide requêtes SQL

kayz-r

New Member
Bonsoir à tous !

J'ai quelques requêtes SQL à faire, mais le problème c'est que je ne sais pas comment les faire.

Apparemment, sur celles-ci il faut avoir les conditions GROUP BY et HAVING. Mais je ne sais pas quand les mettre. Donc si vous pouviez m'aider, je vous serai reconnaissant. Voilà le sujet :

Les requêtes à faire (cadre rouge) :
http://img452.imageshack.us/img452/4913/gestiondesgtespage2891fn.jpg

Le MCD :
http://img206.imageshack.us/img206/8554/gestiondesgtespage2905rj.jpg
pas les photos , les liens merci.Salwa[/color]

Merci d'avance !
 

kayz-r

New Member
Ah désolé !

Sinon, mes requêtes ressemblent à ça :

a) SELECT Count(N° gîte), nom propriétaire
FROM GITE, PROPRIETAIRE
WHERE Gîte.n°propriétaire=Propriétaire.n°propriétaire
AND A partir de là je bloque !

b) SELECT nom gîte, nom propriétaire
FROM Gîte, Propriétaire
WHERE Gîte.n°propriétaire=Propriétaire.n°propriétaire
AND Nom propriétaire="MIGNOT"
Idem, je bloque

c) SELECT nom gîte, n° client
FROM Client, Contrat, Gîte
WHERE Contrat.n°client=Client.n°client
AND Contrat.n°gîte=Gîte.n°gîte
AND n°client=34

d) SELECT n°contrat
FROM Contrat
WHERE n°contrat=14
AND Etat contrat="Validé";

e) DELETE *
FROM Gîte, Propriétaire
WHERE Nom propriétaire="CROIZIER";

Voilà ! Si vous pouviez me corriger, ça serai sympa !
 

vestale974

Well-Known Member
Salut,
Déjà HAVING est toujours utilisé avec les requêtes intégrant les fonctions de regroupement SUM, COUNT, AVG, etc.
De plus en utilisant une fonction de regroupement, il faut impérativement dans SELECT indiquer un alias AS...

a)
SELECT Nom_Prop, COUNT(ID_Prop#) AS Nombre_de_gite
FROM GITE, PROPRIETAIRE
WHERE GITE.ID_Prop#=PROPRIETAIRE.ID_Prop
GROUP BY Nom_Prop
HAVING COUNT(ID_Prop#)>5;

b)
SELECT Nom_Gite
FROM GITE, PROPRIETAIRE
WHERE GITE.ID_Prop=PROPRIETAIRE.ID_Prop
AND Nom_Prop="MIGNOT"
AND Nb_epis=(SELECT Nb_epis
                    FROM GITE
                    WHERE ID_Gite=34;);
c)
SELECT Nom_Gite
FROM GITE, PLANNING, CONTRAT
WHERE GITE.ID_Gite=PLANNING.ID_Gite#
AND PLANNING.ID_Contrat#=CONTRAT.ID_Contrat
AND CONTRAT.ID_Client#=34
AND CONTRAT.Etat_Contrat="oui"  <---- à vérifier si etat = oui/non dans l'énnoncé
ORDER BY Nom_Gite;

d)
UPDATE CONTRAT SET Etat_Contrat="validé"  <---- à véridier si état = oui/non dans l'énnoncé
WHERE ID_Contrat=14;

e)
DELETE GITE.*
FROM GITE....

@+
 

drine

New Member
bonjour tout le monde!
moi aussi j'ai des difficultées sur les requêtes SQL.

mon modèle relationnelle correspond à ça:
PRISE EN CHARGE (#n°enjtrée+#n°prise en charge, date début prise en charge, date fin prise en charge)
CHAMBRE (n°chambre, nombre lit, coté jardin oui-non)
HOSPITALISATION (n°entrée, nom médecin traitant,#n°dossier patient)
PATIENT (n°dossier,nom,prénom,rue,cp,ville,n°tel,n°ss,date naissance)
PRESCRIPTION (n°prescription,date prescription, #n°prise en charge)
MEDICAMENT (code médicament,nom médicament)
PORTER SUR (#n°prescription,#code médicament,#date posologie, posologie par jour, durée traitement)

voilà. et mes requêtes demandées sont :
1/ quels patients (n° de dossier, nom, prénom) ont occupé la chambre n°12 ?
2/ quelle est la durée de prise en charge du patient n° 75427 ?
3/ on désire obtenir un état statistique qui fournisse le nombre d'hospitalisations pour chaque patient.

mes réponses sont :
1/ SELECT*FROM patient (n° de dossier patient, nom patient, prénom patient)
   WHERE n° chambre = (select n° chambre from chambre where n° chambre = [12])

2/ SELECT (date début de prise en charge - date fin de prise en charge +1) AS nombre de jours
    FROM PRISE EN CHARGE
    WHERE patient = "75427"

3/ SELECT nom patient SUM (nombre d'hospitalisations) AS nombre d'hospitalisations
FROM hospitalisation,patient
    WHERE n°dossier patient = group by n°entrée

si quelqu'un peut me dire si ce que j'ai fait est juste (je pense très fortement que non), et sinon me donner quelques conseils.
je pense que ma troisième requête est fausse mais je ne trouve pas vraiment comment la faire.

j'ai vraiment beaucoup de mal pour faire des requêtes! j'ai besoin d'aide!

merci d'avance
 

leilei

New Member
Salut moi aussi je suis sur ce devoir et déjà ton modèle relationnel est faux
PRISE EN CHARGE(N°Prise en charge, Date début prise en charge, Date fin prise en charge, #N°chambre, #N°Entrée)

Ensuite pour la 1°requête moi j'ai fait :
Select N°Dossier patient, Nom Patient, Prénom patient
From PATIENT P, CHAMBRE C, HOSPITALISATION H, CONCERNER CO, PRISE EN CHARGE PC
Where P.[N°Dossier patient]=CO.[#N°Dossier patient]
and CO.[#N°Entrée]=H.[N°Entrée]
and H.[N°Entrée]=PC.[#N°Entrée]
and PC.[#N°Chambre]=C.[N°Chambre]
and [N°Chambre]=12.
Je pense qu'elle est juste...
Par contre pour les 2 autres je galère aussi!!!
Si quelqu'un pouvait nous aider, ce serait sympa!!!!!!
 

vestale974

Well-Known Member
drine link=topic=14076.msg138433#msg138433 date=1139744762 a dit:
1/ quels patients (n° de dossier, nom, prénom) ont occupé la chambre n°12 ?
   SELECT*FROM patient (n° de dossier patient, nom patient, prénom patient)
   WHERE n° chambre = (select n° chambre from chambre where n° chambre = [12])

SELECT N°Dossier, NomPatient, PrenomPatient
FROM PATIENT, HOSPITALISATION, PRISEENCHARGE
WHERE PATIENT.N°Dossier = HOSPITALISATION.N°Dossier#
AND HOSPITALISATION.N°Entree = PRISEENCHARGE.N°Entree#
AND PRISEENCHARGE.N°Chambre# = 12 ;


2/ quelle est la durée de prise en charge du patient n° 75427 ?
    SELECT (date début de prise en charge - date fin de prise en charge +1) AS nombre de jours
    FROM PRISE EN CHARGE
    WHERE patient = "75427" <--- Attention, des guillemets si les valeurs sont alphanumériques

SELECT ((date_fin_de_prise_en_charge - date_debut_de_prise_en_charge)+1) As Nombre_de_jours
FROM PRISEENCHARGE, HOSPITALISATION
WHERE PRISEENCHARGE.N°Entree# = HOSPITALISATION.N°Entree
AND HOSPITALISATION.N°Dossier# = 75427 ;


3/ on désire obtenir un état statistique qui fournisse le nombre d'hospitalisations pour chaque patient.
    SELECT nom patient SUM (nombre d'hospitalisations) AS nombre d'hospitalisations
    FROM hospitalisation,patient
    WHERE n°dossier patient =  group by n°entrée

SELECT N°Dossier#, COUNT(N°Entree) As nombre_d_hospitalisation
FROM HOSPITALISATION
GROUP BY N°Dossier# ;