728x90

개요

SQL 쿼리문을 작성하다 보면 조건을 조합해야 하는 경우가 많습니다.


이때 가장 일반적으로 사용하는 조건은 OR 연산자입니다.

  • OR : 여러 조건 중 하나라도 만족하는 데이터를 조회할 때 사용됩니다.

그러나 경우에 따라 IN, BETWEEN, CASE WHEN 등 다른 조건문을 활용하면 쿼리를 더 간결하고 효율적으로 작성할 수 있습니다.

 

본 글에서는 MySQL에서 조건을 조합할 때 사용할 수 있는 다양한 조건문을 정리하고자 합니다.

 

일반적으로 사용하는 논리합  : OR

OR 연산자란❓

OR 연산자는 여러 조건 중 하나라도 만족하는 데이터를 조회할 때 사용되는 논리 연산자입니다. 여러 조건을 연결하여 하나라도 만족하는 데이터를 가져와야 할 때 유용하게 사용됩니다.


예시 코드

SELECT * FROM users WHERE age = 30 OR age = 40;

 

위의 예시에서는 age가 30 또는 40인 사용자들을 조회하는 쿼리입니다. OR 연산자두 개 이상의 조건을 결합하여, 하나라도 만족하는 데이터를 반환합니다.


잘못된 사용 ❌

WHERE MCDP_CD = 'CS' || 'GS'

 

MySQL에서 AND연산일 떄는 "&&"로 표현이 가능하지만 OR연산은 불가능합니다.

 

  • || 연산자는 MySQL에서는 OR 연산자로 동작하지 않음
  • MySQL에서는 ||가 문자열 연결 (CONCAT) 연산자로 해석될 수도 있음
  • MCDP_CD = 'CS' || 'GS'는 논리적으로 MCDP_CD = ('CS' || 'GS')와 같음
    • 'CS' || 'GS'는 MySQL에서 단순한 문자열 연결이므로, MCDP_CD = 'CSGS'와 같은 의미가 됨 → 잘못된 결과 발생

IN 연산자 (여러 개의 = 조건을 단축)

IN 연산자란❓

IN 연산자는 여러 개의 = 조건을 하나로 묶을 수 있는 방법입니다. OR 연산자를 사용하는 대신 IN을 사용하면 SQL을 더 간결하고 가독성 있게 작성할 수 있습니다. IN은 여러 값을 동시에 비교할 때 매우 유용합니다.


예시 코드

-- OR 사용
SELECT * FROM DOCTOR WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS';

-- IN 사용 (더 간결)
SELECT * FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS');

 

위와 같이 IN연산자를 사용하여 여러개의 '='조건을 단축할 수 있습니다. IN연산자를 사용하면 가독성이 좋고, 간결하게 사용할 수 있습니다.

 

CASE WHEN (조건에 따라 분기 처리)

CASE WHEN 구문이란❓

CASE WHEN 구문은 SQL에서 조건에 따라 결과를 분기 처리할 수 있는 기능을 제공합니다.

 

특정 조건에 맞는 값을 반환하거나, 그 외의 경우 다른 값을 반환해야 할 때 유용하게 사용됩니다. 이를 통해 쿼리 내에서 조건에 따른 값 변환을 쉽게 처리할 수 있습니다.


예시 코드

SELECT DR_NAME, 
       MCDP_CD,
       CASE 
           WHEN MCDP_CD = 'CS' OR MCDP_CD = 'GS' THEN '외과 계열' 
           ELSE '기타' 
       END AS DEPARTMENT_CATEGORY
FROM DOCTOR;

 

위의 예시에서는 MCDP_CD가 'CS' 또는 'GS'인 경우 '외과 계열'로 반환하고, 그 외의 경우는 '기타'로 분기 처리합니다.

 

CASE WHEN을 사용하여 조건에 따라 분기 처리할 수 있습니다. CASE WHEN을 사용하면 특정 조건을 만족하는 경우 값을 변환하기에 적합합니다.

 

FIND_IN_SET (문자열에서 값 검색)

FIND_IN_SET 함수란❓

FIND_IN_SET 함수는 주어진 문자열콤마로 구분된 리스트 안에서 존재하는지 확인하는 함수입니다.

 

리스트에서 특정 값이 포함되어 있는지 확인하고, 해당 값이 리스트 내에서 몇 번째 위치에 있는지를 반환합니다. 주로 IN과 비슷한 기능을 수행하지만, 값이 문자열로 구분되어 있을 때 유용합니다.


SELECT * FROM users WHERE FIND_IN_SET(MCDP_CD, 'CS',GS');

 

위의 예시에서 FIND_IN_SET은 MCDP_CD 값이 'CS' 또는 'GS'인 경우를 조회합니다. 콤마로 구분된 문자열 내에서 해당 값이 있는지 확인하는 방법입니다.