Voltar para a lista de artigos Artigos
22 minutos de leitura

20 exemplos de consultas SQL básicas para iniciantes: Uma visão geral completa

Essas 20 consultas básicas são obrigatórias em um pacote inicial para todo iniciante em SQL. Esses exemplos o ajudarão a iniciar sua jornada para dominar o SQL.

Você decidiu aprender SQL, pesquisou no Google "basic sql query examples" (exemplos de consultas básicas de SQL) ou algo semelhante, e aqui está você olhando para este artigo. E agora? Todo aprendizado começa com o básico, portanto, vamos começar com a pergunta mais básica:

O que é SQL?

A primeira coisa a fazer é saber o que é SQL. SQL, ou Structured Query Language (Linguagem de consulta estruturada), é uma linguagem de programação. Como qualquer linguagem - de programação ou natural - ela é usada para se comunicar, para falar. O SQL foi projetado para conversar com um banco de dados. Fazemos isso usando frases que chamamos de consultas, que são comandos SQL para recuperar dados do banco de dados.

Em breve, mostraremos 20 exemplos de consultas SQL básicas para você começar a conversar com o banco de dados. Todas essas consultas são ensinadas em nosso SQL para Iniciantes Este curso lhe dará ainda mais estrutura, exemplos e desafios para resolver. Ele tem 129 exercícios interativos sobre consulta a uma ou mais tabelas, agregação e agrupamento de dados, JOINs, subconsultas e operações de conjunto. Mesmo com os 20 exemplos futuros, não mostraremos todos os detalhes nem mesmo todas as consultas de nível básico. É por isso que recomendamos usar o curso como uma plataforma para praticar os fundamentos que discutiremos aqui.

Além disso, a maioria de nossos exemplos está bem apresentada em nossa Folha de dicasSQL para Iniciantes . Fique à vontade para tê-la ao seu lado - ela pode ajudá-lo a entender melhor o que vem a seguir.

Não vamos perder tempo! Apresentaremos o conjunto de dados e, em seguida, começaremos a escrever e explicar as consultas SQL básicas.

Conjunto de dados

O conjunto de dados consiste em duas tabelas. A primeira é mostrada abaixo; você pode criar essa tabela copiando e executando esta consulta do GitHub.

idfirst_namelast_namedepartmentsalary
1PaulGarrixCorporate3,547.25
2AstridFoxPrivate Individuals2,845.56
3MatthiasJohnsonPrivate Individuals3,009.41
4LucyPattersonPrivate Individuals3,547.25
5TomPageCorporate5,974.41
6ClaudiaConteCorporate4,714.12
7WalterDeerPrivate Individuals3,547.25
8StephanieMarxCorporate2,894.51
9LucaPavarottiPrivate Individuals4,123.45
10VictoriaPollockCorporate4,789.53

Como qualquer tabela, ela tem um nome: employees. Cada tabela tem colunas que também têm nomes. Eles descrevem os dados que cada coluna contém.

As colunas e os dados na tabela acima são:

  • id - O ID exclusivo do funcionário e a chave primária da tabela.
  • first_name - O primeiro nome do funcionário.
  • last_name - O sobrenome do funcionário.
  • department - O departamento do funcionário.
  • salary - O salário mensal do funcionário, em dólares americanos.

Tudo isso nos diz que essa tabela é uma lista dos funcionários de uma empresa e seus salários. Há também dados sobre os departamentos dos funcionários. Todos os funcionários trabalham na divisão de vendas, onde o departamento pode ser Corporativo ou Privado. Individuals. Em outras palavras, os funcionários vendem os produtos da empresa para empresas e pessoas físicas.

A outra tabela do conjunto de dados é denominada quarterly_sales. Ela é mostrada abaixo e a consulta para criá-la está aqui.

employee_idq1_2022q2_2022q3_2022q4_2022
83,471.4114,789.253,478.341,254.23
45,417.8112,846.238,741.543,589.99
101,547.521,269.661,478.652,474.33
18,715.558,465.6524,747.823,514.36
312,774.5124,784.3112,223.348,451.51
24,989.235,103.224,897.985,322.05
718,415.6615,279.3714,634.4414,445.12
62,498.638,741.453,997.652,497.21
56,349.747,555.556,944.357,788.01
94,485.364,101.508,787.457,648.90

As colunas são:

  • employee_id - O ID exclusivo do funcionário. Além disso, uma chave estrangeira que faz referência à coluna id da tabela employees.
  • q1_2022 - As vendas feitas por esse funcionário no primeiro trimestre de 2022.
  • q2_2022 - As vendas feitas por esse funcionário no segundo trimestre de 2022.
  • q3_2022 - As vendas feitas por esse funcionário no terceiro trimestre de 2022.
  • q4_2022 - As vendas feitas por esse funcionário no quarto trimestre de 2022.

Em geral, essa tabela é uma lista das vendas de cada trimestre feitas por cada funcionário mostrado na primeira tabela.

Agora, vamos começar a escrever as consultas SQL.

1. Seleção de todas as colunas de uma tabela

Essa consulta é útil quando você deseja obter rapidamente todas as colunas de uma tabela sem escrever cada coluna no comando SELECT.

Consulta

SELECT *
FROM employees;

Explicação

Sempre que quiser selecionar qualquer número de colunas de qualquer tabela, você precisará usar o comando SELECT. Você a escreve, obviamente, usando a palavra-chave SELECT.

Após a palavra-chave, vem um asterisco (*), que é uma abreviação de "todas as colunas da tabela".

Para especificar a tabela, use a cláusula FROM e escreva o nome da tabela em seguida.

Saída

A saída da consulta é a tabela inteira employeesconforme mostrado abaixo.

idfirst_namelast_namedepartmentsalary
1PaulGarrixCorporate3,547.25
2AstridFoxPrivate Individuals2,845.56
3MatthiasJohnsonPrivate Individuals3,009.41
4LucyPattersonPrivate Individuals3,547.25
5TomPageCorporate5,974.41
6ClaudiaConteCorporate4,714.12
7WalterDeerPrivate Individuals3,547.25
8StephanieMarxCorporate2,894.51
9LucaPavarottiPrivate Individuals4,123.45
10VictoriaPollockCorporate4,789.53

2. Seleção de uma coluna de uma tabela

Você pode usar essa consulta quando precisar de apenas uma coluna da tabela.

Consulta

SELECT first_name
FROM employees;

Explicação

A abordagem é semelhante à da consulta anterior. No entanto, desta vez, em vez de um asterisco, escrevemos o nome da coluna específica em SELECT. Nesse caso, é a coluna first_name.

A segunda linha da consulta é a mesma: ela faz referência à tabela na cláusula FROM.

Resultado

A consulta retorna a lista dos primeiros nomes dos funcionários.

first_name
Paul
Astrid
Matthias
Lucy
Tom
Claudia
Walter
Stephanie
Luca
Victoria

3. Seleção de duas colunas em uma tabela

Essa consulta é útil para selecionar duas (ou mais) colunas de uma tabela.

Consulta

SELECT first_name,
	 last_name
FROM employees;

Explicação

Novamente, a abordagem é semelhante à dos exemplos anteriores. Para selecionar duas colunas, você precisa escrever seus nomes em SELECT. O importante é que as colunas precisam ser separadas por vírgula. Você pode ver no exemplo que há uma vírgula entre as colunas first_name e last_name.

Em seguida, como de costume, faça referência à tabela employees em FROM.

Saída

Agora a consulta mostra os nomes completos dos funcionários.

first_namelast_name
PaulGarrix
AstridFox
MatthiasJohnson
LucyPatterson
TomPage
ClaudiaConte
WalterDeer
StephanieMarx
LucaPavarotti
VictoriaPollock

4. Seleção de duas (ou mais) colunas de uma tabela e filtragem usando comparação numérica em WHERE

Conhecer essa consulta SQL permitirá que você filtre os dados de acordo com valores numéricos. Você pode fazer isso usando operadores de comparação na cláusula WHERE.

Esta é a visão geral dos operadores de comparação SQL.

Comparison OperatorDescription
=Is equal to
>Is greater than
<Is less than
>=Is greater than or equal to
<=Is less than or equal to
<>Is not equal to

Consulta

SELECT 
  first_name, 
  last_name,
  salary
FROM employees
WHERE salary > 3800;

Explicação

Na verdade, a consulta seleciona três colunas, não duas. É o mesmo que com duas colunas: basta escrevê-las em SELECT e separá-las com vírgulas.

Em seguida, fazemos referência à tabela em FROM.

Agora, precisamos mostrar apenas os funcionários com salário acima de 3.800. Para fazer isso, você precisa usar WHERE. É uma cláusula que aceita condições e é usada para filtrar o resultado. Ela percorre a tabela e retorna somente os dados que satisfazem a condição.

No nosso caso, estamos procurando por salários "maiores que" um determinado número. Em outras palavras, uma condição que usa o operador de comparação >.

Para definir a condição, escrevemos o nome da coluna em WHERE. Em seguida, vem o operador de comparação e, depois disso, o valor ao qual os dados devem ser maiores. Essa condição agora retornará todos os salários acima de 3.800.

Resultado

A consulta retorna quatro funcionários e seus salários. Como você pode ver, todos eles têm salários acima de 3.800.

first_namelast_namesalary
TomPage5,974.41
ClaudiaConte4,714.12
LucaPavarotti4,123.45
VictoriaPollock4,789.53

5. Seleção de duas colunas e filtragem usando uma condição de igualdade em WHERE

Mais uma vez, esse exemplo de consulta SQL básica é útil quando você deseja selecionar várias colunas, mas não todas as linhas da tabela. Agora você quer encontrar os valores que são iguais ao valor da condição. Para isso, você precisa da condição de igualdade (=).

Consulta

SELECT 
  first_name,
  last_name
FROM employees
WHERE first_name = 'Luca';

Explicação

A consulta seleciona o primeiro e o último nome dos funcionários.

Entretanto, queremos mostrar apenas os funcionários cujo nome seja Luca. Para isso, usamos novamente WHERE. A abordagem é semelhante à do exemplo anterior: usamos WHERE, escrevemos o nome da coluna e usamos o operador de comparação. Desta vez, nossa condição usa o sinal de igual (=).

Em outras palavras, os valores na coluna first_name devem ser iguais a Luca. Além disso, quando a condição não é um número, mas um texto ou uma data/hora, ela deve ser escrita entre aspas simples (''). É por isso que nossa condição é escrita como 'Luca', e não simplesmente Luca.

Saída

O resultado mostra que há apenas um funcionário chamado Luca, e seu nome completo é Luca Pavarotti.

first_namelast_name
LucaPavarotti

6. Seleção de duas colunas e ordenação por uma coluna

Aqui está outro exemplo de consulta SQL básica que você achará útil. Ele pode ser usado sempre que você precisar ordenar o resultado de uma determinada maneira para torná-lo mais legível.

A ordenação ou classificação do resultado é feita com a cláusula ORDER BY. Por padrão, ela ordena a saída em ordem crescente, o que funciona em ordem alfabética (para dados de texto), do menor para o maior número (para dados numéricos) ou da data ou hora mais antiga para a mais recente (para datas e horas).

Consulta

SELECT 
  first_name,
  last_name
FROM employees
ORDER BY last_name;

Explicação

Novamente selecionamos o nome e o sobrenome dos funcionários. Mas agora queremos classificar o resultado de uma maneira específica. Neste exemplo, é pelo sobrenome dos funcionários. Para fazer isso, usamos ORDER BY. Nele, simplesmente escrevemos o nome da coluna.

Podemos adicionar a palavra-chave ASC depois disso para classificar o resultado de forma ascendente. No entanto, isso não é obrigatório, pois a classificação ascendente é padrão no SQL.

Saída

A consulta retorna uma lista de funcionários ordenados alfabeticamente por seus sobrenomes.

first_namelast_name
ClaudiaConte
WalterDeer
AstridFox
PaulGarrix
MatthiasJohnson
StephanieMarx
TomPage
LucyPatterson
LucaPavarotti
VictoriaPollock

7. Seleção de duas colunas e ordenação decrescente por uma coluna

Esse exemplo é semelhante ao anterior e tem o mesmo objetivo: classificar a saída da consulta SQL. Entretanto, nesse caso, os dados são ordenados em ordem decrescente (Z para A, 10 para 1).

Consulta

SELECT 
  first_name,
  last_name
FROM employees
ORDER BY last_name DESC;

Explicação

A consulta é quase exatamente a mesma do exemplo anterior. A única diferença é que estamos ordenando a saída pelo nome do funcionário de forma decrescente.

Para fazer isso, coloque a palavra-chave DESC após a coluna last_name na cláusula ORDER BY.

Saída

first_namelast_name
VictoriaPollock
LucaPavarotti
LucyPatterson
TomPage
StephanieMarx
MatthiasJohnson
PaulGarrix
AstridFox
WalterDeer
ClaudiaConte

Você pode ver que a saída está ordenada da maneira que queríamos.

8. Seleção de duas colunas de uma tabela e ordenação descendente por duas colunas

A classificação de uma consulta SQL pode ser mais sofisticada. É comum classificar os dados por duas ou mais colunas, o que você provavelmente já conhece como usuário do Excel ou do Google Sheets. O mesmo pode ser feito no SQL.

Consulta

SELECT 
  first_name,
  last_name,
  salary
FROM employees
ORDER BY salary DESC, last_name ASC;

Explicação

Com essa consulta, estamos desenvolvendo o exemplo anterior; queremos classificar o resultado pelo salário e pelo sobrenome do funcionário. Desta vez, classificamos por salário em ordem decrescente e, em seguida, por sobrenome em ordem crescente.

Fazemos referência à coluna salário em ORDER BY e a seguimos com a palavra-chave DESC. A palavra-chave DESC indica ordem decrescente. Antes do segundo critério de ordenação, precisamos colocar uma vírgula. Depois dela, vem o segundo critério/coluna, que, neste caso, é last_name. Você pode adicionar ou omitir a palavra-chave ASC para classificar o resultado em ordem crescente.

Observação: A ordem das colunas em ORDER BY é importante! A consulta escrita como está acima classificará primeiro o salário de forma decrescente e, em seguida, o sobrenome de forma crescente. Se você escrevesse ORDER BY last_name ASC, salary DESC, ela classificaria primeiro pelo sobrenome e depois pelo salário em ordem decrescente.

Saída

first_namelast_namesalary
TomPage5,974.41
VictoriaPollock4,789.53
ClaudiaConte4,714.12
LucaPavarotti4,123.45
WalterDeer3,547.25
PaulGarrix3,547.25
LucyPatterson3,547.25
MatthiasJohnson3,009.41
StephanieMarx2,894.51
AstridFox2,845.56

O resultado é ordenado por salário. Quando o salário é o mesmo (linhas verdes), os dados são ordenados alfabeticamente pelo sobrenome.

9. Seleção de duas colunas com uma condição lógica complexa em WHERE

Este exemplo demonstrará novamente como filtrar a saída usando WHERE. Desta vez, será um pouco mais avançado, pois usaremos um operador lógico. No SQL, os operadores lógicos permitem que você teste se a condição de filtragem é verdadeira ou não. Eles também permitem que você defina várias condições.

Os três operadores lógicos básicos do SQL são AND, OR e NOT. Na consulta abaixo, usaremos OR para obter salários abaixo de 3.000 ou acima de 5.000.

Consulta

SELECT 
  first_name,
  last_name,
  salary
FROM employees
WHERE salary > 5000 OR salary < 3000;

Explicação

Usamos essa consulta para selecionar o nome, o sobrenome e o salário do funcionário na tabela employees.

No entanto, queremos mostrar apenas os funcionários cujos salários estejam acima de US$ 5.000 ou abaixo de US$ 3.000. Para isso, usamos o operador lógico OR e os operadores de comparação em WHERE.

Escrevemos a primeira condição em WHERE, onde fazemos referência à coluna salary e definimos a condição de que os valores devem estar acima de US$ 5.000. Em seguida, usamos o operador OR, seguido pela segunda condição. A segunda condição novamente faz referência à coluna de salário e usa o operador "less than" para retornar os valores abaixo de 3.000.

Saída

first_namelast_namesalary
AstridFox2,845.56
TomPage5,974.41
StephanieMarx2,894.51

A consulta retorna apenas três funcionários e seus salários, pois são os únicos que satisfazem as condições.

10. Cálculos simples em colunas

Neste exemplo, mostraremos como você pode executar operações matemáticas simples nas colunas da tabela.

Usaremos um dos operadores aritméticos do SQL.

Arithmetic OperatorDescription
+Addition
-Subtraction
*Multiplication
/Division
%Modulo, i.e. returns the remainder of the integer division.

Consulta

SELECT 
  employee_id,
  q1_2022 + q2_2022 AS h1_2022
FROM quarterly_sales;

Explicação

Na consulta acima, queremos encontrar as vendas no primeiro semestre de 2022 para cada funcionário.

Para isso, primeiro selecionamos a coluna employee_id da tabela quarterly_sales.

Em seguida, selecionamos a coluna q1_2022 e usamos o operador aritmético de adição para adicionar a coluna q2_2022. Também damos a essa nova coluna calculada um alias de h1_2022 usando a palavra-chave AS.

Saída

employee_idh1_2022
818,260.66
418,264.04
102,817.18
117,181.20
337,558.82
210,092.45
733,695.03
611,240.08
513,905.29
98,586.86

O output mostra os IDs de todos os funcionários e suas respectivas vendas no primeiro semestre de 2022.

11. Usando SUM() e GROUP BY

Essa consulta usa a função de agregação SUM() com GROUP BY. No SQL, as funções de agregação funcionam em grupos de dados; por exemplo, SUM(sales) mostra o total de todos os valores na coluna sales. É útil conhecer essa função quando você quiser colocar dados em grupos e mostrar o total de cada grupo.

Consulta

SELECT 
  department,
  SUM(salary) AS total_salaries
FROM employees
GROUP BY department;

Explicação

O objetivo da consulta acima é encontrar o valor total do salário para cada departamento. Isso é feito da seguinte maneira.

Primeiro, selecione a coluna departamento na tabela employees. Em seguida, use a função SUM(). Como queremos adicionar os valores de salário, especificamos a coluna salary na função. Além disso, damos a essa coluna calculada o alias total_salaries.

Por fim, a saída é agrupada pela coluna department.

Observação: Qualquer coluna não agregada que apareça no SELECT também deve aparecer no GROUP BY. Mas isso é lógico - o objetivo é agrupar os dados por departamento, portanto, é claro que a colocaremos em GROUP BY.

Saída

departmenttotal_salaries
Corporate21,919.82
Private Individuals17,072.92

O output mostra todos os departamentos e a soma dos custos salariais mensais totais por departamento.

12. Usando COUNT() e GROUP BY

Aqui está outra consulta SQL básica que usa uma função de agregação. Desta vez, ela é COUNT(). Você pode usá-la se quiser agrupar dados e mostrar o número de ocorrências em cada grupo.

Consulta

SELECT 
  department,
  COUNT(*) AS employees_by_department
FROM employees
GROUP BY department; 

Explicação

Queremos mostrar o número de funcionários por departamento.

Selecione o departamento na tabela employees. Em seguida, use a função de agregação COUNT(). Nesse caso, usamos a versão COUNT(*), que conta todas as linhas. Atribuímos à coluna o alias employees_by_department.

Como etapa final, agrupamos a saída pelo departamento.

Observação: COUNT(*) conta todas as linhas, inclusive aquelas com os valores NULL valores. Se não quiser incluir os possíveis valores NULL em seu resultado, use a versão COUNT(column_name) da função. Podemos usar COUNT(*) aqui porque sabemos que não há valores NULL na tabela.

Saída

departmentemployees_by_department
Corporate5
Private Individuals5

Há dois departamentos, cada um com cinco funcionários.

13. Usando AVG() e GROUP BY

A função AVG() calcula o valor médio. Você pode usar essa consulta sempre que quiser agrupar dados e mostrar o valor médio de cada grupo.

Consulta

SELECT 
  department,
  AVG(salary) AS average_salary
FROM employees
GROUP BY department; 

Explicação

A consulta é igual à anterior, só que dessa vez usamos a função AVG(), pois queremos calcular a média salarial por departamento.

Selecionamos o departamento, usamos AVG() com a coluna salary e agrupamos o resultado por departamento.

Saída

departmentaverage_salary
Corporate4,383.96
Private Individuals3,414.58

O resultado mostra dois departamentos e seus salários médios.

14. Usando MIN() e GROUP BY

Essa é outra consulta que combina uma função de agregação com GROUP BY. Use-a sempre que quiser encontrar os valores mínimos de cada grupo.

Consulta

SELECT 
  department,
  MIN(salary) AS minimum_salary
FROM employees
GROUP BY department;

Explicação

Novamente, usamos a mesma consulta e alteramos apenas a função de agregação.

A consulta calcula o salário mínimo por departamento.

Saída

departmentminimum_salary
Corporate2,894.51
Private Individuals2,845.56

O output mostra os departamentos e o salário mais baixo em cada departamento.

15. Usando MAX() e GROUP BY

Este exemplo mostra como usar a função de agregação MAX() para mostrar o valor mais alto em cada grupo.

Consulta

SELECT 
  department,
  MAX(salary) AS maximum_salary
FROM employees
GROUP BY department;

Explicação

Usamos a consulta para mostrar o salário mais alto em cada departamento, juntamente com o nome do departamento.

Você já sabe como isso funciona. A consulta é a mesma do exemplo anterior, mas agora ela usa a função MAX().

Saída

departmentmaximum_salary
Corporate5,974.41
Private Individuals4,123.45

O resultado nos mostra os salários mais altos no departamento Corporate and Private Individuals.

16. Usando SUM(), WHERE e GROUP BY

Esta pode parecer mais complicada, mas ainda é uma consulta SQL básica. Ela é usada quando você deseja mostrar os valores totais de cada grupo, mas deseja incluir apenas linhas específicas na soma.

Consulta

SELECT 
  department,
  SUM(salary) AS total_salary
FROM employees
WHERE salary > 3500
GROUP BY department;

Explicação

A consulta mostrará o salário total por departamento, mas incluirá na soma apenas os salários individuais acima de US$ 3.500. Veja como ela funciona.

Primeiro, é claro, selecione os departamentos e use SUM() com a coluna de salário da tabela employees. Você já aprendeu isso.

Em seguida, use a cláusula WHERE para especificar os valores que você deseja incluir na soma. Nesse caso, é quando a coluna salário for maior que 3.500. Em outras palavras, a consulta agora somará apenas os valores acima de 3.500.

Por fim, agrupe por departamento.

Saída

departmenttotal_salary
Private Individuals11,217.95
Corporate19,025.31

Esses totais agora incluem somente os salários acima de US$ 3.500. Compare isso com o resultado do décimo primeiro exemplo (mostrado abaixo; observe a classificação diferente) e você verá que os totais são menores. Isso é lógico, pois o resultado abaixo também inclui salários iguais ou inferiores a US$ 3.500.

departmenttotal_salaries
Corporate21,919.82
Private Individuals17,072.92

17. Uso de COUNT(), WHERE e GROUP BY

Essa também é uma das consultas que recomendamos que você inclua em sua caixa de ferramentas SQL. Ela é semelhante à anterior, pois usa uma função de agregação. Esse tipo de consulta pode ser usado quando você quiser mostrar o número de ocorrências de cada grupo.

Consulta

SELECT 
  department,
  COUNT(*) AS number_of_employees
FROM employees
WHERE salary > 3500
GROUP BY department;

Explicação

Essa consulta é semelhante à anterior, só que usa a função de agregação COUNT(). Seu objetivo é mostrar o nome do departamento e o número de funcionários desse departamento, mas conta apenas os funcionários com salário acima de US$ 3.500.

Para conseguir isso, primeiro selecione o departamento. Em seguida, use COUNT(*) para contar todas as linhas dentro de cada departamento. Cada linha equivale a um funcionário. Estamos livres para usar essa versão da função COUNT() porque sabemos que não há linhas NULL.

Agora, use WHERE para incluir na contagem somente os funcionários com salários superiores a US$ 3.500.

No final, você só precisa agrupar os dados por departamento.

Saída

departmentnumber_of_employees
Private Individuals3
Corporate4

O resultado mostra que há três funcionários no departamento Private Individuals com salários acima de US$ 3.500 e quatro no departamento Corporate.

Obviamente, alguns funcionários estão faltando, como deveria ser. Aprendemos em um dos exemplos anteriores que há cinco funcionários em cada departamento.

18. Acesso a dados em duas tabelas usando INNER JOIN

Esse tipo de consulta é usado sempre que se deseja acessar dados de duas ou mais tabelas. Mostraremos INNER JOIN, mas esse não é o único tipo de união que você pode usar.

Aqui está uma breve visão geral dos tipos de junção no SQL. Esses são os nomes completos das junções. O que é mostrado entre colchetes pode ser omitido na consulta e a união funcionará sem ele.

SQL Join TypeDescription
(INNER) JOINReturns the matching values from both tables.
LEFT (OUTER) JOINReturns all the values from the left table and only the matching values from the right table.
RIGHT (OUTER) JOINReturns all the values from the right table and only the matching values from the left table.
FULL (OUTER) JOINReturns all the rows from both tables.
CROSS JOINReturns all combinations of all rows from the first and second table, i.e. the Cartesian product.

Consulta

SELECT 
  e.id,
  e.first_name,
  e.last_name,
  qs.q1_2022 + qs.q2_2022 + qs.q3_2022 + qs.q4_2022 AS total_sales_2022
FROM employees e 
JOIN quarterly_sales qs
ON e.id = qs.employee_id;

Explicação

Essa consulta deseja mostrar o ID e o nome de cada funcionário, juntamente com o total de vendas em 2022.

Para isso, ela usa JOIN, pois os dados necessários estão em ambas as tabelas do nosso conjunto de dados.

Vamos começar a explicar a consulta com a cláusula FROM. Isso é familiar: para usar os dados da tabela employeesvocê precisa fazer referência a eles em FROM. Também atribuímos a essa tabela um alias ('e'), para que não precisemos escrever o nome completo da tabela posteriormente.

Depois disso, usamos a palavra-chave JOIN para unir a segunda tabela. Fazemos isso fazendo referência à tabela quarterly_sales em JOIN e dando a ela o alias 'qs'.

Agora vem a condição ON. Ela é usada para especificar as colunas nas quais as duas tabelas serão unidas. Normalmente, essas são as colunas que armazenam os mesmos dados em ambas as tabelas. Em outras palavras, unimos as tabelas nas chaves primária e estrangeira. Uma chave primária é uma coluna (ou colunas) que define exclusivamente cada linha da tabela. Uma chave estrangeira é uma coluna na segunda tabela que se refere à primeira tabela. Em nosso exemplo, a coluna id da tabela employees é sua chave primária. A coluna employee_id da tabela quarterly_sales é a chave estrangeira, pois contém o valor da coluna id da primeira tabela.

Portanto, usaremos essas colunas em ON, mas também precisamos especificar de qual tabela cada coluna é. Lembre-se de que demos aliases às nossas tabelas. Isso será útil aqui, pois não precisaremos escrever os nomes completos das tabelas - apenas uma letra para cada tabela. Escrevemos o alias da primeira tabela (em vez de seu nome completo), separando-os com um ponto, e depois o nome da coluna. Colocamos o sinal de igual, o alias da segunda tabela e o nome da coluna.

Agora que temos duas tabelas unidas, estamos livres para selecionar qualquer coluna de ambas as tabelas. Selecionamos id, first_name e last_name de employees. Em seguida, adicionamos cada coluna da tabela quarterly_sales que mostra as vendas trimestrais e a nomeamos total_sales_2022. Cada coluna em SELECT também tem o alias da tabela antes dela, com o alias e o nome da coluna separados por um ponto.

Observação: ao unir tabelas, é recomendável usar os nomes das tabelas antes dos nomes das colunas em SELECT é recomendável. Isso facilitará a determinação de qual coluna vem de qual tabela. Além disso, as tabelas podem ter colunas com o mesmo nome. No entanto, os nomes de tabela podem se tornar prolixos, portanto, também é recomendável dar a eles aliases em JOIN. Dessa forma, você pode usar aliases muito mais curtos (em vez dos nomes completos das tabelas) na frente dos nomes das colunas.

Saída

idfirst_namelast_nametotal_sales_2022
8StephanieMarx22,993.23
4LucyPatterson30,595.57
10VictoriaPollock6,770.16
1PaulGarrix45,443.38
3MatthiasJohnson58,233.67
2AstridFox20,312.48
7WalterDeer62,774.59
6ClaudiaConte17,734.94
5TomPage28,637.65
9LucaPavarotti25,023.21

O output lista cada funcionário e mostra suas vendas totais em 2022.

19. Acesso a dados em duas tabelas usando INNER JOIN e filtragem usando WHERE

Obviamente, você pode filtrar dados em tabelas unidas da mesma forma que em apenas uma tabela. Você precisará novamente da cláusula WHERE.

Consulta

SELECT
  e.id,
  e.first_name,
  e.last_name,
  qs.q4_2022-qs.q3_2022 AS sales_change
FROM employees e 
JOIN quarterly_sales qs
ON e.id = qs.employee_id
WHERE qs.q4_2022-qs.q3_2022 < 0;

Explicação

Ajustamos a consulta anterior para mostrar a queda nas vendas entre o terceiro e o quarto trimestre.

Veja como fizemos isso. Da mesma forma que fizemos anteriormente, selecionamos o ID e o nome do funcionário.

Subtraímos um trimestre do outro para calcular a alteração entre os trimestres. Nesse caso, é a coluna com as vendas do quarto trimestre menos as vendas do terceiro trimestre. Essa nova coluna é denominada sales_change.

As tabelas são unidas exatamente da mesma forma que no exemplo anterior.

Para mostrar apenas a redução das vendas, usamos a cláusula WHERE. Nela, subtraímos novamente o terceiro trimestre do quarto e definimos a condição de que o resultado deve ser menor que zero, ou seja, uma redução. Como você notou, WHERE vem depois que as tabelas são unidas.

Saída

idfirst_namelast_namesales_change
8StephanieMarx-2,224.11
4LucyPatterson-5,151.55
1PaulGarrix-21,233.46
3MatthiasJohnson-3,771.83
7WalterDeer-189.32
6ClaudiaConte-1,500.44
9LucaPavarotti-1,138.55

O output mostra todos os funcionários que tiveram uma redução de vendas no último trimestre e o valor dessa redução.

20. Acesso a dados em duas tabelas usando INNER JOIN, filtragem usando WHERE e classificação com ORDER BY

Você provavelmente notou que os resultados em nossos dois últimos exemplos são classificados de forma um pouco aleatória. Isso não é algo que você precisa tolerar - é possível ordenar os dados com ORDER BY mesmo ao usar duas tabelas.

Consulta

SELECT 
  e.id,
  e.first_name,
  e.last_name,
  qs.q4_2022
FROM employees e 
JOIN quarterly_sales qs
ON e.id = qs.employee_id
WHERE qs.q4_2022 > 5000
ORDER BY qs.q4_2022 DESC;

Explicação

A consulta não é muito diferente da anterior. Novamente selecionamos o ID e o nome do funcionário. Também adicionamos as vendas no último trimestre do ano. Em seguida, as tabelas são unidas da mesma forma que anteriormente. Usamos a cláusula WHERE para mostrar apenas as vendas trimestrais acima de US$ 5.000.

Além disso, queremos classificar o resultado. Isso não é diferente do que aprendemos anteriormente: basta escrever o nome da coluna em ORDER BY e classificá-la da forma desejada. Em nosso exemplo, estamos classificando das vendas trimestrais mais altas para as mais baixas.

Saída

idfirst_namelast_nameq4_2022
7WalterDeer14,445.12
3MatthiasJohnson8,451.51
5TomPage7,788.01
9LucaPavarotti7,648.90
2AstridFox5,322.05

O resultado mostra todos os cinco funcionários cujas vendas foram superiores a US$ 5.000 nos últimos três meses de 2022.

De consultas SQL básicas a SQL Master

Se quiser dominar o SQL, você deve se sentir à vontade para usar essas 20 consultas SQL básicas. Esses são os fundamentos que permitirão que você desenvolva um sólido conhecimento de SQL.

Esse tipo de conhecimento é obtido com muita prática e experiência. Em outras palavras, você simplesmente precisa escrever as consultas por conta própria. Dessa forma, você consolidará todos os conceitos que aprendeu aqui. Ao longo do caminho, você provavelmente cometerá muitos erros. Isso é desejável, pois não há melhor maneira de aprender do que tentar corrigir seus próprios erros.

Para isso, você precisará de muitos exemplos de consultas. Não, não há necessidade de criar seus próprios exemplos, como fizemos aqui. Você pode fazê-lo, se quiser. Mas já fizemos isso para você em nosso SQL para Iniciantes curso.

Ele está repleto de exemplos de consultas SQL básicas! Experimente e temos certeza de que você não se arrependerá!