Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena
SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e...
-
Upload
luciano-fabris -
Category
Documents
-
view
212 -
download
0
Transcript of SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e...
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
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
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]
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>
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
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:
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”)
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>
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>
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>
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) };
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
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.