CS/DB

[혼공SQL] 변수의 종류와 사용

F12:) 2024. 1. 15. 20:56

오늘은 MySQL에서 변수를 사용하는 방법에 대해서 알아봅니다.

 

 

   사용자 정의 변수

변수의 선언 및 초기화

SQL 문에서 변수는 아래와 같이 선언 및 초기화를 진행할 수 있습니다.

SET @변수이름 = 대입값;
SELECT @변수이름 := 대입값;

 

SQL에서는 SET을 제외한 나머지에서 등호(=)는 비교연산자로 취급됩니다. 따라서 SELECT에서는 콜론과 등호를 합쳐(:=) 사용하여 변수에 값을 대입해줄 수 있습니다.

 

변수 호출

SELECT @변수이름; -- 변수 호출

 

이렇게 변수에 어떤 값이 대입되었는지 출력 결과를 통해서 확인할 수도 있습니다.

 

변수의 사용

SET @txt = '가수 이름 ==> ';
SET @height : 166;

SELECT @txt, mem_name FROM member WHERE height > @height; 
-- 키가 166 이상인 데이터만 출력

 

이런 식으로 쿼리문에 변수를 넣어주어, 변경되는 값을 효율적으로 관리할 수도 있습니다.

 

참고 사항

변수는 저장되는 값에 의해 자료형이 정해집니다. 자료형은 Integer, Decimal, Float, Binary, 문자열 타입만 가능하며, 변수를 초기화하지 않고 선언만한 경우에 값은 NULL, 자료형은 String으로 지정됩니다.

 

또한 앞서 SQL 문에서 변수를 사용하였는데, LIMIT에서는 변수를 사용할 수 없습니다. 그래서 우리는 PREPARE와 EXECUTE를 사용합니다.

 

PREPARE는 단순히 SQL 구문을 준비하는 키워드이고, EXECUTE준비된 SQL문을 실행하는 키워드입니다.

SELECT @count = 3;
PREPARE mysql FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mysql USING @count;

 

PREPARE에서 ?로 변수의 위치를 지정합니다. 그리고 mysql이라는 이름에 저장합니다.

mysql에 저장된 SQL문은 EXECUTE를 통해서 실행할 수 있으며, SQL문에 저장된 변수의 값을 USING 키워드를 통해서 채워줄 수 있습니다.

 

 

   지역 변수

지역 변수의 선언 및 초기화

아래의 예시로 바로 확인해봅시다.

DELIMITER $$
     CREATE PROCEDURE test(x INT)
     BEGIN
        DECLARE start INT DEFAULT 1; -- 지역변수 start를 1로 초기화
        DECLARE finish INT DEFAULT 10; -- 지역변수 finish를 10으로 초기화

        SELECT x, start, finish;
        SELECT * FROM employees WHERE id BETWEEN start AND fisnish;
     END $$
DELIMITER ; 
CALL test(1);

 

DECLARE에 지역변수가 선언되었습니다. 변수 이름 뒤에는 자료형이 명시되며, DEFAULT 키워드로 초기값을 지정해주었습니다. 만약 DEFAULT를 사용하지 않았다면 초기값은 NULL이 됩니다.

 

또한 x를 통해서 스토어드 프로시저의 매개변수로도 사용됨을 알 수 있습니다.

 

이후, SELECT 구문에서 start와 finish 지역 변수와 매개변수 x를 사용하는 모습입니다. 지역변수와 매개변수의 생존 범위는 BEGIN부터 END까지입니다.

 

 

   시스템 변수

시스템 변수 조회

SHOW GLOBAL VARIABLES; -- 모든 시스템 변수 출력
SHOW GLOBAL VARIABLES LIKE 'CHAR%'; -- 시스템 변수 이름의 시작이 CHAR인 변수 출력

 

 

시스템 변수 수정

SET GLOBAL [시스템 변수 이름] = 적용할 값 ;