지난 번 글을 통해 데이터베이스에 대한 기본 개념과 SQL에 대해 알아봤습니다.
(지난 글은 여기에서 확인 가능합니다.)
지금부터는 본격적으로 SQL을 어떻게 활용하는지 실제 쿼리문과 함께 확인해보겠습니다.
SQL 기초 - select, from, where
테이블 확인하기
데이터베이스는 테이블과 필드로 구성됩니다.
데이터를 조회하기 위해서는 현재 데이터베이스에 있는 테이블이 무엇이고 이 테이블은 어떤 필드로 구성되어 데이터가 저장되어 있는지 확인하는 것이 중요합니다.
데이터 분석은 단순히 테이블에 저장된 데이터만 확인하는 것을 넘어 분리되어 있는 테이블을 서로 연결해 데이터를 새로운 관점으로 살펴보는 것도 중요합니다.
하나의 테이블에 모든 정보를 저장한다면 데이터를 확인하는 것이 어려워져 용도에 맞게 테이블을 나눠서 구성하는 경우가 많아 어떤 테이블이 있는지 확인하고 각 테이블이 담고 있는 데이터는 무엇인지 파악하는 것이 데이터 분석의 첫 걸음이라고 할 수 있습니다.
현재 데이터베이스에 존재하는 테이블은 아래 쿼리문으로 확인 가능합니다.
show tables;
데이터베이스에 어떤 테이블이 있는지 문서로 분류하는 곳도 있지만 이러한 문서가 없다면 쿼리를 통해 확인 가능합니다.
데이터 조회 select
지난 글을 통해 데이터 담당자가 아니라면 보통 데이터베이스의 기능 중 R(Read) 즉, 조회 기능을 사용한다고 말씀드렸습니다.
데이터를 조회하기 위한 SQL 문법으로는 select 가 있습니다.
select 는 말그대로 선택한다는 의미로 데이터베이스에서 조회하고 싶은 데이터를 선택한다. 라는 의미로 이해하면 쉽습니다.
다만, select 만으로는 데이터를 조회할 수 없어 다음에 설명하는 from과 함께 사용해야 합니다.
테이블 불러오기 from
데이터를 조회하기 위해서는 어떤 테이블을 조회할지 선택해야 합니다.
show tables 쿼리를 통해 확인한 테이블 중 하나를 from을 통해 선택해서 조회하는 것이 가능합니다.
예를 들어, 아래와 같은 회원 정보를 담고 있는 user라는 테이블이 있다고 가정하겠습니다.
테이블 이름은 user이며, 필드는 no(일련번호), name(이름), date(가입일)로 구성되어 있습니다.
<user>
no | name | date |
1 | 손한량 | 2023-01-01 |
2 | 홍길동 | 2023-02-01 |
3 | 이개발 | 2023-03-01 |
이 user 테이블을 조회하기 위해서는 아래 쿼리문을 실행하면 됩니다.
select * from user;
이 쿼리를 실행하면 user 테이블의 정보를 확인할 수 있습니다.
쿼리 문의 구조는 아래와 같습니다.
select 필드명 from 테이블명;
필드명에 입력된 *는 테이블의 모든 필드를 불러오라는 표시입니다.
만약, user 테이블의 이름(name)만 불러오고 싶다면 아래 쿼리문을 실행하면 됩니다.
select name from user;
[실행 결과]
name |
손한량 |
홍길동 |
이개발 |
이처럼 최초에는 *로 모든 필드를 조회하고 그 중에 확인이 필요한 필드만 select와 from 사이에 넣어 데이터 조회가 가능합니다.
조건 추가하기 where
단순히 select와 from만을 사용해서 테이블을 조회하는 것도 가능하지만 테이블 내 데이터를 특정 조건에 따라서 확인하고 싶은 경우도 있을 수 있습니다.
특정 조건을 가지고 있는 데이터만 조회하기 위해서는 where를 사용하면 됩니다.
user 테이블에서 손한량 이라는 이름이 있는 데이터만 불러오는 쿼리는 아래와 같습니다.
select * from user where name='손한량';
[실행 결과]
no | name | date |
1 | 손한량 | 2023-01-01 |
이렇게 where은 from 뒤에 위치하며 조건에 따라서 데이터를 조회할 수 있습니다.
select 필드명 from 테이블명 where 조건
where 사용 시 주의사항
where을 사용할 때는 주의해야 하는 점이 있습니다.
where = name = '손한량' 처럼 '문자열'을 조건에 추가할 때는 ' (작은 따옴표)로 문자를 감싸줘야 합니다.
숫자를 조건으로 사용할 때는 작은 따옴표를 생략할 수 있습니다.
select * from user where no=1;
where의 다양한 활용
where 조건은 다양한 문법이 있어 여러가지로 사용이 가능합니다.
- 복수 조건
- 비교 조건
- 범위 조건
- 포함 조건
- 패턴 조건
복수 조건
where로 조건을 걸 때, 하나의 조건이 아닌 여러 조건을 넣는 것도 가능합니다.
and (모두 만족), or (하나라도 만족) 을 사용하면 복수 조건 사용이 가능합니다.
예를 들어, user 테이블에서 이름이 '손한량' 이거나 일련 번호가 '3'인 데이터를 확인하고 싶다면 아래 쿼리문을 실행하면 됩니다.
select * from user where name='손한량' or no=3;
[실행 결과]
no | name | date |
1 | 손한량 | 2023-01-01 |
3 | 이개발 | 2023-03-01 |
비교 조건
엑셀에서 수학 기호(>,<,=,<>)를 통해 데이터를 비교할 수 있는 것처럼 SQL에서도 비교 조건을 통해 데이터를 조회하는 것도 가능합니다.
예를 들어, user 테이블에서 일련번호가 2이상인 데이터를 확인하고 싶다면 아래 쿼리문을 실행하면 됩니다.
select * from user where no>=2;
[실행 결과]
no | name | date |
2 | 홍길동 | 2023-02-01 |
3 | 이개발 | 2023-03-01 |
다만, 엑셀과는 다르게 같지 않음은 <> 가 아닌 != 로 실행해야 합니다.
범위 조건
특정 범위에 있는 데이터만 조회하고 싶을 때에도 where을 사용할 수 있습니다.
between A and B의 형식으로 조건 조회가 가능합니다.
예를 들어, 가입일이 2023-01-01~2023-03-01 사이인 사용자만 조회한다면 아래 쿼리를 실행하면 됩니다.
select * from user where between '2023-01-01' and '2023-03-01';
[실행 결과]
no | name | date |
1 | 손한량 | 2023-01-01 |
2 | 홍길동 | 2023-02-01 |
이처럼 범위 조건 사용 시 주의해야 하는 점은 between A and B에서 A의 값은 포함하지만 B의 값은 포함하지 않는다는 점입니다. ('2023-03-01 까지'가 아닌 '2023-03-01 이전' 의 데이터를 조회합니다.)
포함 조건
특정 값을 가지고 있는 데이터만 조회하고 싶을 때 사용합니다. 복수 조건으로 사용해도 괜찮지만 쿼리문이 더 복잡해질 수 있어 포함 조건으로 조회하는 것이 더 효율적일 수 있습니다.
예를 들어, 이름이 '손한량'이거나 '이개발' 인 데이터를 확인하고 싶다고 가정해보겠습니다.
복수 조건으로 쿼리문을 만든다면 아래 쿼리문으로 조회 가능합니다.
select * from user where name='손한량' or name='이개발';
포함 조건으로 쿼리문을 만든다면 아래 쿼리문으로 조회가 가능합니다.
select * from user where name in ('손한량','이개발');
[실행 결과]
no | name | date |
1 | 손한량 | 2023-01-01 |
3 | 이개발 | 2023-03-01 |
2개 쿼리의 실행 결과는 동일하지만 복수 조건 쿼리문의 경우 '필드명'을 계속 입력해야 하는 번거로움이 있어 동일한 필드 조건으로 조회할 때는 포함 조건으로 검색하는 것이 더 효율적일 수 있습니다.
패턴 조건
지금까지는 정확한 데이터의 값을 기준으로 조회했지만, 이 외에도 특정 패턴에 따라서 데이터를 조회해야 하는 경우가 있을 수 있습니다.
예를 들어, 이름이 '손'으로 시작하는 데이터만 조회하고 싶다면 아래 쿼리문으로 조회 가능합니다.
select * from user where name like '손%';
[실행 결과]
no | name | date |
1 | 손한량 | 2023-01-01 |
패턴 조회 시에는 = 대신 'like'를 사용하며, like 뒤에는 조회하고 싶은 패턴을 추가합니다.
'손%'는 '손'으로 시작하는 모든 데이터라는 의미와 동일합니다.
아래 방법으로 다양하게 활용 가능합니다.
- A% : A으로 시작하는 모든 데이터
- %A : A으로 끝나는 모든 데이터
- %A% : A가 포함된 모든 데이터
- A%B : A로 시작해 B로 끝나는 모든 데이터
추가 문법
select, from, where 만으로도 데이터베이스에서 원하는 데이터를 자유롭게 조회할 수 있습니다.
SQL에는 이 외에도 다양한 문법이 있어 여러 방식으로 데이터 조회가 가능합니다.
중복을 제외한 데이터 distinct
테이블에 따라서 특정 필드에 중복된 데이터가 입력될 수 있습니다. (Ex. 결제수단)
이런 경우 이 필드에 어떤 데이터가 있는지 조회하기 위해서는 distinct를 사용하면 됩니다.
select distinct(필드명) from 테이블명;
의 형식으로 사용할 수 있습니다.
예를 들어, 사용자별 결제수단을 기록한 payment 테이블이 있다고 가정하겠습니다.
no | name | payment_method |
1 | 손한량 | card |
2 | 홍길동 | card |
3 | 이개발 | cash |
지금은 테이블에 데이터가 많이 없어 한 눈에 확인 가능하지만 이런 데이터가 수백, 수천개가 있다고 한다면 사용자의 결제수단에는 어떤 것이 있는지 확인하기가 어려워질 것입니다.
아래 쿼리문으로 조회하면 간단하게 확인 가능합니다.
select distinct(payment_method) from payment;
[실행 결과]
payment_method |
card |
cash |
개수 세기 count
어떤 데이터가 있는지 조회하는 것도 중요하지만 때로는 데이터가 몇 개인지 확인이 필요한 경우도 있습니다.
count 문법을 사용하면 데이터의 개수를 확인할 수 있습니다.
select count(필드명) from 테이블명;
의 형식으로 사용할 수 있습니다.
user 테이블의 데이터 개수를 알고 싶다면 아래 쿼리문으로 조회 가능합니다.
select count(*) from user;
[실행 결과]
count |
3 |
일부 데이터만 조회하기 limit
테이블에 어떤 필드가 있고 어떤 데이터가 기록되어 있는지 확인하기 위해 select와 from을 활용해서 조회하는 것도 가능하지만 데이터가 많은 테이블의 경우 전체 테이블을 조회하기까지 시간이 오래 걸릴 수 있습니다.
이렇게 조회할 때는 데이터베이스 성능에 영향을 미칠 수 있어 단순히 어떤 필드가 있고 데이터의 형식이 어떤지 조회할 때는 테이블의 일부 데이터만 조회하는 것이 좋습니다.
limit를 사용하면 테이블의 특정 개수 데이터만 확인하는 것이 가능합니다.
select 필드명 from 테이블명 limit 표시할 데이터 개수;
의 형식으로 사용 가능합니다.
user 테이블에서 2개 데이터만 표시하고 싶다면 아래 쿼리문으로 조회하면 됩니다.
select * from user limit 2;
[실행 결과]
no | name | date |
1 | 손한량 | 2023-01-01 |
2 | 홍길동 | 2023-02-01 |
지금까지 SQL의 다양한 기초 문법에 대해 알아봤습니다.
select, from, where만 알더라도 데이터 조회에 필요한 대부분의 활동을 할 수 있습니다.
distinct, count, limit를 통해 다양한 상황에 맞춰 데이터를 조회하는 것도 가능합니다.
다음에는 데이터를 정렬하거나 그룹으로 묶어서 확인하는 방법에 대해 알아보겠습니다.
감사합니다.
손한량
최근댓글