A Linguagem SQL para a SEFAZ ES: Ordenação, Agrupamento e Junções
Confira neste artigo um resumo sobre a Linguagem SQL para o concurso da SEFAZ ES.
Olá, pessoal! Tudo bem com vocês?
O tão aguardado edital do concurso da Secretaria de Estado da Fazenda do Espírito Santo (SEFAZ ES), para o cargo de Auditor Fiscal, finalmente foi publicado.
A temida banca FGV é a organizadora deste certame. Ele está oferecendo 150 vagas para este cargo, com remuneração inicial de R$ 12.492,19. Nada mal, não é mesmo?
A disciplina de Tecnologia da Informação veio bastante pesada, com tópicos que não são tão comuns de serem cobrados na área fiscal. Desse modo, no artigo de hoje, o intuito é realizar um estudo sobre um assunto muito importante desta disciplina e que certamente estará na sua prova da SEFAZ ES, a Linguagem SQL.
Este já é o nosso segundo e último artigo sobre este tema. Desse modo, dividiremos a nossa análise nos seguintes tópicos:
- Ordenação;
- Agregação;
- Agrupamento;
- Junções.
Ordenação
No artigo anterior, aprendemos sobre os comandos SELECT e WHERE. Neste, iremos dar continuidade sobre este assunto, introduzindo outros comandos de consulta da Linguagem SQL para a SEFAZ ES.
Quando pesquisamos informações em banco de dados, há situações em que é interessante que os resultados da consulta sejam ordenados, de acordo com certo atributo escolhido previamente. Por exemplo, na tabela abaixo, é possível que uma consulta seja ordenada de modo crescente dos valores das notas, ou pela ordem alfabética dos nomes dos alunos. Para isso, pode ser utilizado o comando ORDER BY.
Como no artigo anterior, vamos utilizar novamente a tabela abaixo como referência para os exemplos deste artigo.
A sintaxe do ORDER BY pode ser visualizada abaixo:
SELECT coluna1, coluna2, …
FROM nome_tabela
WHERE condição
ORDER BY coluna ASC/DESC
Perceba que pode ser usado ASC, para a ordem crescente, ou DESC, para a ordem decrescente.
Por exemplo, vamos supor que queremos que os registros de todas as linhas, em que a disciplina não é História, sejam ordenados pelo valor da nota do aluno, de maneira crescente. Assim, o comando a ser utilizado será:
SELECT *
FROM Aluno
WHERE NOT disciplina=’História’
ORDER BY nota ASC
De acordo com as fórmulas acima, serão selecionados e apresentados os registros da tabela Aluno, os quais não possuem como disciplina a História, sendo que eles serão ordenados de acordo com o valor da nota, em ordem crescente.
Desse modo, teremos a seguinte tabela abaixo:
Perceba que todos os registros, exceto aqueles em que a disciplina é História, foram organizados em ordem crescente de nota e retornados ao usuário.
Quando a ordenação exigida é por ordem alfabética, usa-se a mesma sintaxe. Desse modo, caso queira que a consulta seja organizada pela ordem alfabética dos alunos, teremos a seguinte fórmula e tabela resultante:
SELECT *
FROM Aluno
WHERE NOT disciplina=’História’
ORDER BY nome_aluno ASC
De acordo com comandos acima, serão selecionados e apresentados os registros da tabela Aluno, os quais não possuem como disciplina a História, sendo que eles serão ordenados alfabeticamente (crescente), de acordo com o nome do aluno.
FIQUE SABENDO: Quando for necessária uma consulta de acordo com a ordem crescente, o comando ASC pode ser suprimido. Já quando a consulta for em ordem decrescente, é obrigatório a presença do comando DESC.
Agregação
Antes de estudarmos as funções de agrupamento, é importante aprendermos as agregações.
As funções de agregação são utilizadas quando são solicitadas informações resumidas entre os diferentes registros. Por exemplo, elas são utilizadas para encontrar o valor máximo ou mínimo de um atributo. As principais funções de agregação do SQL são MAX (máximo), MIN (mínimo), SUM (somatório), AVG (média) e COUNT (contador).
A sua sintaxe é:
SELECT FUNCAO(coluna1)
FROM nome_tabela
WHERE condição
Perceba que, neste caso, a função é inserida logo após o comando SELECT, já que será retornado apenas o resultado da função inserida.
Novamente, vamos recorrer a um exemplo para entender a agregação.
Vamos supor que o usuário queira a menor nota entre os alunos que cursam a disciplina de Física. Desse modo, a função será:
SELECT MIN(nota)
FROM Aluno
WHERE disciplina=’Física’
Na tabela, temos duas notas para a disciplina de Física, 8 e 9. Assim, o seguinte resultado será retornado:
Simples, não é? Vamos para a próxima.
Vamos realizar agora uma consulta para contar a quantidade de notas de Física presentes na tabela:
SELECT COUNT(nota)
FROM Aluno
WHERE disciplina=’Física’
A função COUNT permite realizar a contagem de registros de acordo com a condição imposta. Assim, ela irá contar o número de notas em que a disciplina corresponde a Física.
Como há duas notas da disciplina de Física na tabela, teremos como resultado da consulta a tabela abaixo:
De maneira similar, podemos encontrar a média (AVG), o valor máximo (MAX) e o somatório (SUM) das notas.
Vamos para o próximo tópico.
Agrupamento
Agora que vocês já sabem como realizar agregações através de comandos do SQL, podemos avançar para o tópico de Agrupamentos.
É possível que alguns valores de atributos sejam agrupados em relação a um outro atributo. Por exemplo, é possível que saibamos quantas disciplinas são cursadas por cada aluno. Para isto, utilizamos a função GROUP BY, geralmente com as funções de agregação já estudadas.
Para utilizar o GROUP BY, utilizamos a seguinte sintaxe:
SELECT coluna1 FUNÇÃO (coluna2)
FROM nome_tabela
WHERE condição
GROUP BY coluna1
Dito isto, vamos ver como ficaria a fórmula para sabermos quantas disciplinas são cursadas por cada diferente aluno:
SELECT nome_aluno COUNT(disciplina)
FROM Aluno
GROUP BY nome_aluno
Desse modo, o comando COUNT irá contar a quantidade de disciplinas e agrupar estes números de acordo com o nome do aluno. Assim, a seguinte tabela abaixo será retornada:
Existe outro comando que é muito utilizado em agrupamentos com o GROUP BY, é o chamado HAVING.
Ele é utilizado para incluir alguma outra condição que porventura possa ser exigida para realizar o agrupamento. A nova sintaxe, utilizando o HAVING, seria:
SELECT coluna1 FUNÇÃO (coluna2)
FROM nome_tabela
WHERE condição
GROUP BY coluna1
HAVING condição
Por exemplo, vamos supor, novamente, que queiramos saber quantas disciplinas cada aluno cursa, entretanto, apenas queremos aqueles alunos que possuam duas disciplinas ou mais associadas. Desse modo, utilizamos a seguinte fórmula:
SELECT nome_aluno COUNT(disciplina)
FROM Aluno
GROUP BY nome_aluno
HAVING COUNT(disciplina) >= 2
Agora, o comando COUNT irá contar o número de disciplinas, agrupar estes números de acordo com o nome do aluno, mas apenas irá retornar aqueles valores em que a quantidade de disciplinas contadas for maior do que 2.
Desse modo, teríamos apenas os seguintes resultados:
Muito bacana, não é?
Junções (JOINS)
Finalizando este artigo sobre a Linguagem SQL para o concurso da SEFAZ ES, trataremos das Junções (JOINS).
As JOINS são utilizadas para combinar duas ou mais tabelas. Elas podem ser realizadas, geralmente, de algumas maneiras:
INNER JOIN
O INNER JOIN, ou apenas JOIN, é utilizado para retornar os valores coincidentes em ambas as tabelas, ou seja, são as intersecções entre elas. A sua sintaxe é a apresentada abaixo:
SELECT colunas
FROM tabela1
JOIN tabela2 ON tabela1.coluna = tabela2.coluna
Entretanto, caso as colunas a serem analisadas de cada tabela possuam nomes iguais, podemos utilizar a seguinte fórmula, em substituição à última linha acima:
INNER JOIN tabela2 USING (coluna);
Vamos utilizar as seguintes tabelas abaixo para exemplificar este assunto:
A primeira tabela é formada pelos alunos e seus respectivos números de matrícula. A segunda relaciona as notas das disciplinas com os números de matrícula de cada estudante. Dessa maneira, é possível criar uma nova tabela de todos os estudantes que possuam nota em alguma disciplina, ou seja, iremos criar uma tabela através dos registros que são iguais entre as colunas matrícula_aluno das duas tabelas. Para isso, podemos utilizar a seguinte fórmula:
SELECT *
FROM Aluno
JOIN Notas ON aluno.matrícula_aluno = notas.matrícula_aluno
Assim, a tabela abaixo será retornada, através da junção das duas tabelas acima, em que há coincidência entre os números de matrícula nas duas tabelas:
Perceba que o aluno Marcos, da tabela 1, de matrícula 555, bem como o registro 777 da disciplina de Matemática, da tabela 2, não apareceram acima, já que não possuem correspondência nas tabelas vizinhas.
LEFT JOIN
O LEFT JOIN, por sua vez, irá retornar todos os elementos da tabela da esquerda, bem como aqueles da tabela da direita que possuem correspondência. Caso haja algum registro da tabela da esquerda sem correspondência com a da direita, o valor NULL será apresentado. Observe abaixo um exemplo similar ao de cima, mas utilizando o LEFT JOIN:
SELECT *
FROM Aluno
LEFT JOIN Notas ON aluno.matrícula_aluno = notas.matrícula_aluno
A seguinte tabela será apresentada:
Dessa maneira, diferentemente do INNER JOIN, todos os elementos da tabela da esquerda foram exibidos. Entretanto, o 555 não possui correspondência com a tabela da direita, sendo os seus campos preenchidos com NULL.
RIGHT JOIN
O RIGHT JOIN é bastante similar ou LEFT JOIN, entretanto, a tabela da direita que terá todos os seus elementos exibidos, enquanto o que a tabela da esquerda terá apenas aqueles que possuírem correspondência com os elementos da tabela da direita. Além disso, caso haja algum registro da tabela da direita sem correspondência com a da esquerda, o valor NULL será apresentado. Observe abaixo um exemplo similar ao de cima, mas utilizando o RIGHT JOIN:
SELECT *
FROM Aluno
RIGHT JOIN Notas ON aluno.matrícula_aluno = notas.matrícula_aluno
Como o 777 não possui correspondência com a tabela da esquerda, seus campos foram preenchidos com NULL.
FULL OUTER JOIN
SELECT *
FROM Aluno
FULL OUTER JOIN Notas ON aluno.matrícula_aluno = notas.matrícula_aluno
Este comando retorna a junção de todos os valores das duas tabelas, relacionando os relacionáveis e deixando com valor NULL aqueles campos que não possuem relação. Dessa maneira, ficaria assim a tabela resultante:
Finalizando
Pessoal, chegamos ao fim do nosso segundo artigo sobre a Linguagem SQL para o concurso da SEFAZ ES.
Procuramos identificar os principais tópicos e que possuem uma maior chance de serem cobrados.
Caso queira se preparar para chegar competitivo nesta prova, invista nos cursos para a SEFAZ ES do Estratégia Concursos. Lá você encontrará aulas completas e detalhadas, com os melhores professores do mercado.
Conheça também o Sistema de Questões do Estratégia. Afinal, a única maneira de consolidar o conteúdo de maneira satisfatória é através da resolução de questões.
Bons estudos e até a próxima.
Cursos e Assinaturas
Prepare-se com o melhor material e com quem mais aprova em Concursos Públicos em todo o país!