Simple XQuery FLWOR Expressions

The simplest XQuery FLWOR expression might be something like this:

for $v in $doc//video return $v 

This returns all of the video elements in $doc.

We can add a bit of substance by adding XQuery where and return clauses:

for $v in $doc//video 
where $v/year = 1999 
return $v/title 

This returns all of the titles of videos released in 1999.

If you know SQL, that XQuery probably looks reassuringly similar to the equivalent SQL statement:

SELECT v.title  
FROM video v  
WHERE v.year = 1999 

And if you know XPath, you might be wondering why our XQuery cannot be written as this:

$doc//video[year=1999]/title 

Well, you can. This XPath expression is completely equivalent to the FLWOR expression above, and furthermore, it is a legal XQuery query. In fact, every legal XPath expression is also legal in XQuery. Thus the first query in this section can be written as:

$doc//video 

Which style you prefer seems to depend on where you are coming from: if you have been using XML for years, especially XML with a deep hierarchy as found in "narrative" documents, then you will probably be comfortable with path expressions. But if you are more used to thinking of your data as representing a table, then the FLWOR style might suit you better.

As you will see, FLWOR expressions are a lot more powerful than path expressions when it comes to doing joins. But for simple queries, the capabilities overlap and you have a choice. Although it might be true that in SQL every query is a SELECT statement, it is not so that in XQuery every query has to be a FLWOR expression.

 
Free Stylus Studio XML Training: