Bonjour,
je révise les bases de données, notamment ce soir le langage SQL. Il m'est demandé d'extraire en une requête tous les sculpteurs qui ont au moins une œuvre au Louvre et aucune à Orsay.
Voici la structure de la base considérée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 musee ( nomM varchar(32) collate latin1_general_ci NOT NULL, ville varchar(64) collate latin1_general_ci NOT NULL, pays varchar(32) collate latin1_general_ci NOT NULL, N_Obj int(11) NOT NULL, Theme varchar(128) collate latin1_general_ci NOT NULL, PRIMARY KEY (nomM,N_Obj), KEY N_Obj (N_Obj) sculpteurs ( N_Auteur int(10) unsigned zerofill NOT NULL auto_increment, nom varchar(32) collate latin1_general_ci NOT NULL, prenom varchar(32) collate latin1_general_ci NOT NULL, PRIMARY KEY (N_Auteur) ) sculptures ( N_Obj int(10) unsigned zerofill NOT NULL auto_increment, titre varchar(32) collate latin1_general_ci NOT NULL, description varchar(128) collate latin1_general_ci NOT NULL, datecreation date NOT NULL, prix int(11) NOT NULL, valeurachat int(11) NOT NULL, dateachat date NOT NULL, N_Auteur int(10) unsigned zerofill NOT NULL, PRIMARY KEY (N_Obj), KEY titre (titre,N_Auteur)
Faut-il utiliser un outil particulier autre que les select, from, where, distinct et group by ? Si oui pouvez-vous me donner cette fameuse requête ?
D'avance merci.
Edit :
J'ai bien une solution, mais je la trouve très peu élégante (j'ai fini par me souvenir de la clause having
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT nom, prenom FROM sculpteurs AS a, ( SELECT DISTINCT N_Auteur, nomM FROM sculptures AS s, ( SELECT N_Obj, nomM FROM musee WHERE nomM = "Louvre" OR nomM = "Orsay" ) AS a WHERE s.N_Obj = a.N_Obj GROUP BY N_Auteur HAVING nomM <> "Orsay" ) AS s WHERE a.N_Auteur = s.N_Auteur
Partager