Subconsulta na Cláusula FROM Gera uma tabela derivada a partir de uma ou mais tabelas, para uso na consulta externa otimização: filtra linhas e colunas de uma tabela que são desejadas pela consulta externa select lista_atributos from (consulta_sql) as _tabela_derivada Mapeamento para a álgebra relacional select a from (select x from t where d > 5) as t join t on t.c = t.x π a (t θ Xρ t (π x (σ d > 5 (t )))) θ = t.c = t.x Exemplos Álgebra π Médicos.,...,, hora ( (Médicos θ X θ = Médicos. = C. ρ C (π, hora (σ data = 06// (Consultas))) ) ) π Amb., andar, capac ( ρ Amb (π, andar (Ambulatórios)) θ X θ = Amb. = M_ort. ρ MFlo (π (σ c = Fpolis (Médicos))) ) SQL select Medicos.*, C.hora from Medicos join (select, hora from Consultas where data = '06//') as C on Médicos. = C. select Amb.* from (select, andar from ambulatorios) as Amb join (select from Medicos where c = Fpolis') as MFlo on Amb. = MFlo.
Ordenação de Resultados Cláusula ORDER BY select lista_atributos from lista_tabelas [where condição] [order by _atributo [desc] {[, _atributo n [desc]]} ] Exemplos select * from Pacientes order by select salário, from Funcionários order by salário desc, Ordenação de Resultados É possível determinar a quant de valores ordenados a retornar select... limit valor [,valor] Exemplos select * from Pacientes order by limit 5 retorna as 5 primeiras tuplas retorna tuplas 6 a 5 select salário, from Funcionários order by salário desc, limit 5,0
Definição de Grupos Cláusula GROUP BY select lista_atributos from lista_tabelas [where condição] [group by lista_atributos_agrupamento [having condição_para_agrupamento] ] GROUP BY define grupos para combinações de valores dos atributos definidos em lista_atributos_agrupamento um grupo mantém os atributos da tabela que não estão em lista_atributos_agrupamento apenas atributos definidos em lista_atributos_agrupamento podem aparecer no resultado da consulta geralmente o resultado da consulta possui uma função de agregação Definição de Grupos Exemplo select especial, count(*) group by especial especial ortopedia pediatira neurologia traumatologia Count especial grupos ortopedia c João 40 00000000 Fpolis 4 Carlos 8 000000 Joinville pediatria c Pedro 5 0000000 Fpolis neurologia c 5 Márcia 00000 Biguaçu traumatologia c Maria 4 0000000 Blumenau 6 Joana 7 0000 Fpolis 7 Mauro 5 0000 Blumenau
Definição de Grupos Cláusula HAVING define condições para que grupos sejam formados condições só podem ser definidas sobre atributos do agrupamento ou serem funções de agregação existe somente associada à cláusula GROUP BY Exemplos select especial, count(*) group by especial having count(*) > Atualização com Consulta Comandos de atualização podem incluir comandos de consulta necessário toda vez que a atualização deve testar relacionamentos entre tabelas Exemplo delete from Consultas where hora > 7:00:00 and in (select where = Maria ) 4
Atualização com Consulta Exemplo update Médicos set = NULL where not exists (select * m where m. <> Médicos. and m. = Médicos.) Exemplo update Ambulatórios set capac = capac + (select capac from Ambulatórios where = 4) where = Atualização com Consulta Exemplo 4 (supondo MedNovos(código,, especial)) insert into MedNovos select,, especial where < ; Exemplo 5 insert into Pacientes select p.codp+, f., f., 'Fpolis', f.cpf, 'gripe' from Pacientes p join Funcionários f on f.codf = and p.codp = (select max(codp) from Pacientes) 5
Exercícios Buscar o que se pede utilizando subconsultas na cláusula FROM: ) todos os dados das consultas marcadas para a médica Maria ) e c dos pacientes que têm consultas marcadas com ortopedistas ) e CPF dos pacientes de Florianópolis que não têm consultas com o médico João Buscar o que se pede utilizando ORDER BY e GROUP BY: ) os dados de todos os funcionários ordenados pelo salário (decrescente) e pela (crescente). Buscar apenas os três primeiros funcionários nesta ordem ) o dos médicos e o número e andar do ambulatório onde eles atendem, ordenado pelo número do ambulatório ) o do médico e o dos pacientes com consulta marcada, ordenado pela data e pela hora. Buscar apenas as tuplas a 5, nesta ordem 4) s dos médicos e o total de médicos com a mesma 5) datas e o total de consultas em cada data, para horários após às hs. 6) andares onde existem ambulatórios e a média de capac por andar 7) andares onde existem ambulatórios cuja média de capac no andar seja >= 40 8) dos médicos que possuem mais de uma consulta marcada Realizar as seguintes atualizações: ) passar para às 9hs todas as consultas marcadas para a paciente Ana ) excluir os pacientes que não possuem consultas marcadas ) passar para //006 todas as consultas do médico Pedro marcadas antes do meio-dia 4) o médico Pedro passa a residir na mesma c do paciente Paulo e sua passa a ser o dobro da da paciente Ana 5) o funcionário Caio (codf = ) tornou-se médico. Sua especial é a mesma da médica Maria ( = ) e ele vai atender no mesmo ambulatório dela. Inserir Caio na tabela Médicos 6