SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e...

13
SQL92 e XQuery1.0 a confr onto 1 SQL92 E XQUERY1.0 A CONFRONTO versità degli Studi di Modena e Reggio Emili Facoltà di Ingegneria - Sede di Modena Corso di Laurea in Ingegneria Informatica Relatore: Tesi di Laurea di: Prof. Sonia Bergamaschi Cristina Iotti

Transcript of SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e...

Page 1: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 1

SQL92 E XQUERY1.0 A CONFRONTO

Università degli Studi di Modena e Reggio Emilia

Facoltà di Ingegneria - Sede di ModenaCorso di Laurea in Ingegneria Informatica

Relatore: Tesi di Laurea di:Prof. Sonia Bergamaschi Cristina Iotti

Page 2: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 2

Contenuti:

• SQL92 e il modello dati relazionale• XQuery1.0, XML e il modello dati semi-

strutturato• Confronto sintassi di query semplici• Confronto di alcune parole chiave di SQL92 e

XQuery1.0• Conclusioni

Page 3: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 3

SQL92 e il Modello Relazionale

• SQL92 compie interrogazioni su dati di tipo relazionale

• Il modello relazionale fu introdotto da E.F.Codd nel 1970

• La struttura base del modello relazionale è la relazione

• La relazione viene rappresentata con una tabella bidimensionale

PERSONENOME ETÀ EMAIL

Mario Rossi 25 [email protected]

Paola Bianchi 32 [email protected]

Michele Neri 25 [email protected]

Piero Verdi 27 [email protected]

Page 4: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 4

XQuery1.0 e il Modello Semistrutturato - XML• XQuery nasce per interrogare

dati di tipo semi-strutturato, sempre più diffusi grazie all’affermazione di XML (Extensible Markup Language) più completo di HTML nella gestione di informazioni Web

• Punti di forza di XML:– Estensibilità (tag

personalizzabili)– Possibilità di uso di tag

significativi– Focalizzazione sul contenuto

informativo di una sorgente piuttosto che sulla sua rappresentazione grafica

Esempio di documento XML:

<persone> <persona>

<nome> Mario Rossi </nome><età> 25 </età><email>[email protected]</email>

</persona> <persona>

<nome> Paola Bianchi </nome><età> 32 </età><email>[email protected]</email><indirizzo>via Roma22</indirizzo>

</persona> <persona>

<nome> Michele Neri </nome><età> 25 </età><indirizzo>via Appia 823</indirizzo>

</persona></persone>

Page 5: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 5

Modello Semistrutturato e Modello RelazionalePersone

nomenome etàetà emailemail

Mario Rossi 25 [email protected]

Persona Persona

Persona

nomenome etàetàindirizzoindirizzo

emailemail

nomenome etàetà indirizzoindirizzo

Paola Bianchi32 [email protected]

via Roma 22

via Appia 82325Michele Neri

NOME ETÀ EMAIL

Mario Rossi 25 [email protected]

Paola Bianchi 32 [email protected]

Michele Neri 25 [email protected]

Piero Verdi 27 [email protected]

PERSONE

Page 6: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 6

Analisi Sintattica: Struttura Base di Query

In SQL92:

SELECT nomeFROM PersonaWHERE età = 25

In XQuery1.0:

for $p in document(“Persone.xml”)//personawhere $p/età = 25return $p/nome

query specification ::= “SELECT” set quantifier? select list table expression

table expression ::=from clausewhere clause? group by clause? having clause?

FLWR Expr ::=

(ForClause | LetClause)+ WhereClause? "return" ExprSingle

• In SQL92::

• In XQuery1.0:

• Esempio: selezionare le persone di 25 anni:

Page 7: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 7

Quadro Sinottico del Confronto

SQL 92 XQuery 1.0

SELECT returnFROM in + for- letWHERE where=, <>, >, <, >=, <=, AND, NOT, OR =, <>, >, <, >=, <=, and, not, orBETWEEN…AND -LIKE containsIS NULL emptyEXISTS exists- some | every … in … satisfies- <<, >>ORDER BY (ASC | DESC) order by (ascending | descending)DISTINCT distinct-values UNION unionIN | NOT IN intersect | exceptGROUP BY let + order byHAVING -FIRST -- if...then...elseAVG(), SUM(), COUNT() avg(), sum(), count()CURRENT() current()

• Alcune parole chiave sono comuni ai due linguaggi (“where”)

• Altre hano nomi diversi, ma uguale significato (“IN” e “intersect”)

• Altre ancora non hanno corrispondente (“let”)

Page 8: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 8

Order By in SQL92 e in XQuery1.0 • In SQL92 e in XQuery1.0 la parola chiave “order by” svolge la stessa funzione:

ordina il risultato– ASC o DESC (SQL92)

– ascending o descending (XQuery1.0)

• Esempio: Selezionare codice, prezzo, numero e nome di articoli presenti in magazzino, in ordine decrescente di codice.

In SQL92:

SELECT codice, prezzo,pno, nomeFROM MagazzinoORDER BY codice DESC

In XQuery 1.0:

for $a in document(“Mag.xml”)//articoloorder by $a/codice descendingreturn <risultato> {$a/codice}

{$a/prezzo} {$a/pno} {$a/nome}</risultato>

Page 9: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 9

Raggruppamenti • Sia in XQuery1.0 che in SQL92 può capitare di dover compiere

operazioni su gruppi di elementi (es. funzioni “sum()”, “avg()”)• Per questo scopo in SQL92 si utilizza “GROUP BY” , mentre in

XQuery1.0 si ricorre a “let” + “order by”• Esempio: mostrare i numeri e il prezzo medio degli articoli che

hanno come minimo tre fornitori.

In SQL92:

SELECT num, avg(price)FROM CatalogsGROUP BY numHAVING count(*) >=3

In XQuery1.0:

for $n in distinct-values(document("catal.xml")//num)let $i := document("catalog.xml")//item[num = $n]where count($i) >= 3order by $nreturn <well-supplied-item> <num> {$n} </num> <avgprice> {avg($i/price)} </avgprice> </well-supplied-item>

Page 10: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 10

Join • Per effettuare query su più di una tabella (o documento) si

utilizza il costrutto di join

• Esistono diversi tipi di join

• Esempio di inner-join: selezionare gli articoli (da tabella e documento “Articoli”) e il loro numero di stock (da tabella e documento “Stock”)

In SQL92:

SELECT code, name, numberFROM Articoli A, Stock SWHERE A.code = S.code

In XQuery1.0:

for $a in document(”Articoli.xml")/Articolo, $s in document("Stock.xml")/Stock,where $a/code = $s/codereturn <answer>

{$a/code}{$a/name}{$s/number}

</answer>

Page 11: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 11

Funzioni • SQL92 prevede funzioni predefinite (fra cui SUM(), AVG(),

COUNT() , CURRENT() , MAX(), MIN())

• XQuery1.0 prevede oltre a funzioni predefinite anche la possibilità per l’utente di definire proprie funzioni

• Esempio: funzione che permette di testare (restituendo true o false) se un nodo preceda un altro nodo in un documento (senza essere un suo nodo genitore)

declare function local:precedes($a as node(), $b as node()) as boolean { $a << $b and empty($a//node() intersect $b) };

Page 12: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 12

Confronto fra SQL92 e XQuery1.0

SQL92VANTAGGI:

• Sintetico

• Alta velocità di interrogazione

• Basato su un modello con solide basi teoriche

• Utile per associare e correlare molti record per produrre risultati sintetici

SVANTAGGI:

• Poco flessibile

XQUERY1.0VANTAGGI:

• Maggiore flessibilità (funzioni definibili dall’utente)

• Il risultato della query è un documento (con propria gerarchia interna)

SVANTAGGI:

• Più prolisso

• Meno efficiente

Page 13: SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.

SQL92 e XQuery1.0 a confronto 13

Conclusioni

• Numerose somiglianze fra parole chiave dei linguaggi SQL92 e XQuery1.0 (es. “where”, “exists” ,”order by”)

• Il successo di XQuery1.0 dipende dalla diffusione di XML

• Molte case distributrici di software (Microsoft, IBM e Oracle) stanno pensando di fornire supporti per XQuery1.0 assieme a SQL.