14장 쿼리 결합하기
Last updated
Was this helpful?
Last updated
Was this helpful?
집합(Union) 쿼리나 복합(Compound) 쿼리로 여러 쿼리를 하나의 결과로 가져올 수 있다.
주로 다음과 같은 경우에 사용한다.
여러 테이블에 있는 비슷한 구조의 데이터를 하나의 쿼리로 가져오는 경우
한 테이블에서 여러 쿼리를 수행하고, 하나의 결과로 가져오는 경우
결합 쿼리와 다수의 WHERE 조건
대부분의 경우, 하나의 테이블에서 두 쿼리를 결합하는 것은 여러 WHERE 조건을 갖는 하나의 쿼리와 같다. 즉, 여러 WHERE 조건이 있는 SELECT 문은 결합 쿼리로 만들 수 있다.
UNION 연산자를 이용해 SQL 쿼리를 결합할 수 있다. 여러 SELECT 문에 UNION을 지정하면, 그 결과가 하나로 결합된다.
UNION 사용은 간단하다. 각각의 SELECT 문 사이에 UNION 키워드를 적으면 된다.
위의 두 쿼리는 같은 테이블에서 다른 조건으로 필터링된 값을 출력한다. 이 두 쿼리의 결과를 합쳐보자.
각 쿼리 사이에 UNION 키워드를 넣어 합칠 수 있다.
물론 이 예시는 다음과 같이 WHERE 절만 수정하는 것이 깔끔하지만,
필터링 조건이 복잡하거나 여러 테이블에서 데이터를 가져와야할 때는 UNION이 더 간단한 쿼리를 만들 수 있다.
결합을 제대로 제어하기 위한 몇 가지 기본 규칙
UNION은 반드시 두 개 이상의 SELECT 문으로 구성되어야 하며, 각 명령문은 UNION 키워드로 구분한다.
UNION에서 각 쿼리는 같은 열이나 수식, 그룹 함수를 가져야 한다.
열 데이터형은 호환 가능하다. 정확히 같은 데이터형일 필요는 없지만, DBMS 내부적으로 변환할 수 있어야 한다.
위의 예시를 보면 UNION 결합시 자동으로 중복 행을 제거함을 알 수 있다. 만약 중복 행을 포함하고 싶다면 UNION 대신 UNION ALL을 쓰면 된다.
UNION vs WHERE
UNION은 여러 개의 WHERE 조건을 사용하는 것과 같은 결과를 얻을 수 있다.
하지만 중복 행을 포함하는 경우에는 다르다.
중복 행을 포함하고 모든 조건과 일치하는 행을 가져오는 것이라면, WHERE 절이 아닌 UNION ALL을 사용하자.
ORDER BY 절을 사용해 SELECT 문의 결과를 정렬할 수 있다.
UNION을 사용한 경우, 단 하나의 ORDER BY 절을 사용할 수 있는데 이 절은 마지막 SELECT 구문 뒤에 와야 한다.
UNION을 사용해 SELECT 문을 결합하
UNION ALL로 중복값 관리하기
WHERE와 UNION
OrderItems 테이블에서 제품 ID와 수량을 가져오기 위해 두 개의 SELECT 문을 결합하는 SQL문 작성하기. 하나는 BNBG로 시작하는 SELECT문이고 다른 하나는 수량이 딱 100인 제품만 가져오는 SELECT 문이다. 제품 ID로 정렬할것.
1의 SQL을 하나의 SELECT문으로 다시 작성하기
Products에 있는 제품명과 Customers에 있는 고객명을 결합하여 가져오는 SQL 문 작성하기. 제품명 정렬
다음 SQL 문은 무엇이 잘못되었는가?