< language SQL | Forum des BTS

language SQL

protoss

Member
Question relative au language SQL:

Quand il s'agit de mettre les liens entres les relations, peut on utiliser 2 fois de suite les mêmes liens :pascompris;
Ok c'est pas super clair, avec un exemple ça peut passer.
A la fin de la requete quand on fait les jointure:

WHERE ARTISTE A, CONCERT C, INTERPRETER T
AND A.NumArtiste=T.Numartiste
AND T.Numartiste=C.Numartiste &lt;----- je peux utiliser 2fois le même lien??

ou alors ce n'est même pas necessaire??
 
protoss link=topic=9849.msg87373#msg87373 date=1134593540 a dit:
Question relative au language SQL:

Quand il s'agit de mettre les liens entres les relations, peut on utiliser 2 fois de suite les mêmes liens  :pascompris;
Ok c'est pas super clair, avec un exemple ça peut passer.
A la fin de la requete quand on fait les jointure:

WHERE ARTISTE A, CONCERT C, INTERPRETER T
AND A.NumArtiste=T.Numartiste
AND T.Numartiste=C.Numartiste    &lt;----- je peux utiliser 2fois le même lien?? 

ou alors ce n'est même pas necessaire??
Salut,
Pourrais-tu  nous donner le Modèle relationnel de ton exercice.
J'ai comme un énorme doute sur tes clauses relationnelles puisqu'on ne peut rédiger en l'état la clause :
WHERE ARTISTE A, CONCERT C, INTERPRETER T
car c'est plutôt :
FROM ARTISTE A, CONCERT C, INTERPRETER T
De plus, il est impossible d'avoir
AND A.NumArtiste=T.Numartiste
AND T.Numartiste=C.Numartiste
puisque semble-t-il T.Numartiste est une clé composée de la CIM INTERPRETER T, où bien je me trompe, et à elle seule elle ne peut assurer une relation avec plusieurs tables.
Regarde la pièce jointe du post.

Il y a une petite erreur dans artiste.pdf, il faut ajouter :
AND CONCERT.Concert = &quot;Nom du concert&quot; ;
@+
 
langage SQL

pas de problème ce modèle à été fait par mes soins, donc peut être pas irréprochable....

PRISE EN CHARGE: #N°prise de charge;#N°entrée; date.début.prise.en.charge; Date.fin.prise.en.charge;#N°chambre

HOSPITALISATION:N°entrée; Nom medecin traitant

PATIENT:N°Dossier.patient; Nom du patient; prénom du patient; rue patient; CP; Ville; N°Tel; N°SS

CHAMBRE: N°Chambre; Nombre de lits; côté jardinON

PRESCRIPTION: N°Prescription; date prescription; #N°Prise en charge

MEDICAMENT: Code médicament; Nom médicament

CONCERNER: #N°Entrée; #N°Dossier patient

PORTER SUR: #Date; #Code médicament; #N°prescription; posologie par jour; Durée traitement

DATE: Date

Il s'agit de dire quels patients ont occupé la chambre 12.
 
Salut,
PRISE EN CHARGE(#N°prise de charge;#N°entrée; date.début.prise.en.charge; Date.fin.prise.en.charge;#N°chambre)
D'où vient cet attribut? Est-ce une clé composée, une clé primaire?

Sinon à la question posée, il faut composer avec:
PRISE EN CHARGE, HOSPITALISATION, CONCERNER et PATIENT
@+
 
il provient du schéma conceptuel des données, c'est l'identifiant.
J'ai eu a faire le MLD de ce schéma, mais cette identifiant n'a pas été inventé, j'ai rajouté N°entrée car il est en contrainte d'identification avec une autre avec l'entité HOSPITALISATION. :smile:
 
tu penses avoir juste a ton mld vu que tu l as fais à partir du mcd ??
si non ben si ton mld est faux ton sql est obligatoirement faux sauf dans certains cas :)
 
Aller je relance sur le même post, pour un nouvel exo:
Voila mon mld (une partie):
GARE ( n°gare, nomgare, #n°ville)
Ville ( n°ville, nomville )

On me demande de lister les gares de la vile de Lyon.
La réponse :
SELECT nomgare
FROM GARE
WHERE numville =(SELECT numville  FROM VILLE WHERE nomville=&quot;Lyon&quot;)

Juste une petite question pratique, pourquoi ne peut on pas faire une seule requête?
 
protoss link=topic=9849.msg111132#msg111132 date=1137600687 a dit:
Aller je relance sur le même post, pour un nouvel exo:
Voila mon mld (une partie):
GARE ( n°gare, nomgare, #n°ville)
Ville ( n°ville, nomville )

On me demande de lister les gares de la vile de Lyon.
La réponse :
SELECT nomgare
FROM GARE
WHERE numville =(SELECT numville  FROM VILLE WHERE nomville=&quot;Lyon&quot;)
WHERE #n°ville In (SELECT n°ville  FROM VILLE WHERE nomville=&quot;Lyon&quot;);
C'est plutôt cette syntaxe pour ta clause  :excl:

Juste une petite question pratique, pourquoi ne peut on pas faire une seule requête?
Sauf erreur, tu as bien qu'une seule requête  :laugh:
Il vaut voir le problème d'un autre point de vue. L'avantage de cette syntaxe est de n'utiliser qu'une seule table et non pas 2.

Tu es d'accord avec moi, on aurait pu écrire la requête de la façon suivante :
SELECT nomgare
FROM VILLE, GARE
WHERE #n°ville=n°ville
AND nomville=&quot;Lyon&quot;;
 
Ok je me suis mal exprimé.
Oui je suis tout à fait d'accord, c'est exactement la requete que j'ai faite. Ok je vois, j et eremercie pour ton aide.
:wink2:
 
Je relance ce post, j'ai encore une question  :wink2:

Voilà, j'ai un MCD, j'en tire le schéma relationnel, et une relation se présente comme cela:

COMMANDE (Numcde, Datecom, #Numclient, #Numtransport)

Numclient appartient à la relation CLIENT

Après, toujours sur le même exo, je dois écrire des requêtes SQL, l'une d'elle:

&quot;Numéro des com passées le 23/12/2000 par le client dont le numéro est 13&quot;

Donc la requête:
SELECT Numcom
FROM COMMANDE
WHERE Datecom=23/12/200
AND Numclient=13

Voilà ma question, je n'ai pas à rajouter la table CLIENT car NumClient est une clé externe à la relation COMMANDE c'est bien ça??

Si Numclient n'aurait pas été une clé externe à COMMANDE, alors ma requête aurait été:

SELECT Numcom, Numclient
FROM COMMANDE, CLIENT
WHERE Datecom=23/12/200
AND Numclient=13

Est ce bien ça?
 
la requête suivante part sur le même principe (clé externe) mais dans ce cas là ils font une jointure... :pascompris; pas compris...

CLIENT(Numclient, Nomclient, ....#Numrepres)
REPRESENTANT (Numreprest...)

Requête
trouver les numéros et nom des clients représentés par les commerciaux des secteurs 1 ou 2

corrigé
SELECTNumclient, Nomclient
FROM CLIENT, REPRESENTANT
WHERE CLEINT.Numreprs= REPRESENTANT.Numrepres
AND ..

Pourquoi avoir fait une jointure là et pas dans l'exemple précédent??
 
Il me semble qu'il y a une belle différence entre les infos que tu as données (notamment le numéro de commande qui est 13 et la date) et la recherche à faire pour les clients.
En effet, là où le premier est une interrogation simple de tables, le deuxième est une composition entre les clients et les commerciaux.

Aïe, bonjour la clarté, désolée de ne pouvoir t'aider plus ... Par contre, toute info relative au P10 m'intéresse énormément donc espérons que quelqu'un réponde ...
 
langage SQL

Mais détrompe toi, tu viens de m'éclairer plus que tu ne le crois.
En effet ça parait pourtant évident...
Merci, c'est déjà un bon début de réponse. :wink2:
 
protoss link=topic=9849.msg177555#msg177555 date=1142955194 a dit:
Je relance ce post, j'ai encore une question  :wink2:

Donc la requête:
SELECT Numcom
FROM COMMANDE
WHERE Datecom=23/12/200
AND Numclient=13

Voilà ma question, je n'ai pas à rajouter la table CLIENT car NumClient est une clé externe clé étrangère de la relation COMMANDE c'est bien ça??Non, parce que tout simplement, la valeur qui vous sert de critère existe dans la table COMMANDE

Si Numclient n'aurait pas été une clé externe à COMMANDE ce qui serait alors impossible, alors ma requête aurait été: Non, si le critère existe dans une autre table que la table COMMANDE, alors vous devez désigner cette table sur la ligne FROM

SELECT Numcom, Numclient
FROM COMMANDE
WHERE Datecom=23/12/200
AND #Numclient IN (SELECT Numclient FROM CLIENT Where Nomclient = &quot;martin&quot;;); on admet que 13 = martin
 
protoss link=topic=9849.msg177578#msg177578 date=1142956358 a dit:
la requête suivante part sur le même principe (clé externe) mais dans ce cas là ils font une jointure... :pascompris; pas compris...

CLIENT(Numclient, Nomclient, ....#Numrepres)
REPRESENTANT (Numreprest...)

Requête
trouver les numéros et nom des clients représentés par les commerciaux des secteurs 1 ou 2

corrigé
SELECTNumclient, Nomclient
FROM CLIENT, REPRESENTANT
WHERE #Numrepres IN (SELECT Numrepres FROM REPRESENTANT WHERE Zone=1 OR Zone=2;);
 
Retour
Haut