Operação de União JOIN Professor Victor Sotero 1 SGD.

44
Operação de União “JOIN” Professor Victor Sotero 1 SGD

Transcript of Operação de União JOIN Professor Victor Sotero 1 SGD.

Page 1: Operação de União JOIN Professor Victor Sotero 1 SGD.

Operação de União “JOIN”

Professor Victor Sotero

1SGD

Page 2: Operação de União JOIN Professor Victor Sotero 1 SGD.

JOIN

O “join” é uma operação de multi-tabelas• Select: o nome da coluna deve ser precedido pelo

nome da tabela, se mais de uma coluna na tabela especificada na cláusula “from” tiver o mesmo nome.

• From: duas ou mais tabelas listadas no comando “from” indicam ao SGBD que uma união é desejada.

• Where: colunas são comparadas; elas devem ter valores similares.

SGD 2

Page 3: Operação de União JOIN Professor Victor Sotero 1 SGD.

ALGUMAS OBSERVAÇÕES• Não precisam ter o mesmo tipo de dados; mas tem de ser

de um tipo que o SGBD automaticamente converta.

• Ex.:– (int, smallint, tinyint, decimal real or float);– (char, varchar, datetime and smalldatetime)

• Valores nulos nunca se unem• Colunas na condição de “join” não precisam ser definidas

na cláusula “select”.

SGD 3

Page 4: Operação de União JOIN Professor Victor Sotero 1 SGD.

SINTAXE SIMPLIFICADA

select [tabela].nome_de_coluna, [,...]from lista_de_tabelas[where condições_de_pesquisa]

Exemplo:select publishers.pub_id, titles.title_idfrom publishers, titleswhere publishers.pub_id = titles.pub_id

SGD 4

Page 5: Operação de União JOIN Professor Victor Sotero 1 SGD.

JOINS BASEADOS EM IGUALDADE

• Baseado em uma igualdade, entre os valores nas colunas especificadas:

Select produto.nome,vendas.codigoFrom produto, vendasWhere produto.data_chegada=vendas.data_saida;

SGD 5

Page 6: Operação de União JOIN Professor Victor Sotero 1 SGD.

JOINS BASEADOS EM IGUALDADE

• Utilizando o Join com order by

Select produto.nome,vendas.descricaoFrom produto, vendasWhere produto.data_chegada=vendas.data_saidaorder by produto.nome;

SGD 6

Page 7: Operação de União JOIN Professor Victor Sotero 1 SGD.

ALIASES

• Função para “apelidar” tabelas dentro do SQL:Ex.: 1- Select a.nome,d.nome

from aluno a, disciplina d where a.mat>30 and d.nome=‘BDD’;

2- select t.title_idfrom titles t,titleauthor tawhere t.title_id = ta.title_idand au_id = ‘409-56-7008’;

SGD 7

Quais os livros escritos pelo autor de código 409-56-7008?

Page 8: Operação de União JOIN Professor Victor Sotero 1 SGD.

JOINS BASEADOS EM NÃO IGUALDADE

• Operadores de comparação usados.• > maior que• < menor que• >= maior igual que• <= menor igual que

• Exemplo:select e.estado,a.Pnome,a.Snome,a.estadofrom editora e,autor awhere a.estado>e.estado and nome_editora="Editora abril";(Que autores moram num estado cujo o nome é alfabeticamente maior que o estado da editora “Editora Abril”?)

SGD 8

Page 9: Operação de União JOIN Professor Victor Sotero 1 SGD.

SELF JOINS

• Você pode utilizar o Join usando a mesma tabela, dando dois aliases, fazendo comparações dentro da mesma:

Ex.: select a1.Snome, a1.Pnomefrom autor a1, autor a2where a1.Snome=a2.Snome anda1.codigo!=a2.codigo;

SGD 9

Que autores possuem o mesmo sobrenome?

Page 10: Operação de União JOIN Professor Victor Sotero 1 SGD.

OUTER JOIN

• Seleção que só mostra se as linhas de uma tabela estão relacionadas(chave estrangeira) com a outra tabela.

• Exemplificando na vida real: Mostrar quais clientes tem algum pedido.

SGD 10

Page 11: Operação de União JOIN Professor Victor Sotero 1 SGD.

OUTER JOIN• Left outer join: são incluídas todas as linhas da tabela do

primeiro nome da tabela(a tabela mais a esquerda expressão)

• Right outer join: são incluídas todas as linhas da tabela do segundo nome da tabela (a tabela mais a esquerda)

• Ex.: Quais são os clientes que têm pedido e os que não têm?Select cliente.nome, pedido.codigo_cliente,pedido.num_pedidofrom cliente left outer join pedidoon cliente.codigo_cliente=pedido.codigo_cliente;

SGD 11

Page 12: Operação de União JOIN Professor Victor Sotero 1 SGD.

INDEX

• Uma índex no banco de dados, como o próprio nome sugere, é um índice que serve para organizar os dados e agilizar na pesquisa/consulta dos dados armazenado nas tabelas.

SGD 12

Page 13: Operação de União JOIN Professor Victor Sotero 1 SGD.

INDEX• Normalmente a criação de índex no banco de dados

segue o padrão ANSI, isso significa que o mesmo comando para criar uma índex em um determinado SGBD, pode ser usado em qualquer outro.

• Os índices são utilizados para encontrar registros com um valor específico de uma coluna rapidamente. Sem um índice o MySQL tem de iniciar com o primeiro registro e depois ler através de toda a tabela até que ele encontre os registros relevantes.

SGD 13

Page 14: Operação de União JOIN Professor Victor Sotero 1 SGD.

INDEX

• Normalmente você cria todos os índices em uma tabela ao mesmo tempo em que a própria tabela é criada com CREATE TABLE.

• Para colunas CHAR e VARCHAR, índices que utilizam apenas parte da coluna podem ser criados, usando a sintaxenome_coluna(length) para indexar os primeiros length() bytes de cada valor da coluna.

SGD 14

Page 15: Operação de União JOIN Professor Victor Sotero 1 SGD.

EXEMPLO DE CRIAÇÃO DE ÍNDEX

• Pode ser usado tanto no SQL SERVER, MySQL ou Oracle:– Índice na tabela tab_cliente, sendo que o campo

de pesquisa é cpf (numero do CPF)

• CREATE INDEX nome_do_indice on tab_cliente(cpf)

SGD 15

Page 16: Operação de União JOIN Professor Victor Sotero 1 SGD.

INDEX

• Exemplo de index para colunas do tipo char e varchar:– CREATE INDEX indice1 ON empregado

(nome(10));

Como a maioria dos nomes normalmente diferem nos primeiros 10 caracteres, este índice não deve ser muito menor que um índice criado com toda a coluna nome_empregado.

SGD 16

Page 17: Operação de União JOIN Professor Victor Sotero 1 SGD.

VERSÕES DO MYSQL COMPATÍVEIS

• Você só pode adicionar um índice em uma coluna que pode ter valores apenas se você estiver usando o MySQL Versão 3.23.2 ou mais novo e estiver usando os tipos de tabelas MyISAM, InnoDB, ou BDB.

SGD 17

Page 18: Operação de União JOIN Professor Victor Sotero 1 SGD.

INDEX• Normalmente para um melhor resultado de

performance, o ideal para criar índices são campos:– Que sejam chaves;

select nome_cliente from clientewhere cpf = 12345678910

– Campos que façam join com outras tabelas.

– Campos que sejam números (tipo: integer, numeric)

SGD 18

Page 19: Operação de União JOIN Professor Victor Sotero 1 SGD.

DROP INDEX

• DROP INDEX nome_indice ON nome_tabela

• DROP INDEX apaga o índice chamado nome_indice da tabela nome_tabela. DROP INDEX não faz nada nem versões do MySQL anteriores a 3.22.

SGD 19

Page 20: Operação de União JOIN Professor Victor Sotero 1 SGD.

RESTRIÇÕES UNIQUE• Você pode usar as restrições UNIQUE para ter certeza de que não

há valores duplicados digitados em colunas específicas que não participam de nenhuma chave primária. Embora a restrição UNIQUE e a restrição PRIMARY KEY impõem exclusividade, use a restrição UNIQUE em vez da restrição PRIMARY KEY quando for impor a exclusividade de uma coluna, ou uma combinação de colunas, que não seja uma chave primária.

• Ex.:– Create table empregado(

cod int not null,primary key(cod),nome varchar(45) unique not null);

SGD 20

Page 21: Operação de União JOIN Professor Victor Sotero 1 SGD.

CLÁUSULA DISTINCT

• Com exceção da chave primária, podem existir colunas que tenham valores repetitivos. Essa cláusula aplicada em uma consulta evita valores repetitivos dentro de uma consulta.– Ex.:

Select distinct nome from produto;

SGD 21

Page 22: Operação de União JOIN Professor Victor Sotero 1 SGD.

STORED PROCEDURES

• Stored procedures não retornam dados. Elas executam scripts no MySQL, que podem ser desde alterações da estrutura de tabelas, até migração de dados de uma tabela para outra, ou executar ações de acordo com os resultados de uma consulta.

SGD 22

Page 23: Operação de União JOIN Professor Victor Sotero 1 SGD.

STORED PROCEDURE

• Um dos novos recursos no MySQL 5.0ainda em versão alfa

• conjunto de comandos SQL que podem serarmazenados no servidor

• Aumento no desempenho: menos informaçãoenviada entre cliente/servidor

• Mais trabalho para o servidor• Chamados pela isntrução CALL;

SGD 23

Page 24: Operação de União JOIN Professor Victor Sotero 1 SGD.

MOTIVOS PARA UTILIZAR

• Clientes em diferentes linguagens

• Operações repetitivas

• Segurança

SGD 24

Page 25: Operação de União JOIN Professor Victor Sotero 1 SGD.

EXEMPLO DE STORED PROCEDURE

SGD 25

Page 26: Operação de União JOIN Professor Victor Sotero 1 SGD.

PROCEDURES

• Podem alterar dados:mysql> create procedure apagaPessoas () delete from pessoas;Query OK, 0 rows affected (0.00 sec)mysql> call apagaPessoas ();Query OK, 9 rows affected (0.00 sec)mysql> call pessoas ();Empty set (0.00 sec)

SGD 26

Page 27: Operação de União JOIN Professor Victor Sotero 1 SGD.

PROCEDIMENTO PARA EXIBIR A DATA E A HORA ATUAL

• CREATE PROCEDURE dataEhora() SELECT• CURRENT_TIMESTAMP;

SGD 27

Page 28: Operação de União JOIN Professor Victor Sotero 1 SGD.

Like e Not Like

• Só funcionam com colunas do tipo char;• Têm praticamente o mesmo funcionamento

que os operadores = e !=;• Sua vantagem é a utilizações dos símbolos:

– %: substitui uma palavra;– _: substitui um caracter.

SGD 28

Page 29: Operação de União JOIN Professor Victor Sotero 1 SGD.

Like e Not Like

• Exemplos:• Listar todos os produtos cujo nome comece

com Q.– Select codigo_produto, descricao_produto

from produtowhere descricao_produtolike ’Q_’;

SGD 29

Page 30: Operação de União JOIN Professor Victor Sotero 1 SGD.

Like e Not Like

• Mostrar os professores que tenham o primeiro nome João.

Select codigo,nomeFrom professorwhere nome like ‘João%’;

SGD 30

Page 31: Operação de União JOIN Professor Victor Sotero 1 SGD.

Like e Not like

• Exemplos:• Mostrar todos os produtos que tenham nomes

que comecem ou com J ou com Q.

– Select nome, codigo from produtoswhere nome like ‘[JQ]%’;

SGD 31

Page 32: Operação de União JOIN Professor Victor Sotero 1 SGD.

Operadores baseados em IS NULL e IS NOT NULL

• Mostrar os empregados que tenham seus salários cadastrados no sistema como NULO.– Select nome from empregado

where salario is null;Mostrar as disciplinas que tenham a carga horária

como não nulo.Select nome, codigo from disciplinaWhere carga_horaria is not null;

SGD 32

Page 33: Operação de União JOIN Professor Victor Sotero 1 SGD.

MAX e MIN

• Max: mostra o maior valor dentro de um campo em uma tabela;

• Min: mostra o menor valor de um campo dentro de uma tabela;

• Ex: Select min(salario_fixo),max(salario_fixo)From vendedor;

SGD 33

Page 34: Operação de União JOIN Professor Victor Sotero 1 SGD.

SUM

• Serve para fazer o somatório de todos os valores de uma coluna.

• Ex: select sum(quantidade)from item_pedidowhere codigo_produto=‘50’;

SGD 34

Page 35: Operação de União JOIN Professor Victor Sotero 1 SGD.

AVG

• Apresenta a média de uma coluna.• Exemplo:Qual a média dos salários fixos dos

vendedores?– Select AVG(salario_fixo)

from vendedor;

SGD 35

Page 36: Operação de União JOIN Professor Victor Sotero 1 SGD.

SGD 36

Page 37: Operação de União JOIN Professor Victor Sotero 1 SGD.

Trigger

• Um TRIGGER ou gatilho é um objeto de banco de dados, associado a uma tabela, definido para ser disparado, respondendo a um evento em particular;

• Tais eventos são os comandos da DML (Data Manipulation Language): INSERT, REPLACE, DELETE ou UPDATE.

SGD 37

Page 38: Operação de União JOIN Professor Victor Sotero 1 SGD.

Trigger

• Os TRIGGERS poderão ser disparados para trabalharem antes ou depois do evento.

• Usaremos a seguinte tabela para nossos testes

SGD 38

Page 39: Operação de União JOIN Professor Victor Sotero 1 SGD.

Trigger

• Baseados nessa tabela, podemos criar um trigger que seja executado antes ou depois de inserir algo na mesma;

• antes (BEFORE)

• depois (AFTER)

SGD 39

Page 40: Operação de União JOIN Professor Victor Sotero 1 SGD.

Sintaxe: Trigger

SGD 40

Page 41: Operação de União JOIN Professor Victor Sotero 1 SGD.

SGD 41

Page 42: Operação de União JOIN Professor Victor Sotero 1 SGD.

SGD 42

Page 43: Operação de União JOIN Professor Victor Sotero 1 SGD.

SGD 43

Page 44: Operação de União JOIN Professor Victor Sotero 1 SGD.

SGD 44