Baixe o app para aproveitar ainda mais
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
Compartilhar