Free CSS Button Css3Menu.com

Tutoriais » SQL » Intersecção »
Definindo:
Este comando gera uma tabela com as tuplas que estão na primeira tabela e que também estão na segunda tabela (que devem ser União Compatíveis).
Este seria o comando padrao ANSI/92
       SELECT * FROM depto01 INTERSECT (SELECT * FROM depto02);     
No postegresql implementamos conforme o padrão, por exemplo, acessando a base adm_exerc_sql
Podemos criar uma tabela:
       CREATE TABLE acoes_110120_pro AS (SELECT * FROM acoes_projetos WHERE id_acao IN ('110','120'));
       SELECT * FROM acoes_110120_pro INTERSECT (SELECT * FROM acoes_projetos)     
Mas o MySQL (até a 5.0) não implementa o operador INTERSECT.
Podemos usar o operador IN, escrevendo assim:
       SELECT * FROM depto01 WHERE CONCAT(id_depto,
                                          tx_nome_depto,
                                          id_funcionario_gerente,
                                          id_depto_superior,
                                          tx_localizacao,
                                          qt_area_total,
                                          dt_criacao_depto,
                                          dt_cadastro)
                IN
                (SELECT CONCAT(id_depto,
                               tx_nome_depto,
                               id_funcionario_gerente,
                               id_depto_superior,
                               tx_localizacao,
                               qt_area_total,
                               dt_criacao_depto,
                               dt_cadastro) FROM depto02);
     
A função CONCAT coloca lado-a-lado todos os valores dos campos indicados dentro dos ().
Neste exemplo colocamos todos os campos das tabelas para ter certeza que a linha inteira é igual e que está na intersecção.
Ainda usando o operador IN, se as duas tabelas tiverem a mesma chave primary podemos comparar somente o valor das CPs.
Devemos ter cuidado ao usar o CONCAT, pois NENHUM valor de campo pode ser NULO para o resultado ser o esperado.

Podemos criar uma tabela no banco de dados com o comando create table, copiando a estrutura de uma tabela e as tuplas que são resultado de um comando SQL
Por exemplo, fazemos uma intersecção e depois criamos a tabela com o resultado, desta forma
       CREATE TABLE dep_inter AS (
          SELECT * FROM depto01 WHERE CONCAT(id_depto,
                                             tx_nome_depto,
                                             id_funcionario_gerente,
                                             id_depto_superior,
                                             tx_localizacao,
                                             qt_area_total,
                                             dt_criacao_depto,
                                             dt_cadastro)
                   IN
                   (SELECT CONCAT(id_depto,
                                  tx_nome_depto,
                                  id_funcionario_gerente,
                                  id_depto_superior,
                                  tx_localizacao,
                                  qt_area_total,
                                  dt_criacao_depto,
                                  dt_cadastro) FROM depto02)
                                 );     
Estas tabelas ficam GRAVADAS no disco rígido e passam a constar no dicionário de dados da base.
Podemos também criar uma tabela 'temporária' (fica em memória RAM somente enquanto se executa a sessão de conexão com o SGBD).
Este 'tipo de tabela' é implementado em vários SGBDs.
Criando uma tabela temporária e a seguir mostrando seu conteúdo:
       CREATE TEMPORARY TABLE inter01 AS
          SELECT * FROM depto01 WHERE CONCAT(id_depto,
                                             tx_nome_depto,
                                             id_funcionario_gerente,
                                             id_depto_superior,
                                             tx_localizacao,
                                             qt_area_total,
                                             dt_criacao_depto,
                                             dt_cadastro)
                   IN
                   (SELECT CONCAT(id_depto,
                                  tx_nome_depto,
                                  id_funcionario_gerente,
                                  id_depto_superior,
                                  tx_localizacao,
                                  qt_area_total,
                                  dt_criacao_depto,
                                  dt_cadastro) FROM depto02)
                                 );
       SELECT * FROM inter01;