Difference between revisions of "Space Race/MATCH Tutorial"
ChrisHouston (talk | contribs) |
ChrisHouston (talk | contribs) |
||
Line 10: | Line 10: | ||
<div class="q nonum" data-lang="neo4j"> | <div class="q nonum" data-lang="neo4j"> | ||
<p>Use <code>MATCH</code> and <code>RETURN</code> to return nodes. Use <code>:</code> to specify what label(s) you wish the returned nodes to have. Not specifying any label will return ALL nodes</p> | <p>Use <code>MATCH</code> and <code>RETURN</code> to return nodes. Use <code>:</code> to specify what label(s) you wish the returned nodes to have. Not specifying any label will return ALL nodes</p> | ||
− | <p class='strong'>Show Institutions instead of Astronauts<p> | + | <p class='strong'>Show Institutions instead of Astronauts</p> |
<pre class="def"><nowiki>MATCH(n:Astronaut) RETURN n;</nowiki> | <pre class="def"><nowiki>MATCH(n:Astronaut) RETURN n;</nowiki> | ||
</pre> | </pre> | ||
Line 21: | Line 21: | ||
<p>Use <code>WHERE</code> to specify conditions and the <code>.</code> operator to access individual properties of a node.</p> | <p>Use <code>WHERE</code> to specify conditions and the <code>.</code> operator to access individual properties of a node.</p> | ||
<p>The item in <code>[]</code> represents a <strong>relationship</strong> between nodes, in this case the relationship possessing the label "BORN_IN"</p> | <p>The item in <code>[]</code> represents a <strong>relationship</strong> between nodes, in this case the relationship possessing the label "BORN_IN"</p> | ||
− | <p class='strong'>Show the Surnames of Astronauts born in Russia, and the full name of Russia rather than the USA. Hint: Use the ISO 3166-1 Alpha-2 code in all caps<p> | + | <p class='strong'>Show the Surnames of Astronauts born in Russia, and the full name of Russia rather than the USA. Hint: Use the ISO 3166-1 Alpha-2 code in all caps</p> |
<pre class="def"><nowiki>MATCH(n:Astronaut)-[:BORN_IN]->(c:Country) WHERE c.abbrev ='USA' RETURN n.surname, c.name;</nowiki> | <pre class="def"><nowiki>MATCH(n:Astronaut)-[:BORN_IN]->(c:Country) WHERE c.abbrev ='USA' RETURN n.surname, c.name;</nowiki> | ||
</pre> | </pre> | ||
Line 32: | Line 32: | ||
<div class="q nonum" data-lang="neo4j"> | <div class="q nonum" data-lang="neo4j"> | ||
<p>When simply matching based on properties of a node, use the <code>{}</code> with the format <code>{property:value}</code> | <p>When simply matching based on properties of a node, use the <code>{}</code> with the format <code>{property:value}</code> | ||
− | <p class='strong'>Return Neil Armstrong's date of birth<p> | + | <p class='strong'>Return Neil Armstrong's date of birth</p> |
<pre class="def"><nowiki>MATCH(n:Astronaut{surname:"Gagarin",first_name:"Yuri"})RETURN n.dob;</nowiki> | <pre class="def"><nowiki>MATCH(n:Astronaut{surname:"Gagarin",first_name:"Yuri"})RETURN n.dob;</nowiki> | ||
</pre> | </pre> | ||
Line 42: | Line 42: | ||
==The Young and Old== | ==The Young and Old== | ||
<div class="q nonum" data-lang="neo4j"> | <div class="q nonum" data-lang="neo4j"> | ||
− | <p><code>ORDER BY</code> works similarly to SQL, defaulting to ordering from low to high value. | + | <p><code>ORDER BY</code> works similarly to SQL, defaulting to ordering from low to high value. Adding <code>DESC</code> instead orders the result in descending order</p> |
− | <p class='strong'>Return the names of the Astronauts ordered by their date of birth from earlier to later<p> | + | <p class='strong'>Return the names of the Astronauts ordered by their date of birth from earlier to later</p> |
<pre class="def"><nowiki>MATCH(n:Astronaut) RETURN n.first_name, n.surname ORDER BY n.surname;</nowiki> | <pre class="def"><nowiki>MATCH(n:Astronaut) RETURN n.first_name, n.surname ORDER BY n.surname;</nowiki> | ||
</pre> | </pre> | ||
Line 50: | Line 50: | ||
</div> | </div> | ||
+ | ==Nicknames== | ||
+ | <div class="q nonum" data-lang="neo4j"> | ||
+ | <p>In Neo4j, rather empty than properties being assigned a value of <code>NULL</code> like in SQL, properties which are not assigned a value do not exist at all </p> | ||
+ | <p> This can be checked using the <code>EXISTS()</code> comparator</p> | ||
+ | <p class='strong'>Return the nicknames of the Astronauts who have them in reverse alphabetical order</p> | ||
+ | <pre class="def"><nowiki>MATCH(n:Astronaut)WHERE EXISTS(n.middle_names) RETURN n.middle_names; </nowiki> | ||
+ | </pre> | ||
+ | <pre class="ans"><nowiki>MATCH(n:Astronaut)WHERE EXISTS(n.nickname) RETURN n.nickname ORDER BY n.nickname DESC;</nowiki> | ||
+ | </pre> | ||
+ | </div> | ||
{{Acknowledgements}} | {{Acknowledgements}} |
Revision as of 09:31, 28 November 2019
Contents
Visualisation
Click here for 3d graph visualisation
Institutions
Use MATCH
and RETURN
to return nodes. Use :
to specify what label(s) you wish the returned nodes to have. Not specifying any label will return ALL nodes
Show Institutions instead of Astronauts
MATCH(n:Astronaut) RETURN n;
MATCH(n:Institution) RETURN n;
Born in Russia
Use WHERE
to specify conditions and the .
operator to access individual properties of a node.
The item in []
represents a relationship between nodes, in this case the relationship possessing the label "BORN_IN"
Show the Surnames of Astronauts born in Russia, and the full name of Russia rather than the USA. Hint: Use the ISO 3166-1 Alpha-2 code in all caps
MATCH(n:Astronaut)-[:BORN_IN]->(c:Country) WHERE c.abbrev ='USA' RETURN n.surname, c.name;
MATCH(n:Astronaut)-[:BORN_IN]->(c:Country) WHERE c.abbrev= 'RU' RETURN n.surname, c.name;
Neil Armstrong's Birthday
When simply matching based on properties of a node, use the {}
with the format {property:value}
Return Neil Armstrong's date of birth
MATCH(n:Astronaut{surname:"Gagarin",first_name:"Yuri"})RETURN n.dob;
MATCH(n:Astronaut{surname:"Armstrong",first_name:"Neil"})RETURN n.dob;
The Young and Old
ORDER BY
works similarly to SQL, defaulting to ordering from low to high value. Adding DESC
instead orders the result in descending order
Return the names of the Astronauts ordered by their date of birth from earlier to later
MATCH(n:Astronaut) RETURN n.first_name, n.surname ORDER BY n.surname;
MATCH(n:Astronaut) RETURN n.first_name, n.surname ORDER BY n.dob;
Nicknames
In Neo4j, rather empty than properties being assigned a value of NULL
like in SQL, properties which are not assigned a value do not exist at all
This can be checked using the EXISTS()
comparator
Return the nicknames of the Astronauts who have them in reverse alphabetical order
MATCH(n:Astronaut)WHERE EXISTS(n.middle_names) RETURN n.middle_names;
MATCH(n:Astronaut)WHERE EXISTS(n.nickname) RETURN n.nickname ORDER BY n.nickname DESC;
Acknowledgements
NoSQLZoo is made possible by the following open-source technologies: