# UNWIND clause

The `UNWIND` clause is used to unwind a list of values as individual rows.

## 1. Unwinding lists

Use `UNWIND` to transform a literal list into rows:

``````UNWIND [1,2,3] AS listElement
RETURN listElement;``````

Output:

``````+-------------+
| listElement |
+-------------+
| 1           |
| 2           |
| 3           |
+-------------+``````

## 2. Distinct list

The `UNWIND` clause can be used to remove duplicates from a list:

``````WITH [1,1,1,2,2,3] AS list
UNWIND list AS listElement
RETURN collect(DISTINCT listElement) AS distinctElements;``````

Output:

``````+------------------+
| distinctElements |
+------------------+
| [1, 2, 3]        |
+------------------+``````

## 3. Expression returning lists

An expression that returns a list can be used with the `UNWIND` clause:

``````WITH [1,2,3] AS listOne, [4,5,6] AS listTwo
UNWIND (listOne + listTwo) AS list
RETURN list;``````

Output:

``````+------+
| list |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+``````

## 4. Unwinding lists of lists

Multiple `UNWIND` clauses can be combined to unwind nested lists:

``````WITH [[1,2,3],[4,5,6],[7,8,9]] AS listOne
UNWIND listOne AS listOneElement
UNWIND listOneElement AS element
RETURN element;``````

Output:

``````+---------+
| element |
+---------+
| 1       |
| 2       |
| 3       |
| 4       |
| 5       |
| 6       |
| 7       |
| 8       |
| 9       |
+---------+``````