[SQL_입문]/개발일지

2. EXCEL처럼 쓰자, SQL!

Code_Otaku 2022. 9. 1. 22:37

 

앙뇽!

 

문과 출신 아니랄까봐 필자 이 새끼는 시작부터 말장난이다.

하지만 퍽 괜찮은 비유 아닌가?

SQL을 쓰면 쓸수록 엑셀이 연상되기 마련이다.

우선은 둘 다 테이블 (Table)에서 작업을 수행하지?

그리고 무수히 많은 데이터를 컬럼 (Column)과 로우 (Row)에 담고 있다. 

무엇보다 특정한 명령을 수행하기 위해서는 상황에 맞는 함수를 호출해야 한다.

 

엑셀은 SUM, SUBSTRACT, AVERAGE 정도가 있었던가?

아무렴 어떠한가?

MOS 시간도 아닌데..

 

SQL은 지난 시간에 딱 하나 다뤄봤다.

그게 뭐였지?

바로 필요한 데이터를 조회 (READ) 할 때 쓰는 SELECT 구문이 있었다.

생성이나 수정은 헷갈릴 수도 있겠다만 SELECT는 딱 하나다.

절대 헷갈리면 안된다.

 

그리고 마지막 즈음에 필자가 이렇게 얘기한 바 있다.

주니어로 진입하는 우리는 데이터를 생성하거나 수정, 삭제할 권한이 여간해선 주어지지 않는다.

필요한 데이터를 적재적소에 뽑아 쓰는 게 훨씬 중요하다!

 

그렇지 않겠는가?

회사가 뭘 믿고 우리들에게 DB를 맡기겠는가?

SELECT 하나만 제대로 다룰 줄 알아도 큰 문제가 없다고 했다.

저번 시간에는 SELECT 구문을 졸졸 따라다니는 녀석들에 대해 조금 이야기해 보았다.

 

SELECT * FROM orders o 
WHERE payment_method = 'kakaopay'
AND email LIKE '%gmail.com'
LIMIT 12;

대충 요따구로 생겨먹었는데.. 기억하는지 모르겠다.

첫 번째 시간에는 이 구문을 해석하는 게 큰 의미가 없어서 폼만 틱 던져놓고 끝내버렸다.

하지만 이번 시간부터는 구문과 테이블을 대조해가면서 조금씩 해석할 줄 알아야 한다.

우선 문법을 이해하고 있는 필자가 해석을 먼저 해보도록 할까?

 

  1. orders 테이블에서 모든 데이터를 조회하겠다. 테이블의 별칭은 'o' 로 정했다.
  2. o 테이블에서 결제수단이 카카오페이인 녀석들만 따로 선별하겠다.
  3. 동시에 이메일주소는 gmail.com을 포함하고 있어야 한다.
  4. 딱 12줄 까지만 조회하고 싶다.

 

어떻게.. 이해가 좀 되는가?

엑셀 같았으면 PIVOT 테이블을 이용해서 저러한 모양을 흉내낼 수 있겠지.

이렇게 말하니까 솔직히 그 놈이 그 놈 같다.

그렇게 느껴지는 것이 당연하다.

왜냐하면 우리는 아직까지 SQL의 강력함을 맛보지 못했으니까!

 

SELECT payment_method, COUNT(*) AS CNT FROM orders o
WHERE course_title = '앱개발 종합반'
GROUP BY payment_method

뭐가 강력한지 아직도 모르겠다고?

저녁에 로제 떡볶이를 혼자서 조져놓고 살이 빠지길 바라는 심보는 집어치우기 바란다.

이번에도 라인 바이 라인으로 해석해보자.

 

  1. orders (별칭 o) 테이블에서 결제수단 및 각각의 사용빈도 (별칭 CNT) 를 조회하겠다.
  2. 조회 대상은 앱개발 종합반을 수강하고 있는 학생들에 한정한다.
  3. 아! 결제수단에 따라 테이블을 정렬하고 싶다.

 

느그 피벗 테이블은 이런거 못하지?

아.. 아직까지는 가능하다.

항목별로 묶어가지고 합계 내는거?

그정도야 사무직에게는 껌이지~ ㅎㅎㅎㅎ

 

그렇다면 요 놈은 어떠한가?

갯수가 하두 많아서 12개로 잘라왔다.

필자가 팝 퀴즈를 하나 내봐도 괜 찮겠습니까?

예아! 아주 빠르게..

 

  1. 코멘트 (comment) 에 달린 '좋아요 (likes)' 의 평균 갯수를 구해보자.
  2. 아! 기왕이면 course_id 별로 정렬해줬으면 좋겠다.

 

까놓고 말해도 되겠는가?

SQL은 능지의 영역이다.

필자는 오라클로 DB를 배웠거든?

처참할 정도의 능지 때문에 처음에는 감이 전혀 잡히질 않았다.

이거 완전 말장난이거든..

테이블이 복잡해질수록 혓바닥 역시 더더욱 길어지기 마련이다.

어떤 경우에는 욕이 나올 정도로 축약되어 있기 때문에, 개발자가 눈치껏 빌드업을 해줘야 한다.

 

 

바로 이런 경우를 예로 들 수 있다.

짤막하고 간단해서 좋기는 한데.. 묘하게 기분이 나쁘다.

그러니까 이번에도 한 줄씩 해석해 보자.

 

SELECT course_id, ROUND(AVG(likes),1) AS AVG FROM checkins c
GROUP BY course_id
  1. 치킨? 아니아니 체크인 테이블 (별칭 c) 에서 단과별 ID와 평균 좋아요 개수를 조회하겠다. 
  2. 단과별 ID들끼리 묶어서 보기좋게 정렬하겠다.

 

필자가 그랬지?

순 말장난이라고..

하지만 기능성 하나만큼은 엑셀보다 탁월하다고 할 수 있다.

어떻게 보면 윗분들이 원하는 데이터만 뽑아다가 보여드릴 수 있는 것이지.

 

많이 연습 해보는 방법밖에 없다.

팁을 하나 알려주자면 언어영역 풀듯이 조건을 키워드 순으로 나열해주면 의외로 쉽다.

그럼 어느 순간 말이 되는 것이지.

계속 문장을 만들어봐라.

감이 잡히는 구간이 반드시 찾아온다.

 

'[SQL_입문] > 개발일지' 카테고리의 다른 글

3. EXCEL보다 쉬운가..? SQL!  (2) 2022.09.18
1. EXCEL보다 쉽다, SQL!  (0) 2022.08.25