sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor kommer resultater fra en SQL-forespørgsel ikke tilbage i den rækkefølge, jeg forventer?

Rækkefølgen af ​​en forespørgsel kan fremtvinges ved at bruge en 'Order by'-klausul i erklæringen. En SQL-database forstår faktisk ikke, hvilken rækkefølge du sætter tingene i, eller gemmer dataene i en given rækkefølge. Det betyder, at du skal fortælle SQL, hvilken rækkefølge du vil have varerne i. For eksempel:

Select * from Table
  order by column1 desc

Tænk på det som at give nogle ting til din veninde at holde - hun vil have det hele til dig senere, men hun gemmer det et sted i mellemtiden. Hun flytter det måske rundt, mens du ikke ønsker at gøre plads til noget andet, eller hun kan give det tilbage i samme rækkefølge, som du gav hende det, men du sagde ikke til hende, at hun skulle holde det i orden, så hun gør det ikke .

Databaser skal kunne flytte rundt på tingene i baggrunden, så den måde, de er bygget på, ved ikke i sig selv om nogen rækkefølge - du skal kende rækkefølgen, når du giver den til databasen, så du kan lægge den tilbage i bestiller du senere. Ordrebestemmelsen tillader SQL at pålægge en ordre på dataene, men den husker ikke eller har en alene.

Vigtigt punkt :Selv når SQL returnerede varerne i den rigtige rækkefølge uden en ordre for sætning de sidste 1 million gange, garanterer det ikke, at det vil gøre det. Selvom der findes et klynget indeks på bordet, er resultaterne ikke garanteret at blive returneret i den rækkefølge, du forventer. Især når SQL-versioner ændres, kan ikke eksplicit brug af en orden efter klausul bryde programmer, der antager, at forespørgslen vil være i den rækkefølge, de ønsker!



  1. Tabelfiltrering i IRI Workbench

  2. Hvordan ved jeg, hvornår min docker mysql-beholder er oppe, og mysql er klar til at tage forespørgsler?

  3. Markørbaserede poster i PostgreSQL

  4. SUBSTRING Kommando i SQL:A Primer