# Query all reviews for a book · Your first Rell app on Chromia · Learn Chromia

> Your app can now attach reviews to books, but it has no way to read them back yet. You'll add a query for that.

Source: https://chromia.com/learn/book-review/book-review-entity/write-queries/

Your first Rell app on ChromiaLesson 11 of 26

1. [01Your first Rell app on Chromia](https://chromia.com/learn/book-review/introduction/)
2. [02Set up your project](https://chromia.com/learn/book-review/setup/)
3. [03Rell project structure](https://chromia.com/learn/book-review/rell-structure/)

Part 1: Define your first entity

1. [04Overview](https://chromia.com/learn/book-review/book-entity/)
2. [05Create your first entity](https://chromia.com/learn/book-review/book-entity/tables/)
3. [06Add your first operation](https://chromia.com/learn/book-review/book-entity/basic-operations/)
4. [07Query every book](https://chromia.com/learn/book-review/book-entity/write-queries/)

Part 2: Add a related entity

1. [08Overview](https://chromia.com/learn/book-review/book-review-entity/)
2. [09Define the book review entity](https://chromia.com/learn/book-review/book-review-entity/tables/)
3. [10Add an operation for creating book reviews](https://chromia.com/learn/book-review/book-review-entity/basic-operations/)
4. [11Query all reviews for a book](https://chromia.com/learn/book-review/book-review-entity/write-queries/)

Part 3: Checking and validating inputs

1. [12Overview](https://chromia.com/learn/book-review/input-verification/)
2. [13Verify inputs](https://chromia.com/learn/book-review/input-verification/input-verification/)
3. [14Return structured results from queries](https://chromia.com/learn/book-review/input-verification/structure/)

Part 4: Signing transactions and filtering queries

1. [15Overview](https://chromia.com/learn/book-review/sign-transaction/)
2. [16Sign a transaction](https://chromia.com/learn/book-review/sign-transaction/sign-transaction/)
3. [17Filter and sort query results](https://chromia.com/learn/book-review/sign-transaction/structure/)

Part 5: Blockchain state and transactions explained

1. [18Overview](https://chromia.com/learn/book-review/blockchain-transactions/)
2. [19How blockchain state and transactions work](https://chromia.com/learn/book-review/blockchain-transactions/query-transaction/)
3. [20Walking through an example](https://chromia.com/learn/book-review/blockchain-transactions/example/)

Part 6: Create the client

1. [21Overview](https://chromia.com/learn/book-review/build-client/)
2. [22Prerequisites](https://chromia.com/learn/book-review/build-client/prerequisites/)
3. [23Establishing a connection to Chromia](https://chromia.com/learn/book-review/build-client/sign-transaction/)
4. [24Query the blockchain using postchain-client](https://chromia.com/learn/book-review/build-client/query-blockchain/)
5. [25Complete the example](https://chromia.com/learn/book-review/build-client/complete-example/)

1. [26What’s next?](https://chromia.com/learn/book-review/what-next/)

[Learn](https://chromia.com/learn/)[Your first Rell app on Chromia](https://chromia.com/learn/book-review/)

11 / 26Part 2: Add a related entityBeginner

# Query all reviews for a book

Your app can now attach reviews to books, but it has no way to read them back yet. You'll add a query for that.

## Define the query

Add the following Rell code to `src/main/queries.rell`:

src/main/queries.rell

```
query get_all_reviews_for_book(isbn: text) {
  val reviews = book_review @* { .book.isbn == isbn } (
    .reviewer_name,
    .review,
    .rating
  );
  return reviews;
}
```

### Breakdown of the query

1. **Input parameter:** You pass an `isbn` to choose the book whose reviews are returned.
2. **Join operation:** The expression `val reviews = book_review @* { .book.isbn == isbn };` selects every `book_review` entity whose `book.isbn` equals the `isbn` you supplied.
3. **Attributes:** The following part controls which attributes appear in the result:

   rell

   ```
   (
     .reviewer_name,
     .review,
     .rating
   );
   ```

Given a book, the query returns each of its reviews with the reviewer's name, the review text, and the rating.

## Test it on a local Chromia node

You test against a local node with the Chromia CLI:

1. **Update or start the local Chromia node:**

   * **If your node is running**, apply the changes with:

     shell

     ```nolines
     chr node update
     ```
   * **If your node is not running**, launch it with:

     shell

     ```nolines
     chr node start
     ```

     note

     Once `chr node update` finishes, the query may not be callable right away; the next block may need to be processed first. A "400 Bad Request" error usually means you should wait briefly and run the query again.
2. **Execute the query:** Open another terminal window or tab and fetch the reviews for a book with:

   shell

   ```nolines
   chr query get_all_reviews_for_book "isbn=ISBN1234"
   ```

   You should see output like this:

   json

   ```
   [
     {
       "rating": 5,
       "review": "It was a great book",
       "reviewer_name": "Alice"
     }
   ]
   ```

Later lessons cover more of Rell, including validation, shaping query results, and running transactions that require signatures.

Written for this site from Chromia’s public course. Code samples are the course’s own.

[← Previous**Add an operation for creating book reviews**](https://chromia.com/learn/book-review/book-review-entity/basic-operations/)[Next →**Part 3: Checking and validating inputs**](https://chromia.com/learn/book-review/input-verification/)

On this page

* [Define the query](#define-the-query)
* [Test it on a local Chromia node](#test-it-on-a-local-chromia-node)
