411 REFERENCE · Wikibooks
SPARQL/UNION
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
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. } 27 for 55 or 29999.
{?child wdt:P22 ?parent. } UNION {?child wdt:P25 ?parent. } 22 or 25.
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 100px And A. B. 100px A. FILTER NOT EXISTS{ B. } 100px A. OPTIONAL{ B. } 100px Or { A. } UNION { B. }