Buscar

Linguagem SQL - Funções e Comandos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Nesta aula, serão apresentadas as funções de grupo, cláusulas GROUP BY e HAVING, comandos de junção,
subconsultas aninhadas, correlatas e operadores de conjunto. Também serão explicados os comandos para
criação de outros objetos de banco de dados, como, por exemplo, criação de visões, além de comandos
relacionados à linguagem de controle de dados (DCL).
Apresentar funções de grupo, cláusulas GROUP BY e HAVING;
Explicar os comandos de junção, autojunção e operadores de conjunto;
Mostrar as subconsultas aninhadas, criação de visões e comandos relacionados à linguagem de
controle de dados (DCL).
Como vimos na aula anterior, a linguagem de manipulação de dados é usada para modificar registros em um
banco de dados. Observe as seguintes tabelas de exemplo:
Quadro 1 - Tabela de exemplo
Fonte: elaborado pelo autor
Quadro 2 - Tabela de exemplo
Fonte: elaborado pelo autor
Projeto e otimização de banco de dados
Aula 5: Linguagem SQL – Parte 3
Introdução
Objetivos
Tabelas de exemplo
http://pos.estacio.webaula.com.br/cursos/ATU231/aula5/img/a05_t02.png
http://pos.estacio.webaula.com.br/cursos/ATU231/aula5/img/a05_t02b.png
Soma um campo numérico.
Sintaxe: SELECT SUM(Nome_Campo) FROM Nome_tabela;
Calcula o valor médio de um conjunto de valores para um campo numérico.
Sintaxe: SELECT AVG(Nome_Campo) FROM Nome_tabela;
Conta a quantidade de dados para um campo.
Sintaxe: SELECT COUNT(Nome_Campo) FROM Nome_tabela;
Mostra o maior valor em um conjunto de dados para um campo.
Sintaxe: SELECT MAX(Nome_Campo) FROM Nome_tabela;
Mostra o menor valor em um conjunto de dados para um campo.
Sintaxe: SELECT MIN(Nome_Campo) FROM Nome_tabela;
Exemplo: valor mínimo, máximo e médio das mensalidades dos cursos cuja duração é de 4 anos.
SELECT MIN(MensC), MAX(MensC), AVG(MensC) 
 FROM Curso 
WHERE DuracaoC = 4
Resultado: Mostra o menor valor em um conjunto de dados para um campo.
Sintaxe: SELECT MIN(Nome_Campo) FROM 
Nome_tabela;
A cláusula GROUP BY permite agrupar o conteúdo por uma ou mais colunas.
Sintaxe: SELECT coluna1, coluna3 
            FROM Tabela 
            GROUP BY coluna1, coluna3
Exemplo: carga horária total de cada área.
SELECT AreaD, SUM(CargaD) 
FROM Disciplina 
GROUP BY AreaD
Resultado:
AreaD 
Computação 
Matemática 
Humanas 
Saúde 
Null
SUM(CargaD) 
2 
9 
2 
Select – funções de agregação
Atenção!
Agrupamentos
3 
5
A cláusula having seleciona grupos de linhas após as agregações e agrupamentos serem efetuados.
Exemplo: salas que são utilizadas para mais de uma aula e as respectivas quantidades destas.
SELECT Sala, COUNT(*) 
FROM Grade 
GROUP BY Sala 
HAVING COUNT(*) > 1:
Figura 1 - Sala de aula
Fonte: vectorpocket/freepik
Resultado:
Sala 
305 
204
COUNT(*) 
3 
2
Uma junção entre duas tabelas corresponde a um produto cartesiano que gera uma relação resultante que
contém todas as colunas das tabelas originais.
Na cláusula FROM, utilizamos os nomes das tabelas que possuem os campos que queremos trazer.
Na junção interna entre duas tabelas, somente são recuperadas as linhas da tabela resultante que
satisfazem a condição de junção.
Os atributos comuns às duas tabelas quando utilizados no comando SELECT ou no critério de junção devem
ser qualificados da seguinte forma: TABELA.ATRIBUTO. Se um ALIAS for utilizado na cláusula FROM, este
substitui o nome da tabela dentro da consulta. Existem duas possibilidades de sintaxe para a junção interna;
Clique no pdf para conhecê-las.
 [../downloads/a05_t06a.pdf]
Cláusula having
Junção e junção interna (INNER JOIN)
Junção
Junção interna (INNER JOIN)
http://pos.estacio.webaula.com.br/cursos/ATU231/aula5/img/01.jpg
http://pos.estacio.webaula.com.br/cursos/ATU231/downloads/a05_t06a.pdf
Caso as colunas usadas na junção tenham o mesmo nome nas duas relações, podemos usar o comando
USING.
Exemplo: todas as informações sobre a grade e as disciplinas do curso C4.
SELECT * 
FROM Grade INNER JOIN Disciplina 
USING (CodD) 
WHERE CodC = 'C4'
Para fazer uma junção em que os atributos de junção têm o mesmo nome nas duas relações, podemos
realizar uma junção natural usando o comando NATURAL JOIN. Os atributos repetidos são removidos da
relação resultante.
Exemplo: todas as informações sobre a grade e as disciplinas do curso C4, sem repetição de colunas.
SELECT * 
FROM Grade NATURAL JOIN Disciplina 
ON Grade.CodD = Disciplina.CodD 
WHERE CodC = 'C4'
Resultado
CodC 
C4 
C4
CodD 
D1 
D3
CodP 
P5 
P3
Sala 
201 
204
NomeD 
TLP1 
Inglês
CargaD 
2 
2
AreaD 
Computação 
Humanas
Podemos substituir o nome da relação dentro da consulta usando um ALIAS. As referências à relação
podem ser substituídas em qualquer local da consulta.
Exemplo: código, nome, carga horária, sala e curso das disciplinas que estão na grade.
Usando join using
Junção natural (NATURAL JOIN)
Usando ALIAS
SELECT G.CodD, NomeD, CargaD, Sala, CodC 
FROM Disciplina D, Grade G 
WHERE D.CodD = G.CodD
Ou na sintaxe
SELECT G.CodD, NomeD, CargaD, Sala, CodC 
FROM Disciplina D INNER JOIN Grade G 
ON D.CodD = G.CodD
Resultado:
CodD 
D1 
D2 
D2 
D3 
D4 
D4 
D6
NomeD 
TLP1 
Cálculo 1 
Cálculo 1 
Inglês 
Ed. Física 
Ed. Física 
Projeto Final
CargaD 
2 
4 
4 
2 
3 
3 
6
Sala 
201 
305 
305 
204 
204 
207 
305
CodC 
C4 
C2 
C3 
C4 
C5 
C5 
C1
Podemos realizar a junção com mais de duas relações na consulta. Basta que cada par de relações tenha
um critério de junção correspondente.
Exemplo: nome das disciplinas e dos respectivos professores do curso C4.
Sintaxe 
SELECT NomeD, NomeP 
FROM Disciplina, Grade, Professor 
WHERE CodC = 'C4' AND 
Várias tabelas no JOIN
Disciplina.CodD = Grade.CodD AND 
Grade.CodP = Professor.CodP
Resultado:
NomeD 
TLP1 
Inglês
NomeP 
Juliana 
André
Ocorre quando uma relação faz junção com ela mesma.
Exemplo 1: nomes das disciplinas cujo prerrequisito é “Cálculo1”.
SELECT Disc1.NomeD 
FROM Disciplina Disc1, Disciplina Disc2 
WHERE Disc2.CodD = Disc1.PreReqD AND 
Disc2.NomeD = “Cálculo1”
Resultado
Disc1.NomeD 
LP1 
G Analítica
Exemplo 2: pares de professores que são da mesma cidade.
 
SELECT X.NomeP, Y.NomeP 
FROM Professor AS X, Professor AS Y 
WHERE X.CidadeP = Y.CidadeP AND 
X.CodP <> Y.CodP
Resultado
X.NomeP 
Joaquim 
André 
Gil 
Juliana
                
Y.NomeP 
André 
Joaquim 
Juliana 
Gil
Vejamos agora outros tipos junção e operações e suas características.
Uma junção externa é uma seleção que não requer que os registros de uma tabela possuam registros
equivalentes em outra.
Autojunção
Tipos de junção e operações
Junção externa (OUTER JOIN)
Esse tipo de junção se subdivide dependendo de qual tabela não terá correspondência de registros: a
tabela esquerda, a direita ou ambas.
O resultado dessa seleção sempre contém todos os registros da tabela esquerda (a primeira tabela
mencionada na consulta), mesmo quando não existam registros correspondentes na tabela direita. Quando
não há correspondência, retorna um valor NULL. Exemplo: nome dos professores e código da disciplina
ministrada, incluindo os professores sem alocação.
SELECT NomeP, CodD 
FROM Professor P LEFT OUTER JOIN Grade G 
ON P.CodP = G.CodP
Resultado:
Quadro 3 - Resultado
Fonte: elaborado pelo autor
Inversa à anterior e retorna sempre todos os registros da tabela à direita (a segunda tabela mencionada na
consulta), mesmo se não existir registro correspondente na tabela à esquerda. O valor NULL é retornado
quando não há correspondência.
Exemplo: código do curso e nome das disciplinas relacionadas, incluindo as disciplinas não alocadas.
SELECT CodC, NomeD 
FROM Grade G RIGHT OUTER JOIN Disciplina D 
ON G.CodD = D.CodD
Resultado:
Quadro 4 - Resultado
Fonte: elaborado pelo autor
Essa operação apresenta todos os dados das tabelas à esquerda e à direita, mesmo que não possuam
correspondência em outra tabela.
Assim, a tabela combinada possuirá todos os registros de ambas as tabelas e apresentará valores nulos para
os registros sem correspondência.
As operações de conjunto UNION, INTERSECT e EXCEPT operam sobre relações e correspondem às
operaçõesda álgebra relacional U , ∩ e ― .
Pelo menos duas consultas estarão envolvidas na operação, e as colunas relacionadas a elas devem ser do
mesmo tipo.
Cada uma das operações acima elimina automaticamente os registros duplicados. Para manter todos os
registros duplicados, deve-se utilizar os comandos UNION ALL, INSERSECT ALL e EXCEPT ALL.
Vejam as tabelas de exemplo:
emprestimo(numero_emprestimo, nome_agencia, quantia) 
tomador(nome_cliente, numero_emprestimo) 
conta(numero_conta, nome_agencia, saldo) 
depositante(nome_cliente, numero_conta)
Exemplo: encontra todos os clientes que possuem conta e/ou empréstimo.
Left outer join
Right outer join
Full outer join
Operação de conjunto
UNION
http://pos.estacio.webaula.com.br/cursos/ATU231/aula5/img/a05_.png
http://pos.estacio.webaula.com.br/cursos/ATU231/aula5/img/a05_a.png
(SELECT NOME_CLIENTE FROM DEPOSITANTE) 
UNION
(SELECT NOME_CLIENTE FROM TOMADOR)
Exemplo: encontra todos os clientes que possuem um empréstimo e uma conta.
(SELECT NOME_CLIENTE FROM TOMADOR) 
INTERSECT 
(SELECT NOME_CLIENTE FROM DEPOSITANTE)
Exemplo: encontra todos os clientes que possuam conta, mas não possuam empréstimo.
(SELECT NOME_CLIENTE FROM DEPOSITANTE) 
EXCEPT 
(SELECT NOME_CLIENTE FROM TOMADOR)
Uma subconsulta é uma instrução SELECT que está encadeada dentro de outra instrução SELECT. A
consulta interior é designada por seleção interna e é executada em primeiro lugar, sendo o seu resultado
utilizado para completar a consulta principal ou externa.
Caso a consulta interna retorne apenas uma linha, podem ser usados operadores lógicos na comparação (> ,
< , >= , <=, <>) Quando mais de uma linha for encontrada no resultado interno, os operadores IN, ANY, ALL,
EXISTS que manipulam sobre conjuntos de valores devem ser utilizados. Clique no pdf para visualizar dois
exemplos desta instrução.
 [../downloads/a05_t13a.pdf]
Permite à consulta externa verificar se a consulta interna devolveu alguma linha. O valor das linhas não é
importante, apenas a cardinalidade do conjunto. A correspondência é feita entre a tabela da consulta
externa com a tabela da consulta interna, na cláusula WHERE desta última. Devolve TRUE se a cardinalidade
for superior a 0 (zero), e FALSE caso seja igual a 0 (zero). Este operador pode ser negado com a cláusula
NOT.
Exemplo 1: nomes dos professores que ministram alguma disciplina.
 
SELECT NomeP 
FROM Professor 
WHERE EXISTS (SELECT * FROM Grade WHERE Grade.CodP = Professor.CodP)
Resultado:
NomeP 
Joaquim 
Paulo 
André 
Gil 
Juliana
Exemplo 2: nomes das disciplinas que não fazem parte da grade.
 
INTERSECT
EXCEPT
Subconsulta
Operador EXISTS/NOT EXISTS
http://pos.estacio.webaula.com.br/cursos/ATU231/downloads/a05_t13a.pdf
SELECT NomeD
FROM Disciplina 
WHERE NOT EXISTS (SELECT * FROM Grade WHERE Grade.CodD = Disciplina.CodD)
Resultado:
NomeP 
G. Analítica
Permite a uma consulta externa fazer comparações usando < ou > com os elementos de um conjunto
devolvido pela subconsulta. Este operador devolve TRUE se todas as linhas do conjunto satisfazem a
condição, ou seja, devolve FALSE se alguma linha não a satisfaz. Pode ser negado com NOT.
Exemplo: nomes dos cursos que possuam duração maior que todos os cursos de mensalidade inferior a 500
reais.
SELECT NomeC 
FROM Curso 
WHERE DuracaoC ALL (SELECT DuracaoC FROM Curso WHERE MensC < 500)
Resultado:
1) SELECT DuracaoC FROM Curso WHERE MensC < 500
DuracaoC 
4 
4 
3
2) SELECT NomeC FROM Curso WHERE DuracaoC > ALL (...)
NomeC 
Eng. Mecatrônica
Permite a uma consulta externa fazer comparações usando < ou > com os elementos de um conjunto
devolvido pela subconsulta. Este operador devolve TRUE se uma das linhas do conjunto satisfaz a condição,
ou seja, devolve FALSE se nenhuma satisfaz a condição. Pode ser negado com NOT.
Exemplo: nomes dos cursos que possuam duração maior que qualquer um dos cursos de mensalidade
inferior a 500 reais.
SELECT NomeC 
FROM Curso 
WHERE DuracaoC > ANY (SELECT DuracaoC FROM Curso WHERE MensC < 500)
1) SELECT DuracaoC FROM Curso WHERE MensC < 500
DuracaoC 
4 
4 
3
2) SELECT NomeC FROM Curso WHERE DuracaoC > ALL (...)
NomeC 
Análise Sist. 
Eng. Mecatrônica 
Ciência Comp. 
Eng. Elétrica
Operador ALL
Operador ANY
Uma visão é um objeto do banco de dados criado a partir da execução de uma consulta sobre outras
tabelas existentes. Após a sua criação, as consultas à visão podem ser realizadas de forma idêntica às
tabelas comuns do banco. As visões podem ser muito úteis em várias situações, como:
Substituição de consultas longas e complexas por outras mais simples, obtendo-se o mesmo resultado;
Utilização de funções de agregação na definição de condições de pesquisa;
Delimitação prática do acesso dos usuários a um conjunto específico dos dados contidos nas tabelas do
banco, tornando os outros inacessíveis e invisíveis.
Para saber mais sobre este assunto e demais relacionados, clique no pdf.
 [../downloads/a05_t17a.pdf]
A linguagem de controle de dados (DCL) refere-se a um subconjunto da linguagem SQL destinada a prover
os comandos de administração de acesso aos objetos do banco de dados.
Os comandos para conceder e revogar os privilégios são final.
Os privilégios para cada usuário de acesso a um banco de dados são definidos para diferentes operações,
como: SELECT, INSERT, UPDATE, ALTER, etc.
Figura 2 - Linguagem de controle de dados (DCL)
Fonte: elaborado pelo autor
Concede acesso à base de dados e seus objetos.
Criação de visões (VIEWS)
Linguagem de controle de dados (DCL)
Comando GRANT
http://pos.estacio.webaula.com.br/cursos/ATU231/downloads/a05_t17a.pdf
http://pos.estacio.webaula.com.br/cursos/ATU231/aula5/img/a05_b.png
Sintaxe: GRANT privilégio(s) ON objeto TO usuário(s)
Exemplo 1: liberar o acesso ao usuário Joao para realizar consultas à tabela Disciplina.
GRANT SELECT 
ON Disciplina 
TO Joao
O comando UPDATE pode conter restrição de colunas que poderão ser atualizadas.
Exemplo 2: permitir a todos os usuários realizarem atualizações das colunas CidadeP e TituloP da tabela
Professor.
GRANT UPDATE (CidadeP, TituloP) 
 ON Professor 
TO PUBLIC
Cláusula WITH GRANT OPTION permite que o direito recebido por um usuário possa ser repassado por ele a
outro usuário.
Exemplo 3: permitir todos os privilégios na tabela Grade ao usuário Joao, permitindo também que ele possa
liberar esses privilégios a outros usuários.
 
GRANT ALL 
ON Grade 
TO Joao 
WITH GRANT OPTION
Vejamos também sobre o comando REVOKE
Este comando retira acesso à base de dados e aos seus objetos.Sintaxe: REVOKE privilégio(s) ON tabela ou
visão FROM usuário(s) Exemplo: retirar todos os privilégios na tabela Grade para os usuários Joao e Paulo.
Veja as seguintes tabelas:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, COD_SUPERV) 
DEPTO (NRO_DEPTO, NOME) 
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO) 
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Escreva o comando em SQL para criar uma visão chamada Func_Proj, contendo o nome do funcionário, do
seu departamento e dos projetos que ele participou.
CREATE VIEW FUNC_PROJ (FUNC, DEPTO, PROJETO) AS
SELECT F.NOME, D.NOME, P.NOME
FROM FUNC F, DEPTO D, PROJETO P , PARTICIPA PA
WHERE F.COD_FUNC = PA.COD_FUNC
   AND P.COD_PROJ=PA.COD_PROJ
   AND D.NRO_DEPTO=F.NRO_DEPTO
Atenção!
Atividade proposta
DCL
Data Control Language
SQL
Structured Query Language ou Linguagem de Consulta Estruturada.
Para saber mais sobre o conteúdo visto nesta aula, leia o artigo Padrão SQL e sua Evolução. E a publicação
da Oracle, Oracle® Database SQL Reference.
Clique aqui [https://www.ic.unicamp.br/~geovane/mo410-091/Ch05-PadraoSQL-art.pdf]
Clique aqui [https://docs.oracle.com/cd/B19306_01/server.102/b14200.pdf]
Notas
Aprenda mais
Exercícios de fixação
Considere o seguinte esquema de uma empresa:
Func (cod_func, nome, dta_nasc, salario, nro_depto, cod_superv) 
Depto (nro_depto, nome) 
Projeto (cod_proj, nome, duracao, nro_depto) 
Participa (cod_proj, cod_func, horas_trab)
A opção que contém o comando em SQL para obter omaior e o menor salário da empresa é:
SELECT MAX(SALARIO), MIN(SALARIO) FROM FUNC
SELECT MAIOR(SALARIO), MENOR(SALARIO) FROM FUNC
SELECT SUM(SALARIO), AVG(SALARIO) FROM FUNC
SELECT COUNT(SALARIO), AVG(SALARIO) FROM FUNC
SELECT MIN(SALARIO), MAX(SALARIO) FROM FUNC
Considere as tabelas da questão 1. A opção que contém o comando em SQL para obter a média de salários
de cada departamento da empresa é:
SELECT AVG(SALARIO) FROM DEPTO
SELECT MEDIA(SALARIO) FROM FUNC
SELECT NRO_DEPTO, AVG(SALARIO) FROM FUNC GROUP BY NRO_DEPTO
SELECT SUM(SALARIO) FROM FUNC WHERE NRO_DEPTO
SELECT COUNT(SALARIO) FROM FUNC GROUP BY NRO_DEPTO
Considere as tabelas da questão 1. A opção que contém o comando em SQL para obter a quantidade de
funcionários em cada departamento onde a média salarial seja maior ou igual a R$ 2.000,00 é:
SELECT NRO_DEPTO, COUNT(*) >=2000 FROM FUNC GROUP BY NRO_DEPTO
https://www.ic.unicamp.br/~geovane/mo410-091/Ch05-PadraoSQL-art.pdf
https://docs.oracle.com/cd/B19306_01/server.102/b14200.pdf
SELECT COUNT(SALARIO) FROM FUNC HAVING AVG(SALARIO) >= 2000
SELECT NRO_DEPTO, SUM(COD_FUNC) FROM FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO)
>= 2000
SELECT COUNT(SALARIO) FROM FUNC WHERE AVG(SALARIO >= 2000
SELECT NRO_DEPTO, COUNT(*) FROM FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO) >= 2000
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, 
COD_SUPERV) 
DEPTO (NRO_DEPTO, NOME) 
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO) 
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para recuperar os nomes dos funcionários e
dos projetos que eles participaram.
SELECT NOME, NOME FROM PROJETO P, FUNC F WHERE P.COD_FUNC = F.COD_FUNC
SELECT F.NOME, P.NOME FROM PARTICIPA PA, PROJETO P, FUNC F WHERE
PA.COD_PROJ=P.COD_PROJ AND PA.COD_FUNC = F.COD_FUNC
SELECT F.NOME, P.NOME FROM PROJETO P, FUNC F
SELECT * FROM PARTICIPA PA, PROJETO P, FUNC F
SELECT F.NOME, PA.NOME FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para obter
os nomes dos funcionários que participaram de projetos e os respectivos totais de horas trabalhadas.
SELECT F.NOME, TOTAL(HORAS_TRAB) FROM PARTICIPA PA, FUNC F
SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC =
F.COD_FUNC
SELECT F.NOME, MAX(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC =
F.COD_FUNC GROUP BY F.NOME
SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE PA.COD_FUNC =
F.COD_FUNC GROUP BY F.NOME
SELECT NOME, SUM(HORAS_TRAB) FROM PARTICIPA GROUP BY NOME
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL para recuperar
nomes dos funcionários e dos respectivos supervisores.
SELECT F.NOME, S.NOME FROM FUNC F, FUNC S
SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_FUNC = S.COD_SUPERV
SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_SUPERV = S.COD_FUNC
SELECT F.NOME, F.NOME_SUPERV FROM FUNC F
SELECT F.NOME, PA.NOME FROM FUNC F, PARTICIPA PA WHERE F.COD_FUNC = PA.COD_FUNC
Considere o seguinte esquema de uma empresa:
CARGO (COD_CARGO, DESCRICAO, SALARIO_MIN, SALARIO_MAX) 
FUNCIONARIO (MATRICULA, NOME, COD_CARGO, MAT_CHEFE, DT_NASC, 
SALARIO) 
CONTRATADO (MATRICULA, NOME, COD_CARGO, SALARIO)
Marque a alternativa que contém o comando em SQL utilizado para recuperar o nome do funcionário e a
descrição do seu cargo, listando os cargos sem funcionários.
SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F LEFT OUTER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO
SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F FULL OUTER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO
SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F OUTER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO
SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F INNER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO
SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F RIGHT OUTER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO
Considere as tabelas da questão 4. Marque a alternativa que contém o comando em SQL utilizado para
recuperar os nomes dos funcionários e contratados que têm salário maior que R$ 1.500,00.
(SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) UNION (SELECT NOME FROM
CONTRATADO WHERE SALARIO > 1500)
(SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) INTERSECT (SELECT NOME FROM
CONTRATADO WHERE SALARIO > 1500)
(SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) JOIN (SELECT NOME FROM
CONTRATADO WHERE SALARIO > 1500)
(SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) EXCEPT (SELECT NOME FROM
CONTRATADO WHERE SALARIO > 1500)
SELECT F.NOME, C.NOME FROM FUNCIONARIO F, CONTRATADO C WHERE SALARIO > 1500
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, COD_SUPERV) 
DEPTO (NRO_DEPTO, NOME) 
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO) 
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para listar o nome e o salário dos
funcionários cuja remuneração é maior que a média salarial da empresa.
SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > AVG(SALARIO)
SELECT NOME, SALARIO>AVG(SALARIO) FROM FUNC
SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT AVG(SALARIO) FROM FUNC)
SELECT NOME, SALARIO FROM FUNC WHERE EXISTS > (SELECT AVG(SALARIO) FROM FUNC)
SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT MEDIA(SALARIO) FROM FUNC)
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para
retornar os códigos dos projetos cuja duração foi menor que a de todos os projetos do departamento 5.
SELECT COD_PROJ FROM PROJETO WHERE DURACAO < (SELECT DURACAO FROM PROJETO WHERE
NRO_DEPTO = 5)
SELECT COD_PROJ FROM PROJETO WHERE DURACAO < ALL (SELECT DURACAO FROM PROJETO
WHERE NRO_DEPTO = 5)
SELECT COD_PROJ FROM PROJETO WHERE DURACAO IN (SELECT DURACAO FROM PROJETO WHERE
NRO_DEPTO = 5)
SELECT COD_PROJ FROM PROJETO WHERE DURACAO < NRO_DEPTO = 5
SELECT COD_PROJ FROM PROJETO WHERE EXISTS (SELECT DURACAO FROM PROJETO WHERE
Nesta aula:
Abordou as funções de grupo, cláusulas GROUP BY e HAVING;
Analisou os comandos de junção, autojunção e operadores de conjunto;
Aprendeu sobre as subconsultas aninhadas, criação de visões e comandos relacionados à
linguagem de controle de dados (DCL).
Na próxima aula:
Conceitos fundamentais de índices, sua importância e utilização;
Tipos de índices: ordenados, densos e esparsos, e multinível;
Definição de um índice em SQL.
ELMASRI, R.; NAVATHE, S., Sistemas de Banco de Dados. 4. Ed. Pearson Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de banco de dados. 5ª ed. Rio de
Janeiro: Campus, 2006.
NRO_DEPTO = 5)
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para
conceder privilégios para que o usuário Pedro insira dados na tabela Func, podendo repassar estes direitos.
GRANT INSERT TO PEDRO ON FUNC WITH GRANT OPTION
GRANT INSERT ON FUNC TO PEDRO
GRANT INSERT ON PEDRO TO FUNC WITH GRANT OPTION
GRANT INSERT ON FUNC TO PEDRO CASCADE
GRANT INSERT ON FUNC TO PEDRO WITH GRANT OPTION
Considere as tabelas da questão 1. Marque a alternativa que contém o comando em SQL utilizado para
eliminar todos os privilégios do usuário Pedro na tabela Func.
REVOKE ALL ON FUNC FROM PEDRO
REVOKE PRIVILEGES ON FUNC FROM PEDRO
REVOKE PUBLIC ON FUNC FROM PEDRO
REVOKE ALL FROM PEDRO ON FUNC
REVOKE ALL ON PEDRO FROM FUNC
Síntese
Próxima aula
Referências

Continue navegando