사용자가 직접 정의하는 변수이다.
저장하는 값에 의해 자료형이 정해지며 integer, decimal, float, binary, 문자열 타입만 취급할 수 있다.
변수를 초기화 하지 않은 경우 값은 NULL, 자료형은 string 타입이다.
SET 이외의 명령문에서는 = 가 비교연선자로 취급되기 때문에, SELECT로 변수를 선언하고 값을 대입할 때는 :=을 사용한다.
SET @변수이름 = 대입값;
-- 또는
SELECT @변수이름 := 대입값;
SET @start = 15, @finish = 20;
-- 또는
SELECT @start := 15, @finish := 20;
SELECT * FROM employee WHERE id BETWEEN @start AND @finish;
✔ 프로그래머스 입양사각 구하기(2)
SET @hour = -1 ; -- 변수선언
SELECT (@hour := @hour + 1) AS HOUR
FROM ANIMAL_OUTS
WHERE @hour < 23 ;
-- SELECT(@hour := @hour + 1)은 @hour의 값이 1씩 증가하면서 SELECT문 전체를 실행한다.
-- WHERE @hour < 23 일 때까지 @hour값이 계속 +1씩 증가한다.
-- @가 붙은 변수는 프로시저가 종료되어도 유지된다.
✔ 프로그래머스 입양사각 구하기(2) - 스칼라 서브쿼리 사용
SET @hour = -1 ;
SELECT (@hour := @hour + 1) AS '시간',
(
SELECT COUNT(HOUR(DATETIME))
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @hour
) AS '합계'
FROM ANIMAL_OUTS
WHERE @hour < 23 ;
-- group by를 하지 않고 hour와 동일한 hour(datetime)만 개수를 셈