< 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 citiy.
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 fy 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. PS: without DISTINCT it would have the intersecting city doubled.
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 | Mathmatical | SPARQL | |
|---|---|---|---|
|  | And | A. B. | |
|  | A. FILTER NOT EXISTS{ B. } | ||
|  | A. OPTIONAL{ B. } | ||
|  | Or | { A. } UNION { B. } | 
    This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.