UNION
- 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.
- 중복된 값을 제거하고 보여준다.
- 중복된 값을 제거하는 연산이 추가로 수행되기 때문에 UNION ALL보다 속도가 느리다.
UNION ALL
- UNION과 동일하게 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.
- 중복된 값을 모두 보여준다.
SELECT A AS one, B AS two
FROM TABLE_A
UNION (또는 UNION ALL)
SELECT C AS one, D AS two
FROM TABLE_B;
JOIN 과의 차이점
- JOIN : 새로운 열로 결합한다. (수평결합)
- UNION : 새로운 행으로 결합한다. (수직결합)
- JOIN이 속도면으로는 더 좋지만 결과를 SELECT만 가능하다.
- 서브쿼리는 SELECT, INSERT, UPDATE, DELETE 모두 가능하다.
UNION 규칙
- 하나의 ORDER BY만 사용할 수 있다.
- 각 SELECT의 열수, 표현식가 같아야 한다.
- SELECT 문들 끼리 순서는 상관없다.
- 유니온을 한 결과가 중복되면 하나만 나온다. (DEFAULT)
- 열의 타입은 같거나 반환 가능한 형태여야 한다.
- 중복값을 나타내고 싶다면 UNION ALL
SELECT name FROM girl_group
UNION
SELECT name FROM professor;
서브 쿼리
- 하나의 SQL 문에 포함되어 있는 또 다른 SQL문
- 주의 사항
- 서브쿼리를 괄호로 감싸서 사용
- 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.
- ORDER BY를 사용하지 못한다.
- SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT의 VALUES, UPDATE의 SET에 사용가능하다.
SELECT *
FROM girl_group
WHERE hit_song_id = (SELECT _id FROM song WHERE lyrics LIKE '%Give%');
- 단일 값 비교
SELECT *
FROM girl_group
WHERE hit_song_id IN (SELECT _id FROM song WHERE lyrics LIKE '%e%');
- 여러 값 비교
SELECT gg.name, gg.debut, s.title
FROM girl_group AS gg
JOIN song AS s
ON gg.hit_song_id = s._id
WHERE s.lyrics LIKE '%e%';
SELECT gg.name, gg.debut,
(SELECT title FROM song WHERE title IS NOT NULL AND lyrics LIKE '%e%' AND gg.hit_song_id = _id) AS hitsong
FROM girl_group AS gg;
- 위의 JOIN방식을 사용 해씅ㄹ 때, 노래 열은 가지고 올 수 없기 때문에 서브쿼리를 사용해서 가져올 수 있다.
DELETE FROM girl_group
WHERE hit_song_id IN (SELECT _id FROM song WHERE lyrics LIKE '%e%');
SELECT * FROM girl_group;
'개발 > Database' 카테고리의 다른 글
트랜잭션, 뷰, Date (0) | 2024.02.07 |
---|---|
사용자 권한 주기 (GRANT) (0) | 2024.02.07 |
조인 : JOIN (INNER, OUTER, CROSS, SELF) (0) | 2024.02.05 |
외래 키 설정하기, 1NF (테이블 쪼개기) (1) | 2024.02.04 |
정규화(Normalization) (0) | 2024.02.04 |