SQL programming 
WHERE절에서 조건별로 다른 쿼리 작성하기

SELECT문의 WHERE절에 조건식을 적게 되는데, 특정 컬럼의 값에 따라 서로 다른 조건식을 지정할 수 있는가? 예를 들어 한 테이블이 TypeId 라는 컬럼을 가지고 있다고 할 때, TypeId 가 10보다 작은 경우는 Name 컬럼값이 A로 시작되는 레코드를 가져오고, TypeId 가 10보다 큰 경우는 Name 컬럼값이 B로 시작되는 레코드를 가져오고 싶다면 이는 단순한 조건식으로 해결할 수 없다.
한가지 방식으로 아래와 같이 각 조건별로 SELECT문을 만들고 이를 UNION으로 연결하는 방식을 생각할 수 있다. 하지만, 만약 조건이 2개가 아니라 5개, 10개이면 중복된 SELECT문을 계속 써야한다는 단점이 있다. 더구나 이 SELECT문이 수십개의 테이블을 JOIN해야 하는 경우에는 더욱 더 많은 중복 코드를 갖게 된다.



예제



좀 더 나은 방식으로, 조건별로 서로 다른 조건식을 만들기 위해, [각 조건별 조건식]들을 OR 로 연결하여 WHERE절을 구성하는 방법을 생각해 볼 수 있다. 한 조건별로 해당 조건의 조건식은 AND 로 구성하여 해당 조건이 참일 때, AND 조건 뒤의 식이 사용되도록 한다. 그리고 이러한 조건들을 OR로 연결하여 UNION의 효과를 갖게 한다. 아래 예제 WHERE절을 살펴보자.

예제



처음 조건인 TypeId <= 10 을 만족하는 경우 AND 뒤의 Name LIKE 'A%'가 실행될 것이다. 그리고 이 조건을 만족하지 않는 경우 즉 TypeID가 10보다 큰 경우, Name LIKE 'B%' 조건식이 실행된다. 결과적으로 이는 각 조건별로 다른 조건식을 실행하여 MERGE 된 다음과 같은 결과를 리턴하게 된다.
    Id	TypeId	Name
    1	3	Adam
    2	5	Ari
    3	7	Bob
    

본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.