1 / 18

A Linguagem SQL e a Álgebra Relacional

A Linguagem SQL e a Álgebra Relacional. A NOTAÇÃO NA ALGEBRA USADA NESTES SLIDES É DIFERENTE DA DO LIVRO, MAS IGUALMENTE ÓBVIA. A WHERE c A [x,y,....,z] A TIMES B A UNION B A MINUS B. SELECT * FROM A WHERE C SELECT DISTINCT x,y,...,z FROM A SELECT a1,..an,b1,…,bn FROM A,B

aron
Download Presentation

A Linguagem SQL e a Álgebra Relacional

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A Linguagem SQLe a Álgebra Relacional A NOTAÇÃO NA ALGEBRA USADA NESTES SLIDES É DIFERENTE DA DO LIVRO, MAS IGUALMENTE ÓBVIA

  2. A WHERE c A [x,y,....,z] A TIMES B A UNION B A MINUS B SELECT * FROM A WHERE C SELECT DISTINCT x,y,...,z FROM A SELECT a1,..an,b1,…,bn FROM A,B SELECT * FROM A UNION SELECT * FROM B SELECT * FROM A EXCEPT SELECT * FROM B SELECT

  3. A sequência “SELECT-FROM-WHERE” De uma forma geral, a sequência: SELECTDISTINCT c1,c2,...,cn FROM T1,T2,...Tn WHERE condições é equivalente à seguinte expressão algébrica: ((T1 TIMES T2 ... TIMES Tn) WHERE condições) [c1,c2,...,cn]

  4. A={a1,..,an,c1,...,ck} B={b1,..,bm,c1,...,ck} A JOIN B SELECT DISTINCT a1,..,an, A.c1,..., A.ck, b1,...,bn FROM A, B WHERE A.c1 = B.c1 AND ... AND A.ck = B.ck JOIN A={a1,..,an,c1,...,ck} B={b1,..,bm,c1,...,ck} (A TIMES B WHERE A.c1 = B.c1 AND ... AND A.ck = B.ck) [A.*, b1,...,bm]

  5. A={a1,..,an,c1,...,ck} B={c1,...,ck} A DIVIDEBY B SELECT a1,..,an FROM A, B WHERENOTEXISTS ( SELECT c1,...,ck FROM A, B WHERE A.c1 =/= B.c1 OR ... OR A.ck =/= B.ck ) DIVIDEBY

  6. 1º Exemplo F (F#,Fnome, Nível, Cidade) PJ(J#,Pjnome,Cidade) P (P#, Pnome,Cor,Peso,Cidade) FPJ(F#,P#,J#,QTD) • Detalhes de todos os projectos • P • SELECT * FROM P

  7. 2º Exemplo F (F#,Fnome, Nível, Cidade) PJ(J#,Pjnome,Cidade) P (P#, Pnome,Cor,Peso,Cidade) FPJ(F#,P#,J#,QTD) • Nome dos fornecedores que fornecem peça P1 • ((F JOIN FPJ) WHERE P# = P1) [Fnome] • SELECTDISTINCT Fnome FROM F, FPJ WHERE P# = P1 AND F.F# =FPJ.F# Porquê o JOIN em vez do TIMES ?

  8. 3º Exemplo F (F#,Fnome, Nível, Cidade) PJ(J#,Pjnome,Cidade) P (P#, Pnome,Cor,Peso,Cidade) FPJ(F#,P#,J#,QTD) • Números das Peças fornecidas por fornecedores de Londres • ((F JOIN FPJ) WHERE “cidade=Londres”) [P#] • SELECTDISTINCT P# FROM F, PJ WHERE “Cidade = Londres” AND F.F# = JFP.F#

  9. 4º Exemplo F (F#,Fnome, Nível, Cidade) PJ(J#,Pjnome,Cidade) P (P#, Pnome,Cor,Peso,Cidade) FPJ(F#,P#,J#,QTD) • Nomes de fornecedores que não fornecem a peça P2. • SELECT Fnome FROM F WHERE NOT EXISTS (SELECT * FROM FPJ WHERE F.F# = FPJ.F# ANDSPJ.F# = ´P2´)

  10. 5º Exemplo F (F#,Fnome, Nível, Cidade) PJ(J#,Pjnome,Cidade) P (P#, Pnome,Cor,Peso,Cidade) FPJ(F#,P#,J#,QTD) • Nomes de fornecedores que forneceram todas as peças. • (( FPJ[F#,P#] DIVIDEBY P[P#]) JOIN F ) [Fnome] • SELECT Fnome FROM F, FPJ WHERE NOT EXISTS

  11. A sequência “SELECT-FROM-WHERE-GROUPBY-HAVING-ORDERBY” SELECT a1,a2,...,an FROM Tx,Ty,...Tz WHERE condições1 GROUPBY ai,…,aj HAVING condições2 ORDERBY ap,…,aq T5 = T4 [a1,a2,...,an] (ou EXTEND ) T1= Tx TIMES Ty ...TIMES TZ T2 = T1 WHERE Condições1 T3 = T2 GROUPBY ai,…,aj T4 = T3 WHERE condições 2 T6 = T5 ordered by ap,…,aq

  12. GROUPBY a1 GROUPBY a1,a2 Agrupar Por a1 a2 a3 1 a x 1 b y 1 b z 2 a x 3 e x 4 b w 4 b x a1 a2 a3 a x 1 b y b z 2 a x 3 e x 4 b w b x a1 a2 a3 1 a x 1 b y 1 z 2 a x 3 e x 4 b w 4 b x

  13. Exemplo 1Pessoas que vivem na mesma Cidade T1 = (Vivem AS Tx) TIMES (Vivem As Ty) Vivem Pessoa Cidade António Lisboa João Porto Pedro Coimbra Zé Lisboa Rui Coimbra Tx.Pessoa Tx.Cidade Ty.Pessoa Ty.Cidade António Lisboa António Lisboa António Lisboa João Porto António Lisboa Pedro Coimbra António Lisboa Zé Lisboa António Lisboa Rui Coimbra João Porto António Lisboa João Porto João Porto João Porto Pedro Coimbra João Porto Zé Lisboa João Porto Rui Coimbra ………… ………... Rui Coimbra António Lisboa Rui Coimbra João Porto Rui Coimbra Pedro Coimbra Rui Coimbra Zé Lisboa Rui Coimbra Rui Coimbra SELECT tx.Pessoa, ty,Pessoa FROM Vivem AS Tx, Vivem As Ty WHERE Tx.Cidade = Ty.Cidade

  14. Exemplo 1Pessoas que vivem na mesma Cidade Tx.Pessoa Tx.Cidade Ty.Pessoa Ty.Cidade António Lisboa António Lisboa António Lisboa João Porto António Lisboa Pedro Coimbra António Lisboa Zé Lisboa António Lisboa Rui Coimbra João Porto António Lisboa João Porto João Porto João Porto Pedro Coimbra João Porto Zé Lisboa João Porto Rui Coimbra ………… ………... Rui Coimbra António Lisboa Rui Coimbra João Porto Rui Coimbra Pedro Coimbra Rui Coimbra Zé Lisboa Rui Coimbra Rui Coimbra T2 = T1 WHERE Tx.Cidade = Ty.Cidade Tx.Pessoa Tx.Cidade Ty.Pessoa Ty.Cidade António Lisboa António Lisboa António Lisboa Zé Lisboa Pedro Coimbra Pedro Coimbra Pedro Coimbra Rui Coimbra Zé Lisboa António Lisboa Zé Lisboa Zé Lisboa Rui Coimbra Pedro Coimbra Rui Coimbra Rui Coimbra SELECT tx.Pessoa, ty,Pessoa FROM Vivem AS Tx, Vivem As Ty WHERE Tx.Cidade = Ty.Cidade

  15. Exemplo 1Pessoas que vivem na mesma Cidade Tx.Pessoa Tx.Cidade Ty.Pessoa Ty.Cidade António Lisboa António Lisboa António Lisboa Zé Lisboa Pedro Coimbra Pedro Coimbra Pedro Coimbra Rui Coimbra Zé Lisboa António Lisboa Zé Lisboa Zé Lisboa Rui Coimbra Pedro Coimbra Rui Coimbra Rui Coimbra T5 = T4 =T3 = T2 [tx.Pessoa, ty,Pessoa] Tx.Pessoa Ty.Pessoa António António António Zé Pedro Pedro Pedro Rui Zé António Zé Zé Rui Pedro Rui Rui SELECT tx.Pessoa, ty,Pessoa FROM Vivem AS Tx, Vivem As Ty WHERE Tx.Cidade = Ty.Cidade

  16. Exemplo 2Nº de pessoas em cada Cidade, que não seja Porto e que tenham mais do que um cliente, ordenado por ordem decrescente Vivem Cliente Cidade António Lisboa João Porto Pedro Coimbra Zé Lisboa Rui Coimbra Adriano Lisboa T1 = Vivem T2 = Vivem WHERE Cidade <> ‘Porto’ Cliente Cidade António Lisboa Pedro Coimbra Zé Lisboa Rui Coimbra Adriano Lisboa SELECT Cidade , count (*) FROM Vivem WHERE Cidade <> ‘Porto’ GROUPBY Cidade HAVING count(*) > 2 ORDERBY 2

  17. Exemplo 2Nº de pessoas em cada Cidade, que não seja FARO e que tenham mais do que um cliente, ordenado por ordem decrescente T2 T3 = T2 GROUPBY Cidade Cliente Cidade António Lisboa Pedro Coimbra Zé Lisboa Rui Coimbra Adriano Lisboa Cliente Cidade António Lisboa Zé Adriano Pedro Coimbra Rui T4 = T3 WHERE count(*) > 2 SELECT Cidade , count (*) FROM Vivem WHERE Cidade <> ‘Faro’ GROUPBY Cidade HAVING count(*) > 2 ORDERBY 2 Cliente Cidade António Lisboa Zé Adriano

  18. Exemplo 2Nº de pessoas em cada Cidade, que não seja FARO e que tenham mais do que um cliente, ordenado por ordem decrescente T4 T5 = T4 [Cidade], EXTEND count(*) Cliente Cidade António Lisboa Zé Adriano Cidade, count(*) Lisboa 3 T6 = T5 ORDERED BY count(*) SELECT Cidade , count (*) FROM Vivem WHERE Cidade <> ‘Faro’ GROUPBY Cidade HAVING count(*) > 2 ORDERBY 2 Cidade, count(*) Lisboa 3

More Related