Je souhaite trier mon tableau de produits sur deux colonnes: prod_price
et prod_name
.
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
Comment se fait le tri ici? Je pense que cela arrive d'abord par prod_price
puis par prod_name
. En outre, en quoi la requête ci-dessus est-elle différente de celle-ci:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_name;
Ma table de produits est la suivante:
CREATE TABLE Products
(
prod_id char(10) NOT NULL ,
vend_id char(10) NOT NULL ,
prod_name char(255) NOT NULL ,
prod_price decimal(8,2) NOT NULL ,
prod_desc text NULL
);
Tri dans un ORDER BY
est effectué par la première colonne, puis par chaque colonne supplémentaire dans l'instruction spécifiée.
Par exemple, considérez les données suivantes:
Column1 Column2
======= =======
1 Smith
2 Jones
1 Anderson
3 Andrews
La requête
SELECT Column1, Column2 FROM thedata ORDER BY Column1, Column2
trierait d'abord par toutes les valeurs de Column1
puis triez les colonnes par Column2
pour produire ceci:
Column1 Column2
======= =======
1 Anderson
1 Smith
2 Jones
3 Andrews
En d'autres termes, les données sont d'abord triées dans Column1
ordre, puis chaque sous-ensemble (Column1
lignes contenant 1
comme valeur) sont triés dans l'ordre de la deuxième colonne.
La différence entre les deux instructions que vous avez publiées est que les lignes de la première seront d'abord triées par prod_price
(ordre de prix, du plus bas au plus élevé), puis par ordre de nom (ce qui signifie que si deux articles ont le même prix, celui avec la valeur alpha la plus basse pour le nom sera répertorié en premier), tandis que le second triera ordre des noms uniquement (ce qui signifie que les prix apparaissent dans l'ordre en fonction du prod_name
sans égard au prix).
Les résultats sont classés par la première colonne, puis la seconde, et ainsi de suite pour autant de colonnes que la clause ORDER BY comprend. Si vous souhaitez que les résultats soient triés par ordre décroissant, votre clause ORDER BY doit utiliser le mot clé DESC directement après le nom ou le numéro de la colonne appropriée.
Découvrez cet exemple
SELECT first_name, last_name, hire_date, salary
FROM employee
ORDER BY hire_date DESC,last_name ASC;
Il ordonnera successivement. Commandez d'abord Hire_Date, puis LAST_NAME avant Hire_Date.
Oui, le tri est différent.
Éléments dans le ORDER BY
la liste est appliquée dans l'ordre.
Les éléments ultérieurs ne commandent que les pairs restants de l'étape précédente.
Pourquoi ne pas simplement essayer?
oui, le tri se déroule différemment. dans le premier scénario, les commandes basées sur la colonne1 et en plus de ce processus en triant colmun2 sur la base de la colonne1 .. dans le deuxième scénario, il commande entièrement sur la base de la colonne 1 uniquement ... veuillez procéder avec un exemple simple ... vous obtiendrez rapidement..
Cela dépend de la taille de votre base de données.
SQL est basé sur la théorie SET: il n'y a pas d'ordre intrinsèquement utilisé lors de l'interrogation d'une table.
Donc, si vous exécutez la première requête, elle serait d'abord triée par prix du produit, puis par nom de produit, s'il y avait des doublons dans la catégorie de prix, disons 20 $ par exemple, elle commanderait alors ces doublons par leurs noms, donc toujours en maintenant que lorsque vous exécutez votre requête, elle renvoie toujours le même ensemble de résultats dans le même ordre.
Si vous deviez exécuter la deuxième requête, elle ne serait commandée que par son nom, donc s'il y avait deux produits avec le même nom (pour une raison étrange), ils n'auraient pas d'ordre garanti après avoir exécuté la requête.