Join e interrogazioni di tipo matematico

Join di tabelle

Il join è un operatore che correla dati in diverse tabelle, sulla base di valori uguali. Un'interrogazione che effettua un join sulle nostre due tabelle è: per ogni impiegato, trovare nome, cognome e città in cui lavora. La città viene reperita dalla tabella DIPARTIMENTI, grazie ai riferimenti ad essa che la tabella IMPIEGATI contiene nella colonna Dipart. Vediamo il foglio di stile XSL che realizza questa query:

<?xml version="1.0"?>
<xsl:template xmlns:xsl="http://www.w3.org/TR/WD-xsl">
[…]
  <TD ALIGN="CENTER">
  <xsl:for-each select="//
IMPIEGATO">
    <DIV><xsl:value-of select="
Nome"/></DIV>
  </xsl:for-each>
  </TD>
  <TD ALIGN="CENTER">
  <xsl:for-each select="//
IMPIEGATO">
    <DIV><xsl:value-of select="
Cognome"/></DIV>
  </xsl:for-each>
  </TD>
  <TD ALIGN="CENTER">
  <xsl:for-each select="//
IMPIEGATO">
    <DIV><xsl:value-of select="id(@
Dipart)/Citta"/></DIV>
  </xsl:for-each>
  </TD>
[…]
</xsl:template>

Per realizzare il join abbiamo utilizzato l'operatore id, che realizza i riferimenti incrociati di XML. Il pattern "id(@Dipart)" corrisponde esattamente all'elemento DIPARTIMENTO "puntato" da Dipart. Per ottenere l'informazione che cerchiamo, cioè la città dove si trova il dipartimento in cui lavora l'impiegato, basta utilizzare il pattern "id(@Dipart)/Citta". Il risultato dell'interrogazione è:

Nome

Cognome

Città

Mario
Carlo
Giuseppe
Franco
Carlo
Lorenzo
Paola
Marco

Rossi
Bianchi
Verdi
Neri
Rossi
Lanzi
Borroni
Franco

Milano
Torino
Milano
Roma
Milano
Milano
Milano
Torino

Interrogazioni di tipo matematico Espandi

Trovare la somma degli stipendi del dipartimento "Amministrazione". Il foglio di stile necessario è:

<?xml version="1.0"?>
<xsl:template xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:script>
    function somma(
nodo)
    {
      
totale=0;
      
stipendi = nodo.selectNodes("//IMPIEGATO[@Dipart
      ='
Amministrazione']/Stipendio");
      for (
i=stipendi.nextNode();i;i=stipendi.nextNode())
        
totale +=i.nodeTypedValue;
      return formatNumber(
totale*1000000,"#,###");
    }
  </xsl:script>
  <HTML><HEAD><TITLE>
Query</TITLE></HEAD><BODY>
  <TABLE BORDER="1">
  <TR><TD ALIGN="CENTER">
  <FONT FACE="ARIAL">
Somma stipendi</FONT>
  </TD></TR>
  <TR><TD ALIGN="CENTER">
  <DIV><xsl:eval>somma(this)</xsl:eval></DIV>
  </TD></TR>
  </TABLE>
  </BODY></HTML>
</xsl:template>

L'output che si ottiene è:

Somma stipendi

125.000.000

Slide precedenteProssima slideIndiceBibliografia

Altre slides: