CURSO TÉCNICO EM INFORMÁTICA COMPONENTE CURRICULAR: BANCO DE DADOS
PROFESSOR (A): Josiane Ferri TURMA: 11/1 - Tarde
Consultas SQL – Parte II
Outras cláusulas que o comando select apresenta são DISTINCT, ORDER BY, GROUP BY, INNER JOIN, entre outras.
DISTINCT: Várias linhas de uma tabela podem conter os mesmos valores para as suas colunas (duplicidade), com exceção da chave primária.
o Quando desejarmos eliminar a duplicidade, podemos inserir a palavra-chave DISTINCT após a palavra SELECT.
Exemplo:
select DISTINCT cidade from CadastroAluno;
Se não utilizada retorna o número de vezes que houver algum aluno na Cidade de São Leopoldo.
GROUP BY: cláusula usada em conjunto com select que agrupa linhas por um atributo definido.
Exemplo:
select nome, cidade from CadastroAluno group by cidade;
ORDER BY: cláusula usada em conjunto com select que ordena por um ou mais atributos especificados em ordem crescente (ASC) ou decrescente (DESC). Por padrão, a ordenação ocorre em ordem crescente.
Exemplo:
select *
from CadastroAluno
order by nome; | order by nome ASC; | order by nome DESC;
Padrão Crescente Decrescente.
Antes de especificar a cláusula INNER JOIN, segue abaixo duas funções que auxiliam na construção das query’s que desejam recuperar dados de duas ou mais tabelas.
Qualificadores de Nomes
o Um qualificador de nome consiste do nome da tabela, seguido de um ponto, seguido por um nome de uma coluna da tabela. Por exemplo, o qualificador da coluna NOME da tabela CadastroAluno será CadastroAluno.Aluno.
o Os qualificadores de nome são utilizados em uma consulta para efetivar a junção (JOIN) entre as tabelas.
Exemplo:
select CadastroAluno.id_aluno, CadastroAluno.nome, pagto.id_aluno
from CadastroAluno, pagto
on CadastroAluno.id_aluno = pagto.id_aluno where dia_venc = ‘25’
Sinônimos de Nomes
o Para que não seja necessário escrever o nome INTEIRO da tabela nas qualificações de nomes, podemos utilizar ALIASES definidos na própria consulta.
o Esta opção é utilizada quando temos que recuperar dados de mais de uma tabela conforme visto acima, mas queremos minimizar a escrita da nossa query.
Exemplo:
select a.id_aluno, a.nome, p.id_aluno from CadastroAluno a, pagto p on a.id_aluno = p.id_aluno where dia_venc = ‘25’
o É possível também criar alias para nomes de uma coluna. Utilizando a clásula AS;
Exemplo:
select nome AS (Nome do Aluno), from CadastroAluno
where cidade = ‘Esteio’;
Serão utilizadas as tabelas abaixo como exemplos:
CadastroAluno
id_aluno Nome Cidade telefone_celular
001 Cássio São Leopoldo 99776655
002 Leonardo Esteio 99887766
003 Jacson Portão 99775544
A mesma do documento anterior (SQL – Parte I)
Pagto
id_pagto dia_venc valor situação id_aluno
001112011 25 500.00 Pago 001
002112011 25 400.00 Pago 002
003112011 20 550.00 Não Pago 003
inner join – cláusula usada em conjunto com select para selecionar informações de tabelas diferentes.
o Juntamente com o inner join devemos utilizar o operador ON, para realizar a relação entre as tabelas, isto é, realizar a igualdade entre campos iguais pertencentes em ambas as tabelas.
Exemplo:
select a.nome, p.dia_venc, p.situacao
from pagto p INNER JOIN cadastroaluno a on p.id_aluno = a.id_aluno;
o O exemplo acima seleciona o nome do aluno da tabela CadastroAluno, o dia de vencimento e situação da tabela pagto.
o Quando utilizadas consultas em mais de uma tabela, é obrigatória essa relação executada pela cláusula ON, para que não ocorra duplicidade dos registros retornados pela consulta.
o Também pode-se utilizar a cláusula where depois do inner join.
Exemplo:
select a.id_aluno, a.nome, p.situacao
from CadastroAluno a INNER JOIN pagto p on a.id_aluno = p.id_aluno
where dia_venc = ‘25’;
Retorna o Id_Aluno e Nome da tabela CadastroAluno e a Situação da tabela pagto onde do dia_venc for 25.
Recuperando dados de duas ou mais tabelas:
Para recuperar dados três tabelas:
Antes vamos inserir as tabela de exemplo:
CadastroAluno
id_aluno Nome Cidade telefone_celular
001 Cássio São Leopoldo 99776655
002 Leonardo Esteio 99887766
003 Jacson Portão 99775544
Disciplinas
id_disciplina Nome Dia Hora_inicio Local
001 Introdução Segunda 19:00 Sala 12 - Laboratório
002 Algoritmos Terça 14:00 Sala 12 - Laboratório
003 Banco de Dados Quarta 14:00 Sala 12 - Laboratório
AlunoDisciplina
id_disciplina id_aluno Situação
001 002 Aprovado
002 002 Aprovado
003 003 Aprovado
Exemplo:
select a.nome, d.nome, ad.situacao
from CadastroAluno a, Disciplinas d, AlunoDisciplina ad where a.id_aluno = d.id_aluno and ad.id_aluno = d.id_aluno
O exemplo acima retornará o nome da disciplina, do aluno e a situação, ou seja qual disciplina o aluno cursa e se o mesmo está aprovado nesta.
Funções de Agregação
o As funções de agregação são utilizadas em conjunto com o comando select, na parte de definição dos campos.
o Segue uma lista de funções: COUNT, SUM, AVG, MAX, MIN, entre outras o COUNT - Retorna o número de linhas.
Exemplo:
select count(*) from cadatroaluno;
o SUM - Retorna a soma de uma coluna específica.
Exemplo:
select sum(valor) from pagto;
o AVG - Retorna o valor médio de uma coluna específica.
Exemplo:
select avg(valor) from pagto;
o MAX - Retorna o valor máximo de uma coluna específica.
Exemplo:
select max(valor) from pagto;
o MIN - Retorna o valor mínimo de uma coluna específica.
Exemplo:
select min(valor) from pagto;
Subquerys:
o Subquery significa o uso de um comando SQL dentro de outro comando.
o Para utilizarmos as subquerys, precisamos da cláusula EXISTS.
Exemplo:
select nome
from cadastroaluno c where EXISTS
(select * from pagto p where c.id_aluno=p.id_aluno);
o Utilizamos uma subquery quando precisamos de informações que através da estrutura básica do comando não nos permite o retorno esperado.
o No exemplo acima retornará o nome do aluno que contiver algum pagamento para ele cadastrado.