Voltar para a lista de artigos Artigos
7 minutos de leitura

Resumo de SQL Básico

Faça o download deste resumo de 2 páginas de SQL Básico em formato PDF ou PNG, imprima-a e cole-a em sua mesa.

O Resumo de SQL Básico fornece a sintaxe de todas as cláusulas básicas, mostra como escrever diferentes condições e ainda inclui exemplos.

Opções de download:

Primeira página do Resumo de conceitos básicos de SQL Segunda página do Resumo de conceitos básicos de SQL

Você também pode ler o conteúdo aqui:

Resumo de SQL Básico

SQL, ou Structured Query Language (Linguagem de Consulta Estruturada), é uma linguagem para comunicação com bancos de dados. Ela é usada para selecionar dados específicos e criar relatórios complexos. Atualmente, o SQL é uma linguagem de dados universal, sendo usada em praticamente todas as tecnologias que processam dados.

DADOS DE EXEMPLO

DADOS DE EXEMPLO

CONSULTANDO UMA ÚNICA TABELA

Recuperar todas as colunas da tabela pais:

SELECT *
FROM pais;

Recuperar as colunas id e nome da tabela cidade:

SELECT id, nome
FROM cidade;

Recuperar os nomes das cidades ordenados pela coluna classificacao em ordem crescente (ASC) padrão:

SELECT nome
FROM cidade
ORDER BY classificacao [ASC];

Recuperar os nomes das cidades ordenados pela coluna classificacao em ordem decrescente (DESC):

SELECT nome
FROM cidade
ORDER BY classificacao DESC;

APELIDOS/ALIAS

COLUNAS
SELECT nome AS nome_cidade
FROM cidade;
TABELAS
SELECT pa.nome, ci.nome
FROM cidade AS ci
JOIN pais AS pa
  ON ci.id_pais = pa.id;

FILTRANDO RESULTADOS

OPERADORES DE COMPARAÇÃO

Recuperar os nomes das cidades cuja classificação é maior que 3 :

SELECT nome
FROM cidade
WHERE classificacao > 3;

Recuperar os nomes das cidades que não são nem Berlim nem Madrid:

SELECT nome
FROM cidade
WHERE nome != 'Berlim'
  AND nome != 'Madrid';
OPERADORES DE TEXTO

Pesquisar nomes de cidades que comecem com um "P" ou terminem com um "s" :

SELECT nome
FROM cidade
WHERE nome LIKE 'P%'
  OR nome LIKE '%s';

Pesquisar nomes de cidades que comecem com qualquer letra seguida de "ublin" (como Dublin, na Irlanda, ou Lublin, na Polônia):

SELECT nome
FROM cidade
WHERE nome LIKE '_ublin';
OUTROS OPERADORES

Recuperar os nomes das cidades com uma população entre 500.000 e 5 milhões:

SELECT nome
FROM cidade
WHERE populacao BETWEEN 500000 AND 5000000;

Recuperar os nomes das cidades que não têm um valor de classificação:

SELECT nome
FROM cidade
WHERE classificacao IS NOT NULL;

Recuperar os nomes das cidades localizadas em países cujo identificador é 1, 4, 7 ou 8:

SELECT nome
FROM cidade
WHERE id_pais IN (1, 4, 7, 8);

CONSULTANDO VÁRIAS TABELAS

INNER JOIN

JOIN (ou explicitamente INNER JOIN) retorna linhas cujos valores em ambas as tabelas são correspondentes.

SELECT cidade.nome, pais.nome
FROM cidade
[INNER] JOIN pais
  ON cidade.id_pais = pais.id;
INNER JOIN
LEFT JOIN

LEFT JOIN retorna todas as linhas da tabela da esquerda com as linhas correspondentes na tabela da direita. Se não houver linhas correspondentes, os valores retornados da segunda tabela serão NULL.

SELECT cidade.nome, pais.nome
FROM cidade
LEFT JOIN pais
  ON cidade.id_pais = pais.id;
LEFT JOIN
RIGHT JOIN

RIGHT JOIN retorna todas as linhas da tabela da direita com as linhas correspondentes na tabela da esquerda. Se não houver linhas correspondentes, os valores retornados da segunda tabela serão NULL.

SELECT cidade.nome, pais.nome
FROM cidade
RIGHT JOIN pais
  ON cidade.id_pais = pais.id;
RIGHT JOIN
FULL JOIN

FULL JOIN (ou explicitamente FULL OUTER JOIN) retorna todas as linhas de ambas as tabelas – se não houver uma linha correspondente na segunda tabela, valores NULL serão retornados.

SELECT cidade.nome, pais.nome
FROM cidade
FULL [OUTER] JOIN pais
  ON cidade.id_pais = pais.id;
FULL JOIN
CROSS JOIN

CROSS JOIN retorna todas as combinações possíveis de linhas das duas tabelas. Há duas sintaxes disponíveis.

SELECT cidade.nome, pais.nome
FROM cidade
CROSS JOIN pais;

SELECT cidade.nome, pais.nome
FROM cidade, pais;
CROSS JOIN
NATURAL JOIN

NATURAL JOIN une as tabelas de acordo com todas as colunas com o mesmo nome.

SELECT cidade.nome, pais.nome
FROM cidade
NATURAL JOIN pais;
NATURAL JOIN

NATURAL JOIN usa essas colunas para fazer a correspondência entre as linhas:
cidade.id, cidade.nome, pais.id, pais.nome.
Na prática, NATURAL JOIN raramente é usado.

AGREGAÇÃO E AGRUPAMENTO

GROUP BY agrupa linhas com os mesmos valores em colunas especificadas. Ele gera resumos (agregados) para cada combinação exclusiva de valores.

Agregação e agrupamento
FUNÇÕES DE AGREGAÇÃO
  • avg(expr) – valor médio das linhas do grupo
  • count(expr) – número de valores para as linhas no grupo
  • max(expr) – valor máximo no grupo
  • min(expr) – valor mínimo no grupo
  • sum(expr) – soma dos valores do grupo
EXEMPLOS DE CONSULTAS

Encontrar o número de cidades:

SELECT COUNT(*)
FROM cidade;

Encontrar o número de cidades com uma classificação diferente de zero:

SELECT COUNT(classificacao)
FROM cidade;

Encontrar o número de valores distintos para países:

SELECT COUNT(DISTINCT id_pais)
FROM cidade;

Encontrar os países com as menores e maiores populações:

SELECT MIN(populacao), MAX(populacao)
FROM pais;

Determinar a população total de cidades nos respectivos países:

SELECT id_pais, SUM(populacao)
FROM cidade
GROUP BY id_pais;

Determinar a classificação média das cidades nos respectivos países se a média for maior que 3,0:

SELECT id_pais, AVG(classificacao)
FROM cidade
GROUP BY id_pais
HAVING AVG(classificacao) > 3.0;

SUBCONSULTAS

Uma subconsulta é uma consulta aninhada em outra consulta ou em outra subconsulta. Há diferentes tipos de subconsultas.

VALOR ÚNICO

A subconsulta mais simples retorna exatamente uma coluna e uma linha. Ela pode ser usada com os operadores de comparação =, <, <=, > ou >=.

A consulta a seguir é usada para encontrar cidades com a mesma classificação de Paris:

SELECT nome
FROM cidade
WHERE classificacao = (
  SELECT classificacao
  FROM cidade
  WHERE nome = 'Paris'
);
VALORES MÚLTIPLOS

Uma subconsulta também pode retornar várias colunas ou várias linhas. Essas subconsultas podem ser usadas com os operadores IN, EXISTS, ALL ou ANY.

Essa consulta encontra cidades em países com população de mais de 20 milhões:

SELECT nome
FROM cidade
WHERE id_pais IN (
  SELECT id_pais
  FROM pais
  WHERE populacao > 20000000
);
SUBCONSULTA CORRELACIONADA

Uma subconsulta correlacionada refere-se às tabelas inseridas na consulta externa. Uma subconsulta correlacionada depende da consulta externa. Ela não pode ser executada independentemente da consulta externa.

Essa consulta pesquisa cidades cuja população é maior do que a população média do país:

SELECT *
FROM cidade cidade_principal
WHERE populacao > (
  SELECT AVG(populacao)
  FROM cidade cidade_media
  WHERE cidade_media.id_pais = cidade_principal.id_pais
);

Essa consulta pesquisa países com pelo menos uma cidade:

SELECT nome
FROM pais
WHERE EXISTS (
  SELECT *
  FROM cidade
  WHERE id_pais = pais.id
);

OPERAÇÕES DE CONJUNTO

As operações de conjunto são usadas para combinar os resultados de duas ou mais consultas em um único resultado. As consultas combinadas devem retornar o mesmo número de colunas e tipos de dados compatíveis. Os nomes das colunas correspondentes podem ser diferentes.

Operações de conjunto
UNION

UNION combina os resultados de dois conjuntos de resultados e exclui os duplicados. UNION ALL não exclui linhas duplicadas.

Essa consulta exibe ciclistas e patinadores alemães:

SELECT nome
FROM ciclismo
WHERE pais = 'DE'
UNION / UNION ALL
SELECT nome
FROM patinacao
WHERE pais = 'DE';
UNION
INTERSECT

INTERSECT retorna apenas as linhas que aparecem em ambos os conjuntos de resultados.

Essa consulta exibe ciclistas alemães que também são patinadores alemães:

SELECT nome
FROM ciclismo
WHERE pais = 'DE'
INTERSECT
SELECT nome
FROM patinacao
WHERE pais = 'DE';
INTERSECT
EXCEPT

EXCEPT retorna somente as linhas que aparecem no primeiro conjunto de resultados, mas não aparecem no segundo conjunto de resultados.

Essa consulta exibe ciclistas alemães, desde que eles não sejam patinadores alemães:

SELECT nome
FROM ciclismo
WHERE pais = 'DE'
EXCEPT / MINUS
SELECT nome
FROM patinacao
WHERE pais = 'DE';
EXCEPT