Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1709 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5
Auteur Sujet :

Projet SQL

n°1558583
lumi
Posté le 11-05-2007 à 08:42:01  profilanswer
 

Reprise du message précédent :
apparament ca serait plutot pour oracle  
 
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);


---------------

mood
Publicité
Posté le 11-05-2007 à 08:42:01  profilanswer
 

n°1558587
lumi
Posté le 11-05-2007 à 08:46:03  profilanswer
 

la meme chose pour mysql
 
MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));  
 
 
 
mais hier quand j'ai essayé de faire ca j'avais des erreurs


---------------

n°1558598
lumi
Posté le 11-05-2007 à 09:13:18  profilanswer
 

ca parrait correct ca ??

 


Citation :

create table ordonnance(code_ordonnance int not null auto_increment,  date_ordonnance date, foreign key code_medecin references medecin (code_medecin), foreign key code_client references client (code_client), foreign key code_examen references examen (code_examen), primary key(code_ordonnance));

 


apparament ca ne fonctionne pas


Message édité par lumi le 11-05-2007 à 09:14:42

---------------

n°1558599
skeye
Posté le 11-05-2007 à 09:15:15  profilanswer
 

quelle est l'erreur?


---------------
Can't buy what I want because it's free -
n°1558600
lumi
Posté le 11-05-2007 à 09:18:13  profilanswer
 

probleme de syntaxe [:spamafote]


---------------

n°1558602
lumi
Posté le 11-05-2007 à 09:20:07  profilanswer
 

je vais retenter de cette maniere :
 

Citation :

CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));


 
on verra si ca fonctionne
 
pas envie de rendre un projet oracle alors qu'on me demande du mysql


Message édité par lumi le 11-05-2007 à 09:20:32

---------------

n°1558607
skeye
Posté le 11-05-2007 à 09:22:40  profilanswer
 

lumi a écrit :

probleme de syntaxe [:spamafote]


Je te demande quelle est l'erreur exacte, pas une approximation. C'est censé te donner une indication de ce qui ne va pas...:o


---------------
Can't buy what I want because it's free -
n°1558614
lumi
Posté le 11-05-2007 à 09:29:19  profilanswer
 

euh desolé je l'ai plus sous les yeux la j'ai cours de TCL/TK (quelle horreure)
 
mais la console te dit juste de checker le manuel et que c'est une erreure de syntaxe a la ligne 1 [:cerveau heink]


---------------

n°1558633
MagicBuzz
Posté le 11-05-2007 à 09:38:47  profilanswer
 

perso, mise à part la PK (et encore) je ne déclare jamais les contraintes dans le code de création de la table.
 
je trouve la syntaxe pourrie et illisible.
 
ça marche pas un truc du genre ?
PS : syntaxe SQL Server, ça demande donc certainement quelques adaptations, déjà au niveau du nom des types qui ne sont pas les mêmes ;)
 

Code :
  1. CREATE TABLE a
  2. (
  3.   id numeric NOT NULL,
  4.   lib varchar(50) NOT NULL
  5. )
  6. go
  7.  
  8. CREATE TABLE b
  9. (
  10.   id numeric NOT NULL,
  11.   lib varchar(50) NOT NULL,
  12.   id_a numeric NOT NULL
  13. )
  14. go
  15.  
  16. ALTER TABLE a ADD constraint pk_a PRIMARY KEY (id)
  17. go
  18.  
  19. ALTER TABLE b ADD constraint pk_b PRIMARY KEY (id)
  20. go
  21.  
  22. ALTER TABLE b ADD constraint fk_ab FOREIGN KEY (id_a) REFERENCES a (id)
  23. go

n°1558643
MagicBuzz
Posté le 11-05-2007 à 09:56:39  profilanswer
 

PS : On voit dans mon exemple surtout ce qui est intéressant lorsqu'on créer les contraintes "à la main" en dehors de la déclaration de la table... Ici, on peut (doit) leur donner un nom, ce qui est très pratique pour la suite. Par exemple, tu as un "arbre" avec un a.pere_id reference a.id
Lors de l'ajout de l'élément root, (a.id = 1 / a.pere_id = 1) tu ne va pas pouvoir remplir l'élément de clé étrangère puisque l'enregistrement n'existe pas encore. Il est donc intéressant de désactiver manuellement la FK, ce qui est impossible si tu ne lui donne pas de nom.
 

Code :
  1. CREATE TABLE a
  2. (
  3.  id numeric NOT NULL,
  4.  pere_id numeric NOT NULL,
  5.  val varchar(50)
  6. )
  7. go
  8.  
  9. ALTER TABLE a ADD constraint pk_a PRIMARY KEY (id)
  10. go
  11.  
  12. ALTER TABLE a ADD constraint fk_aa FOREIGN KEY (pere_id) REFERENCES a(id)
  13. go


 
Tentative d'insertion de lignes :

Code :
  1. INSERT INTO a (id, pere_id, val) VALUES (1, 1, 'root');


 
:heink: Euh... Sous SQL Server 2005 ils ont modifié le fonctionnement du truc, ça passe sans désactiver la FK ! :pt1cable:
 
M'enfin bon, logiquement, ça doit faire ça :


Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint "fk_aa". The conflict occurred in database "test", table "dbo.a", column 'id'.
The statement has been terminated.


 
Ce qui se corrige donc comme ceci :

Code :
  1. -- Je désactive la contrainte
  2. ALTER TABLE a nocheck constraint fk_aa
  3. go
  4.  
  5. -- J'insère un truc qui est totalement impossible (je n'ai pas d'élément avec id = 12) mais ça passe puisque la contrainte est désactivée
  6. INSERT INTO a (id, pere_id, val) VALUES (3, 12, 'element 3');
  7.  
  8. -- Je réactive la contrainte : pas d'erreur, car la ré"activation n'engendre pas de test sur les valeurs existantes
  9. -- On peut donc de balader des données incohérentes, il faut faire attention. Si on veut l'éviter, il faut supprimer la contrainte et la recréer
  10. -- car la création d'une contrainte engendre la vérification des données existantes
  11. ALTER TABLE a CHECK constraint fk_aa
  12. go


Message édité par MagicBuzz le 11-05-2007 à 09:57:47
mood
Publicité
Posté le 11-05-2007 à 09:56:39  profilanswer
 

n°1558664
lumi
Posté le 11-05-2007 à 10:18:20  profilanswer
 

merci je vais analyser ca plus tard
 
mais je sais deja que l'histoire de contrainte je ne l'ai jamais vue


---------------

n°1558676
tet2neu
emmerdeur
Posté le 11-05-2007 à 10:26:27  profilanswer
 

l'histoire de "alter table" [:aloy]  
 
ça te permet d'ajouter les PK, les index, toussa en dehors du script basique de création de la table

n°1558685
lumi
Posté le 11-05-2007 à 10:32:27  profilanswer
 

ok, mais comme il faut lui envoyer toutes les commandes si c'est possible de créer la table entiere d'un seul coup c'est cool :D
 
 
bon j'ai toujours pas reverrifié la comande de base comme on a vu en "cours"


---------------

n°1558692
tet2neu
emmerdeur
Posté le 11-05-2007 à 10:36:33  profilanswer
 

bah de toute façon tu mets tout dans le même script. Tu vas pas lui envoyer un fichier par table [:jkley]


Message édité par tet2neu le 11-05-2007 à 10:36:42
n°1558696
lumi
Posté le 11-05-2007 à 10:38:21  profilanswer
 

non forcement


---------------

n°1558735
joce
Architecte / Développeur principal
"BugHunter"
Posté le 11-05-2007 à 11:14:07  profilanswer
 

Loom the Gloom a écrit :

Je trouve ça excellent qu'on vous fasse faire du SQL mais que vous n'évoquiez même pas les concepts préalables :heink:


ceci dit j'ai jamais fait de merise non plus :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°1558774
MagicBuzz
Posté le 11-05-2007 à 11:41:32  profilanswer
 

joce a écrit :

ceci dit j'ai jamais fait de merise non plus :D


ça se voit pas du tout [:cerveau foudtag]

n°1558783
Loom the G​loom
Even coders get the blues...
Posté le 11-05-2007 à 11:56:25  profilanswer
 

joce a écrit :

ceci dit j'ai jamais fait de merise non plus :D


 
grillé, mais on ne s'en serait pas douté :o


---------------
Music|Market|Feed|Loom|DVD
n°1558802
lumi
Posté le 11-05-2007 à 12:11:16  profilanswer
 

bon tout fonctionne comme ceci :
 
 
 

Citation :

create table laboratoire(code_labo int auto_increment, nom_labo varchar(20), adresse_labo varchar(20), pageweb_labo varchar(30), tel_labo int, fax_labo int, mail_labo char(30), primary key(code_labo));
 
create table client(code_client int not null auto_increment, nom_client varchar(20), adresse_client varchar(20), primary key(code_client));
 
create table medecin(code_medecin int not null auto_increment, nom_medecin varchar(20), adresse_medecin varchar(20), primary key(code_medecin));
 
create table examen(code_examen int not null auto_increment, type_examen varchar(20), nom_examen varchar(20), prix_examen int not null, primary key(code_examen));
 
create table ordonnance(code_ordonnance int not null auto_increment,  date_ordonnance date,  code_medecin integer,  code_client integer,  code_examen integer, primary key(code_ordonnance), foreign key (code_medecin) references medecin(code_medecin), foreign key (code_client) references client(code_client), foreign key (code_examen) references examen(code_examen));
 
create table service (code_service int not null auto_increment, nom_service varchar(20), code_examen integer, code_labo integer, primary key (code_service), foreign key (code_examen) references examen(code_examen), foreign key (code_labo) references laboratoire(code_labo));
 
create table secretaire (code_secret int not null auto_increment, nom_secret varchar(20), code_labo integer, primary key(code_secret), foreign key (code_labo) references laboratoire(code_labo));
 
create table commande (code_commande varchar(9), code_ordonnance integer, paiement varchar(20), primary key(code_commande), foreign key(code_ordonnance) references ordonnance(code_ordonnance));



---------------

n°1558838
lumi
Posté le 11-05-2007 à 12:51:44  profilanswer
 

j'ai reussi a remplir la premiere table, ca va aller come sur des roulettes (ou pas)

 


Message édité par lumi le 11-05-2007 à 12:52:07

---------------

n°1558952
lumi
Posté le 11-05-2007 à 15:16:25  profilanswer
 

tables crées, relations otpimisées, tables remplies [:cerveau jap]


---------------

n°1558972
lumi
Posté le 11-05-2007 à 15:38:36  profilanswer
 

voila mon shema relationnel :
 

Citation :


laboratoire (code_labo,nom_labo,adresse_labo,pageweb_labo,tel_labo,fax_labo,mail_labo)
 
client (code_client,nom_client,adresse_client)
 
medecin (code_medecin,nom_medecin,adresse_medecin)
 
secretaire (code_secret,nom_secret)
 
service (code_service,nom_service,code_labo)
 
examen (code_examen,type_examen,nom_examen,prix_examen,delai,code_service)
 
ordonnance (code_ordonnance,date_ordonnance,code_medecin,code_client,code_examen,code_secret)
 
commande (code_commande,num_commande,code_ordonnance,paiement)


Message édité par lumi le 11-05-2007 à 16:15:38

---------------

n°1558988
lumi
Posté le 11-05-2007 à 15:53:17  profilanswer
 

et voila la premiere requete :
 

Citation :

select distinct nom_client from client where adresse_client in('strasbourg','colmar','haguenau');
 
+----------------+
| nom_client  |
+----------------+
| bey              |
| dupont        |
| krauss         |
| bruno          |


 
 
pour montrer que j'avance [:cerveau dawacube]


Message édité par lumi le 11-05-2007 à 15:53:36

---------------

n°1558992
MagicBuzz
Posté le 11-05-2007 à 15:54:25  profilanswer
 

souligné : pk
gras : fk
 
plus facile pour s'y retrouver

n°1559005
lumi
Posté le 11-05-2007 à 16:13:06  profilanswer
 

premiere requete compliquée :
 
affichez les clients et les dates de commandes, et classez par ordre croissant du numero de commande :
 
 
ca va deja me faire piocher dans 3 tables : client, ordonnance et commande
 
[:cerveau totoz]


---------------

n°1559006
lumi
Posté le 11-05-2007 à 16:13:21  profilanswer
 

MagicBuzz a écrit :

souligné : pk
gras : fk
 
plus facile pour s'y retrouver


 
ouais pas bete


---------------

n°1559049
lumi
Posté le 11-05-2007 à 17:01:16  profilanswer
 

lumi a écrit :

premiere requete compliquée :
 
affichez les clients et les dates de commandes, et classez par ordre croissant du numero de commande :
 
 
ca va deja me faire piocher dans 3 tables : client, ordonnance et commande
 
[:cerveau totoz]


 
 
resolue !! [:cerveau youpi]


---------------

n°1559078
lumi
Posté le 11-05-2007 à 17:43:26  profilanswer
 

je m'arrete la :

 

listez les clients qui n'ont jamais commandé d'examen radiologique

 

(partie : jointures internes)

 

il nous conseille de faire une jointure interne pour trouver toutes les commandes contenant un examen radiologique et ensuite faire une jointure externe avec la table client

 


edit : il faut utiliser not exists ?


Message édité par lumi le 11-05-2007 à 17:45:59

---------------

n°1559141
MagicBuzz
Posté le 11-05-2007 à 19:28:04  profilanswer
 

si tu passes par une externe, tu n'en as pas besoin.
par contre, la syntaxe est effectivement pas super claire (et pas logique au premier abords) alors qu'avec un exists et une sous-requête, c'est infiniment plus clair (mais aussi légèrement plus lent selon les SGBD)

n°1559143
lumi
Posté le 11-05-2007 à 19:31:25  profilanswer
 

ok je vais essayer ca demain, la j'ai plus la force pour bosser :D


---------------

n°1559145
tet2neu
emmerdeur
Posté le 11-05-2007 à 19:33:06  profilanswer
 

en même temps c'est dredi quoi :o

n°1559433
lumi
Posté le 12-05-2007 à 17:56:09  profilanswer
 

bon j'y ai pas passé bcp de temps aujourd'hui
 
mais si qq'un a deja une idée de la forme approximative de cette requete c'est toujours bon a prendre


---------------

n°1559507
gocho
Posté le 13-05-2007 à 01:02:51  profilanswer
 

moi je dirais :  
tous les clients - tous les clients qui ont commandé un exam.
 
 
mais comme ca, au premier abord, a 1h du mat un samedi :p

n°1559508
lumi
Posté le 13-05-2007 à 01:07:32  profilanswer
 

ok j'avais bien compris ca :D

 

mais niveau syntaxe ca pourrait ressmelber a quoi?

 

jsais pas si on utilise ca pr les BDD mais me faudrait un espece d'algorithme


Message édité par lumi le 13-05-2007 à 01:07:59

---------------

n°1559581
gocho
Posté le 13-05-2007 à 13:56:59  profilanswer
 

qu'est ce que tu connais comme operateur d'appartenance? (a part le not exists que tu a deja cité)

n°1559710
lumi
Posté le 13-05-2007 à 20:06:35  profilanswer
 

gocho a écrit :

qu'est ce que tu connais comme operateur d'appartenance? (a part le not exists que tu a deja cité)


 
 
exists , not exists, in , not in  
 
voila c'est tout je crois


---------------

n°1559778
gocho
Posté le 13-05-2007 à 23:43:07  profilanswer
 

ben deja avec le 'not in' tu dois pouvoir faire quelque chose non?
 
"tous les clients" not in "tous les clients qui ont demandé un exam"
 
 
 
edit : sinon y'a aussi 'minus' qui devrait pouvoir te sortir le bon résultat.
mais je sais pas si ca marche sur tous les SGBD.


Message édité par gocho le 13-05-2007 à 23:45:05
n°1559782
lumi
Posté le 14-05-2007 à 00:07:42  profilanswer
 

ok je verrai ca , demain 8h30 environ je m'y remet


---------------

n°1559818
gocho
Posté le 14-05-2007 à 08:47:44  profilanswer
 

ca y est?tu t'y es mis ? :o

n°1559822
tet2neu
emmerdeur
Posté le 14-05-2007 à 09:00:02  profilanswer
 

dictateur :o

 


bon, faut p'tet que j'aille au boulot moi...


Message édité par tet2neu le 14-05-2007 à 09:00:22
n°1559823
MagicBuzz
Posté le 14-05-2007 à 09:17:07  profilanswer
 

oublie les exists et autres.
 
le prof a parlé de jointure externe, et c'est faisable avec une jointure externe.
 
=> tous ceux qui n'ont pas fait d'examen
 
Ca se traduit de 3 manières différentes :
- Tous les patients SAUF (not exists / not in) ceux qui ont passé un exament (nécessite une sous-requête)
- Tous les patients MOINS ceux qui ont passé un exeman (DIFFERENCE) (supporté sur PostGreSQL, et pas grand chose d'autre)
- Le CONTRAIRE de ceux qui ont passé un exament (OUTER JOIN) (supporté par tous les SGBD dans toutes leurs versions - ou presque -)
 
Pour trouver la syntaxe avec le "contraire", commence par faire ta requête normalement avec des INNER JOIN tout ce qu'il y a de plus classique, affin de trouver ceux qui ont passé un exament.
Ensuite, modifie ton INNER JOIN en LEFT/RIGHT OUTER JOIN, et compare les résultats : dans les champs de "examen", pour les clients qui n'en ont jamais passé, tu as la valeur "null".
=> T'as plus qu'à rajouter un test sur un de ces champs déclaré en "NOT NULL" dans la table histoire de ne pas te faire avoir par des données incomplètes, afin d'isoler tout ceux qui n'ont jamais passé d'exament.


Message édité par MagicBuzz le 14-05-2007 à 09:20:49
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5

Aller à :
Ajouter une réponse
 

Sujets relatifs
import gros fichier SQL dans MysqlProb : Type de données VB6 et SQL Server
cherche codeur pour projet 3dCorrection d'une requete SQL Delete....
Projet SGBD / Access / SQL => Compatibilité logiciels[SQL/NOOB] cherche de l'aide sur un projet de base de données
Lister toutes les requettes SQL du projet en PHP ?PROJET BASE DE DONNEE ACCESS SQL GRAPHIQUE ? HELP PLEASE
SQL Projet de base de données bibliotheque[SQL] HELLO, Gros projet-->Générateur de requêtes sql
Plus de sujets relatifs à : Projet SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR