web-dev-qa-db-fra.com

ORDRE SQL PAR plusieurs colonnes

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 
);
20
user2201462

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).

35
Ken White

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.

6
Rahul

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?

1
Erwin Brandstetter

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..

1
kartiikeya

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.