1 / 13

SQL92 E XQUERY1.0 A CONFRONTO

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

rafal
Download Presentation

SQL92 E XQUERY1.0 A CONFRONTO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  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. 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

  4. 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

  5. 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

  6. 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

  7. 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

  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, 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

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

  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, 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

  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. 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

  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. SQL92 e XQuery1.0 a confronto

More Related