sql >> Database >  >> RDS >> Mysql

Waarom komen de resultaten van een SQL-query niet terug in de volgorde die ik verwacht?

De volgorde van een zoekopdracht kan worden afgedwongen door een 'Order by'-clausule in de instructie te gebruiken. Een SQL-database begrijpt eigenlijk niet in welke volgorde u dingen plaatst of de gegevens in een bepaalde volgorde opslaat. Dit betekent dat u SQL moet vertellen in welke volgorde u de items wilt hebben. Bijvoorbeeld:

Select * from Table
  order by column1 desc

Zie het als het overhandigen van wat spullen aan je vriend om vast te houden - ze zal het later allemaal voor je hebben, maar ze bewaart het in de tussentijd ergens. Ze kan het verplaatsen terwijl je geen ruimte wilt maken voor iets anders, of het teruggeven in dezelfde volgorde als je het haar hebt gegeven, maar je hebt haar niet gezegd om het op orde te houden, dus ze doet het niet .

Databases moeten in staat zijn om dingen op de achtergrond te verplaatsen, dus de manier waarop ze zijn gebouwd, kent intrinsiek geen volgorde - u moet de volgorde weten wanneer u deze aan de database geeft, zodat u deze terug kunt zetten in de bestelling die u later wilt. Met de order-clausule kan SQL een volgorde aan de gegevens opleggen, maar het onthoudt het niet of heeft er zelf een.

Belangrijk punt :Zelfs wanneer SQL de laatste 1 miljoen keer de items in de juiste volgorde retourneerde zonder een order by statement, kan dit niet garanderen. Zelfs als er een geclusterde index op de tabel staat, wordt niet gegarandeerd dat de resultaten worden geretourneerd in de volgorde die u verwacht. Vooral wanneer SQL-versies veranderen, kan het niet expliciet gebruiken van een order by-clausule programma's breken die ervan uitgaan dat de query in de gewenste volgorde staat!



  1. Oracle High Availability-concepten in PostgreSQL

  2. Onderhoudstaken voor SQL-databases automatiseren met SQLCMD

  3. Oracle:dagen tussen twee datums en weekdagen uitsluiten hoe om te gaan met negatieve getallen

  4. SQL Server 2017 Stap voor stap installatie -2