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 / 1014
Accepted
René Nyffenegger
René Nyffenegger
Asked: 2011-02-02 17:06:47 +0800 CST2011-02-02 17:06:47 +0800 CST 2011-02-02 17:06:47 +0800 CST

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

  • 772

Alguém que trabalhou extensivamente em SQL com pelo menos dois principais produtos de banco de dados (como Oracle, SQL Server, Informix, Sybase, DB2, Teradata) sabe como os dialetos SQL do fornecedor de banco de dados são diferentes entre si? Como tenho experiência em Oracle, estou especialmente interessado em

  • funções analíticas
  • cláusulas modelo
  • consultas hierárquicas ( start with .. connect byvem à mente)
  • qualquer outra característica que seja mais do que o habitual ( select x, y from a, b where...)

Provavelmente, a questão se resume a se e até que ponto esses recursos são regulados por um padrão ansi.

Na prática, gostaria de saber se existe uma "regra prática" que indicaria se (e como) posso pegar uma instrução SQL DML que é executada em um banco de dados e deixá-la ser executada em outro banco de dados.

sql-standard feature-comparison
  • 5 5 respostas
  • 4993 Views

5 respostas

  • Voted
  1. Best Answer
    Leigh Riffel
    2011-02-03T06:40:46+08:002011-02-03T06:40:46+08:00

    ANSI é uma organização privada sem fins lucrativos que cria padrões voluntários. Como tal, na verdade, não regula nada. Freqüentemente, é benéfico para a empresa seguir padrões reconhecidos, e é por isso que muitas empresas de banco de dados seguem o padrão ANSI para SQL. É claro que, à medida que cada empresa busca diferenciar seus produtos, ela desenvolverá funcionalidades adicionais além dos padrões.

    De w3schools :

    Embora o SQL seja um padrão ANSI (American National Standards Institute), existem muitas versões diferentes da linguagem SQL.

    No entanto, para estar em conformidade com o padrão ANSI, todos eles suportam pelo menos os principais comandos (como SELECT, UPDATE, DELETE, INSERT, WHERE) de maneira semelhante.

    Nota: A maioria dos programas de banco de dados SQL também possui suas próprias extensões proprietárias além do padrão SQL!

    As diferenças entre os dialetos SQL são muito grandes nas áreas mais especializadas que você listou para simplificar o problema a uma “regra de ouro”. Nessas situações, você provavelmente deve converter a instrução inteira para cada banco de dados. Ao fazer isso, cada instrução pode ser otimizada para cada plataforma, aproveitando os recursos especiais que cada banco de dados pode fornecer. Escrever SQL para o menor denominador comum (ANSI) pode simplificar a migração, mas ao custo do desempenho.

    SQL Dialects Reference fornece algumas comparações úteis das variantes SQL. Para obter mais informações, recomendo pesquisar os dialetos específicos entre os quais você está alternando, assim:

       differences between mysql and oracle sql

    • 10
  2. Miles D
    2011-02-02T22:38:07+08:002011-02-02T22:38:07+08:00

    Em um momento ou outro, trabalhei com todos os bancos de dados que você mencionou. Infelizmente, descobri que não leva muito tempo para a sintaxe se desviar para seus próprios sabores, para qualquer coisa que não seja o mais simples SELECT, INSERT, UPDATE e DELETE. Quando chegar a algumas das categorias que você sugere, ele será rapidamente específico do fornecedor. Eu sempre tive que 'portar' meu SQL de uma plataforma para outra. Embora voltando alguns anos, fiquei surpreso com a diferença entre o SQL Server e o Teradata SQL, mesmo para uma ATUALIZAÇÃO com algumas junções.

    • 6
  3. user804
    2011-02-04T19:37:48+08:002011-02-04T19:37:48+08:00

    Cada fornecedor geralmente está em conformidade com um núcleo mínimo de sintaxe padrão. O SQL-92 é geralmente o padrão mais compatível. Eles então adicionam funcionalidade adicional em cima disso. O SQL3 adiciona funcionalidade de procedimento ao padrão de sintaxe. A conformidade com esse padrão é muito menor. Os fornecedores geralmente farão reivindicações de certa conformidade. A conformidade com o padrão significa apenas que eles fornecem "pelo menos" essa funcionalidade. Eles podem fornecer qualquer quantidade de funcionalidade e, portanto, sintaxe além desse padrão. Cada fornecedor de banco de dados também adiciona funcionalidade específica à maneira como implementa sua estrutura de banco de dados. É assim que cada fornecedor de banco de dados tenta fornecer uma vantagem sobre a concorrência.

    • 2
  4. jcolebrand
    2011-02-03T09:13:19+08:002011-02-03T09:13:19+08:00

    Apenas jogando para discussão, mesmo que provavelmente tenha sido um comentário também. É por isso que a maioria das pessoas gosta de usar as várias estruturas hoje em dia, como EntityFramework e LINQ, onde toda a abstração subjacente da consulta é relegada à camada do aplicativo, e a camada de dados é apenas armazenamento plano.

    Observe que isso oferece outro benefício para a turma do NoSQL, pois o banco de dados é apenas um meio de armazenamento.

    • 1
  5. Phillip Julian
    2014-09-06T13:11:39+08:002014-09-06T13:11:39+08:00

    Alguns fornecedores de banco de dados fornecem informações detalhadas sobre sua conformidade com o padrão ANSI SQL. Para Teradata, eles listam especificamente os padrões SQL para cada elemento do padrão ANSI e para cada item detalhado - como para cada função, tipo de dados etc. Não vi afirmações gerais sobre a conformidade do Teradata, mas pesquisei dois documentos para "SQL:2", que obteria qualquer conformidade ANSI recente. Eles são compatíveis com ANSI SQL:2011 para tudo, exceto gatilhos, procedimentos armazenados e literais hexadecimais, que são compatíveis com SQL:2008.

    O diabo está nos detalhes, e você deve tê-los para determinar se um banco de dados é compatível com ANSI SQL em qualquer nível. Também não é suficiente para se adequar ao antigo padrão SQL-92 (também conhecido como SQL2). Se um fornecedor fornece um bom suporte para um padrão mais recente, isso não diz muito sobre a qualidade do banco de dados?

    Um bom lugar para obter informações para comparar banco de dados é "SQL In a Nutshell", 2ª ou 3ª edição, de Kline, Kline e Hunt, e publicado por O'Reilly. Eles têm várias tabelas que comparam diferentes recursos de banco de dados para SQL:2003. Teradata não está na lista, mas como eles são pelo menos compatíveis com SQL:2003, posso usar a lista para comparar os recursos do banco de dados.

    Olhando para as listas no livro da O'Reilly, posso encontrar recursos no Oracle que não suportam o padrão SQL:2003. Claro, preciso verificar a documentação do Oracle para verificar esses fatos, já que esse livro está datado. Então a comparação de Oracle para SQL:2003 me ajudará em meu grande projeto de conversão de Oracle para Teradata.

    • 0

relate perguntas

  • Por que alguns DBMS não permitem a reversão de certas instruções DDL?

  • Quais mecanismos de banco de dados me permitirão GRANT/REVOKE em uma coluna específica?

  • Quais outros bancos de dados têm um recurso semelhante ao Flashback Query da Oracle?

  • Quando usar NULL e quando usar uma string vazia?

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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