TLBD II. Continuação (04)

Documentos relacionados
Page 1. Prof. Constantino Jacob

TLBD II. Continuação

Banco de Dados I. Aula 16 - Prof. Bruno Moreno 04/11/2011

Prof. Dr. Joaquim Assunção Banco de Dados. SQL (parte 4) DDL Restrições

Programação em Banco de dados

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

Rápida revisão do Modelo Relacional

Introdução ao PostgreSQL

Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

SQL (Tópicos) Structured Query Language

Ana Cristina de Figueiredo Dornelas SQL E ORACLE 3ª. PARTE

BANCO DE DADOS GERENCIAL 1 A U L A 2

Roteiro. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

SQL BÁSICO. Luiz Antônio Vivacqua Corrêa Meyer

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Conceitos básicos. Funcionario SIAPE Nome Lotacao Cargo Salario Admissao

Banco de Dados I Introdução SQL

Banco de Dados 1 2º Semestre

A U L A 8 C O N S U L T A S U N I N D O D U A S O U M A I S T A B E L A S P A R T E 2

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 17. Escola Politécnica da Universidade de São Paulo

Utilizando o Postgres - comandos SQL para a manipulação de dados

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

INSERT INTO shop VALUES (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), (3,'D',1.25),(4,'D',19.95);

'%'! $!0" $ 8 ' %%! % '! $ $$% + ' %!%$/)!'4!+,"/)!)+,/)% *! +,"0''% * %$!*!$$ #!"%&%'%'%$! "94(# ' %'$%$$$%0%$%' *!% %%%'!**% > %% %%!31?

Banco de Dados II. Aula Prof. Diemesleno Souza Carvalho

Utilizando JOINS. Utilizar a cláusula WHERE para fazer seus JOINs (relacionamentos), limita os relacionamentos a apenas um tipo deles, o INNER JOIN.

Revisão Banco de Dados

AULA 8 EXEMPLOS CRIAR AS TABELAS PROPOSTAS NA AULA E INSERIR OS REGISTROS SUGERIDOS

SQL PostgreSQL. I Criação de Tabelas. Disciplina: SCC0241 Bases de Dados Professor: Eduardo Hruschka Estagiária PAE: Dayse de Almeida

A linguagem SQL

A Linguagem SQL. Introdução a Banco de Dados DCC 011

Join Sql. Vitor Vaz da Silva

Linguagem SQL. ENG1518 Sistemas de Informação Gerenciais Prof. Marcos Villas

Comandos de Manipulação

Revisão de Bancos de Dados

SIG: Sistemas de Informações Geográficas. Adaptado de Gilberto Câmara

Sistemas de Banco de Dados I. Escola Alcides Maya DDL - Introdução

Aula 11 SBD SQL Parte 3. Profa. Elaine Faria UFU

Á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:

Banco de Dados. Diego Silveira Costa Nascimento. 20 de março de Instituto Federal do Rio Grande do Norte

<Course name> <Lesson number>- #

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

SQL. Prof. Roger Cristhian Gomes

Linguagem de Consulta Estruturada (SQL)

Linguagem SQL (Parte II)

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

DML - SELECT JUNÇÕES (JOIN)

SQL PostgreSQL. I Criação de Tabelas. Disciplina: SCC0241 Bases de Dados Professor: Eduardo Hruschka Estagiária PAE: Dayse de Almeida

12.4 DER Mais sobre Cardinalidade DER Mais sobre Cardinalidade DER Mais sobre Cardinalidade DER Mais sobre Cardinalidade

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

INF1383 -Bancos de Dados

INDEX. Serve para organizar os dados e agilizar a pesquisa/consulta dos dados armazenado nas tabelas.

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 16. Escola Politécnica da Universidade de São Paulo

Junções e Índices em Tabelas

ALGEBRA RELACIONAL. Álgebra Relacional Conjunto básico de operações para o Modelo Relacional O resultado é uma relação

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

Prova de Fundamentos de Bancos de Dados 2 a Prova

Teste Exemplo Revisão da tentativa 1

A Linguagem SQL. Tecnologia de Base de Dados. MSc. Eugénio. Macumbe

Fundamentos de Banco de Dados Postgre com Sql

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

E-BOOK GUIA RÁPIDO DE SQL W W W. T R E I N A W E B.C O M. B R

Aula 7 SBD ER para Relacional. Profa. Elaine Faria UFU

MYSQL - PRIMEIROS COMANDOS CRIAÇÃCO DO BD E DAS TABELAS, INSERÇÃO E CONSULTA DE REGISTROS. create database [if not exists] <nome>

- SQL Linguagem de Manipulação de Dados

O JasperReports Studio é uma ferramenta de software que oferece um ambiente visual para criar relatórios para a plataforma Java. É open source.

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

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro

Operações da Álgebra Relacional Operadores Especiais da Álgebra Relacional Renomeação

Linguagem de Consulta - SQL

Crie a seguinte estrutura: Banco de Dados: Carros e duas tabelas: proprietários e veículos, conforme está abaixo e cadastre os mesmos dados:

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

BANCO DE DADOS Parte 4

CREATE TABLE Professor(Codigo int, Nome varchar(50), Endereco varchar(100), Telefone varchar(11), CONSTRAINT PK_Professor PRIMARY KEY(Codigo))

Laboratório de Banco de Dados II Aula 04. Prof. Érick de Souza Carvalho

SQL-99: Esquema de BD EMPRESA

Structured Query Language (SQL) Aula Prática

Introdução ao Banco de Dados. Banco de Dados

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

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

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

Comandos DDL. id_modulo = id_m odulo

Projeto de Banco de Dados

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

SQL Linguagem de Definição de Dados

Modelo Relacional + SQL (DDL) Material elaborado pela Prof. Karin Becker

saída durante o runtime Usando Functions de uma Única Linha para Personalizar Relatórios Mostrar as diferenças entre as functions SQL de uma única

Escola Secundária de Albufeira. Comandos MySQL. (Páginas Web Dinâmicas: PHP e MySQL) Carlos Nunes

Bases de Dados. Álgebra Relacional II Junções, agregações, vistas. P. Serendero,

SQL. Prof. Msc Denival A. dos Santos

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

PostgreSQL Desenvolvedor

Banco de Dados I. Aula 14 - Prof. Bruno Moreno 11/10/2011

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Transcrição:

TLBD II Continuação (04)

A figura abaixo resume as operações de junção: Junção de Tabelas

As junções horizontais atuam sobre linhas. Permite mostrar os dados que estão armazenados em diferentes tabelas como se estivessem armazenados numa única, desde que essas tabelas possuam um relacionamento entre si. A tabela resultado é construída a partir de uma das tabelas originais, acrescentando colunas da segunda tabela, o que corresponde a um crescimento horizontal. Junção horizontal

O produto cartesiano entre dois conjuntos é um terceiro conjunto constituído por todos os elementos do primeiro combinados com todos os elementos do segundo. Os comandos abaixo geram o produto cartesiano entre as tabelas EMP e DEP: Sintaxe antiga emp.empno, emp.enome, emp.deptno, dept.deptno, dept.dnome FROM emp, dept; Junção horizontal Produto cartesiano SQL99 emp.empno, emp.enome, emp.deptno, dept.deptno, dept.dnome FROM emp CROSS JOIN dept;

Usa uma comparação por igualdade entre a(s) coluna(s) comum(ns). Normalmente a(s) coluna(s) comum(ns) é(são) Foreign Key numa tabela e Primary Key ou Unique Key na outra. Pode ser vista como um produto cartesiano filtrado, pois exige que as linhas da tabela da esquerda tenham correspondente na tabela da direita, sendo o valor da coluna comum igual. O diagrama apresentado a seguir mostra como funciona a junção interna entre duas tabelas: Junção horizontal - Junção Interna

As tabelas EMP e DEPT possuem uma relação entre si, implementada através da coluna comum DEPTNO. Na tabela EMP sabemos qual o número do departamento em que o empregado trabalha. Na tabela DEPT sabemos o número, nome e localização desse departamento. Para juntar os dois conjuntos efetuamos uma JUNÇÃO horizontal das duas tabelas, usando uma igualdade de valores na coluna comum, como ilustrado nos exemplos abaixo: Sintaxe antiga emp.empno, emp.enome, emp.deptno, dept.deptno, dept.dnome, dept.loc FROM emp, dept WHERE emp.deptno=dept.deptno; SQL99 emp.empno, emp.enome, emp.deptno, dept.deptno, dept.dnome, dept.loc FROM emp INNER JOIN dept ON (emp.deptno=dept.deptno); A maioria das operações de junção são internas (INNER) pelo que a palavra reservada INNER é facultativa; Junção Interna - Cláusula ON

A cláusula USING está disponível na sintaxe SQL99 e pode ser usada em vez da cláusula ON sempre que a(s) coluna(s) usada(s) na junção tenha(m) o mesmo nome em ambas as tabelas. Esta cláusula pode ser usada mesmo que existam outras colunas com o mesmo nome em ambas as tabelas. Sintaxe antiga emp.empno, emp.enome, emp.deptno, dept.deptno, dept.dnome, dept.loc FROM emp, dept WHERE emp.deptno=dept.deptno; SQL99 emp.empno, emp.enome, deptno, dept.dnome, dept.loc FROM emp INNER JOIN dept USING (deptno); A cláusula USING obriga a que a(s) coluna(s) usada(s) na junção seja(m) referenciada(s) sem o nome da tabela a que pertence(m); Junção Interna - Cláusula USING

A cláusula NATURAL JOIN está disponível na sintaxe SQL99 e pode ser usada em vez da cláusula ON ou em vez da cláusula USING sempre que: A(s) coluna(s) usada(s) na junção tenha(m) o mesmo nome em ambas as tabelas; A(s) coluna(s) usada(s) na junção é(são) a(s) única(s) com o mesmo nome em ambas as tabelas; Sintaxe antiga emp.empno, emp.enome, emp.deptno, dept.deptno, dept.dnome, dept.loc FROM emp, dept WHERE emp.deptno=dept.deptno; SQL99 emp.empno, emp.enome, deptno, dept.dnome, dept.loc FROM emp NATURAL JOIN dept; A cláusula NATURAL JOIN obriga a que a(s) coluna(s) usada(s) na junção seja(m) referenciada(s) sem o nome da tabela a que pertence(m); Junção Interna NATURAL JOIN

Tabelas: CREATE TABLE locais ( LOCAL_ID NUMERIC(4) PRIMARY KEY, ENDERECO VARCHAR(40), CEP VARCHAR(9), CIDADE VARCHAR(30), ESTADO VARCHAR(2)) ENGINE=INNODB; CREATE TABLE departamentos ( DEPT_ID NUMERIC(4) PRIMARY KEY, DEPT_NOME VARCHAR(30), GERENTE_ID NUMERIC(6), LOCAL_ID NUMERIC(4)) ENGINE=INNODB; CREATE TABLE empregados ( EMP_ID NUMERIC(6) PRIMARY KEY, PNOME VARCHAR(20), UNOME VARCHAR(25), EMAIL VARCHAR(40), FONE VARCHAR(20), CONTRATADO DATE, EMPREGO_ID VARCHAR(10), SAL NUMERIC(8,2), COMISSAO_PCT NUMERIC(2,2), GERENTE_ID NUMERIC(6), DEPT_ID NUMERIC(4)) ENGINE=INNODB; Relacionamentos: ALTER TABLE empregados ADD CONSTRAINT fk1 FOREIGN KEY (DEPT_ID) REFERENCES departamentos (DEPT_ID); ALTER TABLE empregados ADD CONSTRAINT fk2 FOREIGN KEY (GERENTE_ID) REFERENCES empregados (EMP_ID); ALTER TABLE departamentos ADD CONSTRAINT fk1 FOREIGN KEY (LOCAL_ID) REFERENCES locais (LOCAL_ID); ALTER TABLE departamentos ADD CONSTRAINT fk2 FOREIGN KEY (GERENTE_ID) REFERENCES empregados (EMP_ID); Crie 3 tabelas e seus relacionamentos.

Tabelas: empregados: departamentos: locais: Insira tais dados nelas

Os relacionamentos criados possibilitam a junção entre as 3 tabelas exemplificada pelos comandos abaixo: Sintaxe antiga d.dept_id, d.dept_nome, l.cidade, l.estado FROM empregados e, departamentos d, locais l WHERE e.dept_id=d.dept_id AND d.local_id=l.local_id; ON d.dept_id, d.dept_nome, l.cidade, l.estado FROM empregados e INNER JOIN departamentos d ON (e.dept_id=d.dept_id) INNER JOIN locais l ON (d.local_id=l.local_id); Junção com mais de duas tabelas

Os relacionamentos criados possibilitam a junção entre as 3 tabelas exemplificada pelos comandos abaixo: USING dept_id, d.dept_nome, l.cidade, l.estado FROM empregados e INNER JOIN departamentos d USING (dept_id) INNER JOIN locais l USING (local_id); NATURAL JOIN Não é possível porque a coluna GERENTE_ID é comum a empregados e a departamentos e não é usada na cláusula de junção deste relacionamento Junção com mais de duas tabelas

Observações: Na maior parte das situações é válido o seguinte principio: se há n tabelas temos que usar n-1 condições de junção. Esta regra não é válida quando existe mais que uma relação entre duas tabelas; Cada relacionamento entre duas tabelas exige uma condição de junção. A condição de junção deve incluir todas as colunas usadas na junção; Junção com mais de duas tabelas

O facto de efetuarmos uma junção entre duas tabelas não impede que se faça um filtro das linhas. O exemplo abaixo mostra como: Sintaxe antiga d.dept_id, d.dept_nome FROM empregados e, departamentos d WHERE e.dept_id=d.dept_id AND e.pnome LIKE 'R%'; ON d.dept_id, d.dept_nome FROM empregados e INNER JOIN departamentos d ON (e.dept_id=d.dept_id) WHERE e.pnome LIKE 'R%'; A cláusula de junção e a cláusula de filtro

O facto de efetuarmos uma junção entre duas tabelas não impede que se faça um filtro das linhas. O exemplo abaixo mostra como: USING d.dept_id, d.dept_nome FROM empregados e INNER JOIN departamentos d USING (dept_id) WHERE e.pnome LIKE '%r%'; NATURAL JOIN Não é possível porque a coluna GERENTE_ID é comum a Empregados e a Departamentos e não é usada na cláusula de junção deste relacionamento A cláusula de junção e a cláusula de filtro

A junção externa é uma extensão da junção interna. Por exemplo: Considerando apenas o relacionamento "Trabalha Em" verificamos que um empregado pode não ter um departamento atribuído, assim como um departamento pode não ter empregados atribuídos. Os empregados que não têm departamento e os departamentos que não têm empregados não aparecem no resultado de uma junção interna, mas aparecem na junção externa. Junção externa

A junção externa à esquerda estende o resultado da junção interna, pois mostra todas as linhas que são devolvidas pela junção interna e acrescenta as linhas da tabela da esquerda que não têm correspondência na tabela da direita. A junção envolve sempre duas tabelas, sendo a da esquerda a que primeiro aparece no comando. O diagrama apresentado a seguir mostra como funciona este tipo de junção: Junção externa à esquerda

Os comandos apresentados a seguir mostram como fazer a junção externa à esquerda entre as tabelas empregados e departamentos. Esta operação vai mostrar as linhas obtidas pela junção interna, acrescida dos empregados que não têm um departamento atribuído, o que é possível porque a coluna DEPT_ID em empregados suporta valores nulos: ON d.dept_id, d.dept_nome FROM empregados e LEFT JOIN departamentos d ON (e.dept_id=d.dept_id); USING dept_id, d.dept_nome FROM empregados e LEFT JOIN departamentos d USING (dept_id); *Natural Join: Não aplicável Junção externa à esquerda

A junção externa à direita funciona da mesma forma que a junção externa à esquerda, mas mostra as linhas da tabela da direita que não têm correspondência com linhas da tabela da esquerda. Este resultado pode ser obtido por uma junção à esquerda trocando a ordem das colunas. O diagrama apresentado a seguir descreve o funcionamento deste tipo de junção: Junção externa à direita

Os comandos apresentados a seguir mostram como fazer a junção externa à direita entre as tabelas empregados e departamentos. Esta operação vai mostrar as linhas obtidas pela junção interna, acrescida dos departamentos que não têm um empregado atribuído: ON d.dept_id, d.dept_nome FROM empregados e RIGHT JOIN departamentos d ON (e.dept_id=d.dept_id); USING d.dept_id, d.dept_nome FROM empregados e RIGHT JOIN departamentos d USING (dept_id); *Natural Join: Não aplicável Junção externa à direita

Os comandos apresentados a seguir mostram como fazer a junção externa FULL entre as tabelas empregados e departamentos: ON d.dept_id, d.dept_nome FROM empregados e RIGHT JOIN departamentos d ON (e.dept_id=d.dept_id); USING d.dept_id, d.dept_nome FROM empregados e RIGHT JOIN departamentos d USING (dept_id); *Natural Join: Não aplicável Junção externa à direita

Continua...