Você está na página 1de 39

DCC011

Introdução a Banco de Dados


SQL select
Mirella M. Moro
Departamento de Ciência da Computação
Universidade Federal de Minas Gerais
mirella@dcc.ufmg.br
Programa

• Introdução
• Conceitos básicos, características da abordagem de banco
de dados, modelos de dados, esquemas e instâncias,
arquitetura de um sistema de banco de dados,
componentes de um sistema de gerência de banco de
dados.
• Modelos de dados e linguagens
• Modelo entidade-relacionamento (ER), modelo relacional,
álgebra relacional, SQL.
• Projeto de bancos de dados
• Fases do projeto de bancos de dados, projeto lógico de
bancos de dados relacionais, normalização.
• Novas Tecnologias e Aplicações de Banco de Dados
DCC011 - profa. Mirella M. Moro 2
SQL: Consultas
Exemplos
1. Consultas Básicas
2. Facilidades Adicionais
3. Consultas Complexas
ALUNOS
Problema Matr Nome Sexo Cr
1 A F CC
• Dado um conjunto de
tabelas e seus dados 2 B M CC
• Como recuperar os 3 C M CC
dados? 4 D F MC
• Como realizar consultas a 5 E M MC
esses dados? 6 F M SI
• “Me diz aí os nomes das
7 G F SI
alunas do curso de
Ciência da Computação 8 H F SI
ordenados 9 I M SI
alfabeticamente”
10 J M ECA

DCC011 - profa. Mirella M. Moro 4


ALUNOS
SQL select-from Matr Nome Sexo Cr
1 A F CC
1. SELECT Matr
2 B M CC
FROM ALUNOS;
3 C M CC
2. SELECT Cr
4 D F MC
FROM ALUNOS;
5 E M MC
3. SELECT Matr, Cr
FROM ALUNOS; 6 F M SI
4. SELECT Matr, Nome, Sexo, Cr 7 G F SI
FROM ALUNOS; 8 H F SI
5. SELECT * 9 I M SI
FROM ALUNOS; 10 J M ECA

DCC011 - profa. Mirella M. Moro 5


SQL select-from-where

1. SELECT Matr
FROM ALUNOS
WHERE Sexo = ‘F’;
2. SELECT Nome
FROM ALUNOS
WHERE Sexo = ‘F’
AND Cr = ‘SI’;
3. SELECT Matr
FROM ALUNOS
WHERE Sexo = ‘F’
AND Cr <> “CC”;
DCC011 - profa. Mirella M. Moro 6
Solução: SQL select-from-where

“Me diz aí os nomes das


alunas do curso de Ciência
da Computação ordenados
alfabeticamente”

SELECT Nome
FROM ALUNOS
WHERE Sexo = ‘F’
AND Cr = ‘CC’
ORDER BY Nome;

DCC011 - profa. Mirella M. Moro 7


ALUNOS
Mais Problemas Matr Nome Sexo Cr
1 A F CC
1. Nomes de todos os
alunos acompanhados 2 B M CC
dos nomes de seus 3 C M CC
cursos 4 D F MC
2. Nomes de todos os 5 E M MC
alunos acompanhados
das disciplinas 6 F M SI
matriculadas em 20162 7 G F SI
8 H F SI
9 I M SI
10 J M ECA

DCC011 - profa. Mirella M. Moro 8


ALUNOS CURSOS
Matr Nome Sexo Cr Cr Nome Depto Coord
1 A F CC CC DCC RG
Ciência da
Computação

2 B M CC MC DCC TN
Matemática
Computacional

3 C M CC SI DCC CDJ
Sistemas de
Informação

4 D F MC ECA ENG XYZ


Engenharia de
Controle e
Automação

5 E M MC MATRICULAS
6 F M SI Matr Disc T Sem
7 G F SI 1 DCC011 Z 20162
8 H F SI 1 DCC851 A 20162
9 I M SI 1 DCC834 A 20161
10 J M ECA 2 DCC011 Z 20161
... ...
DCC011 - profa. Mirella M. Moro
... ... 9
Em formato texto
ALUNOS (Matr, Nome, Sexo, Cr)
Cr referencia CURSOS
CURSOS (Cr, Nome, Depto, Coord)
Depto referencia DEPARTAMENTOS
Coord referencia PROFESSORES
MATRICULAS (Matr, Disc, T, Sem)
Matr referencia ALUNOS
Disc referencia DISCIPLINAS
DEPARTAMENTOS (...)
PROFESSORES (...)
DISCIPLINAS (...)
DCC011 - profa. Mirella M. Moro 10
Mais Problemas

1. Nomes de todos os alunos


acompanhados dos nomes de
seus cursos

DCC011 - profa. Mirella M. Moro 11


Mais Problemas
1. Nomes de todos os alunos acompanhados
dos nomes de seus cursos
SOLUÇÃO A
SELECT Nome, Nome
FROM ALUNOS, CURSOS;
SOLUÇÃO B
SELECT ALUNOS.Nome, CURSOS.Nome
FROM ALUNOS, CURSOS;
SOLUÇÃO C
SELECT A.Nome, C.Nome
FROM ALUNOS as A, CURSOS as C;
SOLUÇÃO D
SELECT A.Nome, C.Nome
FROM ALUNOS A, CURSOS C
WHERE A.Cr = C.Cr;
DCC011 - profa. Mirella M. Moro 12
Mais Problemas

2. Nomes de todos os alunos


acompanhados das disciplinas
matriculadas em 20162

DCC011 - profa. Mirella M. Moro 13


Mais Problemas
2. Nomes de todos os alunos
acompanhados das disciplinas
matriculadas em 20162
SOLUÇÃO A
SELECT Nome, Disc
FROM ALUNOS, MATRICULAS;
SOLUÇÃO B
SELECT Nome, Disc
FROM ALUNOS, MATRICULAS
WHERE Sem=“20162”;
SOLUÇÃO C
SELECT Nome, Disc
FROM ALUNOS, MATRICULAS
WHERE Sem=“20162” AND
ALUNOS.Matr = MATRICULAS.Matr;
DCC011 - profa. Mirella M. Moro 14
Organizando as Ideias
1. Consultas Básicas em SQL
• Formato básico do comando SELECT:
SELECT <lista de atributos>
FROM <lista de tabelas>
[ WHERE <condição>; ] EM PORTUGUÊS
EMPREGADO (ssn, pnome, minicial, unome,
datanasc, endereco, sexo, salario, superssn, dno)
superssn REFERENCIA EMPREGADO
• Exemplo: dno REFERENCIA DEPARTAMENTO
DEPARTAMENTO (dnumero, dnome, gerssn,
SELECT datanast, endereco gerdatainicio)
FROM EMPREGADO gerssn REFERENCIA EMPREGADO.ssn
WHERE pnome=‘John’ AND
minicial=‘B’ AND
unome=‘Smith’;
π Bdate,AddressσFname=‘John’ AND Minit=‘B’ AND Lname=‘Smith’ (EMPLOYEE)

DCC011 - profa. Mirella M. Moro 16


Consultas Básicas em SQL
B. Atributos Ambíguos e Pseudônimos (alias)

SELECT dname, dlocation


FROM DEPARTMENT, DEPT_LOCATIONS
WHERE DEPARTMENT.dnumber =
DEPT_LOCATIONS.dnumber;

SELECT e.fname, e.lname, s.fname, s.lname


(Q8) FROM EMPLOYEE AS E, EMPLOYEE AS S
WHERE e.superssn=s.ssn;

EM INGLÊS
EMPLOYEE(ssn, fname, lname, address,bdate, superssn, dno)
superssn REFERENCIA EMPLOYEE
dno REFERENCIA DEPARTMENT
DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)
mgrssn REFERENCIA EMPLOYEE.ssn
PROJECT (pnumber, pname, plocation, dnum)
dnum REFERENCIA DEPARTAMENT
DEPT_LOCATIONS (dnumber,dlocation)
dnumber REFERENCIA DEPARTAMENT
DCC011 - profa. Mirella M. Moro 17
Consultas Básicas em SQL
B. Atributos Ambíguos e Pseudônimos (alias)
(Q2) • SELECT pnumber, dnum, lname, address, bdate
FROM PROJECT P, DEPARTMENT D, EMPLOYEE E
WHERE plocation=‘Stafford’ AND
condição de seleção
D.dnum=P.dnum AND D.mgrssn=E.ssn;

condição de junção
π pnumber,dnum,lname,address,bdate σplocation=‘Stafford’
(EMPLOYEE ⋈ ssn=mgrssn (DEPARTMENT ⋈ PROJECT))

EMPLOYEE(ssn, fname, lname, address,bdate, superssn, dno)


superssn REFERENCIA EMPLOYEE
dno REFERENCIA DEPARTMENT
DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)
mgrssn REFERENCIA EMPLOYEE.ssn
PROJECT (pnumber, pname, plocation, dnum)
dnum REFERENCIA
DCC011 - profa. Mirella M. Moro DEPARTAMENT 18
Consultas Básicas em SQL
C. SELECT FROM sem o WHERE

SELECT ssn, lname, salary


FROM EMPLOYEE;

SELECT lname, dname


(Q10)
FROM EMPLOYEE, DEPARTMENT

WHERE dno=dnumber;  com a junção


Atenção! A consulta em vermelho corresponde a um produto
cartesiano das tabelas EMPLOYEE e DEPARTMENT :
π lname,dname (EMPLOYEE x DEPARTMENT)
EMPLOYEE(ssn, fname, lname, address,bdate, superssn, dno)
superssn REFERENCIA EMPLOYEE
dno REFERENCIA DEPARTMENT
DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)
mgrssn REFERENCIA EMPLOYEE.ssn
DCC011 - profa. Mirella M. Moro 19
Consultas Básicas em SQL
D. TODOS OS ATRIBUTOS

• Consultas a todos os atributos


(Q1C) SELECT *
FROM EMPLOYEE
WHERE Dno=5;

SELECT *
(Q1D)
FROM EMPLOYEE, DEPARTMENT
WHERE Dname=‘Research’ AND Dno=Dnumber;

EMPLOYEE(ssn, fname, lname, address,bdate, superssn, dno)


superssn REFERENCIA EMPLOYEE
dno REFERENCIA DEPARTMENT
DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)
mgrssn REFERENCIA EMPLOYEE.ssn

DCC011 - profa. Mirella M. Moro 20


Consultas Básicas em SQL
E. TABELAS COMO CONJUNTOS

• SQL trata uma tabela como um multi-conjunto


• Tuplas duplicadas PODEM aparecer em uma tabela
• E no resultado de uma consulta

• SQL não elimina automaticamente as duplicatas porque…


• Eliminação de duplicatas é uma operação cara (ordenar)
• O usuário pode estar interessado nelas
• Funções de agregação utilizam duplicatas (funções de agregação serão
explicadas a seguir)

• Operações
• SELECT DISTINCT, SELECT ALL
• ∪: UNION, : EXCEPT, ∩: INTERSECT

DCC011 - profa. Mirella M. Moro 21


Tabelas como Conjuntos
EMPLOYEE(ssn, fname, lname, address,bdate, superssn, dno)
superssn REFERENCIA EMPLOYEE
dno REFERENCIA DEPARTMENT
DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)
SELECT salary mgrssn REFERENCIA EMPLOYEE.ssn
FROM EMPLOYEE; PROJECT (pnumber, pname, plocation, dnum)
dnum REFERENCIA DEPARTAMENT
Não elimina linhas (tuplas) duplicatas
Para eliminar precisa usar DISTINCT, por exemplo:
(Q11)
SELECT DISTINCT salary
FROM EMPLOYEE;
(Q4)
(SELECT pnumber
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE dnum=dnumber AND mgrssn=ssn AND
lname=‘Smith’) PORÉM: union, intersect, except eliminam duplicatas!
UNION UNION ALL
(SELECT pnumber
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE pnumber=pno AND essn=ssn AND
lname=‘Smith’);
DCC011 - profa. Mirella M. Moro 22
2. Facilidades Adicionais
A. JOINS

• Uso do operador JOIN, na cláusula FROM


• SELECT FNAME, LNAME, ADDRESS
FROM (EMPLOYEE JOIN DEPARTMENT
ON DNO=DNUMEBR)
WHERE DNAME=‘Research’;
• A cláusula FROM contém então uma única tabela
resultante da junção de Empregado e Departamento

EMPLOYEE(ssn, fname, lname, address,bdate, superssn, dno)


superssn REFERENCIA EMPLOYEE
dno REFERENCIA DEPARTMENT
DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)
mgrssn REFERENCIA EMPLOYEE.ssn
DCC011 - profa. Mirella M. Moro 23
Facilidades Adicionais
A. JOINS

• Pode-se especificar outros tipos de junção na cláusula


FROM
• Junção natural: equijoin em cada par de atributos com
o mesmo nome
• SELECT DNAME, DLOCATION
FROM (DEPARTMENT NATURAL JOIN
DEPT_LOCATIONS);

DEPARTAMENT (dnum, dname, mgrssn, mgrinitialdate)


mgrssn REFERENCIA EMPLOYEE.ssn
DEPT_LOCATIONS (dnum, dlocal)
dnum REFERENCIA DEPARTAMENT

DCC011 - profa. Mirella M. Moro 24


Facilidades Adicionais
A. JOINS

Renomeando atributos para o natural join:


• SELECT pnome, unome, dnome
FROM (EMPREGADO NATURAL JOIN
(DEPARTMENTO AS DEPT (dno, dnome,
gerssn, gerdatainicio)))
WHERE dnome = ‘Pesquisa’;

EMPREGADO (ssn, pnome, minicial, unome, …superssn, dno)


superssn REFERENCIA EMPREGADO
dno REFERENCIA DEPARTAMENTO
DEPARTAMENTO (dnumero, dnome, gerssn, gerdatainicio)
gerssn REFERENCIA EMPREGADO.ssn
DCC011 - profa. Mirella M. Moro 25
Facilidades Adicionais
A. JOINS

• SELECT fname, lname, dependent_name


FROM (EMPLOYEE JOIN DEPENDENT ON ssn=essn);
• [INNER] JOIN..ON: pares empregado/dependente
• OUTER JOIN..ON: pares + empregados que não têm
dependente
 [NATURAL] LEFT/RIGHT/FULL OUTER JOIN .. ON
• SELECT fname, lname, dependent_name
FROM (EMPLOYEE LEFT OUTER JOIN
DEPENDENT ON ssn=essn);

DCC011 - profa. Mirella M. Moro 26


Outer Join Matr Cr
1 CC
2 CC
3 CC
4 MC
5 MC
6 SI
INSERE dois cursos {ENF,MED}
7 SI
• select A.Matr, C.Cr from ALUNOS A
8 SI
RIGHT OUTER JOIN CURSOS C
9 SI
ON A.Cr=C.Cr
10 ECA
• SE a única coluna em comum fosse Cr:
select A.Matr, C.Cr from ALUNOS A null ENF
NATURAL RIGHT OUTER JOIN CURSOS C
null MED
DCC011 - profa. Mirella M. Moro 27
Cuidado com o número de colunas do
resultado quando se realiza
junção natural

NATURAL JOIN
NATURAL LEFT OUTER JOIN
NATURAL RIGHT OUTER JOIN

A palavra OUTER é opcional

DCC011 - profa. Mirella M. Moro 28


Item(Cod_Item, Descricao, Preco_Unit)
Pedido(Num_Pedido, Data, Cod_Cliente, Valor_Total),
PraticandoSQL Cod_Cliente --> Cliente
Item_Pedido(Num_Pedido, Cod_Item, Quantidade)
Num_Pedido --> Pedido, Cod_Item --> Item

SQL #Colunas #Linhas

select * from Item, Item_Pedido 6 234

select * from Item I, Item_Pedido IP


where I.Cod_Item=IP.Cod_Item
6 18
select * from Item NATURAL JOIN Item_Pedido 5 18

?
select * from Item I JOIN Item_Pedido IP
ON I.Cod_Item=IP.Cod_Item
6 18
select * from (Item I LEFT OUTER JOIN Item_Pedido IP
ON I.Cod_Item=IP.Cod_Item)
6 19
select * from (Item NATURAL LEFT OUTER JOIN Item_Pedido) 5 19
DCC011 - profa. Mirella M. Moro 29
A B A B
SQL JOINS
SELECT … SELECT …
FROM A LEFT JOIN B FROM A RIGHT JOIN B
ON A.key = B.key A B ON A.key = B.key

SELECT …
A B A B
FROM A INNER JOIN B
ON A.key = B.key
SELECT … SELECT …
FROM A LEFT JOIN B FROM A RIGHT JOIN B
ON A.key = B.key ON A.key = B.key
WHERE B.key IS NULL WHERE A.key IS NULL

A B A B

SELECT … SELECT …
FROM A FULL OUTER JOIN B FROM A FULL OUTER JOIN B
ON A.key = B.key ON A.key = B.key
WHERE A.key IS NULL
OR B.key IS NULL
DCC011 - profa. Mirella M. Moro 30
Facilidades Adicionais
B. FUNÇÕES DE AGREGAÇÃO

• Funções de agregação: COUNT, SUM, MAX, MIN, AVG


• Sempre aparecem na cláusula SELECT ou HAVING
• Ou seja, não existe “where max(salario)=5000”
• COUNT, duas possibilidades
• count(*) : retorna quantas linhas existe no resultado da consulta
• count(coluna): retorna quantas linhas possuem valores válidos para coluna
• SUM(coluna): retorna a soma de todos os valores válidos para a
coluna especificada
• AVG(coluna): retorna o valor médio de todos os valores válidos
para a coluna especificada
• MAX(coluna) e MIN(coluna): retornam os valores máximo e
mínimo (respectivamente) da coluna especificada
• NULL não conta como mínimo, pois não é valor válido

DCC011 - profa. Mirella M. Moro 31


Exemplos funções agregação
count(*)
• select count(*) from ALUNOS; 10
• select count(*) as Qtde
from ALUNOS Qtde
4
where sexo = ‘F’;
• select max(Matr) as max, max min
min(Matr) as min 10 1
from ALUNOS;
• select sum(Matr) as sum, sum avg
avg(Matr) as avg 20 5
from ALUNOS
where sexo = ‘F’;
DCC011 - profa. Mirella M. Moro 32
FUNÇÕES DE AGREGAÇÃO – exemplos do livro

• SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY), AVG(SALARY)


FROM EMPLOYEE;

• SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY), AVG(SALARY)


FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME=‘Research’;

• SELECT COUNT(*)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME=‘Research’;

DCC011 - profa. Mirella M. Moro 33


DEPARTMENT(DNAME, DNUMBER, MGRSSN, MGRSTARTDATE) mgrssn é o gerente
MGRSSN referencia EMPLOYEE
DEPENDENT(ESSN, DEPENDENT_NAME, SEX, BDATE, RELATIONSHIP)
ESSN referencia EMPLOYEE
DEPT_LOCATIONS(DNUMBER, DLOCATION)
DNUMBER referencia DEPARTMENT
EMPLOYEE(FNAME, MINIT, LNAME,SSN, BDATE, ADDRESS, SEX, SALARY, SUPERSSN, DNO)
SUPERSSN referencia EMPLOYEE; DNO referencia DEPARTMENT
PROJECT(PNAME, PNUMBER, PLOCATION, DNUM)
DNUM referencia DEPARTMENT
WORKS_ON(ESSN, PNO, HOURS) ESSN referencia EMPLOYEE ; PNO referencia PROJECT

Exercícios
podem ser executados no site www.lbd.dcc.ufmg.br/praticandosql
selecionar o banco de dados COMPANY
1. Retorne o SSN dos empregados:
a. que trabalham no departamento 4;
b. que trabalham no departamento 4 ou 5;
c. que trabalham no departamento gerenciado pelo empregado 987654321;
d. que trabalham mais de 9 horas no projeto 10;
2. Retorne o total de horas que o empregado 333445555 trabalha em projetos;
3. Retorne o máximo, mínimo e média de horas que os empregados trabalham no projeto 30;
4. Retorne todos os projetos (incluindo os sem empregados) seguidos do ssn dos seus
empregados;

DCC011 - profa. Mirella M. Moro 34


SSN dos empregados:
a. que trabalham no
departamento 4;

b. que trabalham no
departamento 4 ou 5;

DCC011 - profa. Mirella M. Moro 35


SSN dos empregados:
c. que trabalham no
departamento
gerenciado pelo
empregado 987654321;

d. que trabalham mais de 9


horas no projeto 10;

DCC011 - profa. Mirella M. Moro 36


2. Retorne o total de horas
que o empregado
333445555 trabalha
em projetos;

3. Retorne o máximo,
mínimo e média de
horas que os
empregados
trabalham no projeto
30;

4. Retorne todos os
projetos (incluindo os
sem empregados)
seguidos do ssn dos
seus empregados;

DCC011 - profa. Mirella M. Moro 37


Exercícios: BD Universidade-simplificado
ALUNOS (Matr, Nome, Sexo, Cr)
Cr referencia CURSOS
CURSOS (Cr, Nome, Depto, Coord)
Depto referencia DEPARTAMENTOS
Coord referencia PROFESSORES
MATRICULAS (Matr, Disc, T, Sem)
Matr referencia ALUNOS
Disc referencia DISCIPLINAS
DEPARTAMENTOS (Dep, NomeDep, Localização, Chefe)
Chefe referencia PROFESSORES
PROFS (CPF, NomeProf, DataAdm, Nível)
DISCIP (Disc, NomeDisc, Creditos, CH)
PROF-DISC (CPFprof, Disc, T, Sem)
CPFprof referencia PROFS
Disc referencia DISCIP

DCC011 - profa. Mirella M. Moro 38


Escrever o comando SQL para as consultas
1. Obter todos os dados de Disciplinas
2. Obter os nomes das Disciplinas e o respectivo número de créditos
3. Obter os nomes das Disciplinas para as quais existem alunos
matriculados SEM utilizar o operador de junção
4. Refazer a consulta 3 utilizando o operador de junção
5. Obter os nomes dos professores e os nomes das disciplinas que
ensinam
6. Obter os nomes dos professores e os nomes das disciplinas que
ensinam no semestre atual
7. Obter os nomes dos professores e os nomes das disciplinas que
ensinam no semestre atual e no anterior
8. Obter os nomes dos professores que são chefes de departamento e
as disciplinas que ensinam no semestre atual
9. Obter os nomes cursos do Departamento DCC ordenados
alfabeticamente
10. Obter os nomes cursos que começam com Engenharia
DCC011 - profa. Mirella M. Moro 39

Você também pode gostar