IN
Sélection de résultat contenu parmi d'autre
12/09/2008
1693 lectures
1 commentaire
5/5 (1 vote)
Nous allons voir ici un mot clé bien pratique pour pratiquer des sélections sur un ensemble de données. Imaginez par exemple le schéma suivant :
Dont voici le contenu des deux tables que nous allons utiliser :
IN permet de sélectionner des valeurs parmi un ensemble d'enregistrement. Imaginez que nous voudrions sélectionner le nom et le prénom des personnes qui ont une voiture dont l'identifiant vaut 1. Ici, nous ne pouvons pas faire cela en un seul SELECT car l'identifiant des personnes qui ont une voiture avec 1 comme identifiant se trouve dans la table PERSONNE_VOITURE alors que le nom et le prénom de ces personnes se trouvent dans la table PERSONNES.
Une solution serait bien évidemment d'utiliser IN. Le principe serait de sélectionner les identifiants des personnes qui ont une voiture avec 1 comme identifiant et d'ensuite, sélectionner le nom et le prénom des personnes dont l'identifiant est renvoyé par la première sélection. Faisons donc cela pas à pas. Commençons par écrire la requête qui renverra les identifiants de tous les personnes ayant une voiture avec 1 comme identifiant. Tapez donc :
Le résultat renvoyé par cette commande est le suivant :
Ces deux nombres sont donc les identifiants des membre ayant une voiture dont l'identifiant est 1. Nous ne pouvons pas faire un deuxième SELECT avec comme condition le fait que l'identifiant du membre à sélectionner doit être égal au résultat que notre requête vient de renvoyer car justement il y a plusieurs résultats. La solution est donc de récupérer le nom et le prénom des personnes dont l'identifiant se trouve DANS (IN) les résultats renvoyés par la première requête. La syntaxe serait donc :
Si vous exécutez cette requête, voici ce que vous allez obtenir :
Comme vous le voyez, les résultats sont corrects. La requête a bien sélectionné les membres dont l'identifiant se trouvait dans les résultats renvoyés par la requête SELECT imbriquée.
Il est également possible de sélectionner toutes les personnes n'ayant pas une voiture dont l'identifiant est 1. Il suffirait de sélectionner toutes les personnes sauf celles qui ont une voiture dont l'identifiant est 1. C'est simple, il suffit simplement de sélectionner cela grâce à la négation de IN, c'est à dire NOT IN :
Dans ce cas, vous ne verrez apparaître qu'Albert Einstein car c'est le seul qui ne possède pas de voiture avec 1 comme identifiant. La requête a donc sélectionné toutes les personnes dont l'identifiant n'apparaît pas dans la requête sélectionnant les personnes ayant une voiture dont l'identifiant est 1.
Dont voici le contenu des deux tables que nous allons utiliser :
PERSONNES
PERSONNE_VOITURE
IN permet de sélectionner des valeurs parmi un ensemble d'enregistrement. Imaginez que nous voudrions sélectionner le nom et le prénom des personnes qui ont une voiture dont l'identifiant vaut 1. Ici, nous ne pouvons pas faire cela en un seul SELECT car l'identifiant des personnes qui ont une voiture avec 1 comme identifiant se trouve dans la table PERSONNE_VOITURE alors que le nom et le prénom de ces personnes se trouvent dans la table PERSONNES.
Une solution serait bien évidemment d'utiliser IN. Le principe serait de sélectionner les identifiants des personnes qui ont une voiture avec 1 comme identifiant et d'ensuite, sélectionner le nom et le prénom des personnes dont l'identifiant est renvoyé par la première sélection. Faisons donc cela pas à pas. Commençons par écrire la requête qui renverra les identifiants de tous les personnes ayant une voiture avec 1 comme identifiant. Tapez donc :
Le résultat renvoyé par cette commande est le suivant :
Ces deux nombres sont donc les identifiants des membre ayant une voiture dont l'identifiant est 1. Nous ne pouvons pas faire un deuxième SELECT avec comme condition le fait que l'identifiant du membre à sélectionner doit être égal au résultat que notre requête vient de renvoyer car justement il y a plusieurs résultats. La solution est donc de récupérer le nom et le prénom des personnes dont l'identifiant se trouve DANS (IN) les résultats renvoyés par la première requête. La syntaxe serait donc :
Si vous exécutez cette requête, voici ce que vous allez obtenir :
Comme vous le voyez, les résultats sont corrects. La requête a bien sélectionné les membres dont l'identifiant se trouvait dans les résultats renvoyés par la requête SELECT imbriquée.
Il est également possible de sélectionner toutes les personnes n'ayant pas une voiture dont l'identifiant est 1. Il suffirait de sélectionner toutes les personnes sauf celles qui ont une voiture dont l'identifiant est 1. C'est simple, il suffit simplement de sélectionner cela grâce à la négation de IN, c'est à dire NOT IN :
Dans ce cas, vous ne verrez apparaître qu'Albert Einstein car c'est le seul qui ne possède pas de voiture avec 1 comme identifiant. La requête a donc sélectionné toutes les personnes dont l'identifiant n'apparaît pas dans la requête sélectionnant les personnes ayant une voiture dont l'identifiant est 1.






1 commentaires
tkf a dit:
une fois de plus bon tuto, simple, bien detaillé et facile à comprendre
Ajouter un commentaire