SPARQL/UNION
Appearance
< SPARQL
Suppose the set A: 28 capitals in European Union SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?country wdt:P36 ?city. # capital
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
|
Suppose the set B: 3 cities with millions of inhabitants in European Union. SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?city wdt:P17 ?country. # city in a (European) country
?city wdt:P31 wd:Q1637706. # city with millions of inhabitants
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
|
The intersection of A and B, big capitals of the European Union, can simply be achieved by combining all the triples. This results in 1 city.
SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?country wdt:P36 ?city. # capital
?city wdt:P17 ?country. # city in a (European) country
?city wdt:P31 wd:Q1637706. # city with millions of inhabitants
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
All capitals of the European union, excluding big cities can be achieved by filtering using FILTER NOT EXISTS { }
. This results in the other 27 capitals.
SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?country wdt:P36 ?city. # capital
?city wdt:P17 ?country. # city in a (European) country
FILTER NOT EXISTS{ ?city wdt:P31 wd:Q1637706. } # NOT a city with millions of inhabitants
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Finally a UNION
of capitals and big cities result in 30 cities, one of which was deduplicated by DISTINCT
.
SELECT DISTINCT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
{ ?country wdt:P36 ?city. } # capital
UNION
{ ?city wdt:P17 ?country. # city in a (European) country
?city wdt:P31 wd:Q1637706. # a city with millions of inhabitants
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Mind that the 2 parts of the union should both be within brackets { ... } UNION { ... }
.
Two simpler examples of UNION
are
{?a wdt:P27 wd:Q55. } UNION { ?a wdt:P27 wd:Q29999. }
country of citizenship (P27) for Netherlands (Q55) or Kingdom of the Netherlands (Q29999).{?child wdt:P22 ?parent. } UNION {?child wdt:P25 ?parent. }
father (P22) or mother (P25).
- The last code can be simplified by using property path
?child wdt:P22|wdt:P25 ?parent.
An overview of all kind of joins:
Venn diagram | Mathematical | SPARQL | |
---|---|---|---|
And | A. B. | ||
A. FILTER NOT EXISTS{ B. } | |||
A. OPTIONAL{ B. } | |||
Or | { A. } UNION { B. } |