Affichage en requete sql

Fermé
alolou007 - 26 déc. 2013 à 13:38
 Utilisateur anonyme - 29 déc. 2013 à 13:33
Bonjour,

g un tableau comme ce lui ci
FRS(cod f,nom ,prenom,adresse ,ville) cod f clé primaire je voudrais savoir si je veus chercher tt les nom et prenom des fournisseur(FRS) de gabes et sfax(se sont des ville)

select nom,prenom from FRS where ville='gabes' or ville='sfax

select nom,prenom from FRS where ville IN ('gabes','sfax')

est ce correct???
c en requete SQL

et merci d'avance de m'aider

1 réponse

vaudzibir Messages postés 61 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 3
28 déc. 2013 à 21:53
Si tu veux impérativement les deux tu fais :

SELECT nom,prenom 
FROM FRS 
WHERE ville='gabes' AND ville='sfax


Et si tu veux soit l'un soit l'autre la tu fais :

SELECT nom,prenom 
FROM FRS 
WHERE ville='gabes' OR ville='sfax


Par contre, pour ta requête
SELECT nom,prenom
FROM FRS 
WHERE ville IN ('gabes','sfax')


ça peut marcher, mais c'est pas propre.

bs
0
Utilisateur anonyme
28 déc. 2013 à 23:06
Bonjour

WHERE ville='gabes' AND ville='sfax' est une absurdité totale. ville ne sera jamais simultanément égal à 'gabes' et à 'sfax'

WHERE ville IN ('gabes','sfax')
ça peut marcher, mais c'est pas propre.

Non seulement ça peut marcher, mais ça va marcher. Et c'est plus propre que le OR : Le OR est à 13,2 sur l'échelle de la propreté, alors que le IN est à 16,7.
0
vaudzibir Messages postés 61 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 3
28 déc. 2013 à 23:20
Effectivement, dans ce cas c'est un absurdité totale, je suis d'accord, j'ai répondu vite et je m'en excuse .. En ce qui concerne le IN, dans ce cas ça marche, mais de manière globale, si t'as une table avec 1000000 de lignes ... bon courage. Je maintiens, ce n'est pas propre.
0
si t'as une table avec 1000000 de lignes ... bon courage. Je maintiens, ce n'est pas propre.
Peu importe que la ta table ait 1,10,ou 100000 lignes, ça ne change rien à la longueur de la requête.
Mais bon, tu voulais peut-être dire si on veut mettre 100000 villes ? Avec un IN, la requête sera environ 2 fois plus courte qu'avec des OR : Avec un OR, tu rajoutes à chaque fois 'OR ville=' en plus du nom de la ville. Avec un IN, tu rajoutes seulement le nom de la ville.
La notion de 'propreté' n'est pas définie en informatique. Elle n'est n'employée que quand on n'a pas de véritable argument.

Précision : lis la doc mysql sur le IN, tu verras que la recherche est optimisée quand on utilse le IN avec une liste de constantes, alors qu'une série de OR ne garantit aucune optimisation. Non seulement la requête est plus courte, mais elle est plus rapide à l'exécution !
0
vaudzibir Messages postés 61 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 3
29 déc. 2013 à 12:59
Je m'incline :)
0
Utilisateur anonyme
29 déc. 2013 à 13:33
Errare humanum est, perseverare diabolicum.
C'est tellement rare les gens qui ne perseverare pas, félicitations ! ;-)
0