...

sql92 e xquery1.0 a confronto - DBGroup

by user

on
Category: Documents
8

views

Report

Comments

Transcript

sql92 e xquery1.0 a confronto - DBGroup
Università degli Studi di Modena e Reggio Emilia
Facoltà di Ingegneria - Sede di Modena
Corso di Laurea in Ingegneria Informatica
SQL92 E XQUERY1.0
A CONFRONTO
Relatore:
Prof. Sonia Bergamaschi
Tesi di Laurea di:
Cristina Iotti
SQL92 e XQuery1.0 a confronto
1
Contenuti:
• SQL92 e il modello dati relazionale
• XQuery1.0, XML e il modello dati semistrutturato
• Confronto sintassi di query semplici
• Confronto di alcune parole chiave di SQL92 e
XQuery1.0
• Conclusioni
SQL92 e XQuery1.0 a confronto
2
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
PERSONE
NOME
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
3
XQuery1.0 e il Modello Semistrutturato - XML
• XQuery nasce per interrogare
Esempio di documento XML:
dati di tipo semi-strutturato,
sempre più diffusi grazie
<persone>
all’affermazione di XML
<persona>
(Extensible Markup Language)
<nome> Mario Rossi </nome>
<età> 25 </età>
più completo di HTML nella
<email>[email protected]</email>
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
</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
4
Modello Semistrutturato e Modello Relazionale
Persone
Persona
nome
Persona
Paola Bianchi
nome
Mario Rossi
età
25
PERSONE
età
32
email
email
via Roma 22
Persona
[email protected]
nome
[email protected]
NOME
indirizzo
ETÀ
età
indirizzo
25
via Appia 823
Michele Neri
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
5
Analisi Sintattica: Struttura Base di Query
• In SQL92:
query specification ::= “SELECT” set quantifier? select list table expression
table expression ::=from clause
where clause? group by clause? having clause?
• In XQuery1.0:
FLWR Expr ::=
(ForClause | LetClause)+
WhereClause? "return" ExprSingle
• Esempio: selezionare le persone di 25 anni:
In SQL92:
In XQuery1.0:
SELECT nome
FROM Persona
WHERE età = 25
for $p in document(“Persone.xml”)//persona
where $p/età = 25
return $p/nome
SQL92 e XQuery1.0 a confronto
6
Quadro Sinottico del Confronto
SQL 92
XQuery 1.0
SELECT
FROM
WHERE
=, <>, >, <, >=, <=, AND, NOT, OR
BETWEEN…AND
LIKE
IS NULL
EXISTS
ORDER BY (ASC | DESC)
DISTINCT
UNION
IN | NOT IN
GROUP BY
HAVING
FIRST
AVG(), SUM(), COUNT()
CURRENT()
return
in + for
let
where
=, <>, >, <, >=, <=, and, not, or
contains
empty
exists
some | every … in … satisfies
<<, >>
order by (ascending | descending)
distinct-values
union
intersect | except
let + order by
if...then...else
avg(), sum(), count()
current()
SQL92 e XQuery1.0 a confronto
• 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”)
7
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:
In XQuery 1.0:
SELECT codice, prezzo,
pno, nome
FROM Magazzino
ORDER BY codice DESC
for $a in document(“Mag.xml”)//articolo
order by $a/codice descending
return
<risultato> {$a/codice}
{$a/prezzo}
{$a/pno}
{$a/nome}
</risultato>
SQL92 e XQuery1.0 a confronto
8
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:
In XQuery1.0:
SELECT num, avg(price)
FROM Catalogs
GROUP BY num
HAVING count(*) >=3
for $n in distinct-values(document("catal.xml")//num)
let $i := document("catalog.xml")//item[num = $n]
where count($i) >= 3
order by $n
return
<well-supplied-item>
<num> {$n} </num>
<avgprice> {avg($i/price)} </avgprice>
</well-supplied-item>
SQL92 e XQuery1.0 a confronto
9
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:
In XQuery1.0:
SELECT code, name, number
FROM Articoli A, Stock S
WHERE A.code = S.code
for $a in document(”Articoli.xml")/Articolo,
$s in document("Stock.xml")/Stock,
where $a/code = $s/code
return <answer>
{$a/code}
{$a/name}
{$s/number}
</answer>
SQL92 e XQuery1.0 a confronto
10
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
11
Confronto fra SQL92 e XQuery1.0
SQL92
XQUERY1.0
VANTAGGI:
• Sintetico
• Alta velocità di interrogazione
• Basato su un modello con
solide basi teoriche
• Utile per associare e correlare
molti record per produrre
risultati sintetici
VANTAGGI:
• Maggiore flessibilità (funzioni
definibili dall’utente)
• Il risultato della query è un
documento (con propria gerarchia
interna)
SVANTAGGI:
• Poco flessibile
SVANTAGGI:
• Più prolisso
• Meno efficiente
SQL92 e XQuery1.0 a confronto
12
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.
SQL92 e XQuery1.0 a confronto
13
Fly UP