함께하는 데이터 분석

[SQL] 특수 연산자, 집합 연산자 본문

데이터분석 공부/SQL

[SQL] 특수 연산자, 집합 연산자

JEONGHEON 2022. 4. 28. 21:06

이번에는 SQL을 통해

 

특수 연산자와 집합 연산자를 알아보겠습니다.

 

연산자에 대한 설명을 표로 보여드리겠습니다.

 

구분 연산자 설명
특수 연산자 between a and b / not between a and b a와 b의 값 사이 / a와 b의 값 사이가 아님
in (a, b) / not in (a, b) a와 b의 값 / a와 b의 값이 아님
like '비교문자열' 비교문자열과 같음
is null / is not null NULL / NULL이 아님
집합 연산자 union 2개 이상 테이블의 중복된 행 제거하여 집합
union all 2개 이상 테이블의 중복된 행 제거없이 집합

그럼 이제 SQL workbench를 통해 살펴보겠습니다.

 

 

 

데이터 베이스

/* 데이터베이스 da 사용 */ 
use da;

이전에 생성한 insurance, 인적사항 테이블을 사용하기 위해

 

da 데이터 베이스를 사용하겠습니다.

 

이제 바로 특수 연산자를 알아보겠습니다.

 

 

 

특수 연산자

/* between a and b : a와 b의 값 사이 */
select * from insurance
where age between 20 and 30;

where age between 20 and 30을 이용하여

 

20 ~ 30 사이의 나이를 가진 행을 뽑아온 것을 확인할 수 있습니다.

 

이번에는 20 ~ 30 외의 나이를 가진 행을 뽑아와 보겠습니다.

 

/* not between a and b : a와 b의 값 사이가 아님 */
select * from insurance
where age not between 20 and 30;

between이라는 특수 연산자 앞에 not을 이용했습니다.

 

보시다시피 20 ~ 30 외의 나이를 가진 행이 뽑아진 것을 확인할 수 있습니다.

 

이번에는 20살과 30살의 나이를 가진 데이터를 가진 행만 뽑아볼까요?

 

/* in (a, b) : a와 b의 값 */
select * from insurance
where age in (20, 30);

특수 연산자 in (20, 30)을 이용하여

 

20살과 30살을 가진 데이터만 뽑아왔습니다.

 

이번에는 20살과 30살 이외의 데이터만 뽑아오겠습니다.

 

/* not in (a, b) : a와 b가 아닌 값 */
select * from insurance
where age not in (20, 30);

in (20, 30) 앞에 not을 이용하여

 

20살과 30살 외의 데이터를 뽑아줬습니다.

 

이번에는 특정 column의 비교 문자열에 따라 데이터를 불러와보도록 하겠습니다.

 

/* ~로 시작하는 */
select * from insurance
where region like 'south%';

where region like 'south%'에서 뒤에 %를 붙여서

 

region 열에서 south로 시작하는 데이터를 뽑아왔습니다.

 

southwest와 southeast 등의 데이터가 뽑아져 나온 것을 확인할 수 있습니다.

 

이번에는 east로 끝나는 데이터를 뽑아와 보겠습니다.

 

/* ~로 끝나는 */
select * from insurance
where region like '%east';

이번에는 %를 앞에 붙여서 east로 끝나는 데이터인

 

southeast와 northeast 데이터를 불러왔습니다.

 

이번에는 특정 문자열을 포함하는 데이터를 불러오겠습니다.

 

/* ~를 포함하는 */
select * from insurance
where smoker like '%e%';

%e%로 앞뒤에 %를 사용함으로써

 

smoker 열에서 e를 포함하는 데이터를 불러왔습니다.

 

smoker이 no와 yes만 같은 범주형 변수이므로

 

yes만 불러와진 것을 확인할 수 있습니다.

 

이제 결측치를 확인하는 방법을 알아보겠습니다.

 

/* is null : null */
select * from 인적사항 as a
left join 세부사항 as b
on a.나이 = b.나이
where 취미 is null;

insurance 테이블에는 결측치가 존재하지 않아

 

테이블 결합 때 사용했던 인적사항과 세부사항 데이터를 가져왔습니다.

 

where 취미 is null를 활용하여 

 

취미 열에서 결측치 행을 뽑아왔습니다.

 

이번에는 결측치가 아닌 행을 뽑아오겠습니다.

 

/* is not null : not null */
select * from 인적사항 as a
left join 세부사항 as b
on a.나이 = b.나이
where 취미 is not null;

is not null을 이용하여 간단하게

 

취미에서 결측값이 없는 행을 뽑아왔습니다.

 

이제 집합 연산자를 공부하겠습니다.

 

 

 

집합 연산자

/* 4개의 행 */
select * from 인적사항;

두 개의 테이블을 집합하기 위해 인적사항 테이블을 가져왔습니다.

 

4개의 행을 가진 테이블인 것을 확인할 수 있습니다.

 

create temporary table 인적사항26
select * from 인적사항
where 나이 = 26;

/* 1개의 행 */
select * from 인적사항26;

create temporary table을 통해 인적사항26 테이블을 만들었습니다.

 

인적사항 테이블에서 나이가 26인 데이터이고 1개의 행으로 이루어져 있습니다.

 

인적사항 테이블과 인적사항26 테이블은

 

나이가 26이고 이름이 최다인 행이 겹치는 것을 확인할 수 있습니다.

 

이제 union을 통해 중복된 행을 제거한 후 집합해보겠습니다.

 

/* union : 2개 이상 테이블의 중복된 행 제거 후 집합 */
select * from 인적사항26
union
select * from 인적사항;

인적사항 테이블이 인적사항26 테이블의 데이터가 포함된 테이블이므로

 

union을 통해 합친 결과 인적사항 테이블의 행이 그대로 나오는 것을 확인할 수 있습니다.

 

이번에는 union all을 통해 중복된 행을 포함하여 집합시켜보겠습니다.

 

/* union all : 2개 이상 테이블의 중복된 행 제거 없이 집합 */
select * from 인적사항26
union all
select * from 인적사항;

인적사항26 테이블과 인적사항 테이블의 행이

 

중복되어 뽑아져 나온 것을 확인할 수 있습니다.

 

다음에는 단일행 함수에 대해 알아보겠습니다!

'데이터분석 공부 > SQL' 카테고리의 다른 글

[SQL] 복수 행 함수  (0) 2022.05.01
[SQL] 단일 행 함수  (0) 2022.04.30
[SQL] 비교 연산자, 논리 연산자  (0) 2022.04.28
[SQL] 테이블 결합 - JOIN  (0) 2022.04.27
[SQL] 데이터 조회 - SELECT  (0) 2022.04.21