일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 딥러닝
- 통계
- 태블로
- 자격증
- Python
- 데이터분석
- SQLD
- pandas
- 시각화
- 이코테
- 데이터분석준전문가
- 데이터 전처리
- pytorch
- IRIS
- Google ML Bootcamp
- r
- SQL
- 데이터 분석
- Deep Learning Specialization
- 머신러닝
- tableau
- ADsP
- scikit learn
- 파이썬
- sklearn
- matplotlib
- 회귀분석
- 이것이 코딩테스트다
- ML
- 코딩테스트
- Today
- Total
함께하는 데이터 분석
[SQL] 특수 연산자, 집합 연산자 본문
이번에는 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 |