Arquivos de Categoria: Algebra Relacional

Banco de Dados I – Aula 13A

RELACIONANDO SQL COM ALGEBRA RELACIONAL

SCRIPT A SER EXECUTADA NO ORACLE:

create tablespace ar datafile '/u01/app/oracle/oradata/XE/ar.dbf' size 10m autoextend on next 5m maxsize 50m online permanent extent management local autoallocate segment space management auto;

create user ar identified by ar default tablespace ar temporary tablespace temp;

grant create session, connect, resource to ar;

alter user ar quota unlimited on ar;

connect ar/ar;

CREATE TABLE R (
A NUMBER(1),
B NUMBER(1)
);

CREATE TABLE S (
A NUMBER(1),
B NUMBER(1)
);

CREATE TABLE T (
B NUMBER(1),
C NUMBER(1),
D NUMBER(1)
);

INSERT INTO R (A, B) VALUES (1, 2);
INSERT INTO R (A, B) VALUES (3, 4);

INSERT INTO S (A, B) VALUES (3, 4);
INSERT INTO S (A, B) VALUES (5, 6);
INSERT INTO S (A, B) VALUES (5, 8);

INSERT INTO T (B, C, D) VALUES (2, 2, 6);
INSERT INTO T (B, C, D) VALUES (4, 7, 8);
INSERT INTO T (B, C, D) VALUES (3, 2, 1);

COMMIT;

NOTAÇÃO DA ALGEBRA RELACIONAL

– Letras do final do alfabeto para denotar relações (R, S, T etc) – Letras do inicio do alfabeto para denotar atributos (A, B, C etc) – Letra grega  Θ (téta) é  usada para denotar um dos seis operadores de comparação:

NOTAÇÕES EM SQL

– Letras do final do alfabeto para denotar TABELAS (R, S, T etc) – Letras do inicio do alfabeto para denotar CAMPOS (A, B, C etc) – Será utilizado seis operadores de comparação (=, >, =, <=, )

UNIÃO EM AR

R ∪ S: é uma relação que contém as tuplas que estão em R, em S ou em ambas; se uma tupla está presente em R e em S, ela só aparece uma vez na união. Esta operação primitiva também requer como operandos tabelas união-compatíveis. Produz como resultado uma tabela que contém todas as linhas da primeira tabela seguidas de todas as linhas da segunda tabela. A tabela resultante possui a mesma quantidade de colunas que as tabelas originais, e tem um número de linhas que é no máximo igual à soma das linhas das tabelas fornecidas como operandos, já que as linhas que são comuns a ambas as tabelas aparecem uma única vez no resultado.

UNIÃO EM AR E SQL

R ∪ S é a relação que contém as tuplas que estão em ambas R e S.

SQL> SELECT * FROM R
2  UNION
3  SELECT * FROM S

INTERSECÇÃO EM AR E SQL

R ∩ S:é a relação que contém as tuplas que estão em ambas R e S.

SQL> SELECT * FROM R
  2  INTERSECT
  3  SELECT * FROM S

DIFERENÇA EM AR E SQL

R – S :contém as tuplas que estão em R porém não estão em S. Observe que R – S é diferente de S – R

SQL> SELECT * FROM R
2  MINUS
3  SELECT * FROM S

EXEMPLO PARA ESSAS OPERAÇÕES EM AR E SQL

ScreenHunter_385 Oct. 25 14.38

SQL> SELECT * FROM R;

SQL> SELECT * FROM S;

ScreenHunter_386 Oct. 25 14.39

SQL> SELECT * FROM R
  2    UNION
  3    SELECT * FROM S;

ScreenHunter_387 Oct. 25 14.40

SQL> SELECT * FROM R
  2    INTERSECT 
  3    SELECT * FROM S;

ScreenHunter_389 Oct. 25 14.41

SQL> SELECT * FROM R
  2    MINUS
  3    SELECT * FROM S;

PROJEÇÃO EM AR E SQL

ScreenHunter_390 Oct. 25 14.43

SQL> SELECT * FROM R;

SQL> SELECT * FROM S;

SQL> SELECT DISTINCT A
  2    FROM S;

Em AR:

π NmFunc (funcionário)

Em SQL:

SQL> SELECT NMFUNC
  2    FROM   FUNCIONARIO;

EXEMPLO DE SELEÇÃO

ScreenHunter_391 Oct. 25 14.45

SQL> SELECT * FROM R;

SQL> SELECT * FROM S;

SQL> SELECT *
  2    FROM S 
  3    WHERE B >= 6;

EXEMPLO DE SELEÇÃO (OU RESTRIÇÃO) E PROJEÇÃO EM AR E SQL

ScreenHunter_392 Oct. 25 14.46

SQL> SELECT * FROM R;

SQL> SELECT * FROM S;

SQL> SELECT B
  2    FROM S 
  3    WHERE B >= 6;

Em AR:

σ Sexo = ‘M’ (funcionário)

Em SQL:

SQL> SELECT *
  2    FROM FUNCIONARIO
  3    WHERE SEXO = 'M';

Em AR:

π NmFunc, DtAdm ( σ Sexo = ‘F’ (funcionário))

Em SQL:

SQL> SELECT NMFUNC, DTADM
2    FROM FUNCIONARIO
3    WHERE SEXO = 'F';

PRODUTO CARTESIANO EM AR E SQL

ScreenHunter_290 Oct. 30 01.21

Em AR:

Ex.:  π  NmFunc, DtAdm, VrSalário (  σ funcionário.CdCargo = cargo.CdCargo                                                                                                                                              (funcionário  x cargo))

Em SQL:

SQL> SELECT NNFUNC, DTADM, VRSALARIO
2    FROM   FUNCIONARIO,CARGO
3    WHERE  FUNCIONARIO.CDCARGO = CARGO.CDCARGO

Em AR:

Ex.:  π  NmFunc, DtAdm, VrSalário (  σ funcionário.CdCargo = cargo.CdCargo ∧ Sexo = ‘M’                                                                                                                           (funcionário  x cargo))

Em SQL:

SQL> SELECT NNFUNC, DTADM, VRSALARIO
2    FROM   FUNCIONARIO,CARGO
3    WHERE  FUNCIONARIO.CDCARGO = CARGO.CDCARGO
4           AND SEXO = 'M';

JUNÇÃO EM AR E SQL

ScreenHunter_291 Oct. 30 01.28

Em SQL:

SQL> SELECT *
2    FROM   R,T
3    WHERE  R.B >= T.D;

JUNÇÃO NATURAL EM AR E SQL

Exemplo: a junção das tabelas R e T acima, sobre as colunas R.B e T.B seria expressa por:

ScreenHunter_292 Oct. 30 01.31

Em SQL:

SQL> SELECT *
2    FROM   R
3      NATURAL JOIN T;

Exercícios – Parte 1 EM SQL

Considere as tabelas:

funcionario (NrMatric, NmFunc, DtAdm, Sexo, CdCargo, CdDepto)

cargo (CdCargo,  NmCargo, VrSalario)

depto (CdDepto, NmDepto, Ramal)

Resolva os seguintes problemas:

1 – Todos os funcionários do departamento ‘D1’.

2 – O nome e a matrícula de todos os funcionários do departamento ‘D1’.

3 – A matrícula e o nome do respectivo departamento de todos os funcionários.

4 – O nome dos funcionários que ganham mais de $500.

5 – O ramal do funcionário ‘ANA SILVEIRA’.

6 – Os nomes de todos os funcionários com cargo de ‘MECANICO’.

7 – Os nomes de todos os funcionários que trabalham no mesmo departamento que ‘JOSE NOGUEIRA’.

8 – Os nomes dos departamentos que possuem tanto funcionários como funcionárias.

Exercícios – Parte 2 EM SQL

Considere as Relações F e D que representam os CEs Funcionários e Dependentes, respectivamente, com o seguinte esquema simplificado: F(fumf, nomef) e D(numf, nomef, par), onde numf: número do funcionário, nomef: nome do funcionário, nomed: nome do dependnete e par: parentesco, que pode ser um dentre: “filho”, “filha”, “esposa/o” etc. Observe que em D, numf é a chave estrangeira que referencia a chave primária numf de F. Abaixo é mostrada uma possível instância dessas relações:

ScreenHunter_293 Oct. 30 01.37

Vamos obter agora a junção natural F | x | D (ela vai usar a coluna numf para junção)

ScreenHunter_294 Oct. 30 01.38

Observe que a junção natural apresenta para cada funcionário que possui dependentes, os dados do funcionário e dos seus dependentes. Como o funcionário 04 não possui dependentes, ele não aparece no resultado da junção. Vamos agora obter expressões da álgebra relacional que respondem as seguintes consultas:

1 – Quais os nomes e parentescos de todos os dependentes?

2 – Quais os funcionários(numero de) possuem dependentes filhas?

3 – Quais funcionários não possuem dependentes?

4 – De os nomes dos funcionários que possuem algum dependente.

5 – Dê o nome de cada funcionário que possui uma dependente chamada Alice

6 – Quais funcionários possuem mais de um dependente?

Arquivos de correcao:

https://github.com/rodrigoksaito/anchieta/tree/master/BancoDados_I/Aula13

 

Vídeo 01

 

Video 02

 
Video 03

Anúncios
WikiDBA

by Virendra Yaduvanshi - Microsoft SQL Server Database Architect | Consultant | Blogger | Specialist | DBA | Speaker

Blog - Fabiano Neves Amorim

SELECT * FROM [Coisas Da Minha Cabeça] WHERE dbo.fn_TempoParaPost() < dbo.fn_TempoLivre()

ROMANO DBA

Administração de Bancos de Dados

Tércio Costa, Oracle Developer, OCE SQL

Guia de estudos para certificação ORACLE SQL Expert(1Z0-047) e PL/SQL(1Z0-144)

Strate SQL

Data Adventures with an Architect