subconsultas: independentes e correlatas
15/04/2014
0
qual a finalidade da subconsulta? li algo sobre o mesmo e a resposta foi meio vago. e para que serve as subconsultas independentes e correlatas?(na pratica).
Mariana Carvalho
Posts
15/04/2014
Alex Lekao
Eu uso bastante sub consultas, nao sei bem a respeito das empressoes de independentes e correlatas, mas vamos la. rsrsr
Por exemplo, no cadastro de clientes vc nao tem a data da ultima compra do seu cliente, vc pode obter esse dado a partir de uma subconsulta na tabela de vendas.
Com relacao a independencia ou correlatividade, honestamente eu nunca pensei a respeito e nem estudei desta forma.
Acredito que possa ser o seguinte.
No seu select principal, para apresentar um valor meramente informativo que nao tenha relacao nenhuma com esse select principal vc monta um outro select apenas para informar isso.
e em outro campo por exemplo vc no seu select relaciona campos desta tabela que esta na subconsulta com algum campo da tabela da consulta principal.
neste ultima citacao o exemplo que citei acima o subselect seria o correlato.
Espero que tenha ajudado.
Abraco.
Alex - Lekao
15/04/2014
Mariana Carvalho
eu tenho uma consulta que pega uns 3 campos de uma tabela, então eu crio uma subconsulta bem mais especifica, ex: quero pegar o ultimo ou penultimo campo. mas em nivel de banco de dados, é importante, ou isso é mais utilizado em aplicações?
16/04/2014
Fabiano Carvalho
JOINS(Left,inner,right,cross).
Mas a questão da subconsulta é filtar o resultado, exemplo quero apenas os resultado de uma tabela que tenha em uma tabela.
Select * from tabela1 where id in(select id from tabela2)
Ou que não tenha com a data igual.
Select * from tabela1 as fora where id not in(select id from tabela2 as dentro where fora.data <> dentro.data )
Verifique sobre os operadores some, any e all, eles são utilizados para subconsultas.
E assim vai..
Assunto complexo.
16/04/2014
Alex Lekao
Eh quase isso. rsrsr
Com relacao a Aplicacao, ela possivelmente(falo como quem nao desenvolve) fara uso do resultado obtivo a partir do script que vc montou no banco.
Um exemplo pratico que eu faco uso aqui.
no meu script eu agrupo todas as vendas por clientes, e faco referencia de representatividade por cliente.
Para que se tenha um parametro para essa respresentatividade eu preciso saber, e informar, quanto a empresa vendeu no seu total, com isso o meu script vai apresentar os valores dos clientes e em uma subconsulta, sem importar o cliente, no caso ela ficaria independente, onde eu somo todas as vendas da empresa, e para colocar a representacao do cliente, eu monto uma outra subconsulta so que lincando os codigos de clientes desta subconsulta a consulta principal, assim eu tenho uma subselect independente, e uma subselect correlata.
lembrando que eu imagino que os termos usados como independente e correlato seja desta forma, porque eu nao tenho habito nem estudei a respeito destes termos, entao estou supondo que essa situacao que informei seja isso que vc questionou.
nao sei se ajudei ou compliquei ainda mais. rsrsrs
16/04/2014
Mariana Carvalho
Select * from tabela1 as fora where id not in(select id from tabela2 as dentro where fora.data <> dentro.data )
16/04/2014
Mariana Carvalho
16/04/2014
Fabiano Carvalho
Select * from tabela1 as fora where id not in(select id from tabela2 as dentro where fora.data <> dentro.data )
Porque quando se tem valores nullos é desconsiderado, e pode ter problemas de inconsistencia
16/04/2014
Alex Lekao
Entao seguindo o exemplo que tenho mencionado.
SELECT CLIENTE.CODIGO, CLIENTE.NOME, (SELECT SUM(VENDAS.TOTAL) FROM VENDAS) AS [TOTAL GERAL], (SELECT SUM(VENDAS.TOTAL) FROM VENDAS WHERE VENDAS.CODCLI = CLIENTE.CODIGO) AS [TOTAL CLIENTE] FROM CLIENTE
Esse exemplo de codigo de estoque usando esta meio grosseiro e pode haver erro de estrutura sintaxe, etc, eh ficticio nao pequei nada meu que ja faca uso para exemplificar.
Voce tem o select principal(pelo menos eu trato assim... nao sei se esta errado ou nao.... rsrsrsr) e nas selecoes eu monto um outro select(subselect... tbm chamo assim... acredito que esteja certo... rsrsr), no caso da coluna que nomeei como total geral eu estou somando todas as vendas, tendo assim o valor total vendido pela empresa, no segundo subselect eu estou fazendo referencia do codigo de clientes constante na tabela vendas com o codigo de clientes da tabela clientes do select principal.
Nas minhas utilizacoes aqui, eh bem normal eu fazer uso deste recurso, porque sempre acontece de vc precisar de um dado que vc nao tem e com isso vc tem a necessidade de monta-lo de alguma forma e algumas delas eh buscar em outra tabela e relacionar com a tabela principal.
o meu exemplo pode nao ser o ideal, porque daria para usar juncao e tal, mas como o intuito era exemplificar os casos de selects, montei desta forma.
Espero ter ficado melhor agora. rsrsr
Pensei em tentar escrever menos... mas nao consegui. kkkk
Abraco.
Alex - Lekao
16/04/2014
Mariana Carvalho
Alex, entendi a ideia do codigo, e o que vc explicou.
vejo a subconsulta da seguinte maneira, me corrijam caso tenha escrito alguma coisa sem sentido, a subconsulta pode ser substituida por um select bem construido. vi nesse topico, pros e contras e tambem enxerguei como um trabalho a mais.
16/04/2014
Roniere Almeida
16/04/2014
Jefferson Santos
Alex, entendi a ideia do codigo, e o que vc explicou.
vejo a subconsulta da seguinte maneira, me corrijam caso tenha escrito alguma coisa sem sentido, a subconsulta pode ser substituida por um select bem construido. vi nesse topico, pros e contras e tambem enxerguei como um trabalho a mais.
Ao meu ver, não existindo o certo e o errado, e sim o coerente! veja. sendo simples voce pode fazer de qualquer uma das formas, levando em consideração que seu sistema SEMPRE manipulara a mesma quantidade de registros, isso devido a grande performance das máquinas e dos bancos de dados,
Utilizando a segunda opção com INNER JOIN, inicialmente pode ser mais custoso, pois o banco fará mais operações internas ( como Join e Group By ) já na SubQuery o banco fará 2 Selects. como disse embora mais custoso, quando for estiver manipulando uma grande quantidade de registros ficará evidente que utiliza-se de uma SubQuery não é a melhor opção.
16/04/2014
Alex Lekao
Com relacao ao custo, eh interessante se aprofuncao com o plano de manutencao que ajuda muito nesses casos e ja indica alguns indices que podem ser criados para melhorar a performance.
de qqr forma tem que se avaliar tudo, dependendo do que estiver querendo pode valer a pena criar uma view com os dados grossos e em seguida tratar o resultado final na view, acho que pode ser melhor, mas em relacao a custos nao tenho certeza se sera melhor ou nao o uso da view.
ou uma tabela temporaria, existe varios recursos que podem subtistuir o que normalmente montamos como consultas e subconsultas. rsrsr
com relacao a essa utilizacao em outros bancos(como perguntou o Roniere) eu desconheco, mas acredito que cada banco trabalhe melhor algumas situacoes embora alguns defendam que seja igual os usos gerais. rsrsr
Espero ter ajudado.
Abraco.
Alex - Lekao
16/04/2014
Mariana Carvalho
17/04/2014
Jefferson Santos
Esse é o futuro.
É utilizado quase em 60%, 70% do dia a dia.
Criação de view, procedure, trigger, relatorio, consulta.
Otimização do banco, uso de memoria, uso de CPU.
17/04/2014
Marisiana Battistella
A utilização de subconsultas é bem útil e muitas vezes simplifica a solução de um problema que parecia complexo.
Clique aqui para fazer login e interagir na Comunidade :)