Referência de linguagem Atlas SQL
Nesta página
- Compatibilidade e Limitações
- Sistema de tipos
- Tipos de dados
- Conversões de tipo
- Schemas
- Cláusulas
- SELECT
- de
- WHERE
- AGRUPAR POR
- HAVING
- ORDENAR POR
- LIMIT e offset
- Definir operações
- Expressões
- Identificadores
- Aliases
- Palavras-chave
- Literais
- Expressões entre parênteses
- Operadores
- Expressões de Subquery
- Expressões de acesso a documentos e campos
- Nulo e Ausente
- comentários
Esta página descreve a sintaxe e semântica do Atlas SQL, um SQL dialeto projetado para fornecer suporte de primeira classe para trabalhar com MongoDB o flexível do document model. Esta página lista e descreve cláusulas, operadores, expressões e funções suportados.
Compatibilidade e Limitações
O Atlas SQL é baseado no padrão SQL-92. No entanto, o Atlas SQL não é totalmente compatível com SQL-92 devido às seguintes limitações:
A função
UNION
não é suportada. No entanto,UNION ALL
é suportado.O tipo de dados
date
não é suportado. Em vez disso, usetimestamp
.SELECT DISTINCT
não é suportado.A aritmética de intervalo e intervalo de datas não é suportada.
O Atlas SQL não suporta Atlas Vector Search e Atlas Search.
Sistema de tipos
Tipos de dados
Atlas SQL Os tipos de dados do são o conjunto de BSON types. Todos esses tipos podem ser consultados no Atlas SQL. São eles:
string (
STRING
)Documento (
DOCUMENT
)Array (
ARRAY
)BinData (
BINDATA
)ObjectId (
OBJECTID
)Booleano (
BOOL
)Data (
TIMESTAMP
)Nulo (
NULL
)Regex (
REGEX
)Inteiro de
INT
bits ()Duplo (
DOUBLE
)Longo (
LONG
)Carimbo de data/hora (
BSON_TIMESTAMP
)Decimais (
DECIMAL
)MinKey (
MINKEY
)MaxKey (
MAXKEY
)DBPointer (
DBPOINTER
)Símbolo (
SYMBOL
)JavaScript com escopo (
JAVASCRIPTWITHSCOPE
)JavaScript (
JAVASCRIPT
)
Cada tipo no Atlas SQL tem um nome (entre parênteses acima), que é uma palavra-chave que pode ser utilizada para fazer referência ao tipo quando necessário (por exemplo, em uma expressão como CAST
).
Conversões de tipo
As conversões de tipo explícitas são expressas por meio da função CAST
ou do operador ::
. Todos os tipos numéricos são mutuamente comparáveis; O Atlas SQL permite operações entre os vários tipos numéricos sem converter os operandos para serem do mesmo tipo numérico.
Schemas
O Atlas SQL converte os valores de documento flexíveis do MongoDB em tipos usando um esquema. Umesquema Atlas SQL é uma collection de dados sobre uma expressão ou collection que são conhecidos como verdadeiros no momento da compilação.
Por exemplo, um esquema Atlas SQL pode ditar que uma expressão é booleana ou um documento com subcampos, ou que uma expressão é uma array com comprimento de um ou um número inteiro positivo.
Se uma restrição de tipo estático não for satisfeita, a query não será compilada.
Cláusulas
As queries do Atlas SQL suportam um conjunto básico de cláusulas SQL. As cláusulas disponíveis são:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
OFFSET
LIMIT
SELECT
SELECT
inicia cada query do Atlas SQL. O Atlas SQL permite que SELECT VALUE
e SELECT VALUES
sejam utilizados de forma intercambiável.
O Atlas SQL exige que as declarações SELECT
aninhadas tenham um alias.
SELECT foo FROM (SELECT bar FROM baz) as subSelect
CAST()
O Atlas SQL suporta a função CAST()
, que permite a você converter valores em sua consulta dinamicamente para um determinado tipo de dados.
SELECT * FROM table WHERE period_start_utc >= CAST('2023-01-01T00:00:00.000Z' AS TIMESTAMP)
de
FROM
é a primeira cláusula avaliada em cada query do Atlas SQL .
FROM
pode extrair dados de várias fontes, incluindo coleções (SELECT * FROM foo)
, arrays (SELECT * FROM [{'a': 1}])
, junções (SELECT * FROM a JOIN b)
, tabelas derivadas (SELECT * FROM (SELECT a FROM foo) d)
e FLATTEN e UNwind.
WHERE
A cláusula WHERE
é um filtro para os dados recebidos. Sua expressão deve estaticamente ter tipo BOOL
ou NULL
e pode avaliar para MISSING
.
AGRUPAR POR
GROUP BY
fornece um meio para agrupar e agregar dados.
Se estiver usando GROUP BY
em um campo que foi nivelado usando FLATTEN ou UNwind, um alias será necessário.
SELECT customerAge, COUNT(*) FROM Sales GROUP BY customer.age AS customerAge
Funções de agregação
O Atlas SQL suporta as seguintes funções de agregação.
Nome | Descrição | Notas |
---|---|---|
ADD_TO_ARRAY | Empurra o argumento para o final de uma array. A saída total desta função será uma array. | O argumento para ADD_TO_ARRAY pode ter qualquer tipo. |
ADD_TO_SET | Empurra o argumento para o final de uma array removendo duplicatas. A saída total desta função será uma array com todos os itens duplicados removidos. Os duplicados são determinados usando o operador = . | O argumento para ADD_TO_SET pode ter qualquer tipo. |
AVG | Retorna a média de todos os argumentos. | O argumento deve ser estaticamente digitado para um tipo numérico. |
COUNT | Conta o número de elementos. COUNT(*) conta todos os valores incondicionalmente. COUNT(<expression>) conta todos os valores para os quais a expressão não resulta em NULL ou MISSING . | O argumento para COUNT pode ter qualquer tipo. |
FIRST | Retorna o primeiro elemento do grupo. | Determinístico somente quando a entrada tem ordem determinística, caso contrário indefinida. |
LAST | Retorna o primeiro elemento do grupo. Determinístico somente quando a entrada tem ordem determinística, caso contrário indefinida. | O argumento para LAST pode ter qualquer tipo. |
MAX | Retorna o elemento máximo conforme ordenado pelo operador Atlas SQL > . | O argumento deve ser estaticamente digitado para ser comparável por meio do operador > . |
MERGE_DOCUMENTS | Retorna um documento formado pela mesclagem sucessiva de documentos, com o elemento anterior usado como o lado esquerdo. No caso de chaves duplicadas, o valor da chave no novo elemento é mantido. Assim como no FIRST e no LAST , a saída é determinística somente quando a entrada tem ordenação determinística. | O argumento deve ser estaticamente digitado como DOCUMENT e, portanto, MERGE_DOCUMENTS(DISTINCT x) não é suportado. |
MIN | Retorna o elemento mínimo conforme ordenado pelo operador Atlas SQL < . | O argumento deve ser estaticamente digitado para ser comparável por meio do operador < . |
STDDEV_POP | Retorna o desvio padrão de todos os elementos em toda a população do grupo. | O argumento deve ser estaticamente digitado para um tipo numérico. Consulte stdDevPop. |
STDDEV_SAMP | Retorna o desvio padrão de uma amostra de todos os elementos no grupo. Consulte stdDevPop. | O argumento deve ser estaticamente digitado para um tipo numérico. |
SUM | Retorna a soma de todos os argumentos. | O argumento deve ser estaticamente digitado para um tipo numérico. |
HAVING
A cláusula HAVING
opera da mesma forma que uma cláusula WHERE
, mas após a cláusula GROUP BY
. Como a cláusula WHERE
, a cláusula HAVING
usa uma expressão que deve ter estaticamente o tipo BOOL
ou NULL
e pode ser avaliada como MISSING
. Ela pode fazer referência a aliases definidos no GROUP BY
e pode conter expressões com funções de aggregation. Somente os aliases definidos na GROUP BY
estão disponíveis para a cláusula HAVING
.
ORDENAR POR
A cláusula ORDER BY
fornece uma maneira de ordenar um conjunto de resultados por uma ou mais chaves de classificação. Cada chave de classificação pode ser uma referência de coluna ou um literal inteiro referente a uma expressão SELECT
por sua posição na lista de expressão selecionadas. As chaves de classificação que são referências de coluna podem ser identificadores compostos. Esses identificadores compostos podem ser qualificados com nomes de fontes de dados ou referir-se a subcampos de documento .
O Atlas SQL classifica MISSING
antes NULL
e NULL
antes de todos os outros valores. A cláusula ORDER BY
exige que todos os valores possíveis em uma expressão chave de ordenação possam ser verificados estaticamente para serem comparáveis por meio dos operadores >
(maior que) e <
(menor que).
LIMIT e offset
As cláusulas LIMIT
e OFFSET
permitem aos usuários recuperar apenas algumas das linhas retornadas por uma query. Se um número LIMIT
for fornecido, não mais do que esse número de linhas será retornado. Se um número OFFSET
for fornecido, esse número de linhas será ignorado antes de retornar as linhas.
Os números LIMIT
e OFFSET
devem ser inteiros positivos. Utilizar LIMIT
ou OFFSET
sem ORDER BY
não garante o mesmo resultado.
Quando LIMIT
e OFFSET
estiverem definidos, as linhas OFFSET
serão ignoradas antes de retornar o restante dos resultados, que não devem conter mais do que o número de linhas LIMIT
.
LIMIT i, j
é uma forma mais curta de LIMIT i OFFSET j
.
LIMIT
e OFFSET
pode ser utilizado em subqueries.
Definir operações
O operador de conjunto UNION ALL
retorna um único conjunto de resultados para duas queries SELECT
. O operador UNION ALL
não remove linhas duplicadas do conjunto de resultados. O conjunto de resultados retornado pelo operador UNION ALL
não tem uma ordem definida.
O Atlas SQL não suporta operações de conjunto UNION
, INTERSECT
ou EXCEPT
distintas.
Expressões
Identificadores
Identificadores no Atlas SQL referem-se a bancos de dados, tabelas e colunas. Os identificadores Atlas SQL suportam todos os caracteres UTF-8, exceto o caractere nulo \x00
.
No Atlas SQL, alguns identificadores são restritos para evitar conflitos com caracteres que têm outro significado semântica; para que um identificador inclua tal caractere, ele deve ser delimitado, ou seja, entre aspas duplas ou backtiques. Por exemplo, um identificador deve ser delimitado se começar com um dígito ou se entrar em conflito com uma palavra-chave reservada (por exemplo "10cent"
). Os identificadores diferenciam maiúsculas de minúsculas, delimitados ou não.
Aliases
Identificadores são utilizados para todos os aliases no Atlas SQL. Na maioria dos casos, o Atlas SQL retorna um erro se um alias for utilizado mais de uma vez na mesma cláusula. A exceção a isso é que os aliases podem ser repetidos em ambos os lados de um UNION ALL
. Isso também se aplica a aliases gerados automaticamente.
Palavras-chave
As palavras-chave Atlas SQL (como SELECT
, FROM
, JOIN
etc.) não podem ser usadas como identificadores não delimitados.
Literais
O Atlas SQL suporta literais para booleanos, nulos, números e strings. As strings estão entre aspas simples. Para incluir um caractere de aspas simples em uma string literal, dobre-o ('o''clock'
).
Os inteiros literais são digitados como INT
quando estão dentro do intervalo de inteiros com sinal 32bits e LONG
caso contrário. Números de ponto flutuante literais ou números de notação científica têm tipo DOUBLE
.
O Atlas SQL não suporta literais para todos os tipos. Por exemplo OBJECTID
, BSON_DATE
e DECIMAL
não têm sintaxe literal. Para esses tipos, valores pseudo literais podem ser obtidos usando o operador CAST
para obter de uma string ou representação numérica desses tipos para seu respectivo tipo. Alguns tipos também podem ter funções de "construtor" que fornecem nomes alternativos para as invocações CAST
relevantes.
Expressões entre parênteses
Uma expressão entre parênteses é uma expressão agrupada por parênteses. Sempre que os operadores infixos estiverem presentes, a necessidade de parênteses (ou de um mecanismo semelhante) para distinguir a ordem das operações pode ser necessária. O Atlas SQL tem vários operadores infixos, como +
e ::
. Por exemplo, o valor de 1 + 2 * 3
é 7, enquanto o valor de (1 + 2) * 3
é 9.
Operadores
O Atlas SQL é compatível com os seguintes operadores básicos:
+
-
*
/
||
<
<=
!=
==
>
>=
BETWEEN
AND
OR
NOT
Expressões de Subquery
Uma subquery é uma query SQL dentro de uma query. Você pode usar uma subquery em qualquer lugar que uma expressão possa ser usada.
O Atlas SQL suporta subquery escalar e subquery de tabela. Uma subquery escalar retorna um conjunto de resultados com zero ou uma linha e uma coluna. Pode ser usado na maioria dos locais em que um valor literal ou de coluna única é válido. Uma subquery de tabela retorna zero ou mais linhas e uma ou mais colunas.
Expressões de acesso a documentos e campos
Documentos podem ser representados com uma sintaxe semelhante à dos objetos JSON. As chaves devem ser strings e os valores podem ter qualquer um dos tipos suportados. Para acessar campos de documento , o Atlas SQL oferece duas opções: notação de "ponto" e notação de "colchetes".
A notação de ponto é semelhante ao acesso de campo na agregação MongoDB. Por exemplo, se um documento doc
contiver um campo f
, a expressão doc.f
será usada para acessar o valor desse campo. A notação de colchetes usa colchetes ([
e ]
) em torno de um nome de campo para acessar o campo com esse nome. Por exemplo, considere o mesmo documento descrito antes: doc["f"]
é usado para acessar o valor desse campo.
Nulo e Ausente
BSON distingue entre NULL
e MISSING
. No caso de NULL
há um campo com o valor literal NULL
, enquanto no caso de MISSING
, o campo não existe.
comentários
Os comentários são sequências de caracteres dentro das queries que não afetam a execução da query. O Atlas SQL permite comentários SQL padrão e comentários em bloco no estilo C.
Os comentários SQL padrão começam com traços duplos e terminam com uma nova linha:
\-- This is a standard SQL comment
Os comentários em bloco começam com \*
e terminam na ocorrência correspondente de */
.
\* This is a multiline comment */