Intermediate Cypher Query Topics: Exploring Graph Data with Examples
Tags: bitnine, tutorial, cypher, apacheage
Published: 2023-05-12 15:41:18

## Introduction:
In our previous blog post embed [Getting Started with Cypher Query Language: A Beginner's Guide](https://dev.to/abdulsamad4068/getting-started-with-cypher-query-language-a-beginners-guide-2c5m), we covered the basics of Cypher, the declarative graph query language used for working with graph data in Neo4j databases. Building upon that foundation, this second part of our series will delve into intermediate Cypher query topics. We will explore more advanced features and techniques that will enable you to unlock the full potential of Cypher when querying and manipulating graph data. Through practical examples, we'll cover topics such as path traversal, pattern matching, conditional queries, and data modification.

## Path Traversal:
 One of the powerful features of Cypher is its ability to traverse paths in a graph. Path traversal allows you to navigate through nodes and relationships, uncovering connections and patterns. Here's an example of using path traversal in Cypher:

```
MATCH path = (person:Person {name: "Ahmed"})-[:FRIEND*1..3]-(friend:Person) 
WHERE friend.age > 25 
RETURN path 
```
This query starts at a node labeled "Person" with the name "Ahmed" and explores paths of length 1 to 3 via the "FRIEND" relationship. It then filters the results based on the age of the friend, returning the paths that meet the criteria.

## Pattern Matching:
 Cypher provides a powerful pattern matching capability, allowing you to express complex patterns within the graph. Patterns are defined using nodes, relationships, and their properties. Here's an example of pattern matching in Cypher:

```
MATCH (a:Person)-[:FRIEND]->(b:Person)-[:LIKES]->(c:Product {category: "Electronics"}) 
RETURN a.name, b.name, c.name 
```
This query matches a person who is friends with another person, and the second person likes a product of the Electronics category. It then returns the names of the people and the name of the product.

## Conditional Queries:
 Cypher supports conditional queries, enabling you to perform different actions based on specific conditions. This allows for dynamic and flexible querying. Here's an example of a conditional query in Cypher:

```
MATCH (person:Person) 
WHERE person.age > 30 
WITH person, 
    CASE 
        WHEN person.gender = "Male" THEN "Mr. " + person.name 
        ELSE "Ms. " + person.name 
    END AS salutation 
RETURN salutation 
```
This query matches persons older than 30 and assigns a salutation based on their gender. It then returns the salutation for each person.

## Data Modification:
 Cypher not only allows querying but also provides capabilities for modifying graph data. You can create, update, or delete nodes and relationships. Here's an example of data modification in Cypher:

```
CREATE (p:Person {name: "Ali", age: 28}) 
RETURN p 

MATCH (p:Person {name: "Ali"}) SET p.age = 29 
RETURN p 

MATCH (p:Person {name: "Ali"}) 
DELETE p 
```
These queries demonstrate creating a new node, updating the age property of an existing node, and deleting a node, respectively.

## Conclusion:
 In this second part of our Cypher series, we explored intermediate Cypher query topics, focusing on path traversal, pattern matching, conditional queries, and data modification. By mastering these concepts, you can gain a deeper understanding of how to effectively navigate and manipulate graph data using Cypher. With Cypher's rich set of features, you can extract valuable insights from complex graph structures and unlock the full potential of your graph database.
Stay tuned for the next part of our series, where we will dive into advanced Cypher query techniques and optimizations to further enhance your graph data exploration journey.