sql >> Databasteknik >  >> RDS >> Mysql

Varför kommer inte resultaten från en SQL-fråga tillbaka i den ordning jag förväntade mig?

Ordningen på en fråga kan tvingas fram genom att använda en "Order by"-sats i uttalandet. En SQL-databas förstår faktiskt inte vilken ordning du lägger saker i, eller lagrar data i en given ordning. Det betyder att du måste tala om för SQL vilken ordning du vill ha objekten i. Till exempel:

Select * from Table
  order by column1 desc

Tänk på det som att räcka lite saker till din vän att hålla - hon kommer att ha allt till dig senare, men hon förvarar det någonstans under tiden. Hon kan flytta runt den medan du inte vill göra plats för något annat, eller kanske lämna tillbaka den i samma ordning som du gav den till henne, men du sa inte åt henne att hålla ordning på den, så hon gör det inte .

Databaser måste kunna flytta runt saker i bakgrunden, så sättet de är byggda känner inte till någon ordning - du måste veta ordningen när du ger den till databasen, så att du kan lägga tillbaka den i beställning du vill ha senare. Orderklausulen tillåter SQL att lägga en order på data, men den kommer inte ihåg eller har en själv.

Viktig punkt :Även när SQL returnerade artiklarna i rätt ordning utan order-by-sats de senaste 1 miljon gångerna, garanterar det inte att det kommer att göra det. Även om ett klustrat index finns på bordet, är det inte garanterat att resultaten returneras i den ordning du förväntar dig. Speciellt när SQL-versioner ändras, kan inte explicit användning av en order by-klausul bryta program som antar att frågan kommer att vara i den ordning de vill ha!



  1. mysql lagrad procedur som kallar sig rekursivt

  2. Hur kan du se om ett PL/SQL-paket, en procedur eller en funktion används?

  3. Hur matar man ut resultatet av SELECT-satsen som exekveras med inbyggd dynamisk SQL?

  4. Hur skriver man IF ELSE-satsen i en MySQL-fråga