Lorsque vous travaillez avec des valeurs NULL, il est important de gérer les enregistrements NULL de votre base de données. Cet exemple décrit et explique comment trier et séparer les valeurs NULL et non NULL. Cet exemple devrait fonctionner avec tous les types de base de données, y compris MySQL, MS SQL et postgreSQL.
Commençons par un exemple.
Considérons une table d'employé.
commission salariale eid ename ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL 104 roi 5500 0 104 quartier 1500 300 105 adam 5500 800
Maintenant, vous voulez trier les résultats de la table employee par les commission colonne. Cependant, cette colonne est nullable, nous devrons donc spécifier si les valeurs NULL sont triées en dernier ou en premier.
Le résultat peut contenir des valeurs NULL triées en premier ou en dernier.
sélectionnez * dans l'ordre des employés par commission; commission salariale eid ename ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL 104 king 5500 0 104 ward 1500 300 105 adam 5500 800 (7 rangée (s) affectée (s))
sélectionnez * dans l'ordre des employés par commission desc; commission salariale eid ename ----------- -------------------- ----------- ---- ------- 105 adam 5500 800 104 ward 1500 300 104 king 5500 0 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 rangée (s) affectée (s))
Les requêtes ci-dessus trient les résultats pour la colonne nullable (commission). Si vous souhaitez trier les valeurs non NULL dans l'ordre croissant et décroissant et placer les valeurs NULL en premier ou en dernier lieu, vous pouvez utiliser des sous-requêtes avec une expression de casse.
À l'aide d'une expression de casse, vous pouvez marquer des valeurs NULL et des valeurs non NULL. Une fois cela fait, vous pouvez ajouter une colonne de drapeau dans la clause order by. Vous pouvez ensuite facilement trier les valeurs non NULL par ordre croissant / décroissant ou les valeurs NULL en première ou dernière position.
Tri des valeurs non NULL par ordre croissant ou décroissant.
sélectionnez eid, nom, salaire, commission de (sélectionnez *, cas où la commission est nulle, puis 1 sinon 0 se termine comme is_null de la part de l'employé) x order by is_null, commission; commission salariale eid ename ----------- -------------------- ----------- ---- ------- 104 king 5500 0 104 ward 1500 300 105 adam 5500 800 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 rangée (s) affectée (s))
Dans la requête ci-dessus, nous avons enfin trié les non-NULL par ordre croissant.
Tri des NULL en premier et des non-NULL par ordre décroissant.
sélectionnez eid, nom, salaire, commission de (sélectionnez *, cas où la commission est nulle, puis 1 sinon 0 se termine comme is_null de la part de l'employé) x ordre par is_null desc, commission desc; commission salariale eid ename ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL 105 adam 5500 800 104 ward 1500 300 104 king 5500 0 (7 rangée (s) affectée (s))
Vous pouvez maintenant voir les résultats. Les valeurs NULL sont triées en premier, suivies des non-NULL dans l'ordre décroissant.