Sobes.tech
Middle

Fale sobre a sintaxe completa do operador SELECT numa base de dados relacional.

sobes.tech IA

Resposta da IA

O operador SQL SELECT é usado para selecionar dados de uma ou várias tabelas. A sua sintaxe completa inclui muitas partes opcionais:

SELECT [ALL | DISTINCT]
    select_expr, select_expr, ...
FROM
    table_references
[WHERE
    where_condition]
[GROUP BY
    {col_name | expr | position}
    [ASC | DESC], ... [WITH ROLLUP]]
[HAVING
    having_condition]
[ORDER BY
    {col_name | expr | position}
    [ASC | DESC], ...]
[LIMIT
    [offset,] row_count | row_count OFFSET offset]
    [FOR UPDATE | LOCK IN SHARE MODE];

Vamos analisar as principais partes:

  • SELECT [ALL | DISTINCT] select_expr, ...:

    • SELECT: Palavra-chave que indica a seleção de dados.
    • ALL: (Por padrão) Inclui todas as linhas encontradas, incluindo duplicados.
    • DISTINCT: Remove linhas duplicadas do resultado.
    • select_expr: Expressão que define as colunas selecionadas ou valores calculados (por exemplo, column_name, function(column), column1 + column2, * para selecionar todas as colunas). Pode usar-se aliases com AS.
  • FROM table_references:

    • FROM: Palavra-chave que indica a fonte de dados.
    • table_references: Lista de tabelas, vistas ou resultados de joins (JOIN). Tipos de joins: INNER JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN, FULL [OUTER] JOIN, CROSS JOIN.
  • [WHERE where_condition]:

    • WHERE: Palavra-chave para filtrar linhas com base numa condição.
    • where_condition: Expressão lógica com operadores de comparação (=, !=, >, <, >=, <=), operadores lógicos (AND, OR, NOT), operadores para intervalos (BETWEEN), listas (IN), padrões (LIKE) e verificação de NULL (IS NULL, IS NOT NULL).
  • [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]:

    • GROUP BY: Agrupa linhas com valores iguais em colunas para aplicar funções de agregação (COUNT, SUM, AVG, MIN, MAX).
    • col_name | expr | position: Coluna, expressão ou posição para agrupar.
    • ASC | DESC: Ordem de classificação dentro do grupo (normalmente com ORDER BY).
    • WITH ROLLUP: Opcional, adiciona linhas com totais (para MySQL).
  • [HAVING having_condition]:

    • HAVING: Filtra grupos criados por GROUP BY com base numa condição. Ao contrário de WHERE, HAVING pode usar funções de agregação.
  • [ORDER BY {col_name | expr | position} [ASC | DESC], ...]:

    • ORDER BY: Ordena o conjunto de linhas resultantes.
    • col_name | expr | position: Coluna, expressão ou posição para ordenar.
    • ASC: Ascendente (padrão).
    • DESC: Descendente.
  • [LIMIT [offset,] row_count | row_count OFFSET offset]:

    • LIMIT: Limita o número de linhas retornadas.
    • offset: Deslocamento desde o início.
    • row_count: Número máximo de linhas.
  • [FOR UPDATE | LOCK IN SHARE MODE]:

    • Bloqueios opcionais em transações.
    • FOR UPDATE: Bloqueio exclusivo.
    • LOCK IN SHARE MODE: Bloqueio compartilhado (MySQL).

A ordem de aplicação numa consulta SQL geralmente é:

  1. FROM
  2. JOIN
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. SELECT
  7. DISTINCT
  8. ORDER BY
  9. LIMIT
  10. FOR UPDATE / LOCK IN SHARE MODE