Comments
Description
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