Estamos aprendendo que a maioria dos idiomas é classificada como uma das duas, "baseada em relação" ou "alto nível".
Esses conceitos são ortogonais. "Baseado em relação" significa que a semântica da linguagem é baseada no conceito de uma relação, ou seja, uma associação muitos para muitos entre dois conjuntos (as relações são a base matemática por trás das tabelas SQL). "Alto nível" significa que o idioma contém muitas abstrações que ocultam muitos dos detalhes técnicos subjacentes (como localizações da memória, registros da CPU, acesso ao disco, operações bit a bit, etc.). O SQL certamente é baseado em relações, pois seu principal objetivo é descrever dados e operações relacionais. SQL também é um nível bastante alto; ele não fornece nenhum meio de acessar bytes no disco diretamente e não fornece detalhes sobre como ele armazena seus dados (pelo menos o SQL padrão não;
De fato, há muito mais eixos ao longo dos quais as linguagens de programação (e dados) podem ser classificadas; um particularmente interessante é declarativo versus imperativo . Linguagens declarativas descrevem o que é algo ; linguagens imperativas descrevem como fazer algo. A parte DDL de SQL é principalmente declarativa, apesar das palavras-chave para o futuro imperativas (" CREATE TABLE
", ' DROP DATABASE
', etc.), e até mesmo a parte de manipulação de dados ( SELECT
, UPDATE
, INSERT
, DELETE
) ainda é bastante declarativa. Uma propriedade muito interessante do SQL é que ele não está completo: você não pode gravar um loop ilimitado no SQL ANSI padrão comum.
A programação funcional concentra-se em algumas idéias principais:
- funções são cidadãos de primeira classe (ou seja, podem ser usadas como valores, como entradas para outras funções e como saída de outras funções)
- funções de ordem superior (funções que operam em funções ou funções que retornam funções)
- pureza (uma função pura é aquela que não tem efeitos colaterais; uma função pura não pode fazer nenhuma E / S, não pode ler nem modificar nenhum estado global e não pode aceitar argumentos de referência que não sejam const. As funções puras são especialmente interessantes porque sempre produza a mesma saída, com as mesmas entradas)
O SQL certamente não gira em torno de funções como a principal ferramenta para modelar as coisas, mas de certa forma abraça a idéia de pureza - a mesma consulta executada no mesmo banco de dados produzirá o mesmo resultado, sempre (exceto para pedidos). Chamar o SQL de uma linguagem 'funcional' é um pouco difícil para o IMO.