Escolar Documentos
Profissional Documentos
Cultura Documentos
degas@uesc.br http://alvarodegas.cjb.net/
SQL: Select
Estrutura bsica
Select a1, a2, ... an From r1, r2, , rn Where P
Empregado ndepto = 5;
Empregado;
Matrcula e salrio dos funcionrios do que ganham mais de R$500 ou sejam do sexo feminino
SELECT numat, salario FROM Empregado WHERE salario > 500 OR sexo = 'F';
Empregado, Departamento
Matrcula do empregado, nome do projeto onde trabalha e nmero de horas dedicadas ao projeto
SELECT numat, nomeproj, horas FROM WHERE
Select INTO
Incluir na tabela mat_sal as matriculas e os salarios dos funcionrios Select numat, sal
Select INTO
destino podem ser Incluir na tabela mat_sal as matriculas omitidos se o select selecionar dados para salarios dos funcionrios todos eles, na ordem Select numat, em sal que esto na tabela!
Conectores lgicos
Operadores de comparao
Comparadores especiais
LIKE
Metacaracteres: para efeitos de expresses regulares, em SQL o % substitui uma sequencia de caracteres e o _ substitui um caracter. like Santo% aceita qualquer nome comeado assim
like Dom Pedro _ aceita qualquer caractere (logo no pode formar Dom Pedro II)
BETWEEN
(pitoresco) funcionrios cuja segunda letra do nome seja a Select nominic, nomefim from empregado where nominic like '_a%';
SELECT nominic, nomint, nomefim, salario FROM Empregado WHERE ndepto in ( SELECT numdep FROM Departamento WHERE ndepto=numdep AND nomedep='Pesquisa' );
Select nomedep, locdep from localdepto, departamento where locdep in ('Ilheus', 'Itabuna') and departamento.numdep = localdepto.numdep;
Select nomedep from localdepto L, departamento D where locdep in ('Ilheus', 'Itabuna') and D.numdep = L.numdep;
Nome e Salrio dos funcionrios que ganha mais que algum colega do departamento 5
SOME: alguma tupla satisfaz? select nominic, nomefim, salario
from empregado where salario > SOME (select salario from empregado where ndepto=5);
Nome e Salrio dos funcionrios que ganha mais que todos os colegas do departamento 5
ALL: toda tupla satisfaz? select nominic, nomefim, salario
from empregado where salario > ALL (select salario from empregado where ndepto=5);
Ordenao: Order by
Por default a ordem crescente, mas isso pode ser mudado (clusula DESC)
Liste o nome e o salrio dos 5 funcionrios mais mal remunerados em ordem crescente de salrio
Testar limitando a 2
Agregao
Agregao
Agregao
Qual o maior salrio? Qual o Menor? Qual a soma de todos os salrios? Quantos funcionrios existem?
Agrupamento: Group By
select nomedep, avg(salario) from empregado, departamento Where ndepto = numdep group by nomedep <order by nomedep>;
HAVING como um WHERE, mas aplica-se s funes de agrupamento Mostre a mdia de salrio de cada departamento cuja mdia seja maior que 650
select nomedep, avg(salario) from empregado, departamento Where ndepto = numdep group by nomedep Having avg(salario) > 650;
select nomedep DEPTO, avg(salario) MEDIA, count(numat) QUANTIDADE from empregado, departamento where ndepto = numdep group by nomedep;
Mdia dos salrios e Nmero de funcionrios de cada departamento que possua mais de dois funcionrios
select nomedep, avg(salario), count(numat) from empregado, departamento where ndepto = numdep group by nomedep Having count(numat) > 2;
Recursos adicionais
Teste de nulidade
Selecionar todos os empregados que no possuem superior Select numat, nominic, nomefim From empregado Where nsuper is null;
Vises
Relaes que so formadas a partir de consultas Create view <view_name> as <select ...>; Uma viso (chefes_depto) que liste o nome do departamento, a matrcula e o nome do seu chefe Create view chefes_depto as select nomedep, numat, nominic, nomefim From departamento, empregado Where numat = nchefe; Select * from chefes_depto;
Vises
Pode-se usar agregaes e aliases para as colunas Bem como ordenar Uma viso que mostre quantas horas somadas os funcionrios de cada departamento dedicam a cada projeto (somando-se as horas de seus funcionrios) Create view horas_depto as Select nomedep departamento, sum(horas) hs From departamento d, trabalhaem t, projeto p Where d.numdep = p.numdep and t.nproj = p.numproj and t.numemp in (select numat From empregado e Where e.ndepto = d.numdep) Group by nomedep Order by hs desc;
SQL: Select
"Conservador quem acredita que nada deve ser feito pela primeira vez." Alfred Wiggam