MyBatis

@변수명 :=

99duuk 2024. 9. 9. 11:31

MySQL에서는 쿼리 내에서 사용자 정의 변수를 생성하고 값을 할당할 수 있음

SELECT @변수명 := 컬럼 또는 표현식

 

  • @변수명: '@'로 시작하는 사용자 정의 변수
  • :=: MySQL의 할당 연산자
  • 컬럼 또는 표현식: 변수에 할당될 값
SELECT @total_salary := SUM(salary)
FROM employees
WHERE department_id = 10;

 

부서 ID가 10인 직원들의 총 급여를 계산하여 @total_salary 변수에 할당

 

  • SUM(salary): 급여의 합계를 계산
  • @total_salary에 계산된 합계가 할당
  • 쿼리 결과로 할당된 값이 반환

 

 @A := B 처럼 변수에 할당하고

 @A 로  변수를 사용하믄 댐


 

사용자 정의 변수는 다음과 같은 상황에서 유용하게 사용될 수 있음:

1. 복잡한 계산 결과를 저장하고 재사용할 때

-- 회사의 평균 급여를 계산하고, 이를 기준으로 고액 연봉자를 찾음
SELECT @avg_salary := AVG(salary) FROM employees;

SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary > @avg_salary * 1.5;

@avg_salary에 평균 급여를 저장하고, 이를 다음 쿼리에서 재사용하여 평균의 1.5배 이상 받는 직원을 찾음.


 

2. 동일한 쿼리 내에서 여러 번 사용되는 값을 효율적으로 관리할 때

-- 특정 부서의 최고 급여자와 최저 급여자를 한 번의 쿼리로 찾음
SELECT 
    @dept_id := 10 as department_id,
    @max_salary := MAX(salary),
    @min_salary := MIN(salary)
FROM employees
WHERE department_id = @dept_id;

SELECT 
    e1.employee_id as highest_paid_emp_id,
    e2.employee_id as lowest_paid_emp_id
FROM 
    employees e1,
    employees e2
WHERE 
    e1.department_id = @dept_id AND e2.department_id = @dept_id
    AND e1.salary = @max_salary AND e2.salary = @min_salary;

 

3. 연속적인 쿼리에서 이전 쿼리의 결과를 활용할 때

 

-- 가장 최근에 고용된 직원을 찾고, 그 직원의 부서에서 가장 오래 일한 직원을 찾음
SELECT @latest_hire_date := MAX(hire_date) FROM employees;

SELECT @latest_hire_dept := department_id 
FROM employees 
WHERE hire_date = @latest_hire_date
LIMIT 1;

SELECT employee_id, first_name, last_name, hire_date
FROM employees
WHERE department_id = @latest_hire_dept
ORDER BY hire_date ASC
LIMIT 1;

첫 번째 쿼리에서 가장 최근 고용 날짜를 찾고, 두 번째 쿼리에서 그 날짜에 해당하는 직원의 부서를 찾음.

마지막 쿼리에서는 그 부서에서 가장 오래 일한 직원을 찾음.


 

주의사항:

  • 이 문법은 MySQL과 MariaDB에서 주로 사용되며, 다른 데이터베이스 시스템과는 호환되지 않을 수 있음.
  • 과도한 사용은 쿼리의 가독성을 해칠 수 있으므로, 필요한 경우에만 사용하는 것이 좋음.
  • 변수의 범위는 현재 클라이언트 세션으로 제한됨.

이 문법을 이용하면 복잡한 쿼리를 더 효율적으로 작성할 수 있으며, 특히 저장 프로시저나 함수에서 유용하게 활용될 수 있음.

 

 


AS와의 유사점과 차이점:

유사점:

  • 둘 다 결과 집합에 열을 생성함.
  • 쿼리 결과를 특정 이름으로 참조할 수 있게 해줌.

차이점:

  1. 문법:
    • AS: SELECT column AS alias
    • 변수 할당: SELECT @variable := column
  2. 용도:
    • AS: 결과 집합의 열에 별칭을 부여함.
    • 변수 할당: 값을 변수에 저장하고, 쿼리 내에서 재사용할 수 있게 함.
  3. 범위:
    • AS: 해당 쿼리의 결과 집합에서만 유효함.
    • 변수 할당: 세션 내에서 지속적으로 사용 가능함.
  4. 재사용성:
    • AS: 다른 쿼리에서 재사용 불가능함.
    • 변수 할당: 같은 세션 내의 다른 쿼리에서도 사용 가능함.

 

SELECT salary AS monthly_salary, @annual_salary := salary * 12
FROM employees
WHERE employee_id = 100;

'monthly_salary'는 결과 집합의 열 이름이고, '@annual_salary'는 재사용 가능한 변수임.

'MyBatis' 카테고리의 다른 글

LPAD, NEXTVAL (ID 관리)  (0) 2024.09.09
계층 쿼리 (중첩 SELECT_mysql, CTE_mysql, CONNECT BY_oracle)  (0) 2024.09.09
<sql>, <include>, <selectKey>  (0) 2024.09.09
<set>, <where>  (0) 2024.09.09
<if>, <foreach>, <trim>  (0) 2024.09.09