CryptoMoedas

Desenvolvido por Investing.com

RL Info News - Tecnologia e Informação Feeds

quinta-feira, 16 de agosto de 2012

Curso Linguagem SQL, Lição 04


Lição 04 - Modificação do banco de dados e criação de relações

Modificação do banco de dados e criação de relações
Em um banco de dados é permitida não só a consulta mas também a inserção, remoção e atualização dos dados.

Inserindo dados
Para inserir dados no banco você deve especificar qual tabela receberá os dados. Informar o atributo que receberá o dados não é obrigatório mas se não for informado os dados inseridos devem estar na ordem em que os atributos estão no banco.

Vamos analisar os exemplos seguintes:
insert into filme
values("Titanic", "Leonardo DiCaprio", "Fulano de Tal", "romance", 8, 1, 190)
insert into filme (duracao, copia, idade, genero, diretor, ator_principal, nome)
values(190, 1,8, "romance","Fulano de Tal", "Leonardo DiCaprio", "Titanic")

Veja que nos dois exemplos insere-se os mesmo dados mas no segundo exemplo não precisa-se respeitar a ordem dos atributos no banco pois estão sendo informados os atributos que receberão os dados.
Dentro de uma operação de inserção pode ser utilizada uma pesquisa para achar as tuplas que deve ser inseridos dados.
Suponha que todos os dependentes serão transformados em clientes, então serão inseridos na tabela cliente todos os dependentes que se encontram na tabela associados.

insert into cliente
select nome, "Avenida Teste" , CPF, NULL, NULL
from associado

Removendo dados
Para remover dados de uma tabela utiliza-se em SQL o delete from. No exemplo a seguir, removeremos todos os filmes cadastrados no banco que tenham duração maior que 120 minutos.

delete from filme
where duracao>120

Como no insert, é possível utilizar uma cláusula select embutida ao delete. Vamos excluir todos os filmes que foram alugados por clientes e que tinham como data de devolução o dia 12/10/2006.

delete from filme
where nome in (select nome_filme from aluguel where data_devolucao = "12/10/2006")

Atualizando dados
Quando deseja-se atualizar os dados de uma tabela usamos o update e o set para informar qual dado será atualizado e como. Observe o exemplo a seguir:

update aluguel
set data_devolucao = "12/01/2007"
where data_devolucao = "11/01/2007"

Nesse exemplo modificaremos todos os aluguéis que deveriam ser devolvidos no dia "11/01/2007" para o dia "12/01/2007".

Criando relações
Para compor relações, tomam-se duas relações e o resultado é outra relação. Para realizar uma junção selecionamos o tipo de junção, que representa como as tuplas que não tem relação com nenhuma outra tupla aparecerão na relação, e selecionamos também uma condição de junção, selecionando quais tuplas das duas relações têm correspondência e quais tuplas aparecerão no resultado na junção.
Vamos estudar os seguintes tipos de junção: inner join, left outer join, right outer join, full outer join. Como condição de junção temos:natural, on e using.

Nas junções do tipo outer é obrigatório o uso de uma condição de junção, já no inner é opcional. As condições on e using aparecem depois do tipo de junção, enquanto a condiçãonatural aparece antes.
A condição on costuma ser a mais utilizada pois é bem parecida com a cláusula where. Um par de linhas será correspondente se a expressão da condição on for verdadeira.

A cláusula using é bem parecida com a on. Você informa a coluna e o nome das tabelas e ele vai pesquisar a coluna que tem o mesmo nome da que você informou. O resultado sai de forma reduzida, sem a repetição das colunas que são iguais.
Já a cláusula natural é mais resumida que a using. Essa cláusula comparará todas as colunas de nome igual das duas tabelas.

Vamos agora verificar os tipos de junção:
Inner join
Esta junção retorna todos os pares com correspondentes de linhas nas duas tabelas e descartam as linhas sem correspondentes de ambas as tabelas.
Vamos utilizar como exemplo as seguintes tabelas:

cliente
nome
CPF
codigo
Ana Maria
002.123.234-45
0001
Joao da Silva
456.789.987-22
0002
Maria Costa
123.456.789-99
0003


aluguel
codigo_cliente
nome_filme
0001
Titanic
0001
Romeu e Julieta
0002
A Família Adams

Select *
from cliente inner join aluguel on
cliente.codigo = aluguel.codigo_cliente

Ao realizar o inner join anterior teremos como resultado a seguinte relação:
nome
CPF
codigo
codigo_cliente
nome_filme
Ana Maria
002.123.234-45
0001
0001
Titanic
Ana Maria
002.123.234-45
0001
0001
Romeu e Julieta
Joao da Silva
456.789.987-22
0002
0002
A Família Adams


Ele relaciona as duas tabelas pelo código, e o cliente que não tá relacionado nas duas é desconsiderado na relação resultante.

Outer join
É a seleção em que são restritas as linhas que interessam em uma tabela, mas são consideradas todas as linhas de outra tabela. Ou seja, queremos ver quais linhas de uma tabela estão relacionadas com a outra tabela e quais as linhas não estão.
- left outer join - São incluídas todas as linhas da primeira tabela na expressão;
- right outer join - São incluídas todas as linhas da segunda tabela na expressão;
- full outer join - São incluídas todas as linhas de ambas as tabelas, as que satisfazem a expressão e as que não satisfazem.

Usando o right outer join, no exemplo anterior, não haveria mudança no resultado. Usando o left outer join e o full outer join o resultado seria o seguinte:

nome
CPF
codigo
codigo_cliente
nome_filme
Ana Maria
002.123.234-45
0001
0001
Titanic
Ana Maria
002.123.234-45
0001
0001
Romeu e Julieta
Joao da Silva
456.789.987-22
0002
0002
A Família Adams
Maria Costa
123.456.789-99
0003
NULL
NULL


Como pode-se ver observando o resultado, as relações do exemplo anterior continuam a aparecer mas é adicionado o cliente que não tinha nenhum aluguel e por isso não aparecia. Usando o right outer join não teríamos mudança no resultado pois nenhuma tupla da segunda tabela ficou de fora do resultado.
Outro exemplo
Vamos agora mostrar um exemplo usando using e natural para deixar os conceitos bem claros:
Considere as tabelas do exemplo anterior, mas agora a coluna codigo_cliente da tabelaaluguel chama-secodigo. Assim usando using e natural teremos resultados.

Select *
from cliente inner join aluguel using
(codigo_cliente)
select *
from cliente naturalinner join aluguel

No primeiro exemplo mostramos como usar o using, informamos o nome das duas tabelas e o nome da coluna que será pesquisada. Já no segundo, você informa apenas o nome das tabelas e ele procura entre todas as tabelas as de mesmo nome.
Tome muito cuidado ao usar a cláusula natural pois se, por exemplo, na tabela aluguel, a coluna código referi-se ao código do filme alugado teríamos um grande problema. Seriam duas colunas de nomes iguais mas que se referem a coisas diferentes, uma ao código do cliente e a outra ao código do filme.


Exercício
Com base nos conteúdos já estudados, crie duas tabelas a relação entre as tabelas.

Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC

Nenhum comentário:

Postar um comentário