130 likes | 250 Views
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: Tesi di Laurea di: Prof. Sonia Bergamaschi Cristina Iotti. Contenuti:. SQL92 e il modello dati relazionale
E N D
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: Tesi di Laurea di: Prof. Sonia Bergamaschi Cristina Iotti SQL92 e XQuery1.0 a confronto
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
NOME ETÀ EMAIL Mario Rossi 25 rossi.mario@tin.it Paola Bianchi 32 p.bianchi@tin.it Michele Neri 25 m.neri@virgilio.it Piero Verdi 27 verdi.p@tin.it 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 SQL92 e XQuery1.0 a confronto
XQuery1.0 e il Modello Semistrutturato - XML Esempio di documento XML: <persone> <persona> <nome> Mario Rossi </nome> <età> 25 </età> <email>rossi.mario@tin.it</email> </persona> <persona> <nome> Paola Bianchi </nome> <età> 32 </età> <email>p.bianchi@tin.it</email> <indirizzo>via Roma22</indirizzo> </persona> <persona> <nome> Michele Neri </nome> <età> 25 </età> <indirizzo>via Appia 823</indirizzo> </persona> </persone> • 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 SQL92 e XQuery1.0 a confronto
NOME ETÀ EMAIL Mario Rossi 25 rossi.mario@tin.it Paola Bianchi 32 p.bianchi@tin.it Michele Neri 25 m.neri@virgilio.it Piero Verdi 27 verdi.p@tin.it Modello Semistrutturato e Modello Relazionale Persone Persona indirizzo nome Persona età Persona email via Roma 22 Paola Bianchi 32 p.bianchi@tin.it età nome email età nome indirizzo 25 Mario Rossi rossi.mario@tin.it Michele Neri via Appia 823 25 PERSONE SQL92 e XQuery1.0 a confronto
Analisi Sintattica: Struttura Base di Query • In SQL92: query specification ::= “SELECT” set quantifier? select listtable 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: SELECT nome FROM Persona WHERE età = 25 In XQuery1.0: for $p in document(“Persone.xml”)//persona where $p/età = 25 return $p/nome SQL92 e XQuery1.0 a confronto
SQL 92XQuery 1.0 SELECT return FROM in + for - let WHERE where =, <>, >, <, >=, <=, AND, NOT, OR =, <>, >, <, >=, <=, and, not, or BETWEEN…AND - LIKE contains IS NULL empty EXISTS exists - some | every … in … satisfies - <<, >> ORDER BY (ASC | DESC) order by (ascending | descending) DISTINCT distinct-values UNION union IN | NOT IN intersect | except GROUP BY let + order by HAVING - FIRST - - if...then...else AVG(), SUM(), COUNT() avg(), sum(), count() CURRENT() current() Quadro Sinottico del 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”) SQL92 e XQuery1.0 a confronto
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, nome FROM Magazzino ORDER BY codice DESC In XQuery 1.0: 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
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 Catalogs GROUP BY num HAVINGcount(*) >=3 In XQuery1.0: for $n indistinct-values(document("catal.xml")//num) let $i := document("catalog.xml")//item[num = $n] wherecount($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
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, number FROM Articoli A, Stock S WHERE A.code = S.code In XQuery1.0: 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
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
XQUERY1.0 VANTAGGI: • Maggiore flessibilità (funzioni definibili dall’utente) • Il risultato della query è un documento (con propria gerarchia interna) SVANTAGGI: • Più prolisso • Meno efficiente Confronto fra SQL92 e XQuery1.0 SQL92 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 SVANTAGGI: • Poco flessibile SQL92 e XQuery1.0 a confronto
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