• Nenhum resultado encontrado

<Course name> <Lesson number>- #

N/A
N/A
Protected

Academic year: 2021

Share "<Course name> <Lesson number>- #"

Copied!
5
0
0

Texto

(1)

Exibindo Dados de Várias Tabelas

4-2

Obtendo Dados de Várias Tabelas

EMPLOYEES DEPARTMENTS

4-3

Produtos Cartesianos

Um produto cartesiano será formado quando:

Uma condição de junção for omitida.

Uma condição de junção for inválida.

Todas as linhas da primeira tabela forem unidas a todas as linhas da segunda tabela.

Para evitar um produto Cartesiano, sempre inclua uma condição de junção válida em uma cláusulaWHERE.

4-4

Gerando um Produto Cartesiano

Produto cartesiano:

20x8=160 linhas

EMPLOYEES (20 linhas) DEPARTMENTS (8 linhas)

Unindo Tabelas

Usar uma junção para consultar dados de uma ou mais tabelas.

Crie uma condição de junção na cláusulaWHERE.

Coloque o nome da tabela antes do nome da coluna quando aparecer o mesmo nome de coluna em mais de uma tabela.

SELECT tabela1.coluna, tabela2.coluna FROM tabela1, tabela2

WHERE tabela1.coluna1 = tabela2.coluna2;

O Que é uma Eqüijunção?

EMPLOYEES DEPARTMENTS

Chave estrangeira

Chave primária

(2)

4-7

SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id

FROM employees, departments

WHERE employees.department_id = departments.department_id;

Recuperando Registros com Eqüijunções

4-8

Qualificando Nomes de Colunas Ambíguos

Use prefixos de tabela para qualificar nomes de colunas que estão em várias tabelas.

Melhore o desempenho usando prefixos de tabela.

Diferencie colunas que possuem nomes idênticos, mas que residam em tabelas diferentes usando apelidos de coluna.

4-9

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id

FROM employees e, departments d WHERE e.department_id = d.department_id;

Usando Apelidos de Tabela

Simplifique consultas usando apelidos de tabela.

Melhore o desempenho usando prefixos de tabela.

4-10

Unindo Mais de Duas Tabelas

EMPLOYEES DEPARTMENTS LOCATIONS

Para unir n tabelas, é necessário um mínimo de n-1 condições de junção. Por exemplo, para unir três tabelas, é necessário um mínimo de duas junções.

4-11

Autojunções

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

MANAGER_IDna tabelaWORKERé igual a EMPLOYEE_IDna tabelaMANAGER.

4-12

Unindo uma Tabela a ela Mesma

SELECT worker.last_name || ' works for '

|| manager.last_name

FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id ;

(3)

4-13

Unindo Tabelas Usando a Sintaxe SQL: 1999

Usar uma junção para consultar dados de uma ou mais tabelas.

SELECT tabela1.coluna, tabela2.coluna FROM tabela1

[CROSS JOIN tabela2] | [NATURAL JOIN tabela2] |

[JOIN tabela2 USING (nome_coluna)] | [JOIN tabela2

ON(tabela1.nome_coluna = tabela2.nome_coluna)] | [LEFT|RIGHT|FULL OUTER JOIN tabela2

ON (tabela1.nome_coluna = tabela2.nome_coluna)];

4-14

Criando Junções Híbridas

A cláusulaCROSS JOINcria o produto híbrido de duas tabelas.

Esse processo equivale ao produto cartesiano entre as duas tabelas.

SELECT last_name, department_name FROM employees

CROSS JOIN departments ;

4-15

Criando Junções Naturais

A cláusulaNATURAL JOINbaseia-se em todas as colunas com o mesmo nome nas duas tabelas.

Ela seleciona linhas das duas tabelas que têm valores iguais em todas as colunas correspondentes.

Se as colunas com os mesmos nomes tiverem tipos de dados diferentes, será retornado um erro.

4-16

SELECT department_id, department_name, location_id, city

FROM departments NATURAL JOIN locations ;

Recuperando Registros com Junções Naturais

Criando Junções com a Cláusula USING

Se várias colunas tiverem os mesmos nomes mas se os tipos de dados não forem correspondentes, a cláusulaNATURAL JOINpoderá ser modificada com a cláusulaUSINGpara especificar as colunas que devem ser usadas em uma eqüijunção.

Usar a cláusulaUSINGpara estabelecer a correspondência com apenas uma coluna quando mais de uma coluna for correspondente.

Não usar um apelido ou nome de tabela nas colunas às quais foram feitas referências.

As cláusulasNATURAL JOINe USINGsão mutuamente excludentes.

SELECT e.employee_id, e.last_name, d.location_id FROM employees e JOIN departments d USING (department_id) ;

Recuperando Registros com a Cláusula USING

(4)

4-19

Criando Junções com a Cláusula ON

A condição da junção natural é basicamente uma eqüijunção de todas as colunas com o mesmo nome.

Para especificar condições arbitrárias ou colunas a serem unidas, é usada a cláusulaON.

A condição de junção é separada de outras condições de pesquisa.

A cláusulaONfacilita a compreensão do código.

4-20

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id

FROM employees e JOIN departments d ON (e.department_id = d.department_id) ;

Recuperando Registros com a Cláusula ON

4-21

Criando Junções Triplas com a Cláusula ON

SELECT employee_id, city, department_name FROM employees e

JOIN departments d

ON d.department_id = e.department_id JOIN locations l

ON d.location_id = l.location_id;

4-22

Junções INNER Versus OUTER

Na sintaxe SQL: 1999, a junção de duas tabelas que retorna apenas linhas correspondentes é uma junção interna.

Uma junção entre duas tabelas que retorna os resultados da junção interna assim como linhas não correspondentes em tabelas esquerdas (ou direitas) é uma junção externa esquerda (ou direita).

Uma junção entre duas tabelas que retorna os resultados de uma junção interna assim como os resultados de uma junção esquerda ou direita é uma junção externa completa.

4-23

SELECT e.last_name, e.department_id, d.department_name FROM employees e

LEFT OUTER JOIN departments d

ON (e.department_id = d.department_id) ;

LEFT OUTER JOIN

4-24

SELECT e.last_name, e.department_id, d.department_name FROM employees e

RIGHT OUTER JOIN departments d

ON (e.department_id = d.department_id) ;

RIGHT OUTER JOIN

(5)

4-25

SELECT e.last_name, e.department_id, d.department_name FROM employees e

FULL OUTER JOIN departments d

ON (e.department_id = d.department_id) ;

FULL OUTER JOIN

4-26

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id

FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149 ;

Condições Adicionais

4-27

Exercício

Lista 3

Referências

Documentos relacionados

Com base nos 16 artigos selecionados para revisão de dados, 87,5% dos estudos apresentaram resultado insatisfatório em alguma parte da análise microbiológica da

Essa separação também encontraria justificativa na própria concepção da jurisdição, como atividade secundária do Estado. Somente nos casos em que os litigantes não

De novo, em 2014, os elementos característicos do Salone del Gusto (produtores, Laboratórios do Gosto, Fortalezas, instituições) e comunidades do alimento, acadêmicos, cozinheiros

As seguintes recomendações para contolo de exposição e protecção pessoal destinam-se ao fabrico, formulação e embalamento do produto.. 8.2 Controlo

Como no processo travelling grate o leito é estático, a queima se dá do topo para o fundo e após esta fase há a pós queima, onde não há aporte de calor proveniente

• Quando o navegador não tem suporte ao Javascript, para que conteúdo não seja exibido na forma textual, o script deve vir entre as tags de comentário do HTML. &lt;script Language

Médias na vertical seguidas pela mesma letra não diferem entre si pelo teste de Tukey a 5% de probabilidade, com coeficiente de variação de 25,53%.. Comprimento (mm) de frutos

Como eles não são caracteres que possam ser impressos normalmente com a função print(), então utilizamos alguns comandos simples para utilizá-los em modo texto 2.. Outros