Voltar para a lista de artigos Artigos
12 minutos de leitura

A história das normas SQL

O padrão SQL mudou nos mais de 30 anos de existência? Absolutamente! Aprenda sobre a jornada da SQL-86 para a SQL moderna, a linguagem de dados padrão dos dias de hoje.

A SQL foi criada no início dos anos 70 pela IBM. Em 1974, Donald Chamberlin e Raymond Boyce publicaram o artigo SEQUEL: A Structured English Query Language, que introduziu o SQL no mundo. O artigo continha a gramática BNF (uma descrição técnica detalhada da sintaxe da linguagem) para a linguagem, o que a IBM mais tarde pensou ser um erro. A publicação da gramática permitiu que diferentes fornecedores implementassem SQL em seus próprios motores de banco de dados. Entretanto, houve muitas variações entre as implementações SQL dos fornecedores, já que cada fornecedor introduziu suas próprias extensões ao SQL. Em meados da década de 80, surgiram incompatibilidades substanciais entre as diferentes versões SQL.

Também na década de 1980, o American National Standards Institute (ANSI) começou a trabalhar no padrão SQL. O objetivo de introduzir uma norma era permitir a portabilidade de aplicações SQL através de produtos em conformidade.

SQL-86

O primeiro padrão SQL foi o SQL-86. Foi publicada em 1986 como norma ANSI e em 1987 como norma da Organização Internacional de Normalização (ISO). O ponto de partida para a norma ISO foi a implementação da norma SQL da IBM. Esta versão da norma SQL também é conhecida como SQL 1.

A norma SQL-86 é de 120 páginas. Ela contém a sintaxe para as instruções SELECT, INSERT, UPDATE, e DELETE. A sintaxe SELECT permite filtrar com WHERE, usando GROUP BY com várias colunas (mas não por expressões), e filtrar grupos com HAVING. Não há nenhuma sintaxe explícita JOIN; você pode listar várias tabelas na cláusula FROM para obter essencialmente uma junção cruzada que você pode filtrar mais tarde com WHERE. Não há como fazer OUTER JOINs com esta sintaxe. No entanto, a sintaxe SELECT não permite subconsultas.

A norma também tem uma sintaxe de definição de esquema: você pode criar tabelas (apenas com as restrições UNIQUE e NOT NULL ), criar visualizações e conceder privilégios. Os tipos de dados introduzidos na norma são cadeias de caracteres e números (NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, e DOUBLE PRECISION). Não há declarações em ALTER, DROP, ou REVOKE. Há também incorporações de SQL em várias linguagens de programação (Cobol, Fortran, Pascal, e PL/1).

Geralmente, é possível comprar os documentos padrão da ISO ou ANSI, mesmo versões antigas e retiradas. No entanto, como Evan Carroll compartilha em seu posto de Stack Overflow, não é fácil obter o padrão SQL-86 hoje em dia. Mas se você estiver interessado, você pode encontrar o SQL-86 sob o nome de FIPS-127.

SQL-89

O próximo padrão SQL foi o SQL-89, publicado em 1989. Esta foi uma pequena revisão da norma anterior, um super conjunto de SQL-86 que substituiu a SQL-86. O tamanho da norma não mudou.

As novas características mais importantes eram as restrições de integridade: além do UNIQUE, NOT NULL, e opções de verificação em vistas que já estavam disponíveis, adicionou chaves primárias, chaves estrangeiras, e restrições de DEFAULT e CHECK. O padrão também acrescentou novas restrições de linguagem para C e Ada.

SQL-92

A próxima revisão da norma foi a SQL-92 - e foi uma revisão importante. A linguagem introduzida pela SQL-92 é às vezes referida como SQL 2. O documento padrão cresceu de 120 para 579 páginas. Entretanto, grande parte do crescimento foi devido a especificações mais precisas das características existentes.

As características novas mais importantes foram:

  • Uma sintaxe explícita JOIN e a introdução de uniões externas: LEFT JOIN, RIGHT JOIN, FULL JOIN.
  • A introdução de NATURAL JOIN e CROSS JOIN
  • A introdução de operações de conjunto (união de conjunto, intersecção de conjunto e diferença de conjunto).
  • A introdução da expressão condicional CASE WHEN.
  • Novas operações escalares: concatenação de cordas, extração de substrato, e matemática de data e hora.
  • O operador CAST, que permite a fundição explícita de valores em tipos.

A SQL-92 também introduziu novas instruções de definição de dados: ALTER e DROP para tabelas e vistas, e novos tipos de dados (date, time, timestamp, interval, bit string, varchar string, e national character strings). Esta versão acrescentou um esquema de informação (a forma padrão de obter metadados de banco de dados, tais como nomes de tabelas, colunas de tabelas, tipos de colunas e restrições de tabelas). Também introduziu tabelas temporárias, níveis de isolamento de transações e a execução dinâmica de consultas (SQL dinâmico).

O padrão SQL foi dividido em três níveis de conformidade: entrada (o nível de entrada SQL-92 era semelhante ao SQL-89 com restrições de integridade), intermediário e completo.

SQL-92 é a base da linguagem de consulta usada atualmente em bancos de dados relacionais. Quando se fala em "SQL", a maioria das pessoas se refere a SQL-92. Os bancos de dados que já existiam em 1992 modificaram sua implementação de SQL para estar em conformidade com a norma. Bancos de dados mais recentes usaram a norma como referência para sua implementação.

SQL-92 ainda é o que as pessoas ensinam como "SQL" nas escolas. E com razão - SQL-92 é um ponto de partida muito bom para aprender SQL. Para muitas pessoas, é o suficiente para fazer seu trabalho diário. Você pode aprender recursos avançados mais tarde, quando precisar deles. E a maioria dos bancos de dados suporta SQL-92. Nenhuma implementação é 100% compatível com a norma, mas as incompatibilidades não são tão importantes, especialmente quando você está apenas começando.

Em LearnSQL.com.br, o SQL padrão é o dialeto mais importante que ensinamos. Acreditamos que se você aprender a linguagem padrão, você poderá usá-la para trabalhar com a maioria dos bancos de dados. É a base de nossos cursos de nível iniciante; SQL para Iniciantes ensinará a declaração SELECT com todas as características disponíveis no SQL-92, incluindo diferentes tipos de JOIN, GROUP BY, operações de conjunto e subconsultas. O curso Usando Comandos INSERT, UPDATE e DELETE em SQL lhe ensinará INSERT, UPDATE, e DELETE declarações, enquanto Cláusulas JOIN em SQL permitirá que você pratique diferentes tipos de JOINs.

Para as pessoas interessadas em criar tabelas, recomendamos nossa trilha de aprendizado Criar estrutura de banco de dados. A pista consiste em cinco cursos que lhe ensinarão como criar tabelas, definir restrições, selecionar tipos de dados apropriados e criar visualizações usando a sintaxe SQL padrão, que é facilmente portátil entre diferentes motores de banco de dados.

SQL:1999

SQL:1999 (também chamado SQL 3) foi a quarta revisão do padrão SQL. A partir desta versão, o nome padrão usou dois pontos ao invés de um hífen para ser consistente com os nomes de outras normas ISO. Esta norma foi publicada em várias parcelas entre 1999 e 2002.

A primeira parcela de SQL:1999 tinha cinco partes:

  • Parte 1: SQL/Framework (100 páginas) definiu os conceitos fundamentais de SQL.
  • Parte 2: SQL/Foundation (1050 páginas) definiu a sintaxe e operações fundamentais de SQL: tipos, esquemas, tabelas, visualizações, instruções de consulta e atualização, expressões, e assim por diante. Esta parte é a mais importante para usuários regulares de SQL.
  • Parte 3: SQL/CLI (Call Level Interface) (514 páginas) definiu uma interface de programação de aplicação para SQL.
  • Parte 4: SQL/PSM (Persistent Stored Modules) (193 páginas) definiu extensões que fazem o procedimento SQL.
  • Parte 5: SQL/Bindings (270 páginas) definiram métodos para incorporar instruções SQL em programas de aplicação escritos em uma linguagem de programação padrão.

Mais três partes, também consideradas parte do SQL:1999, foram publicadas posteriormente.

SQL:1999 introduziu muitas características importantes que são parte do SQL moderno. Entre as mais importantes estavam as Expressões de Tabela Comum (CTEs). Esta é uma característica muito útil que permite organizar longas e complexas consultas SQL e torná-las mais legíveis. Quando a sintaxe WITH [RECURSIVE] é utilizada, os CTEs também podem processar dados hierárquicos de forma recursiva. Você pode aprender como escrever consultas recursivas em SQL com o LearnSQL.com.br's interativo. Consultas Recursivas curso.

SQL:1999 também introduziu capacidades OLAP (Online Analytical Processing), que inclui recursos que são úteis na preparação de relatórios comerciais. As extensões GROUP BY ROLLUP , CUBE, e GROUPING SETS entraram no padrão neste momento. Você pode aprendê-las em nosso curso GROUP BY Extensions (ou ler sobre o curso e as extensões em nosso artigo da série do mês para novembro de 2020).

Algumas pequenas adições ao SQL no padrão SQL:1999 incluem o uso de expressões no ORDER BY, a inclusão de tipos de dados para grandes objetos binários (LOB e CLOB), e a introdução de gatilhos.

O tamanho do padrão SQL cresceu significativamente entre 1992 e 1999. O padrão SQL-92 tinha quase 600 páginas, mas ainda era acessível aos usuários regulares de SQL. Livros como A Guide to the SQL Standard de Christopher Date e Hugh Darwen discutiram e explicaram o padrão SQL-92.

Começando com SQL:1999 o padrão - agora mais de 2.000 páginas - não era mais acessível a usuários regulares de SQL. Tornou-se um recurso para especialistas e fornecedores de banco de dados. O padrão orienta o desenvolvimento de SQL nos principais bancos de dados; ele mostra quais novos recursos de linguagem vale a pena implementar para se manter atualizado. Também padroniza a sintaxe dos novos recursos SQL, assegurando que os principais bancos de dados os implementem de forma semelhante, usando sintaxe e semântica semelhantes.

A mudança no papel da norma SQL é enfatizada pelo fato de que não existe mais um órgão oficial que certifica a conformidade com a norma. Até 1996, o National Institute of Standards and Technology (NIST) programa de padrões de gerenciamento de dados SQL DBMS certificou a conformidade com a norma SQL. Agora, os fornecedores auto-certificam a conformidade de seus produtos.

SQL:2003 e além

No século XXI, o padrão SQL tem sido atualizado regularmente.

O padrão SQL:2003 foi publicado em 1º de março de 2004. Sua principal adição foram as funções de janela, um poderoso recurso analítico que permite calcular estatísticas resumidas sem linhas em colapso. As funções de janela aumentaram significativamente o poder expressivo do SQL. Elas são extremamente úteis na preparação de todos os tipos de relatórios comerciais, analisando dados de séries temporais e analisando tendências. A adição de funções de janela ao padrão coincidiu com a popularidade do OLAP e dos data warehouses. As pessoas começaram a usar bancos de dados para tomar decisões comerciais orientadas por dados. Esta tendência só está ganhando impulso, graças à crescente quantidade de dados que todas as empresas coletam. Você pode aprender as funções de janela com nosso Funções de Janela (Window Functions) em SQL curso.(Leia sobre o curso ou porque vale a pena aprender as funções da janela SQL aqui.) SQL:2003 também introduziu funções relacionadas a XML, geradores de seqüências, e colunas de identidade.

Depois de 2004, não houve grandes acréscimos revolucionários à linguagem. As mudanças no padrão SQL refletiram as mudanças na tecnologia da época. SQL:2003 introduziu funções relacionadas ao XML para permitir a interoperabilidade entre bancos de dados e tecnologias XML, que foram a novidade quente no início dos anos 2000. SQL:2006 especificou ainda mais como usar SQL com XML. Não foi uma revisão do padrão SQL completo, apenas a Parte 14, que trata da interoperabilidade SQL-XML.

As revisões seguintes do padrão trouxeram pequenos aprimoramentos à linguagem. SQL:2008 legalizou o uso de ORDER BY fora das definições do cursor(!), e adicionou INSTEAD OF triggers, a declaração TRUNCATE, e a cláusula FETCH. SQL:2011 adicionou dados temporais e alguns aprimoramentos às funções da janela e a cláusula FETCH.

SQL:2016 adicionou a correspondência de padrões de linha e funções de tabelas polimórficas, bem como o tão esperado suporte JSON. Nos anos 2010, o JSON substituiu o XML como o formato comum de intercâmbio de dados; as aplicações modernas da Internet utilizam o JSON ao invés do XML como seu formato de dados. O emergente movimento NoSQL também popularizou o JSON; bancos de dados de documentos armazenam arquivos JSON, e armazéns de valores-chave são compatíveis com o formato JSON. O padrão SQL adicionou o suporte JSON para permitir a interoperabilidade com aplicações modernas e novos tipos de bancos de dados.

O padrão SQL atual é SQL:2019. Ele adicionou a Parte 15, que define o suporte a array multidimensional em SQL.

Qual é o seu futuro com SQL?

Olhando para mais de 30 anos de história da SQL, você pode ver as diferentes etapas de seu desenvolvimento. A SQL 1 nos anos 80 (SQL-86, SQL-89) foi o primeiro esforço para padronizar e formalizar a definição da linguagem. SQL-92 forneceu a base para a linguagem estável que conhecemos hoje, aquela que é agora a linguagem de dados padrão para todas as principais tecnologias de dados.

SQL:1999 e SQL:2003 forneceram as bases para a SQL moderna, com sua adição de funções de janela, Expressões de Tabela Comum, e extensões GROUP BY. Depois de 2003, a linguagem atingiu a fase de estabilidade e maturidade. A linguagem principal não muda, mas novas características são adicionadas para melhorar a linguagem existente e suportar tecnologias emergentes, tais como XML ou JSON.

infográfico

O padrão SQL não é mais uma referência para usuários SQL regulares. Entretanto, os benefícios de se ter um padrão são numerosos. O padrão:

  • Aponta quais extensões de linguagem são importantes e úteis.
  • Orienta o desenvolvimento de implementações de SQL em bancos de dados e outras tecnologias de processamento de dados.
  • Fornece a sintaxe e semântica comuns que a maioria das tecnologias de processamento de dados irá implementar.

A norma não garante que todas as implementações SQL sejam perfeitamente compatíveis, mas garante que elas estejam, na maioria das vezes, alinhadas e que todas elas se desenvolvam na mesma direção.

Em LearnSQL.com.br, você pode aprender todos os recursos SQL modernos com nossos cursos interativos:

Então, agora que você conhece a história da SQL, qual será seu futuro com esta linguagem? Esperamos que você aprenda e experimente por si mesmo como SQL é poderosa e eficiente!

Fontes: