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
SQL> SELECT * FROM R;
SQL> SELECT * FROM S;
SQL> SELECT * FROM R
2 UNION
3 SELECT * FROM S;
SQL> SELECT * FROM R
2 INTERSECT
3 SELECT * FROM S;
SQL> SELECT * FROM R
2 MINUS
3 SELECT * FROM S;
PROJEÇÃO EM AR E SQL
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
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
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
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
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:
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:
Vamos obter agora a junção natural F | x | D (ela vai usar a coluna numf para junção)
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?