본문 바로가기

내배캠/TIL

[SQL] 세션 변수

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

입양 시각 구하기 (2) 문제의 풀이 과정 중 하나로 다음과 같은 sql 문을 발견했다.

 

SET @HOUR := -1;
SELECT (@HOUR := @HOUR + 1) AS HOUR,
(
    SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR
) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23

 

 

@ 붙여서 쓰는건 처음봐서 알아봤더니 세션 변수라는 것이었다.

 

이는 사용자 정의 변수로, SQL 세션 내에서 값을 저장하고 재사용할 수 있는 기능을 제공한다.

 

@변수명 형태로 선언하고 사용할 수 있으며, 한 쿼리 내에서 값을 설정하고 그 값을 다른 쿼리에서 참조하는 데 사용할 수 있다.

 

특징

  1. 하나의 세션 동안 유효하며, 쿼리 내에서 값을 저장하고 사용할 수 있다.
  2. 값 할당 : := 를 사용하여 값을 할당한다. 예를 들어 SET @HOUR := -1@HOUR-1을 할당한다는 뜻이다.
  3. 재사용 : 세션 변수를 사용하여 쿼리 실행 도중에도 값을 저장하고 재사용할 수 있다. 이는 루프나 복잡한 계산을 수행할 때 유용하다.

 

 

위의 특징을 바탕으로 sql 문을 분석해보면,

 

  • @HOUR 의 값을 1씩 증가시키며 각 행의 HOUR 필드를 하나씩 증가시킨다.
  • 내부 서브쿼리는 DATETIME 필드에서 시간(HOUR) 부분이 @HOUR 와 일치하는 행의 개수를 계산한다.
  • @HOUR가 23보다 작은, 즉 0부터 23시까지 각 시간에 해당하는 데이터의 개수를 반환한다.

'내배캠 > TIL' 카테고리의 다른 글

MyBatis 란?  (1) 2024.09.27
세션 (Session)  (0) 2024.09.24
[SQL] 오프라인/온라인 판매 데이터 통합하기  (1) 2024.09.14
트랜잭션 격리 수준  (0) 2024.09.12
[스프링] 테스트  (1) 2024.09.11