Você está na página 1de 20

BD II - TADS

BD II - TADS
BD II - TADS

Relationship
BD II - TADS

Relationships are related information with each


other , but usually stored in different tables or in
some way in a related table with itself .

Relacionamentos são informações relacionadas


entre si, mas geralmente armazenadas em
diferentes tabelas ou de alguma forma em uma
tabela relacionada com ela mesma.
BD II - TADS

CREATE TABLE funcionario(


codigo_fun INTEGER PRIMARY KEY,
nome_fun VARCHAR(30)
);
BD II - TADS

CREATE TABLE dependente (


codigo_dep INTEGER PRIMARY KEY,
nome_dep VARCHAR(30),
codigo_fun INTEGER,
FOREIGN KEY (codigo_fun) REFERENCES funcionario(codigo_fun));

OU

CREATE TABLE dependente (


codigo_dep INTEGER PRIMARY KEY,
nome_dep VARCHAR(30),
codigo_fun INTEGER REFERENCES funcionario(codigo_fun));

* Obrigatoriamente a coluna codigo_fun deve ser PRIMARY KEY na tabela referenciada.


BD II - TADS

INSERT INTO funcionario VALUES (1,'PRIMEIRO


FUNCIONARIO');

INSERT INTO funcionario VALUES (2,'SEGUNDO


FUNCIONARIO');

INSERT INTO funcionario VALUES (3,'TERCEIRO


FUNCIONARIO');

SELECT * FROM funcionario;


BD II - TADS

INSERT INTO dependente VALUES (1,‘PRIMEIRO DEP’,1);

INSERT INTO dependente VALUES (2,‘SEGUNDO DEP’,1);

INSERT INTO dependente VALUES (3,'TERCEIRO DEP',2);

INSERT INTO dependente VALUES (4,'TESTE', 4);

SELECT * FROM dependente;


BD II - TADS

Integridade Referencial

DELETE FROM funcionario


WHERE codigo_fun = 1;
BD II - TADS

Um pouco de matemática para entender a


teoria dos conjuntos.
BD II - TADS

Combinação

Considere os conjuntos A e B e seus valores abaixo:


A = {1 ,2}
B = { 2, 3, 4}
Resultado da combinação:
1,2 1,3
1,4 2,2
2,3 2,4

Exemplo SQL:
SELECT * FROM a, b;
BD II - TADS

Junção Interna (inner join)


Junção considerando valores iguais em conjuntos diferentes.
Considere os conjuntos A e B e seus valores abaixo:
A = {1 ,2}
B = { 2, 3, 4}
Resultado da junção interna: 2 ,2
Exemplo SQL:
SELECT * FROM a, b WHERE a.x = b.y;
BD II - TADS

SELECT nome_fun, nome_dep


FROM funcionario, dependente;
Qual será o resultado ?
BD II - TADS

SELECT funcionario.codigo_fun,
funcionario.nome_fun,
dependente.nome_dep
FROM funcionario, dependente
WHERE funcionario.codigo_fun =
dependente.codigo_fun;
BD II - TADS

Apelidando tabelas

SELECT f.codigo_fun, f.nome_fun,


d.nome_dep
FROM funcionario f, dependente d
WHERE f.codigo_fun = d.codigo_fun;
BD II - TADS

SELECT f.nome_fun
FROM funcionario f
WHERE NOT EXISTS (SELECT * FROM
dependente d WHERE f.codigo_fun =
d.codigo_fun);

SELECT f.nome_fun
FROM funcionario f
WHERE EXISTS (SELECT * FROM dependente d
WHERE f.codigo_fun = d.codigo_fun);
BD II - TADS

SELECT f.nome_fun, count(*)


FROM funcionario f, dependente d
WHERE f.codigo_fun = d.codigo_fun
GROUP BY f.codigo_fun
ORDER BY f.codigo_fun;

* Ordem: WHERE → GROUP → ORDER


BD II - TADS

CREATE TABLE lanche (


cod_lanche INTEGER PRIMARY KEY,
descricao VARCHAR(30),
valor NUMERIC (8,2));

CREATE TABLE ingrediente (


cod_ing INTEGER PRIMARY KEY,
descricao VARCHAR(30));

CREATE TABLE ing_lan (


cod_lanche INTEGER REFERENCES lanche,
cod_ing INTEGER REFERENCES ingrediente);

*Modelo Conceitual ????


BD II - TADS

Qual o select correto para mostrar todos os


lanches e todos os seus ingredientes ?

SELECT l.descricao, i.descricao


FROM lanche l , ingrediente i, ing_lan il
WHERE l.cod_lanche = il.cod_lanche
AND i.cod_ing = il.cod_ing;
BD II - TADS

Exercício 3

Você também pode gostar