AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 231745
Accepted
Raymond Nijland
Raymond Nijland
Asked: 2019-03-10 10:52:57 +0800 CST2019-03-10 10:52:57 +0800 CST 2019-03-10 10:52:57 +0800 CST

Uso ORDER BY na subconsulta (tabela derivada) Padrão SQL permitido ou não

  • 772

A documentação do MariaDB está mencionando que a ORDER BYcláusula nas subconsultas (tabela derivada) nunca é permitida pelos padrões SQL.

Significando a consulta SQL

SELECT
   field1
 , field2
FROM (
  SELECT
       field1
     , field2
  FROM
   table1
  ORDER BY field2
) alias

nunca é permitido pelos padrões SQL

Uma "tabela" (e subconsulta na cláusula FROM também) é - de acordo com o padrão SQL - um conjunto não ordenado de linhas. As linhas em uma tabela (ou em uma subconsulta na cláusula FROM) não vêm em nenhuma ordem específica. É por isso que o otimizador pode ignorar a cláusula ORDER BY que você especificou. Na verdade, o padrão SQL nem permite que a cláusula ORDER BY apareça nesta subconsulta

ver fonte

Mas quando eu olho para o padrão SQL 92. (eu sei que é antigo)

4.9 Tabelas

...
...
Uma tabela é uma tabela base, uma tabela visualizada ou uma tabela derivada. Uma tabela base é uma tabela base persistente, uma tabela temporária global, uma tabela temporária local criada ou uma tabela temporária local declarada.
...
...
Uma tabela derivada é uma tabela derivada direta ou indiretamente de uma ou mais outras tabelas pela avaliação de um arquivo <query expression>. Os valores de uma tabela derivada são derivados dos valores das tabelas subjacentes quando o <query expression>é avaliado.
...
...

As tabelas simplesmente subjacentes de tabelas derivadas e cursores são definidas na Subcláusula 7.9, "<query specification>", Subcláusula 7.10, "<query expression>", e Subcláusula 13.1, "<declare cursor>". Uma tabela visualizada não possui tabelas simplesmente subjacentes.

Eles mencionam cursores para ver o que eles dizem sobre cursores e o que são.

4.21 Cursores

...
...

Um cursor no estado aberto identifica uma tabela , uma ordenação das linhas dessa tabela e uma posição relativa a essa ordenação. Se o <declare cursor>não incluir um <order by clause>, ou incluir um <order by clause>que não especifica a ordem das linhas completamente, então as linhas da tabela terão uma ordem que é definida apenas na medida em que <order by clause>especifica uma ordem e depende da implementação.

Então eles mencionam aqui que um cursor em estado aberto pode ser uma tabela ou uma tabela base, uma tabela visualizada ou uma tabela derivada. se você observar como eles definem o que é uma tabela na seção 4.9 Tabelas

Se eu ler isso, poderia estar interpretando-o como usando ORDER BYuma tabela derivada (como a consulta SQL acima) é perfeitamente válido pelos padrões SQL e cabe aos fornecedores se eles permitirem ORDER BYcomo opção.
Mas eu estaria interpretando errado inglês não é minha mãe laungauge, então a questão é estou interpretando corretamente?

sql-standard
  • 1 1 respostas
  • 1919 Views

1 respostas

  • Voted
  1. Best Answer
    jmoreno
    2019-03-10T12:56:55+08:002019-03-10T12:56:55+08:00

    Um cursor não é uma tabela, ele se refere a uma tabela ou a uma visão dessa tabela. O cursor tem uma ordem apenas na medida em que a consulta que define o cursor tem uma ordem por. Uma subconsulta dentro dessa consulta maior não definiria a ordem, e o fato de a consulta estar sendo usada para um cursor não faz uma ordem na sintaxe legal da subconsulta.

    Basicamente, como em qualquer outra consulta, se você não tiver uma ordem na camada mais externa, o otimizador estará livre para retornar os resultados da maneira que julgar mais fácil/rápida. Ele pode tirar proveito de índices ou caches ou qualquer outra coisa que permita produzir o resultado correto, mas não está limitado a isso.

    • 2

relate perguntas

  • Onde posso encontrar o documento padrão SQL?

  • Qual é o resultado correto para esta consulta?

  • Planos ANSI/ISO para padronização LIMIT?

  • De acordo com a especificação do SQL92, posso armazenar o valor 1 em um campo onde a precisão = escala?

  • Qual a diferença entre os dialetos SQL (DML-) dos principais fornecedores de banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve