You are on page 1of 37

y

FLWOR
XQuery
( flower - ).

FLWOR
:
y

y
y
y

FLWOR 5 :
y For
y Let
y Where
y Order By
y Return

FLWOR

for let


return.
t

where,, order byy
.
FLWOR


.
.

ACC

for $product in doc("catalog.xml")/catalog/product


let $name :=
: $product/name
where $product/@dept = "ACC"
order byy $name
return $name

<name language="en">Deluxe Travel Bag</name>


<name language="en">Floppy Sun Hat</name>
.

for
for
,
prod, XML Xpath
, doc("catalog.xml")/catalog/product.
, for FLWOR .
let
let .
name $product/name
where
where (predicates).
$product/@dept = "ACC" product

dept
d t
ACC.
ACC
order by
order by .
return
t
return .

for


FLWOR ( for)

for.
for
.

XQuery
for
.


for .

:
for $i in 1 to 3
return <oneEval>{$i}</oneEval>

<oneEval>1</oneEval>
<oneEval>2</oneEval>
<oneE al>3</oneE al>
<oneEval>3</oneEval>

:
for $
$i in reverse(1
( to 3))
return <oneEval>{$i}</oneEval>

<oneEval>3</oneEval>
<oneEval>2</oneEval>
<oneEval>1</oneEval>
.

:
for $
$i in ((1 to 6)[.
)[ mod 2 = 0]]
return <oneEval>{$i}</oneEval>

<oneEval>2</oneEval>
<oneEval>4</oneEval>
<oneEval>6</oneEval>
.

10

for $i in (1, 2)
for $j in ("a"
("a", "b")
return <oneEval>i is {$i} and j is {$j}</oneEval>

<oneEval>i is 1 and j is a</oneEval>


<oneEval>i is 1 and j is b</oneEval>
<oneEval>i is 2 and j is a</oneEval>
<oneEval>i is 2 and j is b</oneEval>
.

11

for $i in (1, 2), $j in ("a", "b")


return <oneEval>i is {$i} and j is {$j}</oneEval>

<oneEval>i
oneEval i is 1 and j is a</oneEval>
a /oneEval
<oneEval>i is 1 and j is b</oneEval>
<oneEval>i is 2 and j is a</oneEval>
<oneEval>i is 2 and j is b</oneEval>
.

12

let
.
let for let
/
.

13

:
let $
$i := ((1 to 3))
return <oneEval>{$i}</oneEval>
:

<oneEval>1 2 3<oneEval>

14




let

for ,

where, order by
y return.
:
let $doc := doc("catalog.xml")
for $prod in $doc//product
l t$
let
$prodDept
dD t := $prod/@dept
$ d/@d t
let $prodName := $prod/name
where $prodDept = "ACC"
ACC or $prodDept = "WMN"
WMN
return $prodName

15

let
,
:
l t$
let
$prodDept
dD t := $prod/@dept,
$ d/@d t $
$prodName
dN
:= $prod/name
$ d/

16

where
/ FLWOR.

where
h



for let.

:
where $prodDept = "ACC" or $prodDept = "WMN"

17

FLWOR where
.

boolean
b l
and
d or.

for $prod in doc("catalog.xml")//product


let $prodDept := $prod/@dept
where $prod/number > 100
and starts-with($prod/name, "F")
and exists($prod/colorChoices)
and ($prodDept = "ACC" or $prodDept = "WMN")
return $prod

18

where

.

..
y $prod/number > 100
y number > 100

false
true.
..
y where $prod/name
y where $prod/name
y where $numProds

$prod name true


$prod name false
$numProds true



y where exists($prod/name)
y where $numProds != 0

19

FLWOR
for,

XML .
order by
.

for $item in doc("order.xml")//item


order by $item/@num
return
t
$it
$item

20

order by .

,
,

(ascending) (default)

descending.

for $item in doc("order.xml")//item


order by $item/@dept descending,,$item/@num
return $item

21

return /
.


.
return select SQL.
SQL
:

for $i in (1 to 3)
return <oneEval>{$i}</oneEval>
for $i in (1 to 3)
return (<one>{$i}</one>, <two>{$i}</two>)

22

:
let $count := $count + 1

23

.
some

,
every

.

:
y

((some every)
y)
y in
y satisfies .

24


some $dept in doc("catalog.xml")//product/@dept
satisfies ($dept = "ACC")
dept product ACC
every $dept in doc("catalog.xml")//product/@dept
doc("catalog xml")//product/@dept
satisfies ($dept = "ACC")
dept product ACC
not(some $dept in doc("catalog.xml")//product/@dept
satisfies ($dept = "ACC"))
dept product ACC

25

distinct-values
di i
l

distinct-values(doc("catalog.xml")//product/@dept)

(("WMN"
WMN , "ACC"
ACC , "MEN")
MEN )

26

let $prods := doc("catalog.xml")//product


for $d in distinct-values($prods/@dept)
distinct values($prods/@dept),
$n in distinct-values($prods[@dept = $d]/number)
return <result dept="{$d}" number="{$n}"/>

<result
lt d
dept="WMN"
t "WMN" number="557"/>
b "557"/
<result dept="ACC" number="563"/>
<result dept="ACC"
dept ACC number
number="443"/>
443 />
<result dept="MEN" number="784"/>

27

XQuery

XQ

FLWOR

f $item
for
$it
in
i doc("order.xml")//item,
d (" d
l")//it
$product in doc("catalog.xml")//product[number = $item/@num]
return <item num="{$item/@num}"
num {$item/@num}
name="{$product/name}"
quan="{$item/@quantity}"/>

28

<item num="557" name="Fleece Pullover" quan="1"/>


<item num="563" name="Floppy Sun Hat" quan="1"/>
<item num="443" name="Deluxe Travel Bag" quan="2"/>
<item num="784" name="Cotton Dress Shirt" quan="1"/>
<item num="784" name="Cotton Dress Shirt" quan="1"/>
<item num="557" name="Fleece Pullover" quan="1"/>

29

for $item in doc("order.xml")//item,


$product in doc("catalog
doc( catalog.xml
xml")//product
)//product
where $item/@num = $product/number
return <item num="{$item/@num}"
name="{$product/name}"
quan="{$item/@quantity}"/>
.

30

for $item in doc("order.xml")//item,


$product in doc("catalog
doc( catalog.xml
xml")//product
)//product,
$price in doc("prices.xml")//prices/priceList/prod
where $item/@num = $product/number and
$product/number = $price/@num
return <item num="{$item/@num}"
name= {$product/name}
name="{$product/name}"
price="{$price/price}"/>

31

<item
i
num="557"
"557" name="Fleece
"Fl
Pullover"
P ll
" price="29.99"/>
i
"29 99"/
<item num="563" name="Floppy Sun Hat" price="69.99"/>
<item num="443"
num= 443 name=
name="Deluxe
Deluxe Travel Bag"
Bag price=
price="39
39.99
99"/>
/>
<item num="557" name="Fleece Pullover" price="29.99"/>

32

XML Schema ,,

XML Schema XML
.
(casting)

where $product/number = xs:integer($price/@num)

33

.
XQuery for

for $
$d in distinct-values(doc("order.xml")//item/@dept)
(
(
)
@ p)
let $items := doc("order.xml")//item[@dept = $d]
order by $d
return
t
<department
<d
t
t code="{$d}">{
d "{$d}">{
for $i in $items
order by
y $i/@num
@
return $i
}</department>

34


<department code="ACC">
<item dept="ACC" num="443" quantity="2"/>
<item dept="ACC" num="563" quantity="1"/>
</department>
<department code="MEN">
<item dept="MEN" num="784" quantity="1" color="white"/>
<item dept="MEN"
p
num="784" q
quantity="1"
y
color="gray"/>
g y
</department>
<department code="WMN">
<item dept="WMN" num="557" quantity="1" color="navy"/>
<item dept="WMN" num="557" quantity="1" color="black"/>
</department>
.

35


XQuery.
:

y Count
C
t
y Sum
y Avg
y Max
M
y Min

36


for $d in distinct-values(doc("order.xml")//item/@dept)
let $items := doc("order.xml")//item[@dept = $d]
order by $d
return <department code="{$d}"
numItems="{count($items)}"
distinctItemNums="{count(distinct-values($items/@num))}"
totQuant="{sum($items/@quantity)}"/>
Q
{
($
@q
y)}

<department code="ACC" numItems="2" distinctItemNums="2" totQuant="3"/>


<department code="MEN" numItems="2" distinctItemNums="1" totQuant="2"/>
<department
department code="WMN"
code WMN numItems
numItems="2"
2 distinctItemNums
distinctItemNums="1"
1 totQuant
totQuant="2"/>
2/

37

You might also like