Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo
Conceito
Amplamenteutilizadaindependentedelinguagemde programao
Insert
Update
Delete
Select
Consultas
As
consultas so descritas na linguagem SQL atravs da operao SELECT; Geralmente, uma consulta tem a forma:
SELECT <lista_de_atributos> FROM <lista_de_tabelas> WHERE <condio>
SELECT*FROMt
SELECTC1FROMT
Cont.
SELECT*FROMTWHEREC1=1
SelecionatodososelementosdatabelaTondeaco lunaC1temvalorde1
Consultas
Onde:
<lista_de_atributos> corresponde s colunas que devem ser selecionadas das tabelas; Corresponde operao de projeo da lgebra relacional; <lista_de_tabelas> corresponde s tabelas que sero usadas para realizar a consulta;
Consultas
Onde:
<condio> uma expresso booleana que indica o critrio de seleo das tuplas; Pode ser omitida, quando quisermos recuperar todas as tuplas de uma tabela; Os operadores relacionais =, <, , >, e podem ser usados para expressar as condies; Os conectores lgicos AND, OR e NOT podem ser usados para especificar condies compostas;
Consultas
Vamos considerar a seguinte relao Empregado: Nome Joo Maria Carlos Joaquim Salrio 2500,00 2500,00 4500,00 4500,00 Supervisor 1111-4 1111-3 NULL NULL CodDepartamento 1 2 2 1
Consultas
Vamos considerar a seguinte relao Departamento: CodDepartamento 1 2 Nome Financeiro Vendas Gerente 1111-4 1111-3
Consultas
CodProjeto 1 2 3
CodDepartamento 2 1 1
Consultas
Vamos considerar a seguinte relao Dependente: Empregado 1111-2 1111-2 1111-3 NomeDep Marcos Lus Ana Parentesco Filho Filho Cnjuge
Consultas
Vamos considerar a seguinte relao TrabalhaProjeto: Empregado 1111-1 1111-1 1111-2 1111-2 1111-4 1111-4 CodProjeto 2 3 1 2 2 3 NumHoras 12 12 12 12 12 12
Consultas
Exemplo 1: Selecionar a matrcula e o nome de todos os empregados que trabalham no departamento 2; SELECT Matricula, Nome FROM Empregado WHERE CodDepartamento =2;
Resultado:
Consultas
Exemplo 2: Selecionar a matrcula e o nome dos empregados do departamento 2 que ganham mais de trs mil reais; SELECT Matricula, Nome FROM Empregado WHERE CodDepartamento=2 AND Salario>3000; Resultado:
Matrcula 1111-3
Nome Carlos
Consultas
Podemos omitir a condio para selecionar todas as tuplas de uma tabela; Exemplo 3: Selecionar a matrcula e o nome de todos os empregados; SELECT Matricula, Nome FROM Empregado; Resultado:
Consultas
Podemos tambm selecionar todas as colunas de uma tabela usando o valor *; Exemplo 4: Selecionar as informaes sobre os empregados do departamento dois; SELECT * FROM Empregado WHERE CodDepartamento=2; Resultado:
CodDepartamento 2 2
Colunas
Podemos alterar o nome de uma ou mais colunas atravs da clusula AS: Exemplo 5: Selecionar a matricula e o nome de todos os empregados; SELECT Matricula, Nome AS NomeEmpregado FROM Empregado; Matrcula Resultado: 1111-1 1111-2 1111-3 1111-4 NomeEmpregado Joo Maria Carlos Joaquim
Consultas
Exemplo 6: Calcule como ficaria o novo salrio de cada empregado caso eles recebessem um aumento de 15%;
Consultas
Exemplo 6: Resultado:
Consultas
Exemplo 7: Selecione o nome dos empregados que trabalham no departamento de Vendas; SELECT Empregado.Nome FROM Empregado, Departamento WHERE Empregado.CodDepartamento = Departamento.CodDepartamento AND Departamento.Nome =Vendas
Resultado:
Nome Maria Carlos
Consultas
Podemos usar aliases para tabelas para facilitar a consulta e eliminar ambigidades; Exemplo 8: Selecione o nome dos empregados que trabalham no departamento de Vendas; SELECT E.Nome FROM Empregado AS E, Departamento AS D WHERE E.CodDepartamento = D.CodDepartamento AND D.Nome =Vendas Resultado:
Consultas
Podemos tambm omitir a clusula AS ao renomear tabelas; Exemplo 9: Selecione o nome dos empregados que trabalham no departamento de Vendas; SELECT E.Nome FROM Empregado E, Departamento D WHERE E.CodDepartamento = D.CodDepartamento AND D.Nome =Vendas
Resultado:
Nome Maria Carlos
Consultas
Podemos
tambm renomear tabelas para fazer juno de uma tabela com ela mesma;
Exemplo 10: Recupere a matrcula, o nome e o nome do supervisor de cada empregado (que possui supervisor);
SELECT E.Matricula, E.Nome, S.Nome AS Supervisor FROM Empregado E, Empregado S WHERE E.Supervisor=S.Matricula Onde um empregado esteja relacionado com um supervisor
Consultas
Exemplo 10: Resultado: Matrcula 1111-1 1111-2 Nome Joo Maria Supervisor Joaquim Carlos
Consultas
Comparando
Uma tabela pode conter valores nulos para vrios atributos; Para selecionar tuplas que possuem um valor de atributo nulo ou no nulo usamos os operadores IS e IS NOT, respectivamente; Exemplo 11: Recupere o nome de todos os empregados que no tem supervisor;
Consultas
Exemplo 11:
Resultado:
Consulta
Representando
Podemos usar a palavra-chave DISTINCT para eliminar tuplas repetidas do resultado; Podemos usar a palavra-chave ALL para especificar explicitamente que todas as tuplas devem ser recuperadas no resultado de uma consulta;
Consulta
Representando tabelas como conjuntos: Exemplo 12: Recupere o salrio de cada funcionrio da empresa; SELECT Salario FROM Empregado;
Resultado:
Consulta
Representando tabelas como conjuntos: Exemplo 13: Selecione todos os salrios distintos pagos pela empresa; SELECT DISTINCT Salario FROM Empregado;
Resultado:
Consultas
Representando
SQL define trs operadores para trabalhar com conjuntos: UNION (operao de unio); INTERSECT (operao de interseo); EXCEPT (operao de diferena); As tabelas devem ser compatveis de unio para realizar qualquer uma destas operaes; Estas operaes descartam as tuplas repetidas do resultado;
Consultas
Representando
Exemplo 14: Selecione a matrcula de todos os empregados que trabalham no departamento 1 ou que trabalham em um projeto:
(SELECT Matricula FROM Empregado WHERE CodDepartamento=1) UNION (SELECT DISTINCT Empregado AS Matricula FROM TrabalhaProjeto)
Consultas
Resultado:
Matrcula 1111-1
Trabalha projeto
1111-2 1111-4
Empregado.codDep=1
Consultas
Podemos procurar por um substring em uma cadeia de caracteres usando o operador LIKE; Podemos usar o caractere % para substituis zero ou mais caracteres; Como o caractere * usado para definir expresses regulares; Exemplo: Para localizar strings que contenham o substring Sousa usamos a expresso %Sousa%
Consultas
Procurando
por substrings:
Consultas
Resposta:
Matrcula 1111-2
Nome Maria
Consultas
Ordenando
Podemos ordenar o resultado de uma consulta usando o operador ORDER BY; Podemos especificar uma lista de atributos para a ordenao, onde o primeiro usado como primeiro critrio e os demais sucessivamente, para ordenar tuplas que apresentam o mesmo valor para o critrio anterior; Para cada critrio podemos usar os valores ASC ou DESC, para especificar se ordenao deve ser ascendente ou descendente; A ordenao default ascendente;
Consultas
Ordenando o resultado de uma consulta: Exemplo 16: Recupere o nome de cada empregado, juntamente com o nome do seu departamento e o nome de cada projeto em que ele trabalha;
SELECT E.Nome AS Empregado, D.Nome AS Depto, P.NomeProjeto AS Projeto FROM Empregado E, Departamento D, Projeto P, TrabalhaProjeto TP WHERE E.CodDepartamento = D.CodDepartamento AND E.Matricula = TP.Empregado AND P.CodProjeto = TP.CodProjeto ORDER BY E.Nome ASC, P.NomeProjeto ASC
Consultas
Resultado:
Projeto Cliente Ouro Max Lucro Cliente Ouro Max Lucro Max Lucro Venda Facil
Consultas
Consultas
aninhadas:
So consultas feitas sobre os dados recuperados por uma outra consulta; Usamos o operador IN para verificar se uma tupla est presente em um conjunto ou multiconjunto; Exemplo 17: Selecione a matrcula e o nome dos empregados que trabalham no departamento gerenciado por Carlos;
Consultas
Consultas
aninhadas:
Exemplo 17 (continuao):
SELECT Matricula, Nome FROM Empregado WHERE CodDepartamento IN (SELECT E.CodDepartamento FROM Empregado E, Departamento D WHERE E.Matricula=D.Gerente AND E.Nome='Carlos' )
Consultas
Consultas aninhadas:
Consultas
Consultas
aninhadas:
Podemos usar o quantificador ALL para comparar uma tupla com um conjunto de tuplas recuperado em uma consulta aninhada; O resultado da operao verdadeiro se a comparao for verdadeira para todas as tuplas presentes no resultado da consulta aninhada; Exemplo 18: Recupere os nomes dos funcionrios que ganham mais que Joo e Maria;
Consultas
Consultas
aninhadas:
Exemplo 18 (Continuao):
SELECT Nome FROM Empregado WHERE Salario > ALL (SELECT Salario FROM Empregado WHERE Nome=Joo OR Nome=Maria) Os salrios de todos empregados deve ser maior que os de Joo e Maria
Consultas
Consultas aninhadas:
Exemplo 18 (Continuao):
Consultas
Consultas
aninhadas:
O quantificador SOME (ou ANY) tambm pode ser utilizado para comparar uma tupla com as tuplas do resultado de uma consulta aninhada; O resultado da operao verdadeiro se a comparao for verdadeira para alguma das tuplas presentes no resultado da consulta aninhada; Exemplo 19: Recupere o nome e o salrio de todos os funcionrios que no trabalham no departamento 2, mas ganham mais do que algum funcionrio que trabalha no departamento 2;
Consultas
Consultas aninhadas:
Exemplo 19 (continuao):
SELECT Nome FROM Empregado WHERE CodDepartamento <> 2 AND Salario > SOME (SELECT Salario FROM Empregado WHERE CodDepartamento=2) Resultado:
Nome Joaquim
Consultas
A
clusula EXISTS;
A clusula EXISTS usada para verificar se o resultado de uma consulta aninhada ou no vazio; Ela retorna true caso o resultado da consulta no seja vazio, e false, caso contrrio; Podemos definir tambm a clusula NOT EXISTS, que funciona da forma inversa; Exemplo 20: Recupere o nome de todos os empregados que possuem algum dependente;
Consultas
A
clusula EXISTS;
Exemplo 20 (continuao):
SELECT Nome FROM Empregado E WHERE EXISTS (SELECT * FROM Dependente D WHERE E.Matricula = D. Empregado)
Consultas
A clusula EXISTS;
Exemplo 20 (continuao):
Consultas
Conjuntos
Explcitos:
Podemos especificar tambm conjuntos explcitos para realizar consultas; Utilizamos a clusula IN para fazer comparaes com este conjunto; Exemplo 21: Recupere o nome de todos os empregados que trabalham no projeto 1 ou no projeto 3;
Consultas
Conjuntos explcitos;
Exemplo 21 (continuao):
SELECT Nome FROM Empregado E, TrabalhaProjeto TR WHERE E.Matricula = TR.Empregado AND TR.CodProjeto IN(1, 3); Resultado: Nome Joo Maria Joaquim
Consultas
Juno
de Tabelas:
At agora, vimos como fazer juno em SQL da forma clssica; Porm a SQL define o operador JOIN e vrios tipos de juno de tabelas; Equijuno; Juno Natural; Juno esquerda; Etc;
Consultas
Juno
de Tabelas Equijuno:
Representa a equijuno da lgebra relacional; Os dois atributos de juno so considerados no resultado final; Realizada atravs da clusula JOIN; A operao de juno definida na clusula FROM; Sintaxe: Tabela1 JOIN Tabela2 ON CondioDeJuno
Consultas
Juno
de Tabelas Equijuno:
Exemplo 22: Recupere o nome de todos os empregados que trabalham no departamento Financeiro;
Consultas
Exemplo 22 (continuao):
Consultas
Juno
Corresponde operao de juno natural da lgebra relacional; A juno feita pelo valor dos atributos que tm o mesmo nome; Os atributos de juno s aparecem uma vez no resultado final; Uma juno natural feita atravs da clusula NATURAL JOIN;
Consultas
Juno
Exemplo 23: Recupere o nome de todos os empregados que trabalham no departamento Financeiro;
SELECT Nome FROM (Empregado NATURAL JOIN Departamento) WHERE NomeDep = Financeiro
Consultas
Juno
A equijuno e a juno natural so operaes de juno interna; Tuplas que no esto relacionadas, ou que possuem um valor nulo para o atributo da condio de juno so descartadas do resultado final; Podemos incluir todas as tuplas de uma tabela no resultado de uma juno atravs de uma juno externa; A juno externa realizada atravs da clusula OUTER JOIN;
Consultas
Juno
Existem trs tipos de juno externa: Juno externa esquerda (LEFT OUTER JOIN ou LEFT JOIN); Juno externa direita (RIGHT OUTER JOIN ou RIGHT JOIN); Juno externa completa (FULL OUTER JOIN ou FULL JOIN); Caso os atributos de juno tenham o mesmo nome, podemos incluir a palavra-chave NATURAL antes da clusula de juno;
Consultas
Juno
Consultas
Juno
Consultas
CodDepto 1 2 2 1
Consultas
Juno
Indica que todas as tuplas da tabela do lado direito da juno devem ser recuperadas; Mesmo que no estejam associadas nenhuma tupla da tabela do lado esquerdo; Mesmo que tenham um valor nulo para ao tributo da condio de juno; Tuplas sem nenhuma tupla correspondente esquerda ou com valores nulos para o atributos de juno recebem valores nulos para todos os atributos da tabela do lado esquerdo da juno;
Consultas
Juno
Consultas
Depto 1 2 2 2 1
NULL
Consulta
Juno
Recupera todas as tuplas das duas tabelas; Tuplas do lado esquerdo que no esto associadas a nenhuma tupla da tabela direita ou que possuem valor nulo para o atributo de juno so tratadas como na juno externa esquerda; Tuplas do lado direito que no esto associadas a nenhuma tupla da tabela esquerda ou que possuem valor nulo para o atributo de juno so tratadas como na juno externa dirteita;
Consulta
Juno
Representa a operao produto cartesiano da lgebra relacional; Todas as tuplas da primeira tabela so combinadas com todas as tuplas da segunda tabela, independente de qualquer condio; Representada pela clusula CROSS JOIN;
Consulta
Juno
Consulta
CodDepartam ento 1 1 1 2 2 2
Consultas
Funes
Agregadas:
A linguagem SQL possui algumas funes agregadas que podem ser aplicadas aos dados no momento de uma consulta; Devem ser aplicadas a um conjunto de dados; As principais funes so: COUNT:
Conta
quantas tuplas foram recuperadas em uma determinada consulta; Pode ser aplicada a qualquer consulta SQL; O seu resultado sempre um nmero inteiro;
Consultas
Funes
agregadas:
resultado uma tabela que contm um atributo TotalDeEmpregados e uma nica tupla com o valor 2; A contagem de tuplas que obedecem a condio; COUNT(*) o total;
Consultas
Funes
agregadas:
Consultas
Funes
agregadas:
usar a clusula COUNT em consultas aninhadas; Exemplo 29: Recupere o nome de todos os empregados que possuem mais de um dependente; SELECT Nome FROM Empregado E WHERE (SELECT COUNT(*) FROM Dependente D WHERE E.Matricula=D.Empregado) >1
Consultas
Funes agregadas:
Nome Maria
Consultas
Funes
agregadas:
respectivamente, o menor e o maior valor de uma coluna; Podem ser aplicados a qualquer tipo de dado que tenha a noo de ordenao;
AVG:
Recupera
Consultas
Funes Agregadas:
Exemplo 30:
Recupere o menor salrio pago pela empresa, o maior salrio pela empresa e mdia salarial dos funcionrios;
SELECT MIN(Salario) AS MenorSalario, MAX(Salario) AS MaiorSalario, AVG(Salario) AS MediaSalarial FROM Empregado; Resultado: MenorSalario 2500 MaiorSalario 4500 MediaSalarial 3500
Consultas Agrupamento:
Muitas vezes, precisamos aplicar as funes agregadas para subgrupos de tuplas da relao; Qual a mdia salarial de um departamento? Quantos funcionrios trabalham em cada projeto da empresa? Podemos agrupar os elementos de uma relao atravs da clusula GROUP BY; A clusula seguida pelo nome do atributo usado para fazer o agrupamento; Podemos selecionar apenas o atributo que critrio de agrupamento e as funes agregadas;
Consultas
Agrupamento:
Exemplo 31: Para cada departamento da empresa, recupere o seu cdigo, o seu total de funcionrios e a sua mdia salarial;
SELECT CodDepartamento, COUNT(*) AS TotalDeEmpregados,AVG(Salario) AS MediaSalarial FROM Empregado GROUP BY CodDepartamento A contagem total de tuplas agrupadas por cada departamento: Total de empregados por departamento;
Consultas
Agrupamento:
CodDepartamento 1 2
Consultas Agrupamento:
Para recuperarmos atributos adicionais, podemos incluir os atributos adicionais desejados na clusula GROUP BY aps o atributo de agrupamento; Exemplo 32: Recupere o cdigo de cada projeto, o nome de cada projeto,o total de pessoas que trabalha em cada projeto, e o total de horas trabalhadas por todas as pessoas neste projeto;
SELECT P.CodProjeto, P.Nome, COUNT(*) AS NumeroDePessoas, SUM(NumHoras) AS HorasTrabalhadas FROM TrabalhaProjeto TP, Projeto P WHERE TP.CodProjeto = P.CodProjeto GROUP BY P.CodProjeto,P.Nome
Neste caso, o agrupamento s feito aps a juno das tabelas: Junta TP com P e depois agrupa por projeto; A contagem e o somatrio so realizados sobre o agrupamentos de projetos Sobre cada projeto
Consultas
Agrupamento:
CodProjeto 1 2 3
NumeroDePessoas 1 3 2
HorasTrabalhadas 12 36 24
Consultas
Agrupamento:
As vezes no queremos recuperar todos os grupos gerados em um agrupamento; Podemos selecionar apenas os grupos que satisfazem algum critrio de seleo; Podemos fazer esta seleo usando a clusula HAVING, seguida do critrio de seleo desejado; Apenas os grupos que satisfazem o critrio de seleo so mostrados no resultado da consulta;
Consultas
Agrupamento:
Exemplo 33: Recupere o cdigo e o nome dos projetos em que trabalham mais de dois empregados;
SELECT P.CodProjeto, P.Nome FROM Projeto P, TrabalhaProjeto TP WHERE P.CodProjeto=TP.CodProjeto GROUP BY P.CodProjeto,P.Nome HAVING COUNT(*)>1
Consultas
Agrupamento:
Exemplo 33:
CodProjeto 2 3
Consultas
Criando
Podemos criar novas colunas em nossa consulta atravs do comando CASE; O valor para este atributo em cada tupla calculado no momento da execuo da consulta, atravs de uma ou mais condies; Tuplas que no satisfazem nenhuma das condies recebem valores nulos; Uma clusula ELSE, que opcional, pode ser usada para calcular o valor destas tuplas;
Consultas
Criando
Sintaxe do comando CASE; CASE WHEN <cond1> THEN <valor1> WHEN <cond2> THEN <valor2> ... WHEN <condN> THEN <valorN> ELSE <valorDefault> END
Consultas
Criando
Exemplo:
SELECT Matricula, Nome, Salario, CASE WHEN Salario<3000 THEN 'Ganha pouco WHEN Salario>4000 THEN 'Ganha muito' END AS Situacao FROM Empregado
Consultas
Estrutura do comando
Especificaes do comando
A ordem dos valores deve ser a mesma ordem em que os atributos foram definidos na tabela; O SGBD se encarrega de verificar se a tupla a ser inserida satisfaz todas as restries definidas para a tabela; Caso ela no satisfaa alguma restrio, a insero rejeitada;
Inseres
Exemplo:
Inserir o empregado Francisco, com matrcula 1111-5, salrio R$ 4000,00, supervisionado por Joaquim e que trabalha no departamento 1; INSERT INTO Empregado VALUES (11115,Francisco, 4000, 1111-4, 1 )
Inseres
Podemos
alterar a ordem dos atributos, desde que faamos a descrio da ordem considerada na hora da consulta; Atributos no especificados recebem valores default (caso existam) ou nulos; Exemplo: INSERT INTO Empregado (Nome, Salario, Matricula, CodDepartamento, Supervisor) VALUES (Francisco, 4000, 1111-5, 1, 11114 )
Inseres
Podemos inserir em uma tabela as tuplas recuperadas no resultado de uma consulta, desde que elas sejam compatveis com os atributos da tabela onde a insero ser feita; Exemplo: Seja a seguinte tabela:
CREATE TABLE FuncionarioExemplar( Matricula VARCHAR(10), Nome VARCHAR(50), PRIMARY KEY (Matricula) )
Inseres
Exemplo (Continuao):
INSERT INTO FuncionarioExemplar SELECT Matricula,Nome FROM Empregado E, TrabalhaProjeto TP WHERE E.Matricula=TP.Empregado GROUP BY Matricula,Nome HAVING COUNT(*)>=2
Inseres
Embora
esta soluo seja possvel, neste caso, ela no uma boa prtica;
Como manter a tabela sempre atualizada?
Vises,
que estudaremos mais adiante, representam a melhor soluo para estes casos;
Estrutura do comando
Estrutura do comando
Cont.
Condio:regraqueimpecondioparaexecuo docomando
Atualizaes
Exemplo:
Reajuste em 10 % o salrio de todos os funcionrios que ganham menos de R$ 3000,00; UPDATE Empregado SET Salario=Salario * 1.1 WHERE Salario<3000
Exemplo do comando
UPDATEDEPARTAMENTOSETSALARIO= 1000WHERECODIGODEP=1
Exemplo 2
Oqueocomandofaz?
Excluses
Usamos
o comando DELETE para excluir tuplas de uma tabela; As tuplas so excludas atravs de um critrio de remoo; Sintaxe: DELETE FROM Tabela WHERE condio A excluso em uma tabela pode ser propagada para outras tabelas ou pode ser rejeitada;
Integridade referencial;
Excluses
Exemplo:
Excluses
Exemplo:
Excluir o departamento 2:
Remoo viola a integridade referencial; E os projetos de departamentos especficos como ficam? Pode ser realizada ou no, dependendo do SGBD e da definio da tabela;
Excluses
Podemos
Comandos avanados
Comandos avanados
Comandos avanados
Oqueocomandofaz?
Vises
Vises
So
tabelas derivadas de outras tabelas; Permitem controlar a viso que cada usurio ou grupo de usurio tem sobre os dados armazenados;
Nem sempre bom os usurios terem acesso a todos os dados do banco de dados;
So
tabelas virtuais, no so armazenadas fisicamente; Boas para representar consultas que devem ser feitas com muita freqncia;
Vises
Cada
viso tem um nome, um conjunto de atributos e uma consulta que a representa; As vises contm sempre os dados atualizados;
definio da viso armazenada no catlogo do SGBD; Usamos a seguinte sintaxe para descrever uma viso:
CREATE VIEW NomeDaViso AS Consulta
Vises
Exemplo:
CREATE VIEW EmpregadoComProjetos AS SELECT E.Nome AS Empregado, P.Nome AS Projeto, TP.NumHoras FROM Empregado E, Projeto P, TrabalhaProjeto TP WHERE E.Matricula=TP.Empregado AND P.CodProjeto=TP.CodProjeto
Vises
Vises
Podemos
fazer consultas em cima dos dados de uma viso; Exemplo: Recupere o nome de todos os empregados que trabalham no projeto Max Lucro; SELECT Empregado FROM EmpregadoComProjetos WHERE Projeto = Max Lucro
Vises
Atualizao:
Muitas vezes, os usurios podem querer inserir e atualizar dados em vises: Isto pode trazer problemas: O que aconteceria se o usurio tentasse executar o comando:
Vises
Atualizao:
Vises
Redefinindo
uma viso:
Podemos alterar uma viso atravs do operador ALTER VIEW; Sintaxe: ALTER VIEW NomeDaViso AS NovaConsulta; Exemplo: ALTER VIEW EmpregadoComProjetos AS SELECT E.Nome AS Empregado, P.Nome AS Projeto FROM Empregado E, Projeto P, TrabalhaProjeto TP WHERE E.Matricula=Tp.Empregado AND P.CodProjeto=Tp.CodProjeto
Vises
Exluindo
uma viso:
Podemos excluir uma viso usando o operador DROP VIEW; Sintaxe: DROP VIEW NomeDaViso Exemplo: DROP VIEW EmpregadoComProjetos