(SQL) 조작어

임경민·2023년 11월 5일
1
post-thumbnail

실습환경 만들기


  • 기존 데이터 테이블 celeb 사용
  • 테스트용 테이블 생성
CREATE TABLE test1
(
	no int
);

CREATE TABLE test2
(
	no int
);
  • 테스트 데이터 추가
INSERT INTO test1 VALUES (1);
INSERT INTO test1 VALUES (2);
INSERT INTO test1 VALUES (3);
INSERT INTO test2 VALUES (5);
INSERT INTO test2 VALUES (6);
INSERT INTO test2 VALUES (3);
  • 데이터 확인
SELECT * FROM test1;
SELECT * FROM test2;

UNION


  • 여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법
    Column의 갯수가 같아야

UNION 문법


  • UNION : 중복된 값을 제거하여 알려줌
  • UNION ALL : 중복된 값도 모두 보여줌
SELECT column1, column2, ... FROM tableA
UNION | UNION ALL
SELECT column1, column2, ... FROM tableB;
  • Ex) test1의 모든 데이터와 test2의 모든 데이터를 중복된 값을 퐇함하여 검색
SELECT * FROM test1
UNION ALL
SELECT * FROM test2;

  • Ex) test1의 모든 데이터와 test2의 모든 데이터를 중복된 값을 제거하여 검색
SELECT * FROM test1
UNION
SELECT * FROM test2;

  • Ex) 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION ALL로 실행
SELECT name, sex, agency FROM celeb WHERE sex = 'F'
UNION ALL
SELECT name, sex, agency FROM celeb WHERE agency = 'YG엔터테이먼트';

  • Ex) 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION으로 실행
SELECT name, sex, agency FROM celeb WHERE sex = 'F'
UNION
SELECT name, sex, agency FROM celeb WHERE agency = 'YG엔터테이먼트';

  • Ex) 가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행

Column의 갯수가 달라 에러 발생

SELECT name, job_title FROM celeb WHERE job_title LIKE '%가수%'
UNION
SELECT name, birthday, age FROM celeb WHERE birthday BETWEEN '1979-12-31' AND '1990-01-01';

실습


  • Ex) 직업이 가수인(가수를 포함하는) 데이터를 검색하는 쿼리와 직업이 텔런트인(텔런트를 포함하는) 데이터를 검색하는 쿼리를 중복을 제거하여 합쳐서 실행
SELECT * FROM celeb WHERE job_title LIKE '%가수%'
UNION
SELECT * FROM celeb WHERE job_title LIKE '%텔런트%';

  • Ex) 성이 이씨인 데이터를 검색하는 쿼리와 1970년대생을 검색하는 쿼리를 중복을 포함하여 합쳐 실행
SELECT * FROM celeb WHERE name LIKE '이%'
UNION ALL
SELECT * FROM celeb WHERE birthday BETWEEN '1970-01-01' AND '1979-12-31';

0개의 댓글