sql >> Databáze >  >> RDS >> Mysql

Proč se výsledky z dotazu SQL nevracejí v očekávaném pořadí?

Pořadí dotazu lze vynutit pomocí klauzule „Pořadí podle“ v příkazu. SQL databáze ve skutečnosti nerozumí tomu, v jakém pořadí dáváte věci nebo ukládáte data v daném pořadí. To znamená, že musíte SQL sdělit, v jakém pořadí chcete položky. Například:

Select * from Table
  order by column1 desc

Přemýšlejte o tom, jako byste předali nějaké věci své přítelkyni, aby ji podržela - bude to mít později pro vás, ale mezitím si to někde uloží. Může s ním pohybovat, když se nesnažíte uvolnit místo pro něco jiného, ​​nebo ho může vrátit zpět ve stejném pořadí, v jakém jste jí ho dali, ale neřekli jste jí, aby to udržovala v pořádku, takže to neudělá. .

Databáze musí být schopny přesouvat věci na pozadí, takže způsob, jakým jsou vytvořeny, ve své podstatě nezná žádnou objednávku – musíte znát objednávku, když ji dáte do databáze, abyste ji mohli vrátit zpět do databáze. objednejte později. Klauzule objednávky umožňuje SQL uložit příkaz na data, ale nepamatuje si ho nebo ho nemá sám o sobě.

Důležitý bod :I když SQL vracel položky ve správném pořadí bez příkazu příkazem naposledy 1 milionkrát, nezaručuje, že tak učiní. I když v tabulce existuje seskupený index, není zaručeno, že se výsledky vrátí v očekávaném pořadí. Zejména při změně verzí SQL může nepoužití explicitně řazení podle klauzule narušit programy, které předpokládají, že dotaz bude v pořadí, jaké chtějí!



  1. Jak formátovat čísla v SQL Server

  2. Selhalo stavební kolo pro psycopg2 - MacOSX pomocí virtualenv a pip

  3. Proaktivní monitorování MySQL (Developer Studio/Advisors Angle)

  4. Jak změnit typ dat sloupce v SQL Server (T-SQL)