SQL - SQL

Da Wikipédia, a enciclopédia livre
SQL (linguagem de consulta estruturada)
Paradigma Declarativo
Família Linguagem de consulta
Projetado por Donald D. Chamberlin
Raymond F. Boyce
Desenvolvedor ISO / IEC
Apareceu pela primeira vez 1974 ; 47 anos atrás  ( 1974 )
Versão estável
SQL: 2016 / dezembro de 2016 ; 4 anos atras  ( 2016-12 )
Disciplina de digitação Estático , forte
SO Plataforma cruzada
Local na rede Internet www .iso .org / standard / 63555 .html
Implementações principais
Vários
Dialetos
Influenciado por
Registro de dados
Influenciado
CQL , LINQ , SPARQL , SOQL, PowerShell , JPQL , jOOQ , N1QL
SQL (formato de arquivo)
Extensão de nome de arquivo
.sql
Tipo de mídia da Internet
aplicativo / sql
Desenvolvido por ISO / IEC
lançamento inicial 1986  ( 1986 )
Tipo de formato Base de dados
Padrão ISO / IEC 9075
Formato aberto ? sim
Local na rede Internet www .iso .org / standard / 63555 .html

SQL ( / ˌ ɛ s ˌ k Ju ɛ l / ( escute ) Sobre este som SQL , / s i k w əl / "sequela"; Structured Query Language ) é uma linguagem específica de domínio usado na programação e projetado para o gerenciamento de dados, realizada em um sistema de gerenciamento de banco de dados relacional (RDBMS) ou para processamento de fluxo em um sistema de gerenciamento de fluxo de dados relacional (RDSMS). É particularmente útil no tratamento de dados estruturados , ou seja, dados que incorporam relações entre entidades e variáveis.

O SQL oferece duas vantagens principais sobre as APIs de leitura e gravação mais antigas , como ISAM ou VSAM . Em primeiro lugar, ele introduziu o conceito de acesso a muitos registros com um único comando. Em segundo lugar, elimina a necessidade de especificar como chegar a um registro, por exemplo, com ou sem um índice .

Originalmente baseado em álgebra relacional e cálculo relacional de tupla , SQL consiste em muitos tipos de declarações, que podem ser classificadas informalmente como sublinguagens , comumente: uma linguagem de consulta de dados (DQL), uma linguagem de definição de dados (DDL), uma linguagem de controle de dados (DCL ) e uma linguagem de manipulação de dados (DML). O escopo do SQL inclui consulta de dados, manipulação de dados (inserir, atualizar e excluir), definição de dados ( criação e modificação de esquema ) e controle de acesso a dados. Embora o SQL seja essencialmente uma linguagem declarativa ( 4GL ), ele também inclui elementos procedurais .

SQL foi uma das primeiras linguagens comerciais para usar Edgar F. Codd ‘s modelo relacional . O modelo foi descrito em seu influente artigo de 1970, "Um modelo relacional de dados para grandes bancos de dados compartilhados". Apesar de não aderir totalmente ao modelo relacional descrito por Codd , ele se tornou a linguagem de banco de dados mais amplamente usada.

SQL se tornou um padrão do American National Standards Institute (ANSI) em 1986 e da International Organization for Standardization (ISO) em 1987. Desde então, o padrão foi revisado para incluir um conjunto maior de recursos. Apesar da existência de padrões, a maior parte do código SQL requer pelo menos algumas alterações antes de ser transferido para diferentes sistemas de banco de dados .

História

SQL foi inicialmente desenvolvido na IBM por Donald D. Chamberlin e Raymond F. Boyce após aprender sobre o modelo relacional com Edgar F. Codd no início dos anos 1970. Essa versão, inicialmente chamada de SEQUEL (Structured English Query Language), foi projetada para manipular e recuperar dados armazenados no sistema de gerenciamento de banco de dados quasi-relacional original da IBM, System R , que um grupo do IBM San Jose Research Laboratory desenvolveu durante os anos 1970.

A primeira tentativa de Chamberlin e Boyce em uma linguagem de banco de dados relacional foi Square, mas era difícil de usar devido à notação subscrita. Depois de se mudar para o Laboratório de Pesquisa de San Jose em 1973, eles começaram a trabalhar no SEQUEL. A sigla SEQUEL foi posteriormente alterada para SQL porque "SEQUEL" era uma marca comercial da empresa Hawker Siddeley Dynamics Engineering Limited com sede no Reino Unido .

Depois de testar o SQL em sites de teste do cliente para determinar a utilidade e praticidade do sistema, a IBM começou a desenvolver produtos comerciais baseados em seu protótipo System R, incluindo System / 38 , SQL / DS e DB2 , que estavam disponíveis comercialmente em 1979, 1981, e 1983, respectivamente.

No final dos anos 1970, a Relational Software, Inc. (agora Oracle Corporation ) viu o potencial dos conceitos descritos por Codd, Chamberlin e Boyce e desenvolveu seu próprio RDBMS baseado em SQL com aspirações de vendê-lo para a Marinha dos EUA , Central Intelligence Agência e outras agências governamentais dos EUA. Em junho de 1979, a Relational Software introduziu a primeira implementação de SQL disponível comercialmente, Oracle V2 (versão 2) para computadores VAX .

Em 1986, os grupos de padrões ANSI e ISO adotaram oficialmente a definição de linguagem padrão "Database Language SQL". Novas versões do padrão foram publicadas em 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 e, mais recentemente, 2016.

Sintaxe

Um gráfico que mostra vários dos elementos da linguagem SQL que compõem uma única instrução

A linguagem SQL é subdividida em vários elementos de linguagem, incluindo:

  • Cláusulas , que são componentes constituintes de declarações e consultas. (Em alguns casos, são opcionais.)
  • Expressões , que podem produzir valores escalares ou tabelas que consistem em colunas e linhas de dados
  • Predicados , que especificam condições que podem ser avaliadas para lógica SQL de três valores (3VL) (verdadeiro / falso / desconhecido) ou valores verdadeiros booleanos e são usados ​​para limitar os efeitos de declarações e consultas ou para alterar o fluxo do programa.
  • Consultas , que recuperam os dados com base em critérios específicos. Este é um elemento importante do SQL .
  • Instruções , que podem ter um efeito persistente em esquemas e dados, ou podem controlar transações , fluxo de programa, conexões, sessões ou diagnósticos.
    • As instruções SQL também incluem o terminador de instrução de ponto e vírgula (";"). Embora não seja obrigatório em todas as plataformas, ele é definido como uma parte padrão da gramática SQL.
  • Espaços em branco insignificantes geralmente são ignorados em instruções e consultas SQL, tornando mais fácil formatar o código SQL para facilitar a leitura.

Extensões procedimentais

O SQL é projetado para um propósito específico: consultar dados contidos em um banco de dados relacional . SQL é uma linguagem de programação declarativa baseada em conjuntos , não uma linguagem de programação imperativa como C ou BASIC . No entanto, as extensões do SQL padrão adicionam funcionalidade de linguagem de programação procedural , como construções de controle de fluxo. Esses incluem:

Fonte Abreviação Nome completo
Padrão ANSI / ISO SQL / PSM SQL / Módulos Armazenados Persistentes
Interbase / Firebird PSQL SQL procedimental
IBM DB2 SQL PL Linguagem procedural de SQL (implementa SQL / PSM)
IBM Informix SPL Linguagem processual armazenada
IBM Netezza NZPLSQL (baseado em Postgres PL / pgSQL)
Invantivo PSQL SQL procedimental invasivo (implementa SQL / PSM e PL / SQL )
MariaDB SQL / PSM , PL / SQL SQL / Persistent Stored Module (implementa SQL / PSM), Procedural Language / SQL (baseado em Ada )
Microsoft / Sybase T-SQL Transact-SQL
Mimer SQL SQL / PSM SQL / Persistent Stored Module (implementa SQL / PSM)
MySQL SQL / PSM SQL / Persistent Stored Module (implementa SQL / PSM)
MonetDB SQL / PSM SQL / Persistent Stored Module (implementa SQL / PSM)
NuoDB SSP Procedimentos armazenados Starkey
Oráculo PL / SQL Linguagem procedural / SQL (com base em Ada )
PostgreSQL PL / pgSQL Linguagem procedural / PostgreSQL Structured Query Language (baseado em PL / SQL reduzido )
SAP R / 3 ABAP Programação avançada de aplicativos de negócios
SAP HANA SQLScript SQLScript
Sybase Watcom-SQL Dialeto SQL Anywhere Watcom-SQL
Teradata SPL Linguagem processual armazenada

Além das extensões SQL / PSM padrão e extensões SQL proprietárias, a programação procedural e orientada a objetos está disponível em muitas plataformas SQL por meio da integração de DBMS com outras linguagens. O padrão SQL define extensões SQL / JRT (rotinas e tipos de SQL para a linguagem de programação Java) para oferecer suporte ao código Java em bancos de dados SQL. O Microsoft SQL Server 2005 usa o SQLCLR (SQL Server Common Language Runtime) para hospedar assemblies .NET gerenciados no banco de dados , enquanto as versões anteriores do SQL Server eram restritas a procedimentos armazenados estendidos não gerenciados escritos principalmente em C. PostgreSQL permite que os usuários escrevam funções em uma ampla variedade de linguagens, incluindo Perl , Python , Tcl , JavaScript (PL / V8) e C.

Interoperabilidade e padronização

Visão geral

As implementações de SQL são incompatíveis entre fornecedores e não seguem necessariamente os padrões completamente. Em particular, a sintaxe de data e hora, concatenação de string, se diferenciação de maiúsculasNULL e minúsculas de comparação variam de fornecedor para fornecedor. Exceções particulares são PostgreSQL e Mimer SQL que buscam conformidade com os padrões, embora o PostgreSQL não adira ao padrão em como a dobradura de nomes não citados é feita. A dobragem de nomes sem aspas para minúsculas no PostgreSQL é incompatível com o padrão SQL, que diz que os nomes sem aspas devem ser dobrados para maiúsculas. Portanto, Foo deve ser equivalente a FOO não estar de foo acordo com o padrão.

Implementações populares de SQL geralmente omitem o suporte para recursos básicos do SQL padrão, como os tipos de dados DATE ou TIME . Os exemplos mais óbvios e, incidentalmente, os DBMSs SQL comerciais e proprietários mais populares são Oracle (cujo DATE comportamento DATETIME e falta de TIME tipo) e MS SQL Server (antes da versão 2008). Como resultado, o código SQL raramente pode ser transportado entre sistemas de banco de dados sem modificações.

Razões para incompatibilidade

Vários motivos para essa falta de portabilidade entre sistemas de banco de dados incluem:

  • A complexidade e o tamanho do padrão SQL significam que a maioria dos implementadores não oferece suporte a todo o padrão.
  • O padrão não especifica o comportamento do banco de dados em várias áreas importantes (por exemplo , índices , armazenamento de arquivos ...), deixando as implementações para decidir como se comportar.
  • O padrão SQL especifica precisamente a sintaxe que um sistema de banco de dados em conformidade deve implementar. No entanto, a especificação do padrão da semântica de construções de linguagem é menos bem definida, levando à ambigüidade.
  • Muitos fornecedores de banco de dados têm grandes bases de clientes existentes; onde a versão mais recente do padrão SQL entra em conflito com o comportamento anterior do banco de dados do fornecedor, o fornecedor pode não estar disposto a quebrar a compatibilidade com versões anteriores .
  • Existem poucos incentivos comerciais para os fornecedores tornarem a mudança de fornecedores de banco de dados mais fácil (consulte dependência do fornecedor ).
  • Os usuários que avaliam o software de banco de dados tendem a colocar outros fatores, como desempenho, em suas prioridades mais do que conformidade com os padrões.

Histórico de padronização

O SQL foi adotado como padrão pelo ANSI em 1986 como SQL-86 e o ​​ISO em 1987. É mantido pelo ISO / IEC JTC 1, Tecnologia da informação, Subcomitê SC 32, Gerenciamento e intercâmbio de dados .

Até 1996, o programa de padrões de gerenciamento de dados do Instituto Nacional de Padrões e Tecnologia (NIST) certificou a conformidade do SQL DBMS com o padrão SQL. Os fornecedores agora autocertificam a conformidade de seus produtos.

O padrão original declarou que a pronúncia oficial de "SQL" foi um initialism : / ˌ ɛ s ˌ k Ju ɛ l / ( "ess sugestão el"). Independentemente disso, muitos profissionais de banco de dados de língua Inglês (incluindo o próprio Donald Chamberlin) usar a sigla -como pronúncia do / s i k w əl / ( "sequel"), espelhando nome do desenvolvimento pré-lançamento da linguagem, "sequência".
O padrão SQL passou por várias revisões:

Ano Nome Pseudônimo Comentários
1986 SQL-86 SQL-87 Primeiro formalizado por ANSI
1989 SQL-89 FIPS 127-1 Revisão secundária que adicionou restrições de integridade, adotada como FIPS 127-1
1992 SQL-92 SQL2, FIPS 127-2 Revisão principal (ISO 9075), Nível de entrada SQL-92 adotado como FIPS 127-2
1999 SQL: 1999 SQL3 Adicionada correspondência de expressão regular, consultas recursivas (por exemplo, fechamento transitivo ), gatilhos , suporte para instruções procedurais e de controle de fluxo, tipos não escalares (matrizes) e alguns recursos orientados a objetos (por exemplo , tipos estruturados ), suporte para embutir SQL em Java ( SQL / OLB ) e vice-versa ( SQL / JRT )
2003 SQL: 2003 Recursos relacionados a XML introduzidos ( SQL / XML ), funções de janela , sequências padronizadas e colunas com valores gerados automaticamente (incluindo colunas de identidade)
2006 SQL: 2006 ISO / IEC 9075-14: 2006 define maneiras como o SQL pode ser usado com XML. Ele define maneiras de importar e armazenar dados XML em um banco de dados SQL, manipulá-los no banco de dados e publicar dados XML e SQL convencionais em formato XML. Além disso, permite que os aplicativos integrem consultas em seu código SQL com XQuery , o XML Query Language publicado pelo World Wide Web Consortium ( W3C ), para acessar simultaneamente dados SQL comuns e documentos XML.
2008 SQL: 2008 Legaliza ORDER BY fora das definições de cursor. Adiciona gatilhos INSTEAD OF, instrução TRUNCATE, cláusula FETCH
2011 SQL: 2011 Adiciona dados temporais (PERIOD FOR) (mais informações em: Banco de dados temporais # Histórico ). Aprimoramentos para funções de janela e cláusula FETCH.
2016 SQL: 2016 Adiciona correspondência de padrão de linha, funções de tabela polimórfica, JSON
2019 SQL: 2019 Adiciona a Parte 15, arrays multidimensionais (tipo e operadores MDarray)

Padrão atual

O padrão é comumente indicado pelo padrão: ISO / IEC 9075-n: aaaa Parte n: título ou, como um atalho, ISO / IEC 9075 .

A ISO / IEC 9075 é complementada pela ISO / IEC 13249: SQL Multimídia e Pacotes de Aplicativos (SQL / MM), que define interfaces e pacotes baseados em SQL para aplicativos amplamente difundidos, como vídeo, áudio e dados espaciais . As partes interessadas podem adquirir documentos de padrões SQL da ISO, IEC ou ANSI. Um rascunho do SQL: 2008 está disponível gratuitamente como um arquivo zip .

Anatomia do padrão SQL

O padrão SQL é dividido em 10 partes, mas com lacunas na numeração devido à retirada de partes desatualizadas.

  • ISO / IEC 9075-1: 2016 Parte 1: Estrutura (SQL / Estrutura). Ele fornece conceitos lógicos.
  • ISO / IEC 9075-2: 2016 Parte 2: Fundação (SQL / Fundação). Ele contém os elementos mais centrais da linguagem e consiste em recursos obrigatórios e opcionais .
  • ISO / IEC 9075-3: 2016 Parte 3: Interface de nível de chamada ( SQL / CLI ). Ele define componentes de interface (estruturas, procedimentos, ligações de variáveis) que podem ser usados ​​para executar instruções SQL de aplicativos escritos em Ada, C respectivamente C ++, COBOL, Fortran, MUMPS, Pascal ou PL / I. (Para Java, consulte a parte 10.) SQL / CLI é definido de forma que as instruções SQL e as chamadas de procedimento SQL / CLI sejam tratadas como separadas do código-fonte do aplicativo de chamada. O Open Database Connectivity é um superconjunto bem conhecido de SQL / CLI. Esta parte do padrão consiste apenas em recursos obrigatórios .
  • ISO / IEC 9075-4: 2016 Parte 4: Módulos armazenados persistentes ( SQL / PSM ). Ele padroniza extensões procedurais para SQL, incluindo fluxo de controle, tratamento de condição, sinais e sinais de condição de instrução, cursores e variáveis ​​locais e atribuição de expressões a variáveis ​​e parâmetros. Além disso, o SQL / PSM formaliza a declaração e manutenção de rotinas de linguagem de banco de dados persistentes (por exemplo, "procedimentos armazenados"). Esta parte do padrão consiste apenas em recursos opcionais .
  • ISO / IEC 9075-9: 2016 Parte 9: Gerenciamento de dados externos ( SQL / MED ). Ele fornece extensões para SQL que definem wrappers de dados externos e tipos de link de dados para permitir que o SQL gerencie dados externos. Dados externos são dados acessíveis a, mas não gerenciados por, um DBMS baseado em SQL. Esta parte do padrão consiste apenas em recursos opcionais .
  • ISO / IEC 9075-10: 2016 Parte 10: Vinculações de linguagem de objeto ( SQL / OLB ). Ele define a sintaxe e a semântica de SQLJ , que é SQL embutido em Java (consulte também a parte 3). O padrão também descreve mecanismos para garantir a portabilidade binária de aplicativos SQLJ e especifica vários pacotes Java e suas classes contidas. Esta parte do padrão consiste apenas em recursos opcionais . Ao contrário do SQL / OLB, o JDBC define uma API e não faz parte do padrão SQL.
  • ISO / IEC 9075-11: 2016 Parte 11: Esquemas de informação e definição ( SQL / Schemata ). Ele define o Esquema de Informação e o Esquema de Definição, fornecendo um conjunto comum de ferramentas para tornar os bancos de dados e objetos SQL autodescritivos. Essas ferramentas incluem o identificador de objeto SQL, restrições de estrutura e integridade, especificações de segurança e autorização, recursos e pacotes de ISO / IEC 9075, suporte de recursos fornecidos por implementações de DBMS com base em SQL, informações de implementação de DBMS com base em SQL e itens de dimensionamento, e valores suportados pelas implementações DBMS. Esta parte do padrão contém recursos obrigatórios e opcionais .
  • ISO / IEC 9075-13: 2016 Parte 13: Rotinas SQL e tipos usando a linguagem de programação Java TM ( SQL / JRT ). Ele especifica a capacidade de invocar métodos Java estáticos como rotinas de aplicativos SQL ('Java no banco de dados'). Ele também exige a capacidade de usar classes Java como tipos definidos pelo usuário estruturados em SQL. Esta parte do padrão consiste apenas em recursos opcionais .
  • ISO / IEC 9075-14: 2016 Parte 14: Especificações relacionadas a XML ( SQL / XML ). Ele especifica extensões baseadas em SQL para usar XML em conjunto com SQL. O tipo de dados XML é introduzido, bem como várias rotinas, funções e mapeamentos de tipo de dados XML para SQL para oferecer suporte à manipulação e armazenamento de XML em um banco de dados SQL. Esta parte do padrão consiste apenas em recursos opcionais .
  • ISO / IEC 9075-15: 2019 Parte 15: Matrizes multidimensionais (SQL / MDA). Ele especifica um tipo de array multidimensional (MDarray) para SQL, junto com operações em MDarrays, fatias MDarray, células MDarray e recursos relacionados. Esta parte do padrão consiste apenas em recursos opcionais .

Extensões ao padrão ISO / IEC

A ISO / IEC 9075 é complementada pela ISO / IEC 13249 SQL Multimídia e Pacotes de Aplicativos . Este padrão intimamente relacionado, mas separado, é desenvolvido pelo mesmo comitê. Ele define interfaces e pacotes baseados em SQL. O objetivo é um acesso unificado a aplicativos de banco de dados típicos, como texto, imagens, mineração de dados ou dados espaciais .

  • ISO / IEC 13249-1: 2016 Parte 1: Estrutura
  • ISO / IEC 13249-2: 2003 Parte 2: Texto Completo
  • ISO / IEC 13249-3: 2016 Parte 3: Espacial
  • ISO / IEC 13249-5: 2003 Parte 5: imagem estática
  • ISO / IEC 13249-6: 2006 Parte 6: Mineração de dados
  • ISO / IEC 13249-7: 2013 Parte 7: História
  • ISO / IEC 13249-8: xxxx Parte 8: MRA de Acesso ao Registro de Metadados (trabalho em andamento)

Relatórios técnicos

A ISO / IEC 9075 também é acompanhada por uma série de Relatórios Técnicos, publicados como ISO / IEC TR 19075. Esses Relatórios Técnicos explicam a justificativa e o uso de alguns recursos do SQL, dando exemplos quando apropriado. Os Relatórios Técnicos não são normativos; se houver alguma discrepância de 9075, o texto em 9075 é válido. Os relatórios técnicos 19075 disponíveis são:

  • ISO / IEC TR 19075-1: 2011 Parte 1: Suporte a Expressão Regular XQuery em SQL
  • ISO / IEC TR 19075-2: 2015 Parte 2: Suporte SQL para informações relacionadas ao tempo
  • ISO / IEC TR 19075-3: 2015 Parte 3: SQL embutido em programas usando a linguagem de programação Java
  • ISO / IEC TR 19075-4: 2015 Parte 4: SQL com rotinas e tipos usando a linguagem de programação Java
  • ISO / IEC TR 19075-5: 2016 Parte 5: Reconhecimento de padrão de linha em SQL
  • ISO / IEC TR 19075-6: 2017 Parte 6: suporte SQL para JavaScript Object Notation (JSON)
  • ISO / IEC TR 19075-7: 2017 Parte 7: Funções de tabela polimórfica em SQL
  • ISO / IEC TR 19075-8: 2019 Parte 8: Matrizes multidimensionais (SQL / MDA)
  • ISO / IEC TR 19075-9: 2020 Parte 9: Capacidades de processamento analítico online (OLAP)

Alternativas

Deve-se fazer uma distinção entre alternativas ao SQL como linguagem e alternativas ao próprio modelo relacional. Abaixo estão as alternativas relacionais propostas para a linguagem SQL. Consulte banco de dados de navegação e NoSQL para alternativas ao modelo relacional.

Processamento SQL distribuído

A arquitetura de banco de dados relacional distribuída (DRDA) foi projetada por um grupo de trabalho da IBM de 1988 a 1994. A DRDA permite que bancos de dados relacionais conectados à rede cooperem para atender a solicitações SQL.

Um usuário ou programa interativo pode emitir instruções SQL para um RDB local e receber tabelas de dados e indicadores de status em resposta de RDBs remotos. As instruções SQL também podem ser compiladas e armazenadas em RDBs remotos como pacotes e, em seguida, invocadas pelo nome do pacote. Isso é importante para a operação eficiente de programas aplicativos que emitem consultas complexas de alta frequência. É especialmente importante quando as tabelas a serem acessadas estão localizadas em sistemas remotos.

As mensagens, protocolos e componentes estruturais do DRDA são definidos pela Arquitetura de Gerenciamento de Dados Distribuídos . O processamento SQL distribuído ala DRDA é diferente dos bancos de dados SQL distribuídos contemporâneos .

Críticas

Projeto

O SQL se desvia de várias maneiras de sua base teórica, o modelo relacional e seu cálculo de tupla. Nesse modelo, uma tabela é um conjunto de tuplas, enquanto no SQL, as tabelas e os resultados da consulta são listas de linhas; a mesma linha pode ocorrer várias vezes e a ordem das linhas pode ser empregada em consultas (por exemplo, na cláusula LIMIT).

Os críticos argumentam que o SQL deve ser substituído por uma linguagem que retorne estritamente à base original: por exemplo, consulte O Terceiro Manifesto . No entanto, não existe nenhuma prova conhecida de que tal exclusividade não possa ser adicionada ao próprio SQL, ou pelo menos a uma variação do SQL. Em outras palavras, é bem possível que o SQL possa ser "consertado" ou pelo menos melhorado a esse respeito, de modo que o setor não precise mudar para uma linguagem de consulta completamente diferente para obter exclusividade. O debate sobre isso permanece aberto.

Outras críticas

Chamberlin discute quatro críticas históricas do SQL em um artigo de 2012:

Ortogonalidade e completude

As especificações anteriores não suportavam recursos principais, como chaves primárias. Os conjuntos de resultados não puderam ser nomeados e as subconsultas não foram definidas. Estes foram adicionados em 1992.

Nulo

O conceito de nulo é objeto de alguns debates . O marcador Nulo indica a ausência de um valor e é diferente de um valor 0 para uma coluna inteira ou uma string vazia para uma coluna de texto. O conceito de Nulls impõe a lógica de 3 valores no SQL , que é uma implementação concreta da lógica geral de 3 valores .

Duplicados

Outra crítica popular é que permite linhas duplicadas, tornando a integração com linguagens como Python , cujos tipos de dados podem dificultar a representação precisa dos dados, em termos de análise e pela ausência de modularidade.

Isso pode ser evitado declarando uma restrição exclusiva com um ou mais campos que identificam exclusivamente uma linha na tabela. Essa restrição também pode se tornar a chave primária da tabela.

Incompatibilidade de impedância

Em um sentido semelhante à incompatibilidade de impedância relacional de objeto , uma incompatibilidade ocorre entre a linguagem SQL declarativa e as linguagens procedurais nas quais o SQL normalmente está embutido.

Tipos de dados SQL

O padrão SQL define três tipos de tipos de dados:

  • tipos de dados predefinidos
  • tipos construídos
  • tipos definidos pelo usuário.

Tipos de dados predefinidos

  • Tipos de personagem
  • Personagem (CHAR)
  • Variante de caracteres (VARCHAR)
  • Objeto grande de personagem (CLOB)
  • Tipos de caráter nacional
  • Caráter nacional (NCHAR)
  • Caráter nacional variável (NCHAR VARYING)
  • Objeto grande de caráter nacional (NCLOB)
  • Tipos binários
  • Binário (BINÁRIO)
  • Variação binária (VARBINÁRIO)
  • Objeto binário grande (BLOB)
  • Tipos numéricos
  • Tipos numéricos exatos (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
  • Tipos numéricos aproximados (FLOAT, REAL, DOUBLE PRECISION)
  • Tipo de ponto flutuante decimal (DECFLOAT)
  • Tipos de data e hora (DATE, TIME, TIMESTAMP)
  • Tipo de intervalo (INTERVAL)
  • boleano
  • XML
  • JSON

Tipos construídos

Os tipos construídos são ARRAY, MULTISET, REF (erence) ou ROW.
Os tipos definidos pelo usuário são comparáveis ​​às classes em linguagem orientada a objetos com seus próprios construtores, observadores, modificadores, métodos, herança, sobrecarga, sobrescrita, interfaces e assim por diante.

Veja também

Notas

Referências

Origens

Documentos de padrões SQL

Padrões ITTF publicamente disponíveis e relatórios técnicos

A ISO / IEC Information Technology Task Force publica padrões publicamente disponíveis, incluindo SQL. Lá são publicados retificações técnicas (correções) e relatórios técnicos (documentos de discussão).

SQL - Parte 1: Framework (SQL / Framework)

Rascunho de documentos

Os padrões formais de SQL estão disponíveis na ISO e ANSI por uma taxa. Para uso informativo, ao contrário do cumprimento de padrões estritos, esboços atrasados ​​geralmente são suficientes.

links externos