Recherche en sql

Fermé
emaro - 17 mai 2010 à 23:07
 fiu - 18 mai 2010 à 02:11
bonsoir,
en sql je veux savoir comment faire une recherche sur les lignes d'une table dont la valeur d'une colonne est la même d'une ligne qu'on connait la clé primaire par exemple.
prenons cette table contenant les informations sur les éléves d'une classe :
éléves (num_eleve,nom,age)
comment trouver les élèves ayant le même âge qu' Alice par exmple??
mercii bonne soirée.
A voir également:

1 réponse

Salut,

Tu as à ta disposition 2 méthodes
* la plus employée fait appel à une sous-requête mais introduit une mauvaise habitude : la sous-requête car bien que pratique, elle est souvent grosse consommatrice dans des constructions légèrement plus compliquées
* la plus efficace fait appel à 2 exemplaires de la même table : un pour explorer la liste et l'autre pour citer la référence


1. en utilisant une sous-requête
la requete principale est select nom from eleve where age = age_d_Alice
la requête pour avoir l'âge d'Alice est select age from eleves where nom = 'Alice'
Donc en remplaçant le critère dans dans la requête principale par la sous-requête on a select nom from eleve where age = (select age from eleves where nom = 'Alice')
Comme tu peux le voir, c'est simple rapide et pratique. Son seul défaut est que la sous-requête est (en théorie) exécutée à chaque ligne de la requête principale

2. Avec deux exemplaires de la même table
nous allons prendre les même requêtes que précédemment, mais nous n'allons pas créer une sous-requête (maintenant que nous savons qu'elle est potentiellement dangereuse), nous allons nous contenter de juxtaposer les requêtes l'une en face de l'autre. Comme les 2 requêtes sont basées sur la même table, il va quand même falloir préciser ici et là de quelle table on parle : des élèves utilisés dans la première requête ou de ceux utilisés dans la seconde. Nous utiliserons donc e1 pour la première table & e2 pour la seconde :
select e1.nom
from eleve e1, eleve e2
where e1.age = e2.age
and e2.nom = 'Alice'

ça te va ?
0