미래학자
[MySQL] 8장 유니온(UNION), 서브 쿼리 본문
저번 시간에는 JOIN을 배웠다. JOIN을 잘 활용하면 많은 일을 할 수 있다. 그러나 상황에 따라서는 UNION을 함께 써야 될 때가 있다.
그리고 쿼리 결과를 INSERT 또는 UPDATE 할 필요가 있을 때, JOIN으로는 할 수 없다. 이럴 때 서브 쿼리가 유용하게 사용된다.
차례 대로 진행하지 않으신 분은 gril_group 테이블과 professor 테이블을 추가하기 바란다.
1. 유니온 (UNION)
지금까지 테이블의 데이터는 아래와 같다.
두 테이블에서 이름만 꺼내서 아래와 같이 하나의 테이블로 나타내고 싶다.
UNION은 몇개 라도 계속해서 연결할 수 있다.
유니온의 규칙
- 하나의 ORDER BY만 사용할 수 있다.
- 각 SELECT의 열수, 표현식가 같아야 한다.
- SELECT 문들 끼리 순서는 상관없다.
- 유니온을 한 결과가 중복되면 하나만 나온다. (DEFAULT)
- 열의 타입은 같거나 반환 가능한 형태여야 한다.
- 중복값을 나타내고 싶다면 UNION ALL
2. 서브 쿼리
서브쿼리는 6장 테이블 쪼개기를 하면서 잠깐 등장한 적이 있다. 서브 쿼리는 JOIN으로 할 수 있는 기능과 유사한 기능을 제공한다.
이번 시간에는 서브 쿼리가 어떤 경우에 유용하게 사용할 수 있을지에 대해 알아보자.
우선 저번 시간에 사용했던 girl_group 테이블과 song 테이블을 사용한다. 이 테이블이 없다면 링크를 통해 테이블을 추가하도록 하자.
https://gist.github.com/tmmoond8/fc8ba6f4d046aec117968bb80e97a294
두 번째 쿼리 결과
세 번째 쿼리 결과
데이터를 유사하게 가져오지만, title 열을 song 테이블에 있는 열이다.
서브 쿼리의 위치는 다양하다. 위와 같이 사용하면 쿼리 결과에 song의 열은 포함할 수 없다. 위 join과 같은 결과를 얻기 위해선 아래와 같이 서브쿼리를 사용
하면 된다.
지금 부터 서브 쿼리의 유용성에 대해 말해보겠다. 사실, JOIN이 서브 쿼리에 비해 속도 면에서는 더 좋은 것은 분명하다. 그러나 JOIN은 그 결과를
SELECT 하는 것만 가능하다는 단점이 있다. 그렇다, 서브 쿼리는 SELECT, INSERT, UPDATE, DELETE 모두 가능하다.
이번 시간에는 유니온과 서브 쿼리에 대해 배웠다. 이제 실무에서 사용할 수 있는 다양한 쿼리를 작성할 수 있는 베이스를 갖췄다. ORDER BY, GROUP BY, 서브 쿼리, 조인, 내부 함수 등을 잘 적용하면 원하는 결과를 얻어 낼 수 있는 쿼리를 작성할 수 있을 것이라 믿는다.
'DataBase' 카테고리의 다른 글
[MySQL] 10장 사용자 권한 주기 (GRANT) (0) | 2016.11.23 |
---|---|
[MySQL] 9장 대용량 데이터 샘플 (SAMPLE) 사용하기 (1) | 2016.11.23 |
[MySQL] 7장 조인 : JOIN (INNER, LEFT, RIGHT) (34) | 2016.11.22 |
[MySQL] 6장 외래 키 설정하기, 1NF (테이블 쪼개기), (1) | 2016.11.21 |
[MySQL] 5장 정규화 (1NF, 2NF, 3NF) (3) | 2016.11.19 |