subconsultas: independentes e correlatas
mais uma vez com uma pergunta, acredito que não é tão simples.
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).
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
Curtidas 0
Respostas
Alex Lekao
15/04/2014
Oi Mariana,
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
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
GOSTEI 0
Mariana Carvalho
15/04/2014
vamos por partes, rsrsrs
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?
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?
GOSTEI 0
Fabiano Carvalho
15/04/2014
Eu considero subconsulta uma forma "errada" de se trabalhar, principalmente com a possibilidade de valores null, o mais correto é utilizar
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.
Ou que não tenha com a data igual.
Verifique sobre os operadores some, any e all, eles são utilizados para subconsultas.
E assim vai..
Assunto complexo.
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.
GOSTEI 0
Alex Lekao
15/04/2014
Oi Mariana,
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
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
GOSTEI 0
Mariana Carvalho
15/04/2014
Fabiano, a subconsulta, no seu exemplo é: um select dentro de outro select não é? mais uma perguntinha, por que você considera errada? me desculpe a pergunta, é pq vi isso no livro, e pra mim ficou estranho a forma que escreveu. por favor, não interprete mal a minha pergunta.
Select * from tabela1 as fora where id not in(select id from tabela2 as dentro where fora.data <> dentro.data )
GOSTEI 0
Mariana Carvalho
15/04/2014
Alex, vc escreve demais, kkkkk, brincadeira, vc pode mostrar um codigo que exemplifique?
GOSTEI 0
Fabiano Carvalho
15/04/2014
Fabiano, a subconsulta, no seu exemplo é: um select dentro de outro select não é? mais uma perguntinha, por que você considera errada? me desculpe a pergunta, é pq vi isso no livro, e pra mim ficou estranho a forma que escreveu. por favor, não interprete mal a minha pergunta.
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
GOSTEI 0
Alex Lekao
15/04/2014
kkkkk... sem problemas... eu tbm acho que escrevo demais as vezes. rsrsr
Entao seguindo o exemplo que tenho mencionado.
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
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
Alex, vc escreve demais, kkkkk, brincadeira, vc pode mostrar um codigo que exemplifique?
GOSTEI 0
Mariana Carvalho
15/04/2014
Fabiano, obrigada, entendi perfeitamente, deve-se utilizar somente em tabelas que não tenham valores nulos.
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.
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.
GOSTEI 0
Roniere Almeida
15/04/2014
perguntinha manjada, essas subconsultas, em outros SGBDs, são melhores?
GOSTEI 0
Jefferson Santos
15/04/2014
Fabiano, obrigada, entendi perfeitamente, deve-se utilizar somente em tabelas que não tenham valores nulos.
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.
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.
GOSTEI 0
Alex Lekao
15/04/2014
Eu particularmente sempre utilizo as juncoes, mas infelizmente tem resultados que so optenho com as subselects, com isso acaba sendo necessario.
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
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
GOSTEI 0
Mariana Carvalho
15/04/2014
fiz uma leitura sobre o assunto, mas acho que vou apenas estudar por cima, não vejo futuro, rsrsrsrs.
GOSTEI 0
Jefferson Santos
15/04/2014
fiz uma leitura sobre o assunto, mas acho que vou apenas estudar por cima, não vejo futuro, rsrsrsrs.
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.
GOSTEI 0
Marisiana Battistella
15/04/2014
Tava acompanhando o post, e eu concordo com o que o Jefferson acabou de mencionar!
A utilização de subconsultas é bem útil e muitas vezes simplifica a solução de um problema que parecia complexo.
A utilização de subconsultas é bem útil e muitas vezes simplifica a solução de um problema que parecia complexo.
GOSTEI 0
Alex Lekao
15/04/2014
Ola Bom dia!!
Com Absoluta Certeza!!!
Ja estive montando consultas aqui com juncoes e tal e nao consegui o resultado esperado, so com uma subconsulta atingi o que eu queria.
Eh claro que nao podemos espalhar subconsultas a torto e direito, mas eh um mal necessario. rsrsr
Essas coisas fazem parte do dia a dia de quem trabalha com banco no que se refira a programacao a nivel de banco e administracao.
Mas eu sou suspeito para falar, apesar do pouco conhecimento e experiencia, sou apaixonado por fazer isso. rsrsr
Abraco.
Alex - Lekao
Com Absoluta Certeza!!!
Ja estive montando consultas aqui com juncoes e tal e nao consegui o resultado esperado, so com uma subconsulta atingi o que eu queria.
Eh claro que nao podemos espalhar subconsultas a torto e direito, mas eh um mal necessario. rsrsr
Essas coisas fazem parte do dia a dia de quem trabalha com banco no que se refira a programacao a nivel de banco e administracao.
Mas eu sou suspeito para falar, apesar do pouco conhecimento e experiencia, sou apaixonado por fazer isso. rsrsr
Abraco.
Alex - Lekao
GOSTEI 0
Marisiana Battistella
15/04/2014
Tudo se resume em boas práticas e em saber o que se está fazendo. =)
GOSTEI 0
Alex Lekao
15/04/2014
verdade. rsrsr
GOSTEI 0
Mariana Carvalho
15/04/2014
fiz uma leitura sobre o assunto, mas acho que vou apenas estudar por cima, não vejo futuro, rsrsrsrs.
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.
e subconsulta, utiliza bastante?
GOSTEI 0
Marisiana Battistella
15/04/2014
Utiliza-se bastante Mariana!
Tem muitos e muitos casos que só se consegue solucionar utilizando subconsulta.
Recomendo a leitura desse link pra você entender melhor: [url]http://aserlorenzo.com/manSQL/Oracle/dml/subconsultas/SubConsultaSimplesECorrelacionada.htm[/url]
Tem muitos e muitos casos que só se consegue solucionar utilizando subconsulta.
Recomendo a leitura desse link pra você entender melhor: [url]http://aserlorenzo.com/manSQL/Oracle/dml/subconsultas/SubConsultaSimplesECorrelacionada.htm[/url]
GOSTEI 0
Mariana Carvalho
15/04/2014
vou procurar entender melhor, pois no livro foi um pouco tecnico demais.
GOSTEI 0
Marisiana Battistella
15/04/2014
É, achei q ele tem uma explicação interessante, mas é mais pra dar um brilho, depois pesquisa mais sobre o assunto que tem muito material bom na web.
GOSTEI 0
Mariana Carvalho
15/04/2014
se puder contribuir com alguns links, por favor.
obrigada Marisiana.
obrigada Marisiana.
GOSTEI 0
Marisiana Battistella
15/04/2014
Tá na mão...
[url]http://technet.microsoft.com/pt-br/library/ms189575(v=sql.105).aspx[/url]
[url]http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/DML/Sub_Consultas[/url]
[url]http://aserlorenzo.com/manSQL/Oracle/dml/subconsultas/subconsultas.htm[/url]
[url]http://www.techonthenet.com/oracle/subqueries.php[/url]
[url]http://technet.microsoft.com/pt-br/library/ms189575(v=sql.105).aspx[/url]
[url]http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/DML/Sub_Consultas[/url]
[url]http://aserlorenzo.com/manSQL/Oracle/dml/subconsultas/subconsultas.htm[/url]
[url]http://www.techonthenet.com/oracle/subqueries.php[/url]
GOSTEI 0
Mariana Carvalho
15/04/2014
otimo Marisiana, obrigada.
GOSTEI 0