Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL...

73
Bases de Dados (CC2005) Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Eduardo R. B. Marques — DCC/FCUP Álgebra Relacional e SQL

Transcript of Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL...

Page 1: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados (CC2005) Departamento de Ciência de Computadores

Faculdade de Ciências da Universidade do Porto

Eduardo R. B. Marques — DCC/FCUP

Álgebra Relacional e SQL

Page 2: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL 2

Introdução

Page 3: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Álgebra relacional Formalismo usado para modelar relações em uma BD relacional. Usada internamente por SGBDs para representação e optimização de consultas. Tem uma forte correspondência com SQL.

Aspectos fundamentais: Caso base de uma relação: tabela de BD. Operação na álgebra relacional: toma uma ou mais relações e devolve uma nova relação. Derivação de uma relação: sequência de operações de álgebra relacional.

Álgebra relacional

3

Page 4: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Álgebra Relacional — operações elementares

4

σπ

ρ

ℱ⋈

seleção

projeção

renomeação

agregação

junção

∪∩−×

união

intersecção

diferença

produto cartesiano

Page 5: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL 5

Projeção, seleção e renomeação

Page 6: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Um esquema de relação R(A1, …, An) tem nome R e atributos A1,…,Anpor ex. ALUNO(NumMec,NumCC,Nome,Curso).

A cada atributo Ai está associado um domínio de valores dom(Ai). Os valores no domínio de um atributo são atómicos e podem incluir o valor especial NULLi.e., podemos ter NULL∈dom(Ai).

Esquema de relação — definição mais geral

6

Page 7: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Uma relação com esquema R(A1, …, An) é um conjunto não ordenado de registos r que têm a forma de tuplos

r=(v1,…,vn)tal que vi∈dom(Ai)e é denotado por r[Ai].

A noção de relação pode ser também generalizada a multi-conjuntos (em vez de conjuntos), permitindo a existência de valores duplicados, em linha com o que é permitido em SQL (ex. consulta de um atributo não-chave).

Detalhe: dada uma relação não ser ordenada o operadores SQL ORDERBY e LIMIT não podem ser expressos em álgebra relacional.

Relação — definição mais geral (cont.)

7

Page 8: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Projeção

8

πA1,…,An(R)

(projeção de sub-conjunto de atributos de R)

A1, …, An atributos de RDefinição

Correspondência em SQL

SELECTA1,…,AnFROMR;

πA1,…,An(R) = {(r[A1], …, r[An]) : r ∈ R}

NotaçãoR relação

Page 9: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Projeção — exemplo

9

R ← πNumMec,Nome(ALUNO)

ALUNO

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

487563546 12021999 MariaSilva LBIO

452212348 18392100 PedroCosta LMAT

348588664 12848585 MiguelFaria LCC

R

NumMec Nome

798764544 JoãoPinto

345673451 CarlosSemedo

487563546 MariaSilva

452212348 PedroCosta

348588664 MiguelFaria

SELECTNumMec,NomeFROMALUNO;

Page 10: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

(elementos em Rque verificam a condição C )

Seleção

10

σC(R) Rrelação Ccondição

Notação

Correspondência em SQL

SELECT*FROMRWHEREC;

σC(R) = {r ∈ R : C(r)}Definição

Page 11: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

R

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

348588664 12848585 MiguelFaria LCC

Seleção — exemplo

11

ALUNO

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

487563546 12021999 MariaSilva LBIO

452212348 18392100 PedroCosta LMAT

348588664 12848585 MiguelFaria LCC

R ← σCurso='LCC' ∨ Curso='MIERSI'(ALUNO)

SELECT*FROMALUNOWHERECurso='LCC'ORCurso='MIERSI';

Page 12: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Exemplo simples de consulta SQL

12

SELECTNumMec,NomeFROMALUNOWHERECurso='LCC'ORCurso='MIERSI';

condição de

selecção

projeção

relação (neste caso uma tabela)

σ

π

Page 13: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Podemos expressar a derivação de relações como uma sequência de operações na álgebra relacional:

Exemplo simples de consulta SQL (cont.)

13

R0 ← σCurso='LCC' ∨ Curso='MIERSI'(ALUNO)

R ← πNumMec,Nome(R0)

SELECTNumMec,NomeFROMALUNOWHERECurso='LCC'ORCurso='MIERSI';

corresponde em SQL à consulta anterior:

Page 14: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Exemplo simples de consulta SQL (cont.)

14

ALUNO

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

487563546 12021999 MariaSilva LBIO

452212348 18392100 PedroCosta LMAT

348588664 12848585 MiguelFaria LCC

R

NumMec Nome

798764544 JoãoPinto

345673451 CarlosSemedo

348588664 MiguelFaria

SELECTNumMec,NomeFROMALUNOWHERECurso='LCC'ORCurso='MIERSI';

R0 ← σCurso='LCC' ∨ Curso='MIERSI'(ALUNO)

R ← πNumMec,Nome(R0)

Page 15: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Renomeação

15

ρB1, … , Bn(R)

Sendo R uma relação com atributos

Correspondência em SQL:

SELECTA1ASB1,…,AnASBnFROMR;

B1, … , Bn

A1, … , An

é a mesma relação com os atributos

renomeados para .

Page 16: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Renomeação — exemplo

16

SELECTNome,YEAR(DataNasc)ASAnoDeNascFROMUTENTEWHERENum>3;

R ← ρNome,AnoDeNasc(R1)

R1 ← πNome,YEAR(DataNasc)(R0)

R0 ← σNum>3(UTENTE)

Page 17: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL 17

Agregação simples

Page 18: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação simples

18

ℱop(A)(R) = r1[A] op r2[A] op … op rn[A]

Sendo R uma relação, A um atributo de R e op um operador binário (ex. COUNT, SUM, MIN, …) sobre dom(A):

denota o resultado agregado de aplicar op à sequência de valores de A para tuplos em R.

Em SQL:

SELECTop(A)FROMR

onde op é um operador de agregação.

Page 19: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação simples — notação com renomeação

19

ℱX=op(A)(R) = r1[A] op r2[A] op … op rn[A]

denota o resultado agregado de aplicar op à sequência de valores de A para tuplos em R e dar um nome X ào atributo da relação resultante. Está implícita uma operação de renomeação.

Em SQL:

SELECTop(A)FROMRASX

onde op é um operador de agregação.

Page 20: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Semântica: 1) Agrupa todos os valores de <ATRIBUTO>ignorando valores NULL2) Aplica sobre estes<FUNÇÃODEAGREGAÇÃO>3) Devolve o resultado final.

Nota: generaliza-se para múltiplos operadores, como ilustramos a seguir.

Agregações simples em SQL

20

SELECT<FUNÇÃODEAGREGAÇÃO>(<ATRIBUTO>)[ASNome],FROM…

Sintaxe — forma mais simples:

Page 21: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação simples — exemplo (cont.)

21

/*Obtémnºtotaldeutentes.*/SELECTCOUNT(*)ASNum_UtentesFROMUTENTE;

+----------------+ | Num_Utentes | +----------------+ | 7 | +----------------+

COUNT(*) : caso especial — conta o nº de registos.

ℱNum_Utentes=COUNT(*)(UTENTE)

Page 22: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação combinada com outros operadores

22

R1 ← ℱN=COUNT(*) (R0)

SELECTCOUNT(*)ASNFROMALUNOWHERECurso='LCC';

R0 ← σ Curso = 'LCC' (ALUNO)

ALUNO

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

487563546 12021999 MariaSilva LBIO

452212348 18392100 PedroCosta LMAT

348588664 12848585 MiguelFaria LCC

2

Page 23: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

<FUNÇÃODEAGREGAÇÃO> identifica operação associativa e cumutativa — ex. soma, máximo mas não subtração ou divisão. Alguns dos operadores mais comuns são listados abaixo

Ver por exemplo referência MySQL para estes e outros.

Funções de agregação em SQL

23

Função Operação

COUNTCOUNT(DISTINCT)SUMMINMAXAVGSTDDEV

Contagem Contagem de elementos distintos Soma Mínimo Máximo Média Desvio padrão

Page 24: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação simples com vários operadores

24

A noção de agregação generaliza-se para vários operadores:

Em SQL:

ℱX1=op1(A1), … ,Xk=opk(Ak)(R) = (ℱop1(A1)(R), . . . , ℱopk(Ak)(R))

SELECTop1(A1)ASX1,…,opk(Ak)ASXkFROMR

Page 25: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação simples com vários operadores (cont.)

25

/*Obtémmínimo,máximoemédiadoanodenascimento.*/SELECTMIN(YEAR(DataNasc))AsMin,MAX(YEAR(DataNasc))AsMax,AVG(YEAR(DataNasc))AsMediaFROMUTENTE;

+------+------+-----------+ | Min | Max | Media | +------+------+-----------+ | 1975 | 2005 | 1988.2857 | +------+------+-----------+

ℱMin=MIN(YEAR(DataNasc)), Max=MAX(...),Media=AVG(...)(UTENTE)

Page 26: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL 26

Agregação agrupada

Page 27: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação agrupada

27

G1, …,Gnℱop1(A1), … ,opk(Ak)(R)

generaliza o conceito de agregação simples para agrupada tendo como atributos de agrupamento

G1, …, Gn

Em SQL:

SELECTop1(A1),…,opk(Ak)FROMRGROUPBYG1…,Gn

Page 28: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Semântica: 1) Agrupa todos os valores de <ATRIBUTO>mas em grupos distintos por cada valor diferente em vez de um só (quando não temos GROUP BY). 2) Aplica sobre cada grupo <FUNÇÃODEAGREGAÇÃO>3) Devolve o resultado final para cada grupo.

Nota: Podemos especificar várias funções de agregação e vários atributos de agrupamento.

Agregação com GROUPBY

28

SELECT<ATRIBUTODEAGRUPAMENTO>,<FUNÇÃODEAGREGAÇÃO>(<ATRIBUTO>)[ASNOME],FROM<TABELA>[WHERE<CONDIÇÃO>]GROUPBY<ATRIBUTOPARAAGRUPAMENTO>;

Sintaxe — forma mais simples:

Page 29: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação agrupada — exemplo

29

SELECTCurso,COUNT(*)ASNFROMALUNOGROUPBYCurso;

ALUNO

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

487563546 12021999 MariaSilva LBIO

452212348 18392100 PedroCosta LMAT

348588664 12848585 MiguelFaria LCC

R ← Curso ℱ N=COUNT(*)(ALUNO)

R

Curso N

LCC 2

MIERSI 1

LBIO 1

LMAT 1

Page 30: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Semântica: <CONDIÇÃOSOBREGRUPO> filtra resultados por grupo HAVING funciona como cláusula WHERE ao nível de cada grupo Em álgebra relacional: corresponde a uma operação de agregação seguida de uma operação de seleção.

Agregação com GROUPBY-HAVING

30

SELECT[<ATRIBUTODEAGRUPAMENTO>],<FUNÇÃODEAGREGAÇÃO>(<ATRIBUTO>)[ASNOME]FROM<TABELA>[WHERE<CONDIÇÃO>]GROUPBY<ATRIBUTODEAGRUPAMENTO>HAVING<CONDIÇÃOSOBREGRUPO>;

Sintaxe — forma mais simples:

Page 31: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Agregação agrupada com HAVING — exemplo

31

SELECTCurso,COUNT(*)ASNFROMALUNOGROUPBYCurso;HAVINGN=1;

ALUNO

NumMec NumCC Nome Curso

798764544 12345678 JoãoPinto LCC

345673451 17222303 CarlosSemedo MIERSI

487563546 12021999 MariaSilva LBIO

452212348 18392100 PedroCosta LMAT

348588664 12848585 MiguelFaria LCC

R0 ← Curso ℱ N=COUNT(*)(ALUNO)

R

Curso N

MIERSI 1

LBIO 1

LMAT 1

R ← σ N=1 (R0)

Page 32: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL 32

Operações sobre conjuntos

Page 33: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Operações sobre conjuntos

33

A B

A ∪ B

União

A B

A − B

Diferença

A ∩ B

Intersecção

A B

A × B

A BProduto cartesiano

A ∩ B = {x : x ∈ A ∧ x ∈ B}

A ∪ B = {x : x ∈ A ∨ x ∈ B}

A − B = {x : x ∈ A ∧ x ∉ B}

A × B = {(x, y) : x ∈ A ∧ y ∈ B}

Page 34: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Operações sobre conjuntos e SQL

34

R ∩ S

R ∪ S

R − S

RUNIONS

RINTERSECTS

REXCEPTS

R × S SELECT*FROMR,S

Nota: Não suportados em MySQL

RCROSSJOINS ou

Page 35: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

União, interseção, e diferença

35

R ∩ S R ∪ S R − S

As operações de união, interseção e diferença de relações R e S

estão restritas a relações compatíveis

R(A1, … , An) S(B1, … , Bn)e

tais que ∀i = 1, … , n, dom(Ai) = dom(Bi)Não é imposto que os atributos tenham nomes iguais, mas por convenção retêm os nomes dos atributos de R.

R ∩ S R ∪ S R − S

Page 36: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

União / UNION— exemplo (MovieStream)

36

R ← π Manager (DEPARTMENT)

U ← R ∪ S

S ← π RegionManager (REGION)

/*Obtémoiddetodososfuncionáriosquesãogerentesdedepartamentoouderegião*/SELECTManagerFROMDEPARTMENTUNIONSELECTRegionManagerFROMREGION;

+---------+| Manager |+---------+| 2 || 7 || 11 || 14 || 15 || 16 || 17 |+---------+Obs: coluna da relação é Manager em linha com

convençãomencionadanoslideanterior.

Page 37: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Interseção / INTERSECT— exemplo (MovieStream)

37

R ← π MovieId (MOVIE)

I ← R ∩ S

S ← π MovieId (STREAM)

/*Obtémiddefilmescomalgum“stream”feito[nãosuportadoemMySQL]*/

SELECTMovieIdFROMMOVIEINTERSECTSELECTMovieIdFROMSTREAM;Obs: já veremos como expressar uma consulta em MySQL com resultado equivalente.

Page 38: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Diferença / EXCEPT— exemplo (MovieStream)

38

R ← π MovieId (MOVIE)

D ← R − S

S ← π MovieId (STREAM)

/*Obtémiddefilmessemnenhum“stream”feito[nãosuportadaemMySQL]*/

SELECTMovieIdFROMMOVIEEXCEPTSELECTMovieIdFROMSTREAM;Obs: já veremos como expressar uma consulta em MySQL com resultado equivalente.

Page 39: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Em MySQL (e SQL em geral) podemos fazer uso de consultas imbricadas (“nested queries”), que são muito convenientes em uma série de casos. No caso usamos os operadores IN e NOTIN para suprir a falta de suporte de INTERSECT e EXCEPT.

Consultadores anteriores em MySQL

39

SELECTMovieIdFROMMOVIEINTERSECTSELECTMovieIdFROMSTREAM;

SELECTMovieIdFROMMOVIEEXCEPTSELECTMovieIdFROMSTREAM;

SELECTMovieIdFROMMOVIEWHEREMovieIdIN(SELECTMovieIdFROMSTREAM);

SELECTMovieIdFROMMOVIEWHEREMovieIdNOTIN(SELECTMovieIdFROMSTREAM);

Page 40: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Podemos imbricar consultas usando na cláusula WHERE outra(s) consulta(s), chamadas sub-consulta(s). Vários operadores podem ser usados para o encadeamento, como veremos a seguir. Podemos ter consultas imbricadas em associação a várias outras instruções como por exemplo UPDATE ou DELETE além de SELECT.

Consultas imbricadas

40

SELECT…FROM…|DELETEFROM…|UPDATE…WHERE<EXPR><OPERADOR>( SELECT…/*Sub-consulta*/)…

Forma geral

Page 41: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Operadores de sub-consulta

41

<EXPR>IN<CONSULTA> Verdadeiro se <EXPR> é devolvido por <CONSULTA>

<EXPR>NOTIN<CONSULTA> Verdadeiro se <EXPR> não é devolvido por <CONSULTA>

EXISTS<CONSULTA>Verdadeiro se <CONSULTA>devolve pelo menos um resultado.

<EXPR><OPERADORDECOMPARAÇÃO><CONSULTA>Operadores de comparação (os usuais):=<>><>=<=…Verdadeiro se <CONSULTA> devolve um único resultado R e <EXPR> <OPERADOR DECOMPARAÇÃO>Rseverifica.

<EXPR><OPERADORDECOMPARAÇÃO>ALL<CONSULTA>Similar ao caso anterior mas se a comparação é verdadeira para todos os resultados da consulta.

<EXPR><OPERADORDECOMPARAÇÃO>ANY<CONSULTA>Similar ao caso anterior mas se a comparação é verdadeira para pelo menos um os resultados da consulta.

ReferênciaMySQL→“Subqueries”

Page 42: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Sub-consultas — exemplos

42

SELECTTitleFROMMOVIEMWHERENOTEXISTS(SELECT*FROMSTREAMWHEREMovieId=M.MovieId)ORDERBYTitleLIMIT5;

/*Filmessem“streams”-variações*/SELECTTitleFROMMOVIEWHEREMovieIdNOTIN(SELECTMovieIdFROMSTREAM)ORDERBYTitleLIMIT5;

+----------------------+| Title |+----------------------+| (500) Days of Summer || 1408 || 21 || 300 || 8 Mile |+----------------------+5 rows in set (0.00 sec)

Page 43: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Sub-consultas — exemplos (cont.)

43

INSERTINTOSTREAM(CustomerId,MovieId,StreamDate,Charge)VALUES((SELECTCustomerIdFROMCUSTOMERWHEREName='AaronSelby'),(SELECTMovieIdFROMMOVIEWHERETitle='Batman'),'2020-03-2411:24:30',2.50);

SELECT*FROMSTREAMWHERECustomerId=(SELECTCustomerIdFROMCUSTOMERWHEREName='AaronSelby')ANDMovieId=(SELECTMovieIdFROMMOVIEWHERETitle='Batman');

+----------+---------+------------+---------------------+--------+| StreamId | MovieId | CustomerId | StreamDate | Charge |+----------+---------+------------+---------------------+--------+| 10162 | 248 | 375 | 2020-03-24 11:24:30 | 2.50 |+----------+---------+------------+---------------------+--------+

Page 44: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Sub-consultas — exemplos (cont.)

44

INSERTINTOSTREAM(CustomerId,MovieId,StreamDate,Charge)VALUES((SELECTCustomerIdFROMCUSTOMERWHEREName='AaronSelby'),(SELECTMovieIdFROMMOVIEWHERETitle='Batman'),'2020-03-2411:24:30',2.50);

SELECT*FROMSTREAMWHERECustomerId=(SELECTCustomerIdFROMCUSTOMERWHEREName='AaronSelby')ANDMovieId=(SELECTMovieIdFROMMOVIEWHERETitle='Batman');

+----------+---------+------------+---------------------+--------+| StreamId | MovieId | CustomerId | StreamDate | Charge |+----------+---------+------------+---------------------+--------+| 10162 | 248 | 375 | 2020-03-24 11:24:30 | 2.50 |+----------+---------+------------+---------------------+--------+

Page 45: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Sub-consultas — exemplos (cont.)

45

SELECTCOUNT(*)ASNFROMSTREAMWHERECustomerIdIN(SELECTCustomerIdFROMCUSTOMERWHERECountryIN(SELECTNameFROMCOUNTRYWHERERegionId=(SELECTRegionIdFROMREGIONWHEREName='Africa')));

+------+| N |+------+| 1374 |+------+

DELETEFROMSTREAMWHERECustomerIdIN(SELECTCustomerIdFROMCUSTOMERWHERECountryIN(SELECTNameFROMCOUNTRYWHERERegionId=(SELECTRegionIdFROMREGIONWHEREName='Africa')));

Query OK, 1374 rows affected (0.05 sec)

Page 46: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Produto cartesiano

46

Para relações a relação

e elementos

R(A1, … , Am) S(B1, … , Bn)e

R × S

tem atributos A1, … , Am, B1, …, Bn

(r[A1], … , r[Am], s[B1], … , s[Bn])onde

r ∈ R s ∈ S

R × S

R S

Page 47: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Na cláusula FROM podemos especificar várias tabelas para consultas, o que poderá ser bastante conveniente.

Produto cartesiano — exemplo (MovieStream)

47

/*NãosuportadoemMySQL*/SELECTCOUNTRY.NameASCName,REGION.NameASCNameFROMCOUNTRYCROSSJOINREGION;

C0 ← π Name (COUNTRY)

P ← C × R

R0 ← π Name (REGION)

C ← ρ CName (C0)

R ← ρ RName (R0)

/*SuportadodeformageralporSGBDsSQL*/SELECTCOUNTRY.NameASCName,REGION.NameASRNameFROMCOUNTRY,REGION;

Page 48: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Obtemos todas as combinações de nomes de países e regiões, o que não é informação muito útil.

Produto cartesiano — exemplo (cont.)

48

+------------------+-----------------+| CName | RName |+------------------+-----------------+| Anguilla | Other countries || Anguilla | America || Anguilla | Asia || Anguilla | Europe || Anguilla | Africa || French Polynesia | Other countries || French Polynesia | America || French Polynesia | Asia || French Polynesia | Europe || French Polynesia | Africa |. . .

SELECTCOUNTRY.NameASCName,REGION.NameASRNameFROMCOUNTRY,REGION;

C0 ← π Name (COUNTRY)

P ← C × R

R0 ← π Name (REGION)

C ← ρ CName (C0)

R ← ρ RName (R0)

Page 49: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Obtemos neste caso todas as combinações de nomes de países e das regiões correspondentes, o que é muito mais relevante. O exemplo acima corresponde a uma “junção natural”, conceito que introduziremos mais à frente nestes “slides”.

Produto cartesiano — outro exemplo (cont.)

49

SELECTCOUNTRY.NameASCName,REGION.NameASRNameFROMCOUNTRY,REGIONWHERECOUNTRY.RegionId=REGION.RegionId;

P0 ← C × R

C ← ρ Name/CName (COUNTRY)R ← ρ Name/RName (REGION)

P1 ← σ COUNTRY.RegionId=REGION.RegiondId (P0)P ← π CName,RName (P1)

Page 50: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Produto cartesiano — outro exemplo (cont.)

50

+----------------------------------+-----------------+ | CName | RName |+----------------------------------+-----------------+| Anguilla | Other countries || French Polynesia | Other countries || Greenland | Other countries || Nauru | Other countries || New Zealand | Other countries || Reunion | Other countries || Saint Vincent and the Grenadines | Other countries || Tonga | Other countries || Tuvalu | Other countries || Virgin Islands | Other countries || American Samoa | America || Argentina | America || Bolivia | America || Brazil | America |. . .

SELECTCOUNTRY.NameASCName,REGION.NameASRNameFROMCOUNTRY,REGIONWHERECOUNTRY.RegionId=REGION.RegionId;

Page 51: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

De forma geral a cláusula FROMpode referir várias tabelas. Por forma a desambiguar atributos com o mesmo nome ou tornar a consulta mais legível podemos opcionalmente identificar cada tabela com um identificador. Nota: Muitas vezes estas consultas correspondem implicitamente a operações de junção (“join”) a ver mais tarde e para as quais há suporte SQL mais especializado.

Consultas em múltiplas tabelas

51

SELECT<ATRIBUTOS>FROM<TABELA1>[ID1],…,<TABELAn>[<IDn>]…

Forma geral

Page 52: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Exemplos de consultas em múltiplas tabelas

52

/*Obtémnomesdesupervisoresecorrespondentesfuncionáriossupervisionados.*/SELECTS1.NameASSupervisor,S2.NameASSupervisedFROMSTAFFS1,STAFFS2WHERES1.StaffId=S2.SupervisorORDERBYSupervisor,Supervised;

+-----------------+-------------------+| Supervisor | Supervised |+-----------------+-------------------+| António Mota | Felícia Antunes || António Mota | Gabriela Silva || António Mota | Gastão Pinto || Augusto Sousa | Alexandra Romeu || Augusto Sousa | Fábio Cruz || Eva Mendes | Maria Silva || Eva Mendes | Pedro Simões || João Pinto | António Mota || João Pinto | Augusto Sousa || João Pinto | José Santos || João Pinto | Xavier Semedo || João Santorini | Joana Moreira || José Santos | Filipa Magalhães || José Santos | João Santorini || Xavier Semedo | Eva Mendes || Xavier Semedo | Filipa Mendes |+-----------------+-------------------+16 rows in set (0.01 sec)

Page 53: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Exemplos de consultas em múltiplas tabelas (cont.)

53

/*Obtémnomesdesupervisoresecorrespondentenúmerodefuncionáriossupervisionados.*/SELECTS1.NameASSupervisor,COUNT(*)ASNFROMSTAFFS1,STAFFS2WHERES1.StaffId=S2.SupervisorGROUPBYSupervisorORDERBYSupervisor;

+-----------------+---+| Supervisor | N |+-----------------+---+| António Mota | 3 || Augusto Sousa | 2 || Eva Mendes | 2 || João Pinto | 4 || João Santorini | 1 || José Santos | 2 || Xavier Semedo | 2 |+-----------------+---+7 rows in set (0.01 sec)

Page 54: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Exemplos de consultas em múltiplas tabelas (cont.)

54

SELECTA.NameASName,M.TitleASTitle,M.YearASYearFROMACTORA,MOVIE_ACTORMA,MOVIEMWHEREA.ActorId=MA.ActorIdANDMA.MovieId=M.MovieIdANDA.NameLIKE'Brad%'ANDM.Year>=2010ORDERBYName,Year,Title;

+----------------+----------------------------+------+| Name | Title | Year |+----------------+----------------------------+------+| Brad Pitt | Megamind | 2010 || Brad Pitt | Moneyball | 2011 || Brad Pitt | 12 Years a Slave | 2013 || Brad Pitt | World War Z | 2013 || Brad Pitt | Fury | 2014 || Brad Pitt | The Big Short | 2015 || Bradley Cooper | The A-Team | 2010 || Bradley Cooper | Limitless | 2011 || Bradley Cooper | The Hangover Part II | 2011 || Bradley Cooper | Silver Linings Playbook | 2012 || Bradley Cooper | The Place Beyond the Pines | 2012 || Bradley Cooper | American Hustle | 2013 || Bradley Cooper | The Hangover Part III | 2013 || Bradley Cooper | American Sniper | 2014 || Bradley Cooper | Guardians of the Galaxy | 2014 |+----------------+----------------------------+------+15 rows in set (0.00 sec)

Page 55: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL 55

Junções de tabelas

Page 56: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Operações de junção e SQL

56

RJOINSON(C)R ⋈C SJunção

Junção natural

R * S RNATURALJOINS

Junções externas

R SC

R SC

R SC

RLEFTOUTERJOINSON(C)

RRIGHTOUTERJOINSON(C)

RFULLOUTERJOINSON(C)

R *Attrs S RJOINSUSING(Attrs)

Page 57: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção

57

Para relações e condição Csobre

é chamada a junção de R e S com condição C. Os elementos têm a forma:

R(A1, … , Am) S(B1, … , Bn)e

R ⋈C S = σC ( R × S )

(r[A1], … , r[Am], s[B1], … , s[Bn])

tais que r ∈ R s ∈ S C(r, s)

R × S

Em SQL: RJOINSON(C)

Page 58: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Esta junção diz-se uma equi-junção: a condição é expressa pela igualdade de atributos. Junções envolvem muitas vezes igualdade de atributos.

Junção — exemplos

58

SELECT*FROMCUSTOMER,COUNTRYWHERECUSTOMER.Country=COUNTRY.Name;

SELECT*FROMCUSTOMERJOINCOUNTRYON(CUSTOMER.Country=COUNTRY.Name);

R ← CUSTOMER ⋈ CUSTOMER.Country = COUNTRY.Name COUNTRY

equivalente a

Page 59: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção — exemplos (cont.)

59

SELECT*FROMCUSTOMERJOINCOUNTRYON(CUSTOMER.Country=COUNTRY.Name);

R ← CUSTOMER ⋈ CUSTOMER.Country = COUNTRY.Name COUNTRY

CustomerId Name … Country … Name RegionId

381 Bobby Boudreau … Anguilla … Anguilla 6

43 Christine Roberts … French Polynesia … French Polynesia 6

56 Gloria Cook … French Polynesia … French Polynesia 6

207 Gertru de Castillo … Greenland … Greenland 6

513 Duane Tubbs … Nauru … Nauru 6

. . . . . .

Observe que ficamos com atributos com valores duplicados (Country em Customer e Name em Regio e também dois atributos com o mesmo nome (coluna Name nas 2 tabelas) embora não relacionados.

Page 60: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Neste caso não temos uma equi-junção, já que uma das condições de junção não é uma igualdade entre atributos.

Junção — exemplos (cont.)

60

SELECTM.Title,M.Year,S.StreamDateFROMMOVIEMJOINSTREAMSON(M.MovieId=S.MovieIdANDM.Year>=YEAR(S.StreamDate)-5)WHEREM.Duration>=180;

(abreviandoMOVIEporMeSTREAMporS)

J ← M0 ⋈ M.MovieId = S.StreamId ⋀ M.Year ≥ YEAR(S.StreamDate) − 5 STREAMM0 ← σ Duration>=180 (M)

R ← π Title,Year,StreamDate (J )

Page 61: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção — exemplos (cont.)

61

+-------------------------+------+---------------------+| Title | Year | StreamDate |+-------------------------+------+---------------------+| The Wolf of Wall Street | 2013 | 2017-02-15 06:05:00 || The Wolf of Wall Street | 2013 | 2017-03-04 12:12:00 || The Wolf of Wall Street | 2013 | 2017-07-17 08:04:00 || The Wolf of Wall Street | 2013 | 2017-08-26 05:52:00 || The Wolf of Wall Street | 2013 | 2017-11-04 15:39:00 || The Wolf of Wall Street | 2013 | 2018-01-09 06:38:00 || The Wolf of Wall Street | 2013 | 2018-02-03 08:20:00 || The Wolf of Wall Street | 2013 | 2018-03-22 14:46:00 || The Wolf of Wall Street | 2013 | 2018-04-27 05:53:00 || The Wolf of Wall Street | 2013 | 2018-06-20 01:51:00 || The Wolf of Wall Street | 2013 | 2018-07-04 15:48:00 || The Wolf of Wall Street | 2013 | 2018-08-12 13:00:00 || The Wolf of Wall Street | 2013 | 2018-12-29 08:39:00 || The Hateful Eight | 2015 | 2017-02-06 02:53:00 || The Hateful Eight | 2015 | 2017-06-16 06:16:00 || The Hateful Eight | 2015 | 2018-03-28 22:24:00 || The Hateful Eight | 2015 | 2018-04-04 10:19:00 || The Hateful Eight | 2015 | 2018-05-22 09:18:00 || The Hateful Eight | 2015 | 2018-06-24 07:20:00 || The Hateful Eight | 2015 | 2018-07-26 13:44:00 || The Hateful Eight | 2015 | 2018-09-14 16:10:00 || The Hateful Eight | 2015 | 2018-09-26 21:47:00 || The Hateful Eight | 2015 | 2018-11-14 12:45:00 |+-------------------------+------+---------------------+

SELECTM.Title,M.Year,S.StreamDateFROMMOVIEMJOINSTREAMSON(M.MovieId=S.MovieIdANDM.Year>=YEAR(S.StreamDate)-5)WHEREM.Duration>=180;

Page 62: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Muitas equi-junções são baseadas em atributos com nomes comuns. São “naturais”.

Junção — exemplos (cont.)

62

SELECTM.Title,M.YearFROMMOVIEMJOINMOVIE_GENREMGJOINGENREGON(M.MovieId=MG.MovieIdANDMG.GenreId=G.GenreId)WHEREM.Year>=2010ANDG.Label='Horror';

(abreviandoMOVIEporM,MOVIE_GENREporMGeGENREporG)

J1 ← M ⋈ M.MovieId = MG.MovieId MG

R ← σYear ≥ 2010 ⋀ Label = 'Horror' (J2)

J2 ← J1 ⋈J1.MovieId = G.GenreId G

Page 63: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção — exemplos (cont.)

63

SELECTM.Title,M.YearFROMMOVIEMJOINMOVIE_GENREMGJOINGENREGON(M.MovieId=MG.MovieIdANDMG.GenreId=G.GenreId)WHEREM.Year>=2010ANDG.Label='Horror';

+--------------------------------+------+| Title | Year |+--------------------------------+------+| The Purge | 2013 || Dark Shadows | 2012 || Warm Bodies | 2013 || Sinister | 2012 || The Conjuring 2 | 2016 || Don't Breathe | 2016 || 10 Cloverfield Lane | 2016 || The Conjuring | 2013 || The Cabin in the Woods | 2011 || World War Z | 2013 || The Woman in Black | 2012 || Insidious | 2010 || It Follows | 2014 || Hansel & Gretel: Witch Hunters | 2013 || Split | 2016 || The Babadook | 2014 |+--------------------------------+------+16 rows in set (0.00 sec)

Page 64: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção natural

64

A junção natural de

é definida e denotada por

R(A1, … , Am) S(B1, … , Bn)e

R * S = R ⋈C Stal que: (1) a condição de junção Cexprime a igualdade entre cada

par de atributos das duas relações com o mesmo nome (2) a relação resultante não duplica os atributos comuns.

Em SQL: RNATURALJOINS

Page 65: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Exemplo anterior com junção natural (cont.)

65

SELECTM.Title,M.YearFROMMOVIEMNATURALJOINMOVIE_GENRENATURALJOINGENREGWHEREM.Year>=2010ANDG.Label='Horror';

(abreviandoMOVIEporM,MOVIE_GENREporMGeGENREporG)

J1 ← M ⋈ M.MovieId = MG.MovieId MG

R ← σYear ≥ 2010 ⋀ Label = 'Horror' (J2)

J2 ← J1 ⋈J1.MovieId = G.GenreId G

J1 ← M * MG

R ← σ Year ≥ 2010 ⋀ Label = 'Horror' (J2)

J2 ← J1 * G

SELECTM.Title,M.YearFROMMOVIEMJOINMOVIE_GENREMGJOINGENREGON(M.MovieId=MG.MovieIdANDMG.GenreId=G.GenreId)WHEREM.Year>=2010ANDG.Label='Horror';

Page 66: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção natural restrita

66

Denotamos

pela junção natural restrita a um sub-conjunto de atributos

R *A1, … ,AnS

Em SQL: RJOINSUSING(A1,…,AN)

A1, … , An

Page 67: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Em contraste COUNTRY NATURAL JOIN REGION é uma relação vazia …Porquê?

Junção natural restrita — exemplo

67

SELECTC.NameASCName,R.NameASRNameFROMCOUNTRYCJOINREGIONRUSING(RegionId);

J ← C *RegionId R

C ← ρ Name/CName (COUNTRY)R ← ρ Name/RName (REGION)

P ← π CName,RName (P1)

+----------------------------------+-----------------+ | CName | RName |+----------------------------------+-----------------+| Anguilla | Other countries || French Polynesia | Other countries || Greenland | Other countries || Nauru | Other countries || New Zealand | Other countries || Reunion | Other countries || Saint Vincent and the Grenadines | Other countries || Tonga | Other countries || Tuvalu | Other countries || Virgin Islands | Other countries || American Samoa | America || Argentina | America || Bolivia | America || Brazil | America |. . .

Page 68: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Para duas relações R eS

Junção externa

68

definimos a junção externa à esquerda:

R S=C

R ⋈C S

{(r[A1], . . . , r[Am], NULL, . . . , NULL)∪

∣ r ∈ R ∧ /∃s ∈ S : C(r, s)}

R(A1, … , Am) S(B1, … , Bn)

A relação engloba valores(NULL,…,NULL)pararegistosemSquenãoverificamacondiçãoC.

Em SQL: RLEFTOUTERJOINSON(C)

Page 69: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção externa — exemplos

69

SELECTS1.NameASSupervised,S2.NameASSupervisorFROMSTAFFS1LEFTOUTERJOINSTAFFS2ON(S1.Supervisor=S2.StaffId)ORDERBYSupervised,Supervisor;

+-------------------+-----------------+| Supervised | Supervisor |+-------------------+-----------------+| Alexandra Romeu | Augusto Sousa || António Mota | João Pinto || Augusto Sousa | João Pinto || Eva Mendes | Xavier Semedo || Fábio Cruz | Augusto Sousa || Felícia Antunes | António Mota || Filipa Magalhães | José Santos || Filipa Mendes | Xavier Semedo || Gabriela Silva | António Mota || Gastão Pinto | António Mota || Joana Moreira | João Santorini || João Pinto | NULL || João Santorini | José Santos || José Santos | João Pinto || Maria Silva | Eva Mendes || Pedro Simões | Eva Mendes || Xavier Semedo | João Pinto |+-------------------+-----------------+17 rows in set (0.01 sec)

O resultado para João Pinto não constaria da consulta alternativa com uma junção (JOIN) normal.

Page 70: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

e finalmente a junção externa completa R S=

C

Junção externa (cont.)

70

Analogamente definimos a junção externa à direita

R S=C

R ⋈C S

{(NULL, . . . , NULL, s[B1], . . . , s[Bn], )∪

∣ s ∈ s ∧ /∃r ∈ R : C(r, s)}

R SC

∪R SC

Em SQL: RRIGHTOUTERJOINSON(C)RFULLOUTERJOINSON(C)

Page 71: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção externa — exemplos (cont.)

71

SELECTS1.NameASSupervised,S2.NameASSupervisorFROMSTAFFS1RIGHTOUTERJOINSTAFFS2ON(S1.Supervisor=S2.StaffId)ORDERBYSupervised,Supervisor;

+-------------------+-------------------+| Supervised | Supervisor |+-------------------+-------------------+| NULL | Alexandra Romeu || NULL | Fábio Cruz || NULL | Felícia Antunes || NULL | Filipa Magalhães || NULL | Filipa Mendes || NULL | Gabriela Silva || NULL | Gastão Pinto || NULL | Joana Moreira || NULL | Maria Silva || NULL | Pedro Simões || Alexandra Romeu | Augusto Sousa || António Mota | João Pinto || Augusto Sousa | João Pinto || Eva Mendes | Xavier Semedo || Fábio Cruz | Augusto Sousa || Felícia Antunes | António Mota || Filipa Magalhães | José Santos |. . .

Os resultados para funcionários que não supervisionam nenhum outro não constariam de uma consulta com uma junção (JOIN) normal.

Page 72: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção externa — exemplos (cont.)

72

SELECTS1.NameASSupervised,S2.NameASSupervisorFROMSTAFFS1FULLOUTERJOINSTAFFS2ON(S1.Supervisor=S2.StaffId)ORDERBYSupervised,Supervisor;

MySQL não suporta FULLOUTERJOINmas podemos fazer a união de consultas usando de LEFTOUTERJOINeRIGHTOUTERJOIN(a seguir).

+-------------------+-------------------+| Supervised | Supervisor |+-------------------+-------------------+| NULL | Alexandra Romeu || NULL | Fábio Cruz || NULL | Felícia Antunes || NULL | Filipa Magalhães || NULL | Filipa Mendes || NULL | Gabriela Silva || NULL | Gastão Pinto || NULL | Joana Moreira || NULL | Maria Silva || NULL | Pedro Simões || Alexandra Romeu | Augusto Sousa || António Mota | João Pinto || Augusto Sousa | João Pinto |. . . || João Pinto | NULL || João Santorini | José Santos |. . .

Page 73: Álgebra Relacional e SQLedrdo/aulas/bd/teoricas/bd_ar_sql.pdf · Funções de agregação em SQL 23 Função Operação COUNT COUNT(DISTINCT) SUM MIN MAX AVG STDDEV Contagem Contagem

Bases de Dados Álgebra Relacional e SQL

Junção externa — exemplos (cont.)

73

(SELECTS1.NameASSupervised,S2.NameASSupervisorFROMSTAFFS1LEFTOUTERJOINSTAFFS2ON(S1.Supervisor=S2.StaffId))UNION(SELECTS1.NameASSupervised,S2.NameASSupervisorFROMSTAFFS1RIGHTOUTERJOINSTAFFS2ON(S1.Supervisor=S2.StaffId))ORDERBYSupervised,Supervisor;

+-------------------+-------------------+| Supervised | Supervisor |+-------------------+-------------------+| NULL | Alexandra Romeu || NULL | Fábio Cruz || NULL | Felícia Antunes || NULL | Filipa Magalhães || NULL | Filipa Mendes || NULL | Gabriela Silva || NULL | Gastão Pinto || NULL | Joana Moreira || NULL | Maria Silva || NULL | Pedro Simões || Alexandra Romeu | Augusto Sousa || António Mota | João Pinto || Augusto Sousa | João Pinto |. . .| João Pinto | NULL || João Santorini | José Santos |. . .