Space Race/MATCH Tutorial

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

Using AS can alias the result column to whatever you wish, as long as it does not have spaces

```MATCH(n:Astronaut) RETURN n AS Astronauts;
```
```MATCH(n:Institution) RETURN n AS Institutions;
```

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 AS DateOfBirth;
```
```MATCH(n:Astronaut{surname:"Armstrong",first_name:"Neil"})RETURN n.dob AS DateOfBirth;
```

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 oldest to youngest.

```MATCH(n:Astronaut) RETURN n.first_name AS FirstName, n.surname AS Surname ORDER BY n.surname;
```
```MATCH(n:Astronaut) RETURN n.first_name AS FirstName, n.surname As Surname ORDER BY n.dob;
```

Nicknames

In Neo4j, rather than empty 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()` function

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 AS MiddleNames;
```
```MATCH(n:Astronaut)WHERE EXISTS(n.nickname) RETURN n.nickname AS Nicknames  ORDER BY n.nickname DESC;
```

Counting up the missions

As in SQL, aggregate functions can be applied to the results of the MATCH query. Unlike SQL you do not need to group by other non-aggregate parameters

Functions include `count()`, `avg()`, `min()`, `max()` and many more

Return the number of missions that took place in the Space Race.

```MATCH(m:LaunchVehicle)RETURN count(m) AS Count;
```
```MATCH(m:Mission) RETURN count(m) AS Count;
```

Failure Rate

Arithmetic and string operations can also be used in the return statement. Strings can be parsed in to integers or floats using the `toInteger()` or `toFloat()` functions

The reverse can be done using the `toString()` function.

Return the name and percentage failure rate for each LaunchVehicle, ordered by number of failures in descending order.

```MATCH(m:LaunchVehicle)RETURN m.name, toInteger(m.launches);
```
```MATCH(m:LaunchVehicle) RETURN m.name AS Name, ((toFloat(m.failures)/toFloat(m.launches))*100) AS PercentageFailureRate ORDER BY PercentageFailureRate DESC;
```

Acknowledgements

NoSQLZoo is made possible by the following open-source technologies: