들어가며
저번 주에 포스팅 하려고 했으나 '내일 해야지'를 마음 속으로 7번 외치다 보니 본의 아니게 2주차 포스팅을 했었어야 하는 날에 겨우 쓴다. 다짐했던 대로 월, 수, 금요일에 공부는 꾸역꾸역(?) 한 건 스스로 칭찬할만 하지만 이번 주에 SQL 공부 방향성을 잃고 헤맨 건 아쉬웠다.
사실 1주차 공부 내용은 기본 문법 공부한 내용이라 지난 주에 쓸 수 있었는데 '블로그에 글을 알찬 내용으로 구성해야지!' 하다가 뭐가 알차다는 건지 정의조차 못 내리고 한 주를 날려버렸다. SQL 공부를 어떻게 했는지, 무엇을 참고했는지 기록하는 글을 주 1회씩 쓰려고 목표를 변경했다. 왜냐하면 아직도 SQL로 뭘 어떻게 쓸 수 있는지 감을 잡아가는 과정이라서..(=어떤 글을 쓸지 잘 모르겠다는 뜻)
1. 실전 압축 SQL을 위한 공부 방법
SQL을 배우려고 도서관에서 SQL 책을 두세 권 빌리고 유료 강의, 유튜브에 올라온 자료를 보면서 혼자서 해봤는데 결과적으로 유료 강의만 완주했다. 개인적인 소감으로는 SQL 기본 문법 공부에 왕도는 없는 것 같지만 그 내용이 이론 중심이다 보니 재미가 없었다. 그나마 유료 강의는 돈이라도 아까우니까 들었지.
추천하는 SQL 공부 방법으로 기본 수준의 책이 되었든 (유료) 강의가 되었든 시간과 기한을 정해놓고 하나를 진득하게 완주해내는 것을 권하고 싶다. 개인적으로 도움이 되었던 매체는 영상 강의 >> 책 순이다. 영상을 보면서 따라하는 게 덜 지루하기도 했고 책으로 공부하면 시선을 끊임 없이 '책 <-> 모니터' 왔다갔다 해야 해서 피로가 몰려왔기 때문이다.
다른 사람들이 올린 포스팅은 추천하고 싶지 않은데 그 이유는 두 가지다. (내가 포스팅을 쓰면서 이런 말 하니까 모순적이긴 하다...ㅎㅎ) 우선, 유료 강의나 책은 SQL로 다뤄볼 수 있는 샘플 데이터를 제공하는데 블로그 포스팅에서는 샘플 데이터를 제공하지 않는 경우가 대다수다. 두 번째 이유는 기본 문법을 끝까지 완주할 수 있도록 잘 쓰여진 글을 발견하기가 힘들다는 것. 경험상 SQL 포스팅을 꾸준히 하시는 분들은 스스로 공부한 내용을 정리하는데 그 수준이 기초를 다지기에는 적합하지 않았다.
실제로 프로덕트 내부 데이터에 접근할 수 있는 사람이거나 주변에 가르쳐 줄 수 있는 개발자나 데이터 전문가가 있다면 좋지만 그런 환경일지라도 어쨌든 기본 문법은 알아서 공부해야 한다.
결론: 기본적인 쿼리 문법(Select, Where, Join 등)은 강의 또는 책을 하나 정해서 완주하기
2. 기본 문법 - Select, Where
(1) Select: 데이터를 소환해줘
Select는 결과로 표시하고 싶은 값의 범위를 선정하는 쿼리문이고 보통 from과 함께 쓰인다. from 뒤에는 테이블이나 서브 쿼리 등을 작성하는데, 서브 쿼리에 대해서는 추후에 다룰 예정
Select * from orders
해석: orders(테이블 명)의 모든(=*로 표시) 데이터를 불러와.
위의 쿼리문에서 모든 데이터가 아니라 특정 필드*만 불러오고 싶다면 아래와 같이 작성해주면 된다.
Select order_no, user_id, email from orders
해석: orders에서 order_no, user_id, email 데이터만 선택해서 불러와.
*필드: 테이블 안에 있는 개별 값을 의미한다.
(2) Where: 특정 데이터만 가져와
가져오고 싶은 데이터에 조건을 설정하는 쿼리문으로 where을 쓰기 위해서는 불러오고 싶은 테이블을 이해하고 있어야 한다. 무슨 뜻이냐 하면, 테이블에 어떤 값이 있는지 알아야 그 중에 불러오고 싶은 값을 where로 조건을 설정할 수 있다.
Select * from orders
where payment_method = 'card'
해석: orders 테이블에서 payment_method 필드값이 card인 데이터를 전부(*) 불러와.
Where 쿼리문과 자주 쓰는 문법
뜻 | 쿼리문 | 예시 | 쿼리 해설 |
같지 않음 | != | Select * from orders where payment_method != 'card' |
orders 테이블의 데이터 중 payment_method 값이 'card'가 아닌 데이터만 전부 불러와. |
범위 | BETWEEN | Select * from orders where created_at BETWEEN '2023-01-01' and '2023-04-22' |
orders 테이블의 데이터 중 created_at 필드 값이 '2023-01-01'과 '2023-04-22' 사이에 해당하는 데이터만 전부 불러와. |
포함 | in | Select * from checkins where week in (1,3) |
checkins 테이블의 데이터 중 week 값이 1 또는 3을 충족하는 데이터만 전부 불러와. |
패턴(문자열 규칙) | like | Select * from users where email like '%kakao.com' |
users 테이블 데이터 중 email 필드가 'kakao.com'으로 끝나는 데이터만 전부 불러와 * %: 보통 like와 함께 쓰이며 % 앞/뒤로 작성한 값을 포함한 값만 불러오라는 쿼리문 |
3. 나만의 위키를 정리하자
기획자 데이먼의 SQL 영상에서 SQL은 기획 현업에서도 매일 다루지는 않는다고 한다. 즉 현업에서도 SQL과 익숙해지기 쉽지는 않다는 것인데, 결국 내가 알아볼 수 있게 잘 정리해두는 것이 중요하다. 처음 한두 번은 데이터 분석가나 개발자가 친절하게 도와줄 수 있지만 비슷한 내용을 세 번 이상 물어보다보면 그들도 사람인지라 귀찮기 마련일테니까.
그래서 나는 개인 노션 페이지에 그동안 배운 내용을 정리해두었다. 쿼리문은 위에 보는 것 처럼 회색 배경으로 구분을 지었고, 해당 쿼리문에 대한 설명, 나의 시행착오, 배운 것 등을 그 아래에 내가 알아볼 수 있도록 정리해뒀다. 사실 이틀에 한 번씩 봤는데도 Join 구문에 on인지 in인지 헷갈리고(정답은 on) 분명 배운 내용인 것 같은데 어떻게 썼는지 기억이 안날 때 노트를 뒤적거리면서 반복해서 학습했다.
원하는 결과값을 얻으려고 전에 배운 내용을 복습하느라 1~20분씩 쓰다보니 종종 현기증이 났지만 그러면서 더 정교하게 정리할 수 있었다. 그리고 '내가 알아볼 수 있게끔'이라는 뜻은 대충 쓰면 안 된다는 것도 경험적으로 깨닫는 중이다... 흑흑
분명 내가 짠 쿼리문인데 결과가 달라지는 마법 같은 SQL..이 아니라 사실 내가 생략한 과정을 미래의 나를 위해 친절하고 꼼꼼하게 작성 중이다. 즐겁다! ^~^
참고자료
1. PM, 기획자 SQL 꼭 배워야 할까요?, 2021.11.30., https://www.youtube.com/watch?v=mrjlTSsLChE
2. 엑셀보다 쉬운 SQL 강의, 스파르타 코딩클럽, https://spartacodingclub.kr/online/sql
'SQL > SQL 독학 프로젝트' 카테고리의 다른 글
주니어 서비스 기획자의 SQL 독학하기(1주차) (0) | 2023.04.07 |
---|
댓글