본문 바로가기
개발 기초 다지기

Prisma에서 include와 select의 차이점

by 너의고래 2024. 6. 12.
반응형

여러 과제를 진행하며 데이터베이스에서 데이터를 가져오는 경우가 많다. 지금까지 나는 select를 써왔는데, 다른 강의와 코드들을 보면서 include를 사용하는 경우를 발견하였다. 그러면 똑같이 Prisma를 통해 데이터베이스에서 데이터를 가져오는데 둘의 차이점은 무엇일까?

 

Prisma의 include select

: 데이터베이스 쿼리에서 가져오는 데이터의 범위를 제어하는 사용되는 가지 다른 기능

 

- Include

  • 관계형 데이터베이스에서 관계된 모델을 가져오는 데 사용
  • 예를 들어, User와 Post라는 두 개의 모델이 있고, User가 Post를 가지고 있는 경우,
    include를 사용하면 User를 가져올 때 해당 사용자의 모든 게시물도 함께 가져올 수 있음
  • 이렇게 하면 Prisma가 필요한 추가 쿼리를 자동으로 생성하여 관련된 데이터를 가져옴

ex) user의 관계 모델인 posts를 모두 가져옴

const userWithPosts = await prisma.user.findUnique({
  where: { id: 1 },
  include: { posts: true },
});

 

 

- Select:

  • select는 가져올 필드를 선택하여 결과로 받고자 할 때 사용됩니다.
  • 이를 통해 필요한 필드만 선택하여 데이터를 가져올 수 있으며, 불필요한 데이터를 가져오지 않고 쿼리 성능을 최적화할 수 있습니다.
  • 예를 들어, User 모델에서 사용자의 이름과 이메일만 필요한 경우에는 select를 사용하여 해당 필드만 선택할 수 있습니다.

ex)user 모델의 'name', 'email' 필드만 가져옴

const user = await prisma.user.findUnique({
  where: { id: 1 },
  select: { name: true, email: true },
});

 

 

아래는 내가 팀프로젝트시 댓글을 조회할 때 구현해낸 코드이다.

    //댓글 조회
    const comments = await prisma.comment.findMany({
      where: { PostId: +postId },
      select: {
        id: true,
        content: true,
        Users: {
          select: { nickname: true },
        },
      },

      orderBy: { createdAt: "desc" },
    });

 

select를 통해 comment 테이블의 'id'와 'content' 필드를 가져오고 있다.

그리고 include처럼 관계 모델에서 데이터를 가져오고자 할 경우, select 안에 모델명을 명시해준 후 동일하게 select를 통해 원하는 필드를 가져오면 된다.

 

 

결론

include 관련된 모델의 데이터를 가져오는 사용

select 가져올 필드를 선택하는 사용

 

전체 필드를 가져오는 경우가 아닌이상 아마 select를 자주 사용하게되지 않을까 싶다.

반응형

댓글