BDII SQL Junção Revisão 8



Documentos relacionados
SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

f. Vocês podem selecionar todos os campos indicando-os, ou seja, sem usar * (boa prática) g. Muito relevante na manutenção de BD e de aplicações.

Memória de aula Semanas 15 e 16

Bases de Dados 2005/2006. Aula 5

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Banco de dados 1. Linguagem DML SQL Select Avançado. Professor: Victor Hugo L. Lopes

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

Banco de Dados I. Aula 9 - Prof. Bruno Moreno 20/09/2011

Junções e Índices em Tabelas

BDII SQL Junção Revisão 8

Comandos de Manipulação

Álgebra Relacional. OBS: as operações Seleção e Projeção são operações unárias porque atuam em relações únicas.

3) Palavra-chave distinct (select-from). Obter apenas os pibs distintos entre si.

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan

Introdução ao SQL. Aécio Costa

Tarefa Orientada 14 Subconsultas

Tarefa Orientada 12 Junção Externa, Auto-Junção e União

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

1. SQL Instrumental Select Delete Update Insert Group by Having Unnion All...

Modelo Relacional - Manipulação

Disciplina: Unidade III: Prof.: Período:

Prof.: Clayton Maciel Costa

Tarefa Orientada 11 Junção Interna

select nome from Médicos where codm in (select codm from Consultas where data = 06/06/13 )

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Introdução às Bases de Dados

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL. Carga horária: 32 Horas

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Projeto de Banco de Dados

Principais Instruções em SQL

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

SQL DML. Frederico D. Bortoloti

Linguagem de Banco de Dados DML Exercícios

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Prova de Fundamentos de Bancos de Dados 2 a Prova

Principais Comandos SQL Usados no MySql

Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. (

NOME SEXO CPF NASCIMENTO SALARIO

Treinamento sobre SQL

Principais Conceitos. Modelo Relacional representa o banco de dados como uma coleção de relações Tupla Atributos Relação Domínio

Structured Query Language (SQL)

Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

Programação SQL. INTRODUÇÃO II parte

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

SQL Avançado Continuação. Renata Viegas

EXERCÍCIOS PRÁTICOS. Banco de Dados

UNIVERSIDADE FEDERAL FLUMINENSE PÓLO UNIVERSITÁRIO DE RIO DAS OSTRAS FACULDADE FEDERAL DE RIO DAS OSTRAS CURSO DE CIÊNCIA DA COMPUTAÇÃO

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

Exercícios de Lógica Exercícios de Fixação 08

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Tarefa Orientada 16 Vistas

Tarefa Orientada 10 Obter informação a partir de uma tabela

Banco de Dados I. SQL SELECT Parte 1 - Básico. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Definida pelo American National Standard Institute (ANSI) em 1986

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

Banco de Dados. Conversão para o Banco de Dados SisMoura

Tarefa Orientada 13 Agrupamento e sumário de dados

LINGUAGEM DE BANCO DE DADOS

Prof. Daniela Barreiro Claro

Fernando Albuquerque - fernando@cic.unb.br. Bancos de Dados. Fernando Albuquerque fernando@cic.unb.br

SQL UMA ABORDAGEM INTERESSANTE

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

BANCO DE DADOS aula 6 álgebra relacional -

SISTEMAS DE BANCO DE DADOS. Prof. Adriano Pereira Maranhão

Tarefa Orientada 15 Manipulação de dados

O que são Bancos de Dados?

Processamento e Otimização de Consultas

Banco de Dados I Módulo II: Modelagem Entidade- Relacionamento versus Relacional. (Aula 3) Clodis Boscarioli

Subconsultas ou Consultas Aninhadas

Consultas SQL Parte II

Rápida revisão do Modelo Relacional

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

Múltiplas Tabelas. Disciplina de Banco de Dados

Exercícios. Exercícios

FEAP - Faculdade de Estudos Avançados do Pará PROFª LENA VEIGA PROJETOS DE BANCO DE DADOS UNIDADE V- SQL

Principais Instruções em SQL. Contidas nesta apostila as principais instruções em SQL para a manutenção em Bancos de Dados.

CIÊNCIA E TECNOLOGIA DO RIO

Roteiro. Modelo de Dados Relacional. Processo de Projeto de Banco de Dados. BCC321 - Banco de Dados I. Ementa. Posicionamento.

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

4.6. SQL - Structured Query Language

Este Procedimento Operacional Padrão explica a melhor forma de se utilizar os filtros no Sistema TOTVS RM. Índice

Projeto de Banco de Dados

Memória de aula Aulas 11 e 12

2013 GVDASA Sistemas Cheques 1

INNER, CROSS, LEFT, RIGHT E FULL JOINS SIMPLES ASSIM! Wellyngton Luiz Cruz Moreira wlcmoreira@hotmail.com

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Orientação a Objetos

Gabarito - Banco de Dados SQL - 30/07/2013 AULA 01

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Aplicações - SQL. Banco de Dados: Teoria e Prática. André Santanchè e Luiz Celso Gomes Jr Instituto de Computação UNICAMP Agosto de 2013

Transcrição:

exatasfepi.com.br BDII SQL Junção Revisão 8 André Luís Duarte Leais são as feridas feitas pelo amigo, mas os beijos do inimigo são enganosos. Provérbios 27:6

SQL Introdução Produto cartesiano Nomes alternativos (apelidos) Tipos de junção 08/08/2014 2

SQL Introdução Produto cartesiano Nomes alternativos (apelidos) Tipos de junção 08/08/2014 3

Introdução Vimos na álgebra relacional que quando necessitávamos combinar tuplas de várias relações para produzir um determinado resultado usávamos a operação produto cartesiano Essa operação nos permite combinar informações a partir de diversas relações e é representada pela (cruz) 08/08/2014 4

SQL Introdução Produto cartesiano Nomes alternativos (apelidos) Tipos de junção 08/08/2014 5

Produto cartesiano Em SQL o produto cartesiano é realizado quando colocamos na cláusula FROM mais de uma tabela separada por vírgula O resultado desse tipo de comando é a combinação de todas as linhas de uma tabela com todas as linhas da(s) outra(s) tabela(s) envolvidas 08/08/2014 6

Produto cartesiano Podemos realizar o produto cartesiano com qualquer quantidade de tabelas Devemos lembrar sempre que precisamos igualar o atributo em comum em cada tabela participante para poder remover o lixo gerado 08/08/2014 7

Exemplo SELECT * FROM cliente, agencia SELECT cpf, nome FROM cliente, agencia 08/08/2014 8

Exemplo SELECT cpf, nome FROM cliente, agencia Cada cpf aparece combinado com todas as agências Como cliente possui 996 linhas Agencia possui 10 linhas Resultado 996 * 10 = 9960 08/08/2014 9

Produto cartesiano O resultado de todo produto cartesiano sem predicado de junção gera muitas linhas que podem ser consideradas como lixo para a nossa pesquisa No exemplo anterior, o produto cartesiano está inutilizado pois não temos atributos em comum entre as tabelas para remover o lixo gerado 08/08/2014 10

Produto cartesiano Uma consulta mais útil seria saber o número da conta de cada cliente Poderíamos pensar na seguinte consulta: SELECT numero, cpf, pnome FROM cliente, pessoaconta WHERE cpf = cpf 08/08/2014 11

Produto cartesiano Vimos que a consulta não funcionou pois o SGBD não conseguiu resolver a ambiguidade do atributo cpf que está presente em ambas as tabelas Para resolver essa ambiguidade, devemos informar, para os atributos em comum, de qual tabela eles pertencem 08/08/2014 12

Produto cartesiano Para isso colocamos o nome da tabela antes do nome do atributo separado por um ponto SELECT numero, cliente.cpf, pnome FROM cliente, pessoaconta WHERE cliente.cpf = pessoaconta.cpf 08/08/2014 13

Exercícios de fixação Informe todas as contas e os respectivos titulares dos clientes entre 20 e 30 anos Informe quais contas pertencem à agência International Informe os números das transações realizadas pela conta de número 500 Informe quais os cpf dos clientes do gerente Carlos 08/08/2014 14

SQL Introdução Produto cartesiano Nomes alternativos (apelidos) Tipos de junção 08/08/2014 15

Nomes alternativos O SQL permite darmos apelidos (aliases) em duas situações Para tabelas Normalmente usada quando fizermos junções Para colunas Normalmente para dar nomes às nossas operações 16

Nomes alternativos para tabelas Em SQL podemos ter atributos com o mesmo nome desde que estejam em relações diferentes Quando precisamos juntar essas relações ocorre o problema de ambiguidade dos atributos Devemos qualificar o atributo prefixando o nome da tabela separado por um ponto 08/08/2014 17

Nomes alternativos para tabelas Quando o nome da relação é muito grande, temos a inconveniência de ter que repeti-la para remover ambiguidades Neste caso podemos dar um apelido para a relação através da palavra-chave (AS) 08/08/2014 18

Nomes alternativos para tabelas Exemplo: SELECT numero, cl.cpf, pnome FROM cliente AS cl, pessoaconta AS pc WHERE cl.cpf = pc.cpf 08/08/2014 19

Nomes alternativos para tabelas Outro uso muito comum é quando precisamos fazer o produto cartesiano de uma relação com ela mesma Verifique se existem homônimos no sistema Obs.: Pessoas homônimas possuem o mesmo nome (completo) 08/08/2014 20

Exemplo SELECT c1.cpf, c1.pnome FROM cliente AS c1, cliente AS c2 WHERE c1.pnome = c2.pnome AND c1.mnome = c2.mnome AND c1.unome = c2.unome 08/08/2014 21

Nomes alternativos para tabelas No primeiro caso não há na resposta, pois a consulta retornou 996 linhas que representam os 996 clientes existentes Se necessitássemos verificar se há homônimos considerando somente o primeiro e segundo nomes 08/08/2014 22

Exemplo SELECT c1.cpf, c1.pnome FROM cliente AS c1, cliente AS c2 WHERE c1.pnome = c2.pnome AND c1.mnome = c2.mnome 08/08/2014 23

Nomes alternativos para tabelas Considerando somente o primeiro e segundo nome, a consulta retornou 1046 linhas, ou seja, 50 linhas a mais que a primeira Queremos apresentar somente as 50 linhas cujos clientes são homônimos, para isso devemos considerar o cpf na comparação 08/08/2014 24

Exemplo SELECT c1.cpf, c1.pnome FROM cliente AS c1, cliente AS c2 WHERE c1.pnome = c2.pnome AND c1.mnome = c2.mnome AND c1.cpf <> c2.cpf 08/08/2014 25

Nomes alterativos para tabelas Os SGBD mais atuais permitem também omitirmos a palavra-chave (AS) Exiba o(s) nome(s) do(s) cliente(s) do gerente Carlos Joseph Elliott Na tabela gerente x clientegerente posso encontrar o cpf dos cliente de um gerente Na tabela gerente x clientegerente x cliente posso encontrar o nome dos clientes de um gerente 26

Exemplo SELECT pnome, cg.cpf FROM gerente gr, clientegerente cg WHERE gr.registro = cg.registro AND pnome = Carlos ; 27

Exemplo SELECT cl.pnome, gr.pnome FROM gerente gr, clientegerente cg, cliente cl WHERE gr.registro = cg.registro AND cl.cpf = cg.cpf AND gr.pnome = Carlos ; 28

Exercício de fixação Exiba uma lista com o número da conta e o nomes dos titulares ordenada pela conta Exiba uma lista com o número da conta, número da transação, valor da transação para as contas 311 e 546 Exiba o(s) nome(s) do(s) cliente(s) dos gerentes que moram em Maria da Fé 29

Exercício de fixação Exiba as contas corrente (tipo 1) da agência número 10 Existem transações realizadas pelo cliente Richard Aaron West? Procure um cliente que tenha realizado pelo menos uma transação 30

SQL Introdução Produto cartesiano Nomes alternativos (apelidos) Tipos de junção 08/08/2014 31

Junção A operação junção natural é uma operação binária que permite combinar certas seleções e um produto cartesiano em uma operação, é representada pelo símbolo O resultado é uma única tabela com o resultado das cláusulas definidas na junção 32

CROSS JOIN Se nenhuma condição é informada na cláusula WHERE, o produto cartesiano entre as tabelas será o resultado Se o(s) atributo(s) em comum forem igualados teremos como resultado o mesmo que o INNER JOIN Funciona da mesma forma como fizemos anteriormente ao separarmos as tabelas por vírgulas 33

Exemplo SELECT numero, c.cpf, pnome FROM cliente c CROSS JOIN pessoaconta p WHERE c.cpf = p.cpf AND c.cpf = 60276635969 34

CROSS JOIN A diferença básica entre o CROSS JOIN e INNER JOIN é que no caso do INNER JOIN a cláusula de junção pode ser indicada através da palavra chave ON Obs.: é uma boa prática de desenvolvimento colocar todo o predicado de junção na cláusula ON deixando a cláusula WHERE somente para filtrar a seleção desejada 35

MySQL O MySQL permite o uso da clausula ON no CROSS JOIN SELECT numero, c.cpf, pnome FROM cliente c CROSS JOIN pessoaconta p ON c.cpf = p.cpf WHERE c.cpf = 60276635969 36

Exercícios Exiba os dados do cliente dono da conta 866 e 2 Exiba a soma dos salários dos cliente que possuem conta corrente Exiba a soma de todas as transações realizadas pela agencia Bluejay 37

INNER JOIN O tipo default de junção é a junção interna (INNER JOIN) Combina (junta) a informação de duas ou mais tabelas aplicando um critério de comparação entre os valores de uma ou mais colunas 38

INNER JOIN Uma tupla é inserida na resposta somente se existir uma combinação nos valores em ambas as tabelas para o atributo envolvido No geral é o mesmo que JOIN Se usado o caractere * na projeção, todas as colunas (atributos) serão apresentados no resultado 39

INNER JOIN SELECT * FROM cliente c INNER JOIN pessoaconta p ON c.cpf = p.cpf WHERE c.pnome LIKE Andre% Obs.: a coluna cpf aparece duplicada no resultado, isto ocorre porque ela existe em ambas as tabelas 40

INNER JOIN SELECT c.cpf, CONCAT(pnome, ' ', mnome, ' ', unome), numero, dataabertura FROM cliente c INNER JOIN pessoaconta p ON c.cpf = p.cpf WHERE c.pnome LIKE 'Andre% ; 41

MySQL O MySQL permite o uso da palavra USING para indicar qual atributo será usado como predicado de junção Claro, que o atributo em comum nas tabelas devem ter o mesmo nome Obs.: usando a palavra USING o atributo em comum não aparece duplicado na consulta 42

INNER JOIN SELECT * FROM cliente c INNER JOIN pessoaconta p USING(cpf) WHERE c.pnome LIKE André%'; 43

Exercícios de fixação Exiba as transações dos cliente com cpf entre 11111111111 e 12111111111 Exiba a soma de todas as transações obtidas na consulta anterior Exiba todos os clientes da agência Fairview Exiba a soma de todas as transações da agencia Jackson 44

NATURAL JOIN Realiza uma junção natural, que é caracterizada pela criação de uma equijoin, condição equijunção (igualdade) implícita nos atributos em comum Como na junção usando a palavra USING, a NATURAL JOIN exibe o atributo em comum no inicio da projeção e remove a coluna duplicada 45

Otimização de consultas A cláusula ON não é otimizada para trabalhar com operadores lógicos AND, OR ou NOT Por isso, prefira construir uma cláusula ON para cada junção ao invés de uma única cláusula usando AND 46

Exemplo SELECT c.pnome, c.cpf, g.pnome FROM cliente c INNER JOIN pessoaconta pc INNER JOIN clientegerente cg INNER JOIN gerente g ON c.cpf = pc.cpf AND cg.cpf = c.cpf AND g.registro = cg.registro; 47

Exemplo SELECT c.pnome, c.cpf, g.pnome FROM cliente c INNER JOIN pessoaconta pc ON c.cpf = pc.cpf INNER JOIN clientegerente cg ON cg.cpf = c.cpf INNER JOIN gerente g ON g.registro = cg.registro; 48

NATURAL JOIN SELECT * FROM cliente c NATURAL JOIN clientegerente cg WHERE c.pnome LIKE 'Carlos%'; 49

NATURAL JOIN SELECT * FROM gerente g NATURAL JOIN clientegerente cg WHERE g.pnome LIKE 'Carlos%'; Explique o resultado obtido; 50

Exercício de fixação Mostre o número e o tipo da conta dos clientes que têm o primeiro nome igual a Carlos Selecione os gerentes responsáveis pelas contas do exemplo anterior Selecione todas as contas da agência número 5 Selecione as transações da agência do exemplo anterior 51

LEFT OUTER JOIN Quando realizamos junções internas (INNER JOIN) para que uma tupla seja inserida na resposta o valor do atributo no predicado de junção deve corresponder nas duas tabelas Quando precisamos que todas as tuplas sejam incluídas no resultado precisamos explicitar uma junção externa (OUTER JOIN) 52

LEFT OUTER JOIN Combina todas as tuplas da tabela à esquerda da junção com as tuplas cujos valores combinam na tabela a direita Suponha que precisamos criar um relatório como nome de todos os clientes que possuem o padrão André% no seu primeiro nome e suas respectivas contas, se possuírem 53

LEFT OUTER JOIN Execute a seguinte inserção: INSERT INTO cliente VALUES (12345678900, 'MG1234567', 'André', 'Luís', 'Duarte', '1982-01-01', 'andre@bol.com.br', 550413536622004, 'Rua A', 'Maria da Fé', 'MG', 37517000, 'M', 4856.53); 54

LEFT OUTER JOIN Para ter os dados dos clientes e sua conta precisamos realizar uma junção entre as tabelas cliente e pessoaconta SELECT cpf, pnome, numero FROM cliente c INNER JOIN pessoaconta p USING(cpf) WHERE c.pnome LIKE 'Andre%'; 55

LEFT OUTER JOIN Para que todos os clientes apareçam no resultado, independente de ter uma ocorrência do cpf em pessoaconta devemos ter uma junção externa SELECT cpf, pnome, numero FROM cliente c LEFT OUTER JOIN pessoaconta p USING(cpf) WHERE c.pnome LIKE 'Andre%'; 56

Exercícios de fixação Selecione os clientes que não possuem conta em nenhuma agência Exiba o número, o valor das transações e as contas e a data as quais estão relacionadas Exiba quais transações não estão relacionadas à nenhuma conta Exiba o quantidade e o valor total das transações que se encontram na situação anterior 57

RIGHT OUTER JOIN Combina todas as tuplas da tabela à direita da junção com as tuplas cujos valores combinam na tabela a esquerda Suponha que precisamos criar um relatório com todos os clientes que não possuem conta 58

RIGHT OUTER JOIN Para que todos os clientes apareçam no resultado, independente de ter uma ocorrência do cpf em pessoaconta devemos ter uma junção externa SELECT numero, c.cpf, c.pnome FROM pessoaconta pc RIGHT OUTER JOIN cliente c ON pc.cpf = c.cpf; 59

RIGHT OUTER JOIN SELECT numero, c.cpf, c.pnome FROM pessoaconta pc RIGHT OUTER JOIN cliente c ON pc.cpf = c.cpf WHERE pc.numero IS NULL; 60

Exercícios de fixação Exiba o número, o valor das transações e as contas e a data as quais estão relacionadas Exiba quais transações não estão relacionadas à nenhuma conta Exiba o quantidade e o valor total das transações que se encontram na situação anterior 61

FULL OUTER JOIN Combina o resultado obtido com LEFT OUTER JOIN e RIGHT OUTER JOIN Retorna todas as linhas existentes nas tabela envolvidas 62

MySQL O MySQL não implementa o FULL OUTER JOIN podemos usar várias abordagens para conseguir o comando, por exemplo: Realizar JOIN e UNION Realizar UNION ALL e junção de exclusão 63

UNION Usado para combinar o resultado de múltiplas seleções Se usado como UNION, todas as linhas duplicadas serão removidas Se usada com a opção ALL (UNION ALL) todas as linhas serão retornadas independente de serem duplicadas Os nomes das colunas da primeira seleção são usados como nome da coluna no resultado 64

Exemplo Exiba os nomes de todos os clientes de qualquer agência Código 1 SELECT * FROM cliente UNION SELECT * FROM gerente; 65

Exemplo Exiba os nomes de todos os clientes de qualquer agência Código 2 SELECT pnome, mnome, unome FROM cliente UNION SELECT pnome, mnome, unome FROM gerente; 66

MySQL No MySQL somente as relações envolvidas devem ter o mesmo grau Cuidado: como não existe a regra de mesmo domínio no MySQL, podemos realizar a união de qualquer tipo de dados SELECT cpf FROM cliente UNION SELECT pnome FROM gerente LIMIT 993,10; 67

Exercícios Exiba o primeiro nome de todas as pessoas cadastradas no banco sem repetições que tenham o primeiro nome iniciando com o caractere C no primeiro nome Exiba o primeiro nome de todas as pessoas cadastradas no banco com repetições que tenham o primeiro nome iniciando com o caractere C no primeiro nome 68

Exercícios Exiba nome completo de todas as pessoas cadastradas no banco que tenham o padrão ANDRE em qualquer parte do nome Exiba todos os números de contas e transações Exiba todos os números de contas corrente e transações depósito Realize um FULL OUTER JOIN entre as tabelas cliente e pessoaconta 69