Você está na página 1de 14

SQL/Criando Tabelas

Podemos criar uma tabela qualquer dentro de um banco de dados. A sintaxe bsica para criarmos : CREATE TABLE nome_tabela ( nome_campo_1 tipo_1, nome_campo_2 tipo_2, ... nome_campo_n tipo_n, PRIMARY KEY ( campo_x,...)); CREATE TABLE o comando para criao da tabela e deve ser seguida pelo nome que daremos tabela. Dentro do comando, devemos definir os nomes dos campos de acordo com a convenincia do banco de dados, e determinar o tipo de dado que poder ser includo neste campo. Na seo abaixo Tipo de Dados esto especificados os tipos mais comuns encontrados nos SGBDs. PRIMARY KEY define a chave primria da tabela, isto , o campo que serve como chave da tabela e que no pode ser repetido. Se desejamos que um campo seja de preenchimento obrigatrio, devemos inserir NOT NULL na frente do campo determinado. CREATE TABLE nome_tabela ( nome_campo_1 tipo_1 NOT NULL, nome_campo_2 tipo_2, ... nome_campo_n tipo_n, PRIMARY KEY(campo_x,...)); Se desejamos que um campo seja de auto-incremento, devemos inserir AUTO_INCREMENT na frente do campo determinado. Isto pode ser utilizado por exemplo, para automatizar um cdigo que sirva de chave primria de uma tabela: CREATE TABLE nome_tabela ( nome_campo_1 tipo_1 NOT NULL nome_campo_2 tipo_2, ... nome_campo_n tipo_n, PRIMARY KEY (campo_x,...));

AUTO_INCREMENT,

Tipos de Dados
Tipos de dados definem os tipos de informao que podem ser inseridos em um campo. Somente dados do mesmo tipo do campo podero ser inseridos. Os tipos suportados por um banco de dados podem variar de SGBD para SGBD, mas descrevemos a seguir os principais tipos encontrados na maior parte dos gerenciadores: Abreviao genrica

Tipo

Descrio

INTEIRO

INT ou INTEGER

Nmeros inteiros. Existem outros tipos de nmeros inteiros de acordo com o gerenciador utilizado.

REAL

DOUBLE ou REAL

Nmeros reais. Permitem armazenar todo tipo de nmero no inteiro. Existem outros tipos de nmeros reais de acordo com o gerenciador utilizado.

CARACTER

CHAR (NMERO)

Caracter. Permite a incluso de dados alfanumricos com tamanho pr-definido. O nmero de caracteres definido entre os parnteses.

CARACTER VARIVEL

VARCHAR (NMERO)

Caracter. Permite a incluso de dados alfanumricos. O nmero de caracteres definido entre os parnteses, porm o nmero de bytes utilizados pelo campo de acordo com o dado inserido.

DATA

DATE

Data. Existem diversos tipos de datas de acordo com o gerenciador utilizado.

BOOLEANO

BOOLEAN

Armazena um bit de informao, utilizado para verdadeiro ou falso.

Exemplo
Como exemplo do uso do comando CREATE TABLE, imaginemos a necessidade de uma tabela que deva possuir os dados dos clientes de uma loja. CREATE TABLE Cliente ( Codigo INT NOT NULL AUTO_INCREMENT, Nome VARCHAR (60) NOT NULL, Data_Nascimento DATE, Telefone CHAR (8), PRIMARY KEY (Codigo) );#

Neste comando, criaremos uma tabela chamada Cliente. Esta tabela contm quatro campos: o primeiro campo o Cdigo do cliente. Este campo ser utilizado como chave primria de forma que no poder se repetir nunca. Desta forma o campo deve ser sempre preenchido (NOT NULL), numrico do tipo inteiro (INT) e deve auto-incrementar de acordo com o nmero de clientes que for includo. O campo Nome do tipo VARCHAR (60), ou seja aceita dados alfanumricos com at 60 caracteres. No entanto se um nome for inserido com menos de 60 caracteres, o nmero de bytes consumidos pelo campo ser de acordo com o nome inserido. O campo de Data_Nascimento do tipo DATE, ou seja, uma data, que no entanto no de preenchimento obrigatrio (por isto no foi declarado o NOT NULL). O campo Telefone foi determinado como sendo alfa-numrico com oito caracteres definidos, e mesmo que sejam utilizados menos caracteres, o nmero de bytes consumidos sero sempre os mesmos independente dos dados. Isto til para dados alfanumricos que no variam de tamanho, como o caso de UF no Brasil, cuja abreviao sempre so de dois caracteres. A instruo PRIMARY KEY define qual dos campos ser a chave primria e no pode ser repetido, sendo o diferenciador entre os diversos clientes que sejam inseridos nesta tabela.

Describe
Aps criarmos uma tabela, elas podem ser manipuladas de diversas formas, inserindo, alterando ou excluindo dados. Podemos visualizar a estrutura e campos de uma tabela criada utilizando o comando DESCRIBE ou DESC: DESCRIBE Nome_Tabela;# Ou: DESC Nome_Tabela;#

Regras de Integridade
Estudamos acima como criar uma tabela simples. No entanto, ao criarmos uma tabela dentro de um banco de dados devemos ter em mente as Regras de Integridade, que garantam a consistncia, integridade e no redundncia dos dados. Entre estas regras podemos englobar as chaves primrias, checagem e chave estrangeira.

Chave primria
No exemplo acima vimos a seguinte declarao na criao da tabela: PRIMARY KEY ( campo_x,...); Esta declarao diz que os campos inseridos entre os parnteses formam a chave primria da tabela. A chave primria funcionam como os campos que diferenciam os dados uns dos outros, e que no podem ser repetidos de nenhuma forma. Por exemplo, em nossa tabela Cliente, o cdigo do Cliente funciona como a chave-primria, ou seja, os clientes podem at ter o mesmo

nome, endereo ou telefone, mas tero cdigos diferentes uns dos outros. Se dois cdigos iguais forem inseridos o SGBD retornar erro.

Checagem
Podemos inserir em uma tabela depois do campo chave primria e antes do ltimo parntese a clusula: CHECK Nome _Campo IN (valor1 , valor2, valor n); Esta clusula fora a um campo a aceitar apenas os valores especificados entre os parnteses. Isto pode ser til para definir, por exemplo, campos como sexo. Desta forma foramos as opes atravs de: CHECK Sexo IN ('M','F'); Onde o campo Sexo s podem assumir a forma M (Masculino) ou F (Feminino).

Chave estrangeira
A chave estrangeira uma clusula que deve ser includa quando possumos mais de duas tabelas em um banco de dados. Atravs da chave estrangeira estabelecemos as relaes entre duas ou mais tabelas. A chave estrangeira desta forma referencia o campo que chave primria de outra tabela. FOREIGN KEY (Campo1, Campo2, Campo3 ...) REFERENCES Nome_Tabela2 (Nome_Chave);

Alterando Tabelas
Aps criarmos uma tabela em um banco de dados, podemos alterar sua estrutura com o uso da clusula ALTER TABLE. Deve-se notar que esta alterao sempre sobre a estrutura da tabela, e no sobre os dados da tabela (este tipo de alterao ser vista mais adiante). Esta alterao da tabela efetuada de duas formas: ou acrescentando um novo campo (utilizando ADD) ou alterando-se as propriedades de um campo j existente (utilizando-se MODIFY). O comando ALTER TABLE segue a seguinte sintaxe: ALTER TABLE Nome_Tabela [ADD Nome_Campo Nova_Regra MODIFY Nome_Campo Nova_Regra];#

ADD
Podemos utilizar a clusula ADD para adicionar um novo campo em uma tabela, onde devemos definir seu tipo da mesma forma como fazemos ao criar um campo em uma nova tabela. Por exemplo, imaginemos que devemos inserir mais um campo chamado Telefone Comercial no final da tabela Cliente: ALTER TABLE Cliente

ADD Tel_Comercial INT;# Da mesma forma, campos com tamanhos definidos, devem ter seu tamanho especificado. Assim se desejamos inserir mais um campo do tipo VarChar, chamado por exemplo de Nome da Me em nossa tabela Cliente fazemos: ALTER TABLE Cliente ADD Nome_Mae VARCHAR(60);# Caso desejemos que um campo seja inserido antes ou depois de um determinado campo de nossa tabela, utilizamos a seguinte sintaxe: ALTER TABLE Nome_Tabela ADD Nome_Campo Nova_Regra [FIRST|AFTER] Campo_Determinado;# Assim, se inserirmos FIRST, o novo campo ser criado antes do campo escolhido da tabela. Se utilizarmos AFTER, depois. Desta forma se quisermos incluir o campo Nome_Me imediatamente depois do Nome do Cliente, digitamos: ALTER TABLE Cliente ADD Nome_Mae VARCHAR(60)AFTER Nome;# Alguns gerenciadores tambm utilizam a clusula ADD COLUMN ao invs de somente ADD. Podemos tambm utilizar ADD para adicionar por exemplo uma chave primria em uma tabela. Em nossa tabela, se quisermos que nome seja uma chave primria tambm, podemos fazer: ALTER TABLE Cliente ADD PRIMARY KEY(Nome);# Se desejarmos eliminar uma coluna de nossa tabela, utilizamos a seguinte sintaxe: ALTER TABLE Nome_Tabela DROP nome_campo;# Alguns gerenciadores tambm utilizam a clusula DROP COLUMN ao invs de somente DROP.

MODIFY
Podemos utilizar a clusula MODIFY para modificar as propriedades de um campo em uma tabela. Por exemplo, imaginemos que devemos modificar o tamanho de nosso campo Nome na tabela Cliente, que de 60 para 100. Ento podemos escrever: ALTER TABLE Cliente MODIFY Nome(100);# Com a clusula MODIFY, tambm podemos alterar o tipo de um campo. Imaginemos que por um motivo qualquer desejemos alterar o tipo do campo Nome de VarChar para Char: ALTER TABLE Cliente MODIFY Nome CHAR (100);#

Removendo Tabelas

Podemos excluir uma tabela qualquer dentro de um banco de dados. A sintaxe bsica para criarmos : DROP TABLE nome_tabela;# No entanto, devemos nos atentar que ao excluir uma tabela que possui relacionamento com outras tabelas, o SGBD retornar erro. Neste caso se realmente for necessrio excluir uma tabela, deve-se fazer as alteraes necessrias em todas as tabelas relacionadas.

SQL/Linguagem de Manipulao de Dados


Linguagem de manipulao de dados (ou DML, de Data Manipulation Language) o grupo de comandos dentro da linguagem SQL utilizado para a recuperao, incluso, remoo e modificao de informaes em bancos de dados. Os principais comandos DML so Select, Insert, Update e Delete.

SELECT
Uma declarao SELECT permite a consulta e retorno de um conjunto de registros de uma ou mais tabelas. O comando SELECT contm diversas clusulas opcionais que servem para filtrar e tratar adequadamente a informao retornada.

INSERT
Uma declarao INSERT permite a incluso de um ou mais registros em uma tabela.

UPDATE
Uma declarao UPDATE uma atualizao dos dados de um ou mais registros de uma tabela. O comando UPDATE contm diversas clusulas opcionais que permitem tratar adequadamente o tipo de atualizao que dever ser realizada.

DELETE
Uma declarao DELETE remove um ou mais registros de uma tabela. O comando DELETE pode conter as condies de deleo das informaes.

Inserindo Dados
Em um banco de dados, inserir dados em uma tabela, significa preencher uma linha de determinada tabela com dados correspondentes aos tipos determinados naquela tabela. Esta insero de dados deve seguir as regras de integridade da tabela, assim como respeitar as regras de chave primria estabelecidas na tabela. Na linguagem SQL, para inserirmos dados em uma tabela, utilizamos o seguinte comando:

INSERT INTO Nome_Tabela VALUES (valor 1, valor2, valor3,...); # Os valores valor1 , valor2, etc..., seguem a ordem dos campos da tabela, sendo utilizado valor vazio (' ') para campos que no necessitem de preenchimento. Dados de tipo numrico podem ser escritos sem a necessidade de aspas simples. Dados do tipo caracter (como char e varchar), devem ser escritos entre aspas simples. Exemplo: INSERT INTO Clientes VALUES (1, 'Jos Pereira', '1111-1111,...); #

Alterando Dados
Em um banco de dados, alterar dados de uma tabela significa atualizar um dado de uma determinada tabela, por outro dado de mesmo tipo daquele que atualizado. Na linguagem SQL, para alterarmos dados em uma determinada tabela, utilizamos o seguinte comando: UPDATE Nome_Tabela SET coluna a ser atualizada= valor atualizado ['''WHERE''' ''condio''];# O comando Update pode ser realizado sem o WHERE. Neste caso todas as linhas da tabela sero atualizadas com o valor determinado no comando. Para os casos onde se necessite atualizar apenas linhas que cumpram determinada condio, esta condio estabelecida com a incluso do comando WHERE. Exemplo: UPDATE Clientes SET nome= 'Antnio Pereira' ;# Ou: UPDATE Clientes SET telefone= '2222-2222' WHERE nome='Jos Pereira';#

Removendo Dados
Em um banco de dados, apagar dados de uma tabela significa eliminar um dado de uma determinada tabela. Para isto utilizamos a instruo DELETE. Na linguagem SQL, para apagar dados em uma determinada tabela, utilizamos a seguinte sintaxe: DELETE FROM Nome_Tabela [WHERE condio ];#

O comando Delete pode ser realizado sem o WHERE. Neste caso todas as linhas da tabela determinada sero excludas. Utilizamos WHERE quando desejamos eliminar os registros que obedeam certa condio. Exemplo: DELETE FROM Clientes;#

Neste caso so eliminados todos os registros da tabela Clientes. Ou: DELETE FROM Clientes WHERE nome='Jos Pereira';# Neste caso s sero eliminados os registros cujo campo nome seja igual a Jos Pereira. Os registros com nomes diferentes permanecero intactos.

Selecionando Dados
Em um banco de dados, selecionar dados significa efetuar uma consulta enviando o comando que retornar com as informaes solicitadas se existirem. Para efetuar estas consultas utilizamos o comando SELECT. Na linguagem SQL, para efetuar consultas , utilizamos a seguinte sintaxe: SELECT Nome_ campo FROM Nome_Tabela [WHERE condio];# O comando Select deve conter o nome do campo que deve ser retornado, de qual tabela e quando contm a clasula WHERE, as condies que o registro deve obedecer para retornar os valores. Quando desejamos trazer todos os campos utilizamos o asterisco (*). Exemplo: SELECT * FROM Clientes;#

Neste caso so trazidos todos os registros da tabela Clientes. Mas se, por exemplo, s quisermos trazer o nome e o telefone da tabela Clientes, utilizamos : SELECT nome, telefone FROM Clientes;#

Com o uso da clusula WHERE, podemos filtrar os registros que so retornados. Neste caso podemos por exemplo trazer apenas os registros cujo nome seja Jos da Silva: SELECT nome, telefone FROM Clientes WHERE nome='Jos da Silva' ;#

Ordenando e Agrupando Dados

Nas aulas anteriores, pudemos aprender como efetuar consulta ao banco de dados utilizando o comando SELECT. Os resultados retornados podem ser tratados de diversas formas, de maneira a se adequar s necessidades da consulta.

Ordenao
Podemos ordenar os resultados de uma consulta por um ou diversos campos de uma tabela.Na linguagem SQL, utilizamos o comando ORDER BY para efetuar esta ordenao: SELECT Nome_ campo FROM Nome_Tabela [WHERE condio ORDER BY Nome_campo [ASC|DESC]];# Exemplo: SELECT * FROM Clientes WHERE Salario>1000 ORDER BY Nome;# Neste caso so trazidos todos os registros da tabela Clientes cujo campo Salario seja maior do que 1000, sendo ordenado por nome. O ORDER BY normalmente efetua a ordenao em ordem crescente (isto , ascendente). No entanto podemos especificar se queremos que a ordenao seja em ordem crescente ou decrescente: SELECT * FROM Clientes WHERE Salario>1000 ORDER BY Nome ASC;# Neste caso os registros sero ordenados de forma ascendente por nome. SELECT * FROM Clientes WHERE Salario>1000 ORDER BY Nome DESC;# Neste caso os registros sero ordenados de forma descendente por nome.

Agrupamento
Podemos agrupar dados utilizando a clusula GROUP BY que permite unir em uma nica linha todas as linhas selecionadas que possuam os mesmos valores. Sua sintaxe : GROUP BY coluna1, coluna2, coluna3,...

Agregaes
As funes de agregao permitem tratar e retornar um resultado de vrias linhas de um campo de uma tabela.

Funes de Agregao
Sum
A funo Sum permite a soma de um campo numrico. Sua sintaxe : SELECT SUM(Nome_Campo) FROM Nome_tabela;#

Avg
A funo Avg retorna o valor mdio entre os conjuntos de valores de um campo numrico. Sua sintaxe : SELECT AVG(Nome_Campo) FROM Nome_tabela;#

Count
A funo Count conta a quantidade de dados de um campo dado. Sua sintaxe : SELECT COUNT(Nome_Campo) FROM Nome_tabela;#

Max
A funo Max retorna o maior valor encontrado entre os dados de um campo dado. Sua sintaxe : SELECT MAX(Nome_Campo) FROM Nome_tabela;#

Min
A funo Min retorna o menor valor encontrado entre os dados de um campo dado. Sua sintaxe : SELECT MIN(Nome_Campo) FROM Nome_tabela;#

Distinct
A funo Distinct no permite que valores iguais de uma mesma coluna sejam retornados. Sua sintaxe : SELECT DISTINCT(Nome_Campo) FROM Nome_tabela;#

Having
Conforme aprendemos anteriormente utilizamos a clusula WHERE quando queremos definir uma condio de retorno de um comando SELECT. No entanto a clusula WHERE determina os dados que sero agregados, e no podem definir as condies de retorno de uma agregao. Neste caso, utilizamos a clusula Having que seleciona grupos de linhas aps as agregaes e agrupamentos serem efetuados. Exemplo: SELECT Codigo,Max(Idade) FROM Cliente HAVING Max(Idade)<60;#

Junes
Em um banco de dados podemos ter duas ou mais tabelas relacionadas. comum ao elaborarmos uma consulta termos a necessidade de trazer dados de diferentes tabelas. Para criarmos esta seleo devemos definir os critrios de agrupamento para trazer estes dados. Estes critrios so chamados de Junes. Uma juno de tabelas criar uma pseudo-tabela derivada de duas ou mais tabelas de acordo com as regras especificadas, e que so parecidas com as regras da teoria dos conjuntos.

Juno de produto cartesiano


Uma juno de produto cartesiano uma juno entre duas tabelas que origina uma terceira tabela constituda por todos os elementos da primeira combinadas com todos os elementos da segunda. Para trazer apenas os campos necessrios da consulta: No SELECT utilizamos em vez do nome do campo simples,

o nome_tabela_campo.nome_campo; Em FROM utilizamos os nomes das tabelas que possuem os campos que queremos

trazer; Em WHERE determinamos a dependncia das tabelas, lembrando que a relao entre

as tabelas efetuada pela chave estrangeira.Desta forma o WHERE sempre especifica as chaves estrangeiras que ligam as tabelas. Como exemplo, vamos imaginar que possumos duas tabelas relacionadas: Cliente e Profissao. A tabela Profisso contm o cdigo e profisso armazenado: CREATE TABLE Profissao ( Codigo INT NOT NULL AUTO_INCREMENT, Cargo VARCHAR (60) NOT NULL, PRIMARY KEY (Codigo) );# A tabela Cliente armazena os dados pessoais do Cliente: CREATE TABLE Cliente ( Codigo INT NOT NULL AUTO_INCREMENT, Nome VARCHAR (60) NOT NULL, Data_Nascimento DATE, Telefone CHAR (8), Profissao INT, PRIMARY KEY (Codigo) ), FOREIGN KEY (Profissao) REFERENCES Profissao(Codigo);# Agora inserimos dados nestas tabelas. Em Profissao vamos inserir trs profisses bsicas: INSERT INTO Profissao VALUES (1,'Programador')

INSERT INTO Profissao VALUES (2,'Analista de BD') INSERT INTO Profissao VALUES (3,'Suporte') Possumos agora trs profisses com respectivos cdigos. Agora vamos inserir dados na tabela Cliente: INSERT INTO Cliente VALUES (1,'Joo Pereira',19820606,'12345678',1) INSERT INTO Cliente VALUES (2,'Jos Manuel',19750801,'21358271',2) INSERT INTO Cliente VALUES (3,'Maria Mercedes',19851001,'85412587',3) Para visualizarmos todos os dados contidos nas duas tabelas aps a insero dos dados, podemos utilizar: SELECT * FROM Cliente,Profissao;# Porm, se quisermos trazer apenas o Nome do Cliente e o seu Cargo, podemos fazer uma juno de produto cartesiano: SELECT Cliente.Nome,Profissao.Cargo FROM Cliente,Profissao WHERE Cliente.Profissao=Profissao.Codigo;# Nesta seleo, trazemos um campo de cada tabela aps o SELECT, mencionamos as tabelas de quais elas se originam no FROM, e no WHERE especificamos a ligao entre as tabelas. Note que Cliente.Profissao a chave estrangeira da tabela Cliente, que referencia diretamente a chave primria da tabela Profissao.

Juno Interna (Inner Join)


Uma Juno Interna caracterizada por uma seleo que retorna apenas os dados que atendem s condies de juno, isto , quais linhas de uma tabela se relacionam com as linhas de outras tabelas. Para isto utilizamos a clusula ON, que semelhante clusula WHERE. Podemos especificar duas formas diferentes de expressar esta juno: a explcita utiliza a palavra JOIN, enquanto a implcita utiliza ',' para separar as tabelas a combinar na clusula FROM do SELECT. Ento sempre gerado o produto cruzado do qual so selecionadas as combinaes que cumpram a clusula WHERE. necessrio ter algum cuidado quando se combinam colunas com valores nulos (NULL), j que o valor nulo no se combina com outro valor, ou outro valor nulo, exceto quando se agregam predicados como IS NULL ou IS NOT NULL. Como exemplo, a consulta seguinte traz todos os registros da tabela Cliente e encontra todas as combinaes com a tabela Profissao. A clusula JOIN compara os valores da coluna Profissao de Cliente com a coluna Codigo da Profissao. Quando no existe aos dados no atendem as condies especificadas, eles no so retornados. SELECT * FROM Cliente INNER JOIN Profissao

ON Cliente.Profissao=Profissao.Codigo;#

Juno Externa (Outer Join)


Uma Juno Externa uma seleo que no requer que os registros de uma tabela possuam registros equivalentes em outra. O registro mantido na pseudo-tabela se no existe outro registro que lhe corresponda. Este tipo de juno se subdivide dependendo da tabela do qual admitiremos os registros que no possuem correspondncia: a tabela esquerda, a direita ou ambas.

Left Outer Join


O resultado desta seleo sempre contm todos os registros da tabela esquerda (isto , a primeira tabela mencionada na consulta), mesmo quando no exista registros correspondentes na tabela direita. Desta forma, esta seleo retorna todos os valores da tabela esquerda com os valores da tabela direita correspondente, ou quando no h correspondncia retorna um valor NULL. Se por exemplo inserimos na tabela Cliente um Cliente que no possua valor em seu campo Profissao, ou possua um valor que no tem correspondente no Codigo na tabela Profisso, e efetuarmos a seleo com LEFT OUTER JOIN a seleo ser efetuada trazendo todos os dados da tabela Cliente, e os correspondentes na tabela Profissao, e quando no houver estes correspondentes, trar o valor NULL. SELECT DISTINCT * FROM Cliente LEFT OUTER JOIN Profissao ON Cliente.Profissao=Profissao.Codigo;#

Right Outer Join


Esta operao inversa anterior e retorna sempre todos os registros da tabela direita (a segunda tabela mencionada na consulta), mesmo se no existir registro correspondente na tabela esquerda. Nestes casos, o valor NULL retornado quando no h correspondncia. Como exemplo, imaginemos que possumos diversas Profisses com respectivos cdigos que no possuem correspondentes na tabela Clientes. Esta consulta traz todas estas Profisses mesmo que no haja esta correspondncia: SELECT * FROM Cliente RIGHT OUTER JOIN Profissao ON Cliente.Profissao = Profissao.Codigo;#

Full Outer Join


Esta operao apresenta todos os dados das tabelas esquerda e direita, mesmo que no possuam correspondncia em outra tabela. A tabela combinada possuir assim todos os

registros de ambas as tabelas e apresentar valores nulos para os registros sem correspondncia. SELECT * FROM Cliente FULL OUTER JOIN Profissao ON Cliente.Profissao=Profissao.Codigo;# Ou ainda: SELECT * FROM Cliente LEFT JOIN Profissao ON Cliente.Profissao=Profissao.Codigo UNION SELECT * FROM Cliente RIGHT JOIN Profissao ON Cliente.Profissao=Profissao.Codigo WHERE Cliente.Profissao IS NULL

Resumo
Juno de produto cartesiano uma juno entre duas tabelas que origina uma terceira tabela constituda por todos os elementos da primeira combinadas com todos os elementos da segunda. Juno Interna todas linhas de uma tabela se relacionam com todas as linhas de outras tabelas se elas tiverem ao menos 1 campo em comum Juno Externa uma seleo que no requer que os registros de uma tabela possuam registros equivalentes em outras Left Outer Join todos os registros da tabela esquerda mesmo quando no exista

registros correspondentes na tabela direita. Right Outer Join todos os registros da tabela direita mesmo quando no exista registros

correspondentes na tabela esquerda. Full Outer Join Esta operao apresenta todos os dados das tabelas esquerda e

direita, mesmo que no possuam correspondncia em outra tabela