Uma subquery é uma query dentro de outra query. Pode conter outra subquery, chamadas de subqueries "aninhadas". Um join é quando duas ou mais tabelas são referenciadas na cláusula "From" da query. Diferentes engines de banco de dados podem otimizar subqueries e joins de forma diferente. Por exemplo, o otimizador do DB2 transforma subquery em join se certos critérios são atendidos. Em alguns casos, join rende melhor performance que subquery.
Uma subquery é uma declaração "SELECT" dentro da cláusula "WHERE" ou "HAVING" de um "INSERT", "UPDATE", "MERGE" ou "DELETE" externo. A subquery também é chamada de "inner query" ou "inner select". Pode ter cláusula "FROM" com uma ou mais tabelas e opcionalmente cláusulas "WHERE", "GROUP BY" ou "HAVING". Sempre está entre parênteses.
Subqueries são vantajosas porque estruturam a query isolando cada parte da declaração, realizam mesma operação que exigiria joins e unions complexos e são mais fáceis de ler. Subqueries deram base ao nome "Structured Query Language" (SQL) por sua estrutura legível. Desvantagem: não pode modificar tabela e selecionar da mesma tabela dentro de subquery na mesma declaração SQL. Subqueries também podem demorar mais para executar que join devido ao processamento do otimizador do banco.
A maioria das subqueries pode ser reescrita como joins, e vice-versa. Join define duas ou mais tabelas por coluna relacionada. Tabelas geralmente são unidas por chaves primárias e estrangeiras. Exemplo: tabela de funcionários tem chave primária id_funcionário, enquanto tabela de folha de ponto também tem id_funcionário como chave estrangeira. Join SQL pode ser "WHERE funcionario.id = folha_ponto.id" ou "FROM funcionario JOIN folha_ponto ON (funcionario.id = folha_ponto.id)".
Principal vantagem do join: executa mais rápido. Aumento de performance pode não ser perceptível ao usuário final. Mas como colunas são especificamente nomeadas, indexadas e otimizadas pelo engine do banco, tempo de recuperação quase sempre será mais rápido que subquery. Existem também inner/outer joins, left/right joins, full joins e cross joins. Desvantagem: não são tão fáceis de ler quanto subqueries. Outra desvantagem: pode ser confuso qual tipo de join usar para obter o conjunto de resultados desejado.
Tecnologia Eletrônica © [www.351231.com]