Bird
Raised Fist0
NestJSframework~5 mins

Query builder in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Query Builder in NestJS?
A Query Builder in NestJS is a tool that helps you create database queries step-by-step using code instead of writing raw SQL. It makes queries easier to build, read, and maintain.
Click to reveal answer
beginner
How do you start a Query Builder for a User entity in NestJS using TypeORM?
You use the repository for the User entity and call createQueryBuilder(). For example: const query = this.userRepository.createQueryBuilder('user');
Click to reveal answer
beginner
What method do you use to add a WHERE condition in a NestJS Query Builder?
You use the .where() method. For example: query.where('user.age > :age', { age: 18 }) adds a condition to filter users older than 18.
Click to reveal answer
intermediate
How can you join related tables using Query Builder in NestJS?
You use .leftJoinAndSelect() or .innerJoinAndSelect() methods to join related tables and select their data. For example: query.leftJoinAndSelect('user.profile', 'profile') joins the profile table.
Click to reveal answer
beginner
Why is using a Query Builder better than raw SQL in NestJS?
Query Builder helps avoid SQL syntax errors, improves security by preventing SQL injection, and makes queries easier to read and maintain with code instead of raw strings.
Click to reveal answer
Which method starts a Query Builder for an entity in NestJS?
AcreateQueryBuilder()
Bfind()
Cexecute()
Dconnect()
How do you add a WHERE clause in a NestJS Query Builder?
A.orderBy()
B.join()
C.select()
D.where()
Which method joins related tables and selects their data?
A.leftJoinAndSelect()
B.groupBy()
C.limit()
D.insert()
What is a key benefit of using Query Builder over raw SQL?
ARequires no database connection
BPrevents SQL injection
CRuns faster than SQL
DAutomatically creates tables
In NestJS, which object do you usually call createQueryBuilder() on?
AService
BController
CRepository
DModule
Explain how to build a query with a WHERE condition and a JOIN using NestJS Query Builder.
Think about chaining methods to build the query step-by-step.
You got /4 concepts.
    Describe the advantages of using Query Builder in NestJS compared to writing raw SQL queries.
    Focus on safety, readability, and flexibility.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a QueryBuilder in NestJS with TypeORM?
      easy
      A. To build database queries safely and readably without raw SQL
      B. To write raw SQL queries directly in the code
      C. To create frontend UI components
      D. To manage user authentication

      Solution

      1. Step 1: Understand QueryBuilder role

        QueryBuilder helps create database queries in a safe and readable way, avoiding raw SQL.
      2. Step 2: Identify incorrect options

        Options B, C, and D do not describe QueryBuilder's purpose correctly.
      3. Final Answer:

        To build database queries safely and readably without raw SQL -> Option A
      4. Quick Check:

        QueryBuilder purpose = safe, readable queries [OK]
      Hint: QueryBuilder avoids raw SQL for safer queries [OK]
      Common Mistakes:
      • Confusing QueryBuilder with raw SQL usage
      • Thinking QueryBuilder manages UI or auth
      • Assuming QueryBuilder is for frontend
      2. Which of the following is the correct way to start a QueryBuilder for an entity named User in NestJS with TypeORM?
      easy
      A. this.userRepository.startQuery('user')
      B. this.userRepository.queryBuilder('user')
      C. this.userRepository.buildQuery('user')
      D. this.userRepository.createQueryBuilder('user')

      Solution

      1. Step 1: Recall QueryBuilder method

        The correct method to start a QueryBuilder is createQueryBuilder.
      2. Step 2: Match method with options

        Only this.userRepository.createQueryBuilder('user') uses createQueryBuilder correctly.
      3. Final Answer:

        this.userRepository.createQueryBuilder('user') -> Option D
      4. Quick Check:

        Start QueryBuilder = createQueryBuilder() [OK]
      Hint: Use createQueryBuilder() to start queries [OK]
      Common Mistakes:
      • Using incorrect method names like queryBuilder or buildQuery
      • Forgetting to call createQueryBuilder on repository
      • Passing wrong arguments to createQueryBuilder
      3. Given the following code snippet, what will be the output of users?
      const users = await this.userRepository
        .createQueryBuilder('user')
        .where('user.age > :age', { age: 18 })
        .getMany();
      medium
      A. A single user with age exactly 18
      B. An array of users with age greater than 18
      C. An array of all users regardless of age
      D. An error because of wrong parameter syntax

      Solution

      1. Step 1: Analyze the where condition

        The query filters users where age > 18, so only users older than 18 are selected.
      2. Step 2: Understand getMany() result

        getMany() returns an array of matching users, not a single user or error.
      3. Final Answer:

        An array of users with age greater than 18 -> Option B
      4. Quick Check:

        Where age > 18 + getMany() = filtered array [OK]
      Hint: getMany() returns all matching records as array [OK]
      Common Mistakes:
      • Confusing getMany() with getOne()
      • Misreading the where condition syntax
      • Expecting all users without filter
      4. Identify the error in this QueryBuilder code snippet:
      const user = await this.userRepository
        .createQueryBuilder('user')
        .where('user.name = :name', { username: 'Alice' })
        .getOne();
      medium
      A. The parameter name in where clause does not match the object key
      B. Missing await keyword before createQueryBuilder
      C. Using getOne() instead of getMany() causes error
      D. The alias 'user' is not allowed in QueryBuilder

      Solution

      1. Step 1: Check parameter binding

        The where clause uses :name but the object key is username, causing mismatch.
      2. Step 2: Understand effect of mismatch

        This mismatch means the parameter :name is undefined, causing query error or no results.
      3. Final Answer:

        The parameter name in where clause does not match the object key -> Option A
      4. Quick Check:

        Parameter keys must match placeholders [OK]
      Hint: Match parameter keys exactly with placeholders [OK]
      Common Mistakes:
      • Using different names for parameters and placeholders
      • Forgetting to await async calls
      • Misunderstanding getOne() usage
      5. You want to fetch users who are either older than 30 or have the role 'admin'. Which QueryBuilder code correctly implements this condition?
      hard
      A. this.userRepository.createQueryBuilder('user') .where('user.age > 30 OR user.role = admin') .getMany();
      B. this.userRepository.createQueryBuilder('user') .where('user.age > :age AND user.role = :role', { age: 30, role: 'admin' }) .getMany();
      C. this.userRepository.createQueryBuilder('user') .where('user.age > :age', { age: 30 }) .orWhere('user.role = :role', { role: 'admin' }) .getMany();
      D. this.userRepository.createQueryBuilder('user') .where('user.age > :age OR user.role = :role', { age: 30 }) .getMany();

      Solution

      1. Step 1: Understand the OR condition

        We want users older than 30 OR with role 'admin', so we use where and orWhere.
      2. Step 2: Check parameter usage

        this.userRepository.createQueryBuilder('user') .where('user.age > :age', { age: 30 }) .orWhere('user.role = :role', { role: 'admin' }) .getMany(); correctly uses where with age and orWhere with role, both with parameters.
      3. Step 3: Identify errors in other options

        this.userRepository.createQueryBuilder('user') .where('user.age > :age AND user.role = :role', { age: 30, role: 'admin' }) .getMany(); uses AND instead of OR. this.userRepository.createQueryBuilder('user') .where('user.age > 30 OR user.role = admin') .getMany(); lacks parameter binding. this.userRepository.createQueryBuilder('user') .where('user.age > :age OR user.role = :role', { age: 30 }) .getMany(); misses role parameter.
      4. Final Answer:

        this.userRepository.createQueryBuilder('user') .where('user.age > :age', { age: 30 }) .orWhere('user.role = :role', { role: 'admin' }) .getMany(); -> Option C
      5. Quick Check:

        OR condition = where + orWhere with params [OK]
      Hint: Use where() then orWhere() for OR conditions [OK]
      Common Mistakes:
      • Using AND instead of OR in where clause
      • Not binding parameters properly
      • Combining conditions in one where without orWhere
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard