Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

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.

  • 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, use timestamp .

    • 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.

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).

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.

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.

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 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

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)

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.

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.

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

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.

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 .

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).

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.

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.

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.

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.

As palavras-chave Atlas SQL (como SELECT, FROM, JOIN etc.) não podem ser usadas como identificadores não delimitados.

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.

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.

O Atlas SQL é compatível com os seguintes operadores básicos:

  • +

  • -

  • *

  • /

  • ||

  • <

  • <=

  • !=

  • ==

  • >

  • >=

  • BETWEEN

  • AND

  • OR

  • NOT

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.

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.

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.

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
*/

Voltar

Errors