Você está na página 1de 124

SQL - Linguagem de Consulta Estruturada

Instituto Federal da Paraba - Campus Sousa

Professor: Francisco Casimiro Neto

Introduo

Conceito

Linguagemdepesquisadeclarativaparabancode dadosrelacional Muitasdassuascaractersticasforaminspiradasna lgebrarelacional Tipicamentealinguagempodesermigradade plataformasemmudanasestruturaisprincipais

Amplamenteutilizadaindependentedelinguagemde programao

Comandos bsicos de SQL

Insert

Utilizadaparainserodedados Modificaodedados Exclusodedados Seleo(consulta)dedados

Update

Delete

Select

Seleo de Dados Comando 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>

Exemplo de uso do SELECT

SELECT*FROMt

Selecionatodosos elementosdetodas aslinhasdatabela T Selecionatodosos elementosdacolu naC1databela T

SELECTC1FROMT

Exemplo de uso do SELECT

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

Matrcula 1111-1 1111-2 1111-3 1111-4

Consultas

Vamos considerar a seguinte relao Departamento: CodDepartamento 1 2 Nome Financeiro Vendas Gerente 1111-4 1111-3

Consultas

Vamos considerar a seguinte relao Projeto:

CodProjeto 1 2 3

Nome Venda Fcil MaxLucro Cliente Ouro

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:

Matrcula 1111-2 1111-3

Nome Maria Carlos

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:

Matrcula 1111-1 1111-2 1111-3 1111-4

Nome Joo Maria Carlos Joaquim

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:

Matrcula 1111-2 1111-3

Nome Maria Carlos

Salrio 2500,00 4500,00

Supervisor 1111-3 NULL

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

Podemos aplicar clculos aos valores de uma coluna:

Exemplo 6: Calcule como ficaria o novo salrio de cada empregado caso eles recebessem um aumento de 15%;

SELECT Matricula, Nome, 1.15 * Salario AS SalarioReajustado FROM Empregado;

Consultas

Exemplo 6: Resultado:

Matrcula 1111-1 1111-2 1111-3 1111-4

Nome Joo Maria Carlos Joaquim

SalarioReajustado 2875,00 2875,00 5175,00 5175,00

Consultas

Podemos realizar junes:

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:

Nome Maria Carlos

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

com valores nulos:

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;

SELECT Nome FROM Empregado WHERE Supervisor IS NULL;

Consultas

Comparando com valores nulos:

Exemplo 11:

Resultado:

Nome Carlos Joaquim

Consulta
Representando

tabelas como conjuntos:

A linguagem SQL trata uma tabela como um multiconjunto;


Tuplas

repetidas no so descartadas do resultado final;

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:

Salrio 2500,00 2500,00 4500,00 4500,00

Consulta

Representando tabelas como conjuntos: Exemplo 13: Selecione todos os salrios distintos pagos pela empresa; SELECT DISTINCT Salario FROM Empregado;

Resultado:

Salario 2500,00 4500,00

Consultas
Representando

tabelas como conjuntos:

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

tabelas como conjuntos:

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

Representando tabelas como conjuntos: Exemplo 14:

Resultado:

Matrcula 1111-1
Trabalha projeto

1111-2 1111-4

Empregado.codDep=1

Consultas

Procurando por substrings:


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:

Podemos usar o caractere _ para substituir um nico caractere;


Exemplo: Para localizar todos as strings cujo segundo caractere seja a letra a, usamos a expresso _a%; Exemplo 15: Recupere a matrcula e o nome de todos os empregados que possuem o nome Maria;

SELECT Matricula, Nome FROM Empregado WHERE Nome LIKE %Maria%;

Consultas

Procurando por substrings: Exemplo 15:

Resposta:

Matrcula 1111-2

Nome Maria

Consultas
Ordenando

o resultado de uma consulta:

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

Ordenando o resultado de uma consulta: Exemplo 16:

Resultado:

Empregado Joo Joo Joaquim Joaquim Maria Maria

Depto Financeiro Financeiro Financeiro Financeiro Vendas Vendas

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:

Exemplo 17 (Resultado): Matrcula 1111-2 1111-3 Nome Maria Carlos

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):

Obteremos o seguinte resultado:

Nome Carlos Joaquim

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):

Obteremos o seguinte resultado;

Nome Maria Carlos

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;

SELECT E.Nome FROM (Empregado E JOIN Departamento D ON E.CodDepartamento=D.CodDepartamento) WHERE D.NomeDep='Financeiro'

Consultas

Juno de Tabelas Equijuno:

Exemplo 22 (continuao):

O seguinte resultado obtido:

Nome Joo Joaquim

Consultas
Juno

de Tabelas Juno Natural:

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

de Tabelas Juno Natural:

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

de Tabelas Juno Externa:

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

de Tabelas Juno Externa:

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

de Tabelas Juno Externa Esquerda:


Indica que todas as tuplas da tabela do lado esquerdo da juno devem ser recuperadas; Mesmo que no estejam associadas nenhuma tupla da tabela do lado direito; Mesmo que tenham um valor nulo para ao tributo da condio de juno; Tuplas sem nenhuma tupla correspondente direita ou com valores nulos para o atributos de juno recebem valores nulos para todos os atributos da tabela do lado direito da juno;

Consultas
Juno

de Tabelas Juno Externa Esquerda:


Exemplo 24: Vamos supor a seguinte consulta: SELECT * FROM (Empregado LEFT OUTER JOIN Departamento ON Matricula=Gerente)

Consultas

Juno de Tabelas Juno Externa Esquerda: Resultado:

Matricula 1111-1 1111-2 1111-3 1111-4

Nome Joo Maria Carlos Joaquim

Salario 2500 2500 4500 4500

Supervisor 1111-4 1111-3 NULL NULL

CodDepto 1 2 2 1

CodDepto NULL NULL 2 1

Nome NULL NULL Vendas Financeiro

Gerente NULL NULL 1111-3 1111-4

Consultas
Juno

de Tabelas Juno Externa Direita:

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

de Tabelas Juno Externa Direita:

Exemplo 25: Vamos supor a seguinte consulta:

SELECT * FROM (Dependente RIGHT OUTER JOIN Empregado ON Empregado=Matricula)

Consultas

Juno de Tabelas Juno Externa Direita Resultado:


Nome Dep NULL Marcos Lus Ana NULL Parentesco NULL Filho Filho
Cnjuge

Empregado NULL 1111-2 1111-2 1111-3 NULL

Matricula 1111-1 1111-2 1111-2 1111-3 1111-4

Nome Joo Maria Maria Carlos Joaquim

Salario 2500 2500 2500 4500 4500

Supervisor 1111-4 1111-3 1111-3 NULL NULL

Depto 1 2 2 2 1

NULL

Consulta
Juno

de Tabelas Juno Externa Completa

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

de Tabelas Produto Cruzado

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

de Tabelas Produto Cruzado

Exemplo 26: Vamos supor a consulta abaixo:

SELECT * FROM (Departamento CROSS JOIN Projeto)

Consulta

Juno de Tabelas Produto Cruzado

Exemplo 26: Vamos obter o seguinte resultado:


Nome Financeiro Financeiro Financeiro Vendas Vendas Vendas Gerente 1111-4 1111-4 1111-4 1111-3 1111-3 1111-3 CodProjeto 1 2 3 1 2 3 Nome Venda Fcil Max Lucro Cliente Ouro Venda Fcil Max Lucro Cliente Ouro CodDepartam ento 2 2 1 2 2 1

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:

As principais funes so: COUNT:


Exemplo

27: Verifique quantos empregados trabalham no departamento 2;

SELECT COUNT(*) AS TotalDeEmpregados FROM Empregado WHERE CodDepartamento =2;


O

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:

As principais funes so:


DISTINCT: Podemos usar a palavra DISTINCT para eliminar duplicidades do resultado final; Exemplo 28: Recupere quantos valores de salrios so pagos pela empresa; SELECT COUNT (DISTINCT Salario) AS TiposDeSalario FROM Empregado O resultado uma tabela com um nico atributo TiposDeSalario e com uma nica tupla com o valor 2;

Consultas
Funes

agregadas:

As principais funes so: COUNT:


Podemos

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:

As principais funes so:

COUNT: Exemplo 29: Obtemos a seguinte resposta;

Nome Maria

Consultas
Funes

agregadas:

As principais funes so: MIN e MAX:


Recuperam,

respectivamente, o menor e o maior valor de uma coluna; Podem ser aplicados a qualquer tipo de dado que tenha a noo de ordenao;

Nmeros, cadeia de caracteres, datas, etc;

AVG:
Recupera

coluna; Aplicado apenas a tipos numricos;

a mdia dos valores de uma determinada

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:

Exemplo 31: Obtemos a seguinte resposta: TotalDeEmpregados 2 2 MediaSalarial 3500 3500

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:

Exemplo 32 (Resposta): Obtemos a seguinte resposta:

CodProjeto 1 2 3

Nome Venda Fcil Max Lucro Cliente Ouro

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:

Obtemos a seguinte resposta:

CodProjeto 2 3

Nome Max Lucro Cliente Ouro

Consultas
Criando

novas colunas em uma consulta:

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

novas colunas em uma consulta:

Sintaxe do comando CASE; CASE WHEN <cond1> THEN <valor1> WHEN <cond2> THEN <valor2> ... WHEN <condN> THEN <valorN> ELSE <valorDefault> END

Consultas
Criando

novas colunas em uma consulta:

Exemplo:

SELECT Matricula, Nome, Salario, CASE WHEN Salario<3000 THEN 'Ganha pouco WHEN Salario>4000 THEN 'Ganha muito' END AS Situacao FROM Empregado

Consultas

Criando novas colunas em uma consulta: Exemplo(Resultado):

Matricula 1111-1 1111-2 1111-3 1111-4

Nome Joo Maria Carlos Joaquim

Salario 2500 2500 4500 4500

Situacao Ganha pouco Ganha pouco Ganha muito Ganha muito

Insero de Dados Comando INSERT

Estrutura do comando

INSERTINTOnome_tabela(listadecampos) VALUES(lista_dados) Onde:


nome_tabela:tabelaqueterosdadosinseridos listadecampos:camposdatabelaateremvalores preenchidos

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):

Podemos inserir dados da seguinte forma:

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;

Atualizao de Dados Comando UPDATE

Estrutura do comando

UPDATEnome_tabelaSETCAMPO= 'novo_valor'WHERECONDIO Onde


Nome_tabela:nomedatabelaquesermodificada Campo:campoqueterseuvaloralterado Novo_valor:valorquesubstituiroantigodadoca dastrado Where:Senoforinformado,todososcamposdata belaseroatualizados

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

Oqueocomandofaz? Atualizaossalriosdetodoscolaboradoresdodepar tamentodecdigo1para1000

Exemplo 2

UPDATEFUNCIONARIOSETNOME= 'HELBERTCARVALHO',SALARIO=1000 WHERECODIGOFUNC=1

Oqueocomandofaz?

Comando DELETE Excluso de dados

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:

Excluir na tabela TrabalhaProjeto todas as tuplas que referenciam o projeto 2;


Remoo no viola a integridade referencial, pode ser feita normalmente; Posso excluir um empregado de um projeto especfico sem precisar acabar com projeto ou demitir o funcionrio

DELETE FROM TrabalhaProjeto WHERE CodProjeto=2

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;

DELETE FROM Departamento WHERE CodDepartamento=2

Excluses
Podemos

omitir a clusula WHERE para removermos todas as tuplas de uma tabela;


Neste caso, as tuplas so removidas, mas a tabela continua existindo; Exemplo: Excluir todas as tuplas da tabela TrabalhaProjeto: DELETE FROM TrabalhaProjeto

COMANDOS AVANADOS Vrios comandos em um nico

Comandos avanados

INSERTINTOEMPREGADOS (CODIGO,NOME,SALARIO,SECAO) SELECTCODIGO,NOME,SALARIO,SECAO FROMEMPREGADOS_FILIALWHERE DEPARTAMENTO=2

Comandos avanados

UPDATEEMPREGADOSSETSALARIO= salario*1.1WHERESALARIO=(SELECT MIN(salario)FROMEMPREGADOS)


Oqueocomandofaz? Osfuncionriosdemenorsalrioreceberoaumento de10%

Comandos avanados

UPDATEEMPREGADOSSETSALARIO= (SELECTMAX(salario)FROM EMPREGADOS)WHEREDEPARTAMENTO= 5

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;

A consulta executada sempre que a viso invocada;

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

O resultado ser a seguinte tabela virtual:


Empregado Projeto NumHoras

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

A consulta vai recuperar os empregados Joo, Maria e Joaquim;

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:

INSERT INTO EmpregadoComProjetos VALUES (Joo,Cliente Ouro, 12)

Vises
Atualizao:

Em geral, a atualizao de vises tratada da seguinte forma:


Uma viso definida numa nica tabela atualizvel se os atributos da viso contm a chave primria e todos os atributos que possuem a restrio NOT NULL sem nenhum valor default; Vises definidas sobre mltiplas tabelas usando juno geralmente no so atualizveis; Vises usando funes de agrupamento e agregados no so atualizveis;

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

Você também pode gostar