Tarefa Orientada 11 Junção Interna



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

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

Tarefa Orientada 14 Subconsultas

Tarefa Orientada 13 Agrupamento e sumário de dados

Tarefa Orientada 16 Vistas

Tarefa Orientada 15 Manipulação de dados

Tarefa Orientada 19 Triggers

Tarefa Orientada 18 Procedimentos armazenados

Bases de Dados 2005/2006. Aula 5

Junções e Índices em Tabelas

Sistema de Informação de Licenciamento de Operações de Gestão de Resíduos

Consultas SQL Parte II

Comandos de Manipulação

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

BDII SQL Junção Revisão 8

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.

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

Prof.: Clayton Maciel Costa

Laboratório 4. Base de Dados II 2008/2009

Principais Instruções em SQL

Linguagem de Banco de Dados DML Exercícios

NOME SEXO CPF NASCIMENTO SALARIO

SQL UMA ABORDAGEM INTERESSANTE

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

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

Tarefa Orientada 6 Edição de Dados

Esta aplicação permite desempenhar tarefas relacionadas com o cálculo, análise e apresentação gráfica de dados, de uma forma rápida e eficaz.

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

Desenvolvimento de uma base de dados. Relação. Modelo lógico: SGBD relacional

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

Treinamento sobre SQL

Bem-vindo ao tópico sobre consultas no SAP Business One.

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

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

MANUAL DO UTILIZADOR

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

1. Ambiente de Trabalho

Tarefa Orientada 20 Cursores

Computadores e Sistemas de Informação. Bases de Dados Relacionais (linguagem SQL)

Introdução aos cálculos de datas

MICROSOFT ACCESS MICROSOFT ACCESS. Professor Rafael Vieira Professor Rafael Vieira

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

DML - SELECT Agrupando Dados

Utilização de Bases de Dados Piramidais no Desenvolvimento de um Sistema de Contabilidade Total

António Rocha Nuno Melo e Castro

Sistemas de Bases de Dados Relacionais Introdução ao SQL. Interrogações diversas sobre a Base de Dados Northwind

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

TENHA MAIS MÃO NAS SUAS CONTAS

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

Aplicações de Escritório Electrónico

Circular 05 de Janeiro de 2009 (última actualização 16 de Fevereiro de 2009)

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

1.264 Aula 7. Introdução ao SQL

Emissão de Recibos a Clientes e Avisos de Lançamento a Fornecedores

Structured Query Language (SQL) SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.

Structured Query Language (SQL)

LINGUAGEM SQL PARA CONSULTAS EM MICROSOFT ACCESS

Memória de aula Semanas 15 e 16

NOÇÕES ELEMENTARES DE BASES DE DADOS

LINGUAGEM SQL PARA CONSULTAS EM MICROSOFT ACCESS

Armazém Sistema de Recebimento SDR 006 LIBERTAÇÃO DO ESTOQUE USUÁRIO MANUAL DE TREINAMENTO. Versão 1.00

Microsoft Access. No Access, existem vários tipos de objectos: Tabelas. Consultas. Formulários Relatórios Macros Módulos

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1.

SQL (Structured Query Language)

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

Trabalhos Práticos. Programação II Curso: Engª Electrotécnica - Electrónica e Computadores

Lição 1 - Criação de campos calculados em consultas

Principais Comandos SQL Usados no MySql

Projeto de Banco de Dados

Engenharia de Software e Sistemas Distribuídos. Enunciado Geral do Projecto

MANUAL DO GESTOR DE FINANÇAS

Facturação Guia do Utilizador

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Programação III / Estruturas de Dados. Enunciado do Trabalho Prático

Introdução às Bases de Dados

MANUAL DO GESTOR DE FINANÇAS

Comandos DDL. id_modulo = id_m odulo

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

SAMUO APP: MANUAL DO ADMINISTRADOR

Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em

APROG - Civil. Excel. Técnicas de pesquisa de informação em tabelas. Instituto Superior de Engenharia do Porto

Orientação a Objetos

Universidade do Minho. Licenciatura em Engenharia Informática. Desenvolvimento de Sistemas de Software. Gere Com Saber

Aplicações de Escritório Electrónico

Introdução ao Excel. Principais fórmulas de Cálculo

4.1. UML Diagramas de casos de uso

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

Banco de Dados Microsoft Access: Criar tabelas

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Banco de Dados Microsoft Access: Criar tabelas. Vitor Valerio de Souza Campos

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

1. Lançamento em Contas Bancárias Liquidação de Clientes

Nome: n.º WEB Série 2B 2C 2D 2E Barueri, 17/08/2009 2ª Postagem Disciplina: Gerenciamento e Estrutura de Banco de Dados Professor: Márcio

Criação de relações. Joaquim Frias

Arquitecturas de Software Licenciatura em Engenharia Informática e de Computadores

Só Matemática O seu portal matemático FUNÇÕES

DESCONTO SIMPLES. Os títulos de crédito mais utilizados em operações financeiras são a nota promissória, a duplicata e a letra de câmbio.

Sistemas de Informação

Transcrição:

Tarefa Orientada 11 Junção Interna Objectivos: Junção Interna (INNER JOIN) Junção Interna A operação de junção interna (INNER JOIN) é utilizada para combinar colunas de duas ou mais tabelas. O resultado de uma consulta que contém uma operação INNER JOIN, inclui apenas os registos que satisfazem a(s) condição(ões) de junção. Uma condição de junção refere uma coluna da cada uma das tabelas envolvidas na junção e indica o modo como as colunas devem ser comparadas. Normalmente, utiliza-se o operador de igualdade para fazer a comparação dos valores das colunas usadas na condição de junção. Todavia, também se podem utilizar outros operadores relacionais. Na maior parte dos casos, a operação de junção interna entre tabelas é baseada no relacionamento entre a chave primária de uma tabela e uma chave forasteira da outra tabela. Contudo, também pode formular condições de junção baseando-se em relacionamentos não definidos na base de dados. A este tipo de relacionamentos dá-se comummente a designação de relacionamentos ad hoc. Microsoft SQL Server 2005 1

A seguir, apresenta-se a sintaxe explícita (SQL-92) para formular uma operação de junção interna. SELECT lista_colunas FROM tabela1 [INNER] JOIN tabela2 ON condição_de_junção1 [[INNER] JOIN tabela3 ON condição_de_junção2] [WHERE condições_de_pesquisa] [ORDER BY lista_de_ordenação] A cláusula SELECT descreve as colunas que irão ser incluídas no resultado da consulta. A cláusula FROM indica as tabelas que vão ser consultadas. São utilizadas as palavras-chave INNER JOIN e ON para especificar a operação de junção e a condição de junção, respectivamente. A palavra-chave INNER é opcional. A cláusula WHERE é opcional e especifica as condições de pesquisa que têm que se verificar para um registo ser incluído no resultado da consulta. Note que ao utilizar a cláusula WHERE para definir as condições de pesquisa e ao usar a cláusula FROM, juntamente com as palavras-chave INNER JOIN e ON, para especificar as condições de junção, está a tornar mais fácil a leitura a consulta. A cláusula ORDER BY é opcional e especifica o modo de ordenamento dos registos que constituem o resultado da consulta. Para definir uma ordenação decrescente, utilize a palavra-chave DESC a seguir ao nome da coluna pela qual quer ordenar os registos. Para definir uma ordenação crescente, pode utilizar a palavra-chave ASC a seguir ao nome da coluna pela qual quer Microsoft SQL Server 2005 2

ordenar os registos. Todavia, uma vez que essa é a situação predefinida, não é necessário colocar a palavra-chave ASC. Se as colunas usadas numa condição de junção tiverem o mesmo nome, tem que se identificar a tabela à qual cada coluna pertence. Para tal, utilize a sintaxe nometabela.nomecoluna. Note que pode formular operações de junção utilizando uma notação implícita. Voltaremos, mais tarde, a este assunto. EXEMPLOS 1 Formule, analise e execute as sete consultas a seguir apresentadas. 1.1 Consulta que devolve as facturas de cada fornecedor ordenadas pelo nome do fornecedor. SELECT Nome AS [Nome do Fornecedor], NúmeroFactura AS [Número da Factura] FROM Fornecedores INNER JOIN Facturas ON Fornecedores.IDFornecedor = Facturas.Fornecedor ORDER BY Nome A seguir, apresenta-se o resultado obtido. Microsoft SQL Server 2005 3

Utilize a cláusula WHERE para acrescentar condições de pesquisa a uma consulta. 1.2 Consulta que devolve o nome dos fornecedores, o número e a data das facturas, dos meses de Março e Abril de 2006, dos fornecedores Patinter e IBM. Os registos do resultado vão ser ordenados por ordem crescente do nome do fornecedor. SELECT Nome AS [Nome do Fornecedor], NúmeroFactura AS [Número da Factura], DataFactura AS [Data da Factura] FROM Fornecedores INNER JOIN Facturas ON Fornecedores.IDFornecedor = Facturas.Fornecedor WHERE Nome IN ('Patinter', 'IBM') AND DataFactura BETWEEN '2006-03-01' AND '2006-04-30' ORDER BY Nome A seguir, apresenta-se o resultado obtido. Pode associar nomes temporários (aliases) às tabelas indicadas na cláusula FROM. 1.3 Consulta que devolve os detalhes das facturas dos meses de Março e Abril de 2006. O resultado vai ser ordenado por ordem crescente da data da factura. SELECT NúmeroFactura, MontanteItem, DescriçãoItem AS [Descrição do Item] FROM Facturas INNER JOIN ItensFactura As DetalhesFactura ON Facturas.IDFactura = DetalhesFactura.IDFactura WHERE DataFactura BETWEEN '2006-03-01' AND '2006-04-30' ORDER BY DataFactura Microsoft SQL Server 2005 4

Note que ao definir um alias para uma tabela na cláusula FROM, deve usar sempre esse alias ao longo da consulta. Não pode utilizar o nome original da tabela. Apenas faz sentido utilizar um alias nesta situação se for para simplificar e clarificar a leitura da consulta. A seguir, apresenta-se o resultado obtido. Também pode incluir duas ou mais condições de junção numa consulta, através a utilização dos operadores lógicos AND e OR. No exemplo seguinte, é formulada uma junção entre as tabelas Facturas e ItensFactura, baseada em duas condições. 1.4 Consulta que devolve as facturas que contêm mais do que dois itens. SELECT NúmeroFactura, DataFactura, TotalFactura, MontanteItem FROM Facturas INNER JOIN ItensFactura As DetalhesFactura ON (Facturas.IDFactura = DetalhesFactura.IDFactura) AND (Facturas.TotalFactura > DetalhesFactura.MontanteItem) ORDER BY NúmeroFactura Microsoft SQL Server 2005 5

Esta consulta utiliza duas condições de junção. A primeira compara a chave forasteira da tabela ItensFactura com a chave primária correspondente da tabela Facturas. A segunda compara os valores do campo TotalFactura da tabela Facturas com os valores do campo MontanteItem da tabela ItensFactura. Apenas vão ser considerados os casos em que o valor do campo TotalFactura é superior ao valor do campo MontanteItem. O que significa que apenas as facturas que têm dois ou mais itens irão ser incluídas no resultado. A seguir, apresenta-se o resultado obtido. Note que a consulta anterior poderia ser reformulada, de modo a incluir a comparação dos valores dos campos TotalFactura e MontenteItem numa cláusula WHERE. 1.5 Consulta que devolve as facturas que contêm mais do que dois itens. SELECT NúmeroFactura, DataFactura, TotalFactura, MontanteItem FROM Facturas INNER JOIN ItensFactura As DetalhesFactura ON Facturas.IDFactura = DetalhesFactura.IDFactura WHERE Facturas.TotalFactura > DetalhesFactura.MontanteItem ORDER BY NúmeroFactura O resultado vai ser idêntico ao da consulta 1.4. Microsoft SQL Server 2005 6

Até ao momento apenas formulámos consultas com junções entre duas tabelas. Contudo, o SQL SERVER permite-lhe formular junções entre até 256 tabelas. Note, porém, que as operações de junção consomem bastantes recursos. Consequentemente, deve limitar o número de junções a realizar, sempre que possível. 1.6 Consulta que contém operações de junção entre quatro tabelas: Fornecedores, Facturas, ItensFactura e ContasBalanço. Cada operação de junção é baseada no relacionamento entre a chave forasteira de uma tabela com uma chave primária de outra tabela. Por exemplo, o campo ContaBalanço é chave forasteira na tabela ItensFactura e o campo NúmeroConta é chave primária na tabela ContasBalanço. SELECT Nome, NúmeroFactura, DataFactura, MontanteItem, DescriçãoItem FROM Fornecedores INNER JOIN Facturas ON Fornecedores.IDFornecedor = Facturas.Fornecedor INNER JOIN ItensFactura ON Facturas.IDFactura = ItensFactura.IDFactura INNER JOIN ContasBalanço ON ItensFactura.ContaBalanço = ContasBalanço.NúmeroConta WHERE TotalFactura - Pagamento - Crédito > 0 ORDER BY Nome, MontanteItem DESC A seguir, apresenta-se o resultado obtido. Para facilitar a compreensão da consulta anterior, considere que uma operação de junção entre várias tabelas pode ser vista como uma série de junções entre duas tabelas processadas da esquerda para a direita. É efectuada a junção entre as duas primeiras tabelas, resultando numa tabela temporária. Depois é realizada a operação de junção entre a tabela temporária e a próxima tabela, e assim sucessivamente. Por exemplo, no caso da consulta anterior, pode supor que é efectuada em primeiro lugar a junção entre a tabela Fornecedores e a tabela Facturas, resultando numa Microsoft SQL Server 2005 7

tabela temporária. Depois é efectuada a junção entre a tabela ItensFactura e a tabela temporária resultante da primeira operação de junção. Finalmente, é efectuada a junção entre a tabela ContasBalanço e a tabela temporária resultante da segunda operação de junção. Note, contudo, que as afirmações anteriores visam apenas a facilitação da compreensão da operação de junção entre várias tabelas. O SQL SERVER pode processar este tipo de junções exactamente do modo aqui explicitado. Em vez de formular a condição de junção na cláusula FROM, também pode fazê-lo na cláusula WHERE da consulta, juntamente com as condições de pesquisa. Deste modo, apenas necessita de especificar, na cláusula FROM, separadas por vírgulas, as tabelas sobre as quais pretende efectuar a operação de junção. A esta sintaxe, que era usada anteriormente à norma SQL-92, dá-se comummente a designação de sintaxe implícita. 1.7 Por exemplo, a consulta 1.1 pode ser formulada, de forma implícita, do seguinte modo. SELECT Nome AS [Nome do Fornecedor], NúmeroFactura AS [Número da Factura] FROM Fornecedores, Facturas WHERE Fornecedores.IDFornecedor = Facturas.Fornecedor ORDER BY Nome Naturalmente, o resultado será idêntico ao da consulta 1.1 As consultas formuladas através da sintaxe explícita, para a definição de operações de junção, são, normalmente, mais fáceis de interpretar do que as consultas formuladas recorrendo à sintaxe implícita, pelo facto de a sintaxe explícita permitir a separação da definição das condições de junção das condições de pesquisa. Note que se omitir a cláusula WHERE na consulta anterior, irá ser processado o produto cartesiano (também conhecido por cross join) entre as tabelas enunciadas na cláusula FROM da consulta. Adiante tornaremos a este assunto. Microsoft SQL Server 2005 8

QUESTÕES 2 Crie as seguintes consultas. 2.1 Crie uma consulta que devolva o nome do fornecedor, o número, a data de vencimento e o montante em dívida das facturas que ainda não estão completamente pagas. O resultado deve ser ordenado por ordem decrescente da data de vencimento das facturas. Resultado 2.2 Crie uma consulta que devolva o nome do fornecedor, o número, a data de vencimento, o total, o montante já pago, o crédito, o montante em dívida e a descrição das condições de pagamento das três facturas mais dispendiosas, cujas condições de pagamento são de 30 dias líquido. Resultado Microsoft SQL Server 2005 9

2.3 Construa uma consulta semelhante à consulta anterior que aumente ainda o grau de detalhe, acrescentado a descrição dos itens que compõem cada factura. Neste caso, interessa considerar todas as facturas que têm como condições de pagamento 60 dias líquidos. O resultado deve ser ordenado pelo número das facturas. Resultado Microsoft SQL Server 2005 10