# Intro to Neo4j

### Introduction

Neo4j is a graph database that allows you to efficiently store, query, and analyze network and connected data. With its native graph storage and processing capabilities, Neo4j shines for working with highly connected data.

Neo4j stores data in nodes and relationships instead of tables like traditional databases. This graph structure mirrors many real-world relationships, making it easy to model networks. Querying is done via the Cypher query language, optimized specifically for graphs.

At its core, Neo4j manages connections. It excels at revealing insights from linked data that are very difficult to determine with non-graph technologies. Questions like finding the shortest path between two points or detecting fraud rings emerge easily from a Neo4j graph database.

### Use cases

* **Fraud detection:** Identify suspicious patterns and connections in financial transactions
    
* **Identity and access management:** Manage user identities and permissions based on connections
    
* **Recommendation engines:** Provide personalized recommendations based on product relationships
    
* **Master data management:** Maintain a consistent view of master data entities and hierarchy
    
* **Network and IT operations:** Model computer networks to understand connectivity and dependencies
    
* **Knowledge graphs:** Encode knowledge as an interconnected semantic graph to enable knowledge applications
    
* **Social network analysis:** Analyze social relationships and interactions between individuals
    
* **IoT and time series:** Ingest sensor data and analyze relationships across time and devices
    
* **Real-time analytics:** Conduct fast graph queries to deliver real-time analytic insights
    

Cypher is Neo4j’s graph query language. Its declarative nature allows you to focus on what you want from the graph, not how to retrieve it.

```sql
MATCH (p:Person)-[:KNOWS]->(friends) 
RETURN friends
```

Returns All Person nodes and connect friends nodes

```sql
MATCH p=shortestPath((p1:Person)-[:KNOWS*]-(p2:Person)) WHERE p1.name = "Arun" AND p2.name="Nisha" RETURN p
```

Returns the shortest path between Arun and Nisha

```sql
MATCH (account:Account)-[:TRANSFERRED_TO]->(externalAccount)
WHERE account.balance < 0
RETURN account, externalAccount
```

Surfaces suspicious money transfers

```sql
MATCH (movie:Movie)<-[r:RATED]-(user)
RETURN movie.title AS recommendation, count(r) AS score 
ORDER BY score DESC LIMIT 10
```

Recommends movies based on highest ratings

```sql
MATCH (user:User)-[:CLICKED]->(article:Article)
RETURN user.name AS user, collect(article.title) AS recommendations
```

Recommends articles based on a user's clicks

### Conclusion

In summary, Neo4j provides a powerful way to work with highly connected data by representing relationships as first-class citizens. Its graph data model and Cypher query language empower users to analyze data in new ways.

### References:

1. [https://neo4j.com/developer/cypher-query-language/](https://neo4j.com/developer/cypher-query-language/) - Introduction to Cypher
    
2. [https://neo4j.com/use-cases/](https://neo4j.com/use-cases/) - Neo4j use cases
    
3. [https://neo4j.com/developer/guide-data-modeling/](https://neo4j.com/developer/guide-data-modeling/) - Data modeling in Neo4j
    
4. [Seed data GIST](https://gist.github.com/nikhilakki/66a5409ecfb7a27f01295266dd0b3d55)
