본문 바로가기

Backend/PostgreSQL and TypeORM

QueryBuilder 사용시 = 표현과 = : 표현의 차이점

왜 이 두 표현의 차이점이 이제야 보이기 시작했을까?는 의문이다. (그냥 모르고 갖다 쓴거지 뭐) 

 

 .createQueryBuilder('popup')
      .leftJoinAndSelect('popup.popupMultilingualTables', 'multilingual_table')
      .where('popup.language = :language', { language })
      .andWhere('popup.is_active = true')

여기서 보이는 where절과 andWhere절에서 = :language로 쓰느냐, = 로 쓰느냐는 의미가 다르다. 

 

1) popup.language = :language의 경우 뒤에 두번째 인자(파라미터)로 language가 온다. 

즉, 파라미터가 있을 경우에 = : 라는 표현을 써주는 것이다. '바인딩 변수'이다. 동적인 값을 쿼리에 주입할 때 사용한다. 

 

:language가 바인딩 변수고, 실제 값을 바인딩하기 위해 사용된다. { language }는 이 변수에 할당할 실제 값을 나타낸다. 

language가 어딘가에 정의되어 있어야하며, 해당 변수의 값을 바인딩 변수에 할당하여 실제 SQL 쿼리를 생성할때 사용된다.

 

2) popup.is_active = true의 경우 is_active의 상태가 true일때 라는 의미의 SQL 연산자에서 = 는 '비교 연산자'