오늘은 '엑셀보다 쉽고 빠른 SQL' 강의의 2, 3강을 들었다.
엑셀에서 항목들의 값을 계산할 수 있듯이 SQL에서도 항목들의 값을 계산할 수 있다.
select [컬럼1] + [컬럼2] from [테이블 이름]
+(더하기), -(빼기), *(곱하기), /(나누기)의 연산자를 사용해서 내가 원하는 컬럼끼리 계산을 할 수 있다.
select sum([컬럼명]) from [테이블 이름]
select avg([컬럼명]) from [테이블 이름]
합계는 sum()을 통해서, 평균은 avg()를 통해서 구할 수 있다.
select count() from [테이블 이름]
기본적인 골격은 이렇지만, 내가 어떤 값을 찾길 원하느냐에 따라 사용 방법이 2가지로 나뉜다.
먼저, 중복 되었더라도 상관없이 데이터의 개수를 구하길 원한다면 select count(1) [컬럼명]과 같은 구조로 사용하면 된다.
이때, count(1) 혹은 count(*) 두 가지로 사용할 수 있는데, 두 가지 모두 구문을 동일하게 처리한다.
count(1)이 더 빠르게 처리가 된다는 이야기도 있지만, 큰 성능 차이는 없다고 한다.
만약, Null 값이 제외된 결과를 얻고 싶다면, select count([컬럼명])과 같은 방법으로 사용하면 된다.
그리고, 중복된 값을 제외한 결과를 원한다면, select count(distinct [컬럼명])과 같이 distinct를 포함해 사용하면 된다.
select max([컬럼명]) [alias] from [테이블 이름]
select min([컬럼명]) [alias] from [테이블 이름]
최댓값은 max를 통해서, 최솟값은 min을 통해 구할 수 있다.
select [카테고리컬럼], [계산할 내용] from [테이블 이름] group by [카테고리컬럼]
| [카테고리 컬럼] | [계산할 내용] | |
|---|---|---|
| 1 | - | - |
| 2 | - | - |
위와 같이 작성을 한다면, 내가 원하는 카테고리별로 계산된 내용을 얻게 된다.
select [컬럼1], [컬럼2], ... from [테이블 이름] order by [정렬을 원하는 컬럼]
오름차순을 원하다면 order by [컬럼명]으로, 내림차순을 원한다면 order by [컬럼명] desc으로 작성하면 된다.
이때, 컬럼명 대신 sum()과 같은 내용들을 작성해도 된다.
select [컬럼1], [컬럼2], ...
from [테이블 이름]
where [조건]
group by [카테고리 컬럼]
order by [정렬 기준 컬럼]
이와 같은 순서로 작성을 해주면 된다.
자세한 내용은 노션을 통해 정리해두었다.
Notion 확인하기
많은 데이터를 다루다보면, 필요에 따라 데이터를 가공하기도 해야한다.
먼저, 특정 문자를 다른 문자로 바꾸기 위해서는 replace를 사용한다.
select replace([바꿀 컬럼], [현재 값], [바꿀 값]) from [테이블 이름]
이렇게 하면 Ctrl + H를 사용하는 것처럼 한번에 특정 문자를 모두 다른 문자로 바꿀 수 있다.
또, 긴 단어 중에 원하는 문자만 남길 수도 있는데, 그때는 substring 혹은 substr을 사용한다.
substr은 그냥 줄인 버전이기에 둘 중 어떤 것을 사용해도 상관없다.
select substr([조회 할 컬럼], [시작 위치], [글자 수]) from [테이블 이름]
이렇게 하면 긴 주소록에서 시도 정보만 가져올 수도 있고, 이름에서 성씨의 정보만 가져올 수도 있다.
그리고, 여러 셀의 문자를 합쳐서 하나의 셀로 만들 수도 있는데, 이때는 concat을 사용한다.
select concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....) from [테이블 이름]
이때, 컬럼, 한글, 영어, 숫자, 기타 특수문자 모두 붙여서 사용할 수 있다.
단, 텍스트를 직접 입력할 때에는 ''(작은 따옴표)를 사용해야 한다.
하나의 조건만 적용한다면,
select if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때) from [테이블 이름]
if를 사용하면 된다.
만약, 여러 개의 조건을 지정하고 싶다면,
case when 조건1 then 값(수식)1
when 조건2 then 값(수식)2
else 값(수식)3
end
if를 대신해서 case를 사용하고, 각각의 조건을 when과 then을 사용해 넣어주면 된다.
자세한 실습 내용은 노션을 통해 정리해두었다.
Notion 확인하기
이제 웹개발 강의가 끝나고, SQL 강의를 듣기 시작했다.
웹개발은 내용이 많지는 않았지만, 실습하는 데에 시간이 많이 걸렸다면,
SQL은 실습하는 데에는 시간이 많이 걸리지 않지만, 내용이 너무 많다.
한번에 2개의 강의를 연달아 들으니 머리가 멍해지는 느낌이다...
이전에 리눅스를 배우면서 SQL을 정말 잠깐 배웠었다.
그때는 db를 생성하고, 테이블을 생성하고 삭제하고, 테이블의 내용을 보는 것만 다뤘었다.
그래서인지 3강까지의 강의를 들으면서 select문이 create, delete 같은 것들과 같은 선상에 있다는 생각을 못하고 있었다.
나는 alias를 지정하고, replace로 문자열을 바꾸고 하면 데이터 자체가 변경될까봐 걱정이 되었었는데,
이런 내용들은 select 안에서 이루어지는 것들이기에 아무런 영향을 미치지 않는다고 한다.
이 설명을 듣고 리눅스에서 배운 SQL의 세계와 강의에서 배우고 있는 SQL의 세계에 충돌이 일어난 느낌이었다.
빨리 SQL 강의를 듣고 퀘스트를 풀면서 연습을 더 해봐야 될 것 같다.