Isso pode soar como uma pergunta muito simples, mas não estou achando fácil localizar uma resposta adequada.
Para a pergunta "O que são cláusulas sql?" a maioria dos recursos na internet simplesmente fornece uma lista de cláusulas e explica o que elas fazem.
Mas estou tentando entender em termos abstratos como isso é definido. Como uma notação genérica que captura todos os tipos de consultas que podem ser escritas e como as cláusulas se encaixam nelas.
Existem propriedades comuns a todas as cláusulas? Por que UNION é chamado de operador enquanto HAVING é uma cláusula?
Em termos gerais, uma cláusula é apenas um pedaço lógico de uma instrução SQL - e, geralmente, é um pedaço que é (teoricamente) opcional.
Eu sou um cara do SQL Server, então vou pensar nesses termos.
SELECT GETDATE()
é uma instrução SQL Server válidaSELECT
. Ele retornará a data e hora atuais.Se eu adicionar uma
FROM
cláusula:Retornarei n linhas (onde n é o número de linhas na
sys.objects
tabela), cada uma das quais terá a mesma coluna (sem nome), mostrando a data e hora atuais.Você pode adicionar uma
WHERE
cláusula para limitar o número de linhas que você traz de volta; umaGROUP BY
cláusula para desduplicar seus dados ou permitir que você coloque valores agregados naSELECT
lista; uma cláusula HAVING (geralmente para eliminar linhas com base em dados agregados); umaORDER BY
cláusula para classificar os dados - mas nenhuma delas precisa estar lá.Você notará que eu disse "
SELECT
lista" ao me referir à lista de colunas retornadas. Eu nunca ouvi isso referido como uma cláusula - presumivelmente, porque tem que estar lá.Um operador, por outro lado, é usado para combinar ou comparar dois itens completos. Assim como o
+
operador permite combinar números (1 + 2
) ou strings ([firstname] + ' ' + [lastname]
), os operadoresUNION
,EXCEPT
,DIFFERENCE
eINTERSECT
permitem combinar duas instruções SQL.Provavelmente estou simplificando demais, mas pensar nesses termos deve pelo menos levá-lo na direção certa.
Você pode ver a lista que a Oracle fornece :
(Parte disso não é 100% padrão SQL).
Eu chamaria uma cláusula de "partes bem definidas de uma instrução SQL, normalmente opcional". Tomando uma dica da gramática (onde uma cláusula é definida como " a menor unidade gramatical que pode expressar uma proposição completa "), cada cláusula é significativa. Ele também tem uma sintaxe específica.
Uma declaração (equivalente, de alguma forma, a uma sentença na gramática) pode ser composta por uma única cláusula (
SELECT something
), ou várias delas (SELECT something
..FROM a_table
...WHERE a_condition_is_met
...GROUP BY some_column
...HAVING some_property
...ORDER BY some_criteria
)Você pode encontrar uma boa referência em: ANSI SQL-1992
A segunda padronização da linguagem SQL.