|
Tutoriais » SQL » Produto Cartesiano » Definindo: Este comando coloca lado-a-lado as tuplas de duas tabelas. Em livros o termo 'lado-a-lado' pode ser escrito: EMPARELHAR.
SELECT * FROM funcionarios, departamentos
O comando vai colocar as estruturas das tabelas uma ao lado da outra.Na hora de construir as tuplas os SGBDs usam modos diferentes: A primeira tupla da tabela da esquerda ao lado de cada tupla da tabela da direita. Ou A primeira tupla da tabela da direita ao lado de cada tupla da tabela da esquerda. TANTO FAZ! Sabemos que o Produto Cartesiano é comutativo. CUIDADO! O SQL permite fazer em um comando o Produto Cartesiano de três ou mais tabelas. POR EXEMPLO.
SELECT * FROM funcionarios, departamentos, acoes;
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 um Produto Cartesiano e depois criamos a tabela com o resultado, desta forma
CREATE TABLE atua01 AS (SELECT * FROM funcionarios, projetos);
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 atua01 AS (SELECT * FROM funcionarios, projetos);
SELECT * FROM atua01;
CUIDADO!A criação de tabelas (temporárias ou não), em alguns SGBDs exige que as estruturas das tabelas NÃO tenham nomes de campos repetidos. Mas... e SE as tabelas envolvidas no Produto Cartesiano tiverem campos com o mesmo nome? Como fazemos? Pode-se combinar o Produto Cartesiano com a operação de PROJEÇÃO, fazendo gerar uma tabela sem nomes de campos repetidos. Uma outra alternativa seria NÃO atribuir nomes iguais em campos distintos em diferentes tabelas. Assim se um campo em uma tabela for Chave Primária o nome do campo pode ser: PK_NomeDoCampo... e um campo correspondente seria FK_NomeDoCampo. |