개발 초보가 SQL 연습하는 법

박건우·2023년 10월 24일
3

SQL

목록 보기
1/7

내가 코드를 공부할 때 많이 이용하는 사이트이다.

> 프로그래머스 스쿨 바로가기

내가 쿼리문을 연습하는 방법을 소개하려고 한다.

아래는 쉬운 sql 연습 링크다.

https://school.programmers.co.kr/learn/courses/30/parts/17042

위의 사진은 연습 화면이다. 이 사이트의 좋은 점은 초보자의 접근성이 좋다는 것이다. 가운데 기준 왼쪽 화면은 친절하게 설명과 예시 테이블을 보여준다. 오른쪽 화면은 내가 코드를 쓸 수 있으며, 하단의 코드 실행을 누르면 결과가 임시출력 된다. 여기서 잘못 작성 하면 오류사항도 띄워주는 아주 친절한 사이트다.

나는 어떻게 SQL을 공부하는가?

공부의 스타일은 개개인이 다를 것이다. 정답은 없다고 생각한다. 나는 탐구심이 강한 편이라 문제를 푸는 것보다 정답의 원리, 쉽게 말해 왜 이 답이 나왔는가를 중시한다.

위의 문제를 푸는 나의 과정은 다음과 같다.

  1. 문제에서 원하는 것이 뭔지 파악한다.

우선 문제를 읽어보자

PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.

어렵게 생각하지 말고 주어진 정보를 차분히 정리해보자.

1-1 테이블의 이름은 PATIENT다.
1-2 구해야 하는 컬럼은 'PT_NAME(환자이름)', 'PT_NO(환자번호)', 'GEND_CD(성별코드)', 'AGE(나이)', 'TLNO(전화번호)'.
1-3 조건은 12세 이하. 만약 전화번호가 없으면(null) NONE으로 출력.
1-4 정렬은 나이 기준으로 내림차순, 나이가 같다면 환자이름을 기준으로 오름차순 정렬.

  1. 아는 대로 적어본다.

정답을 맞추는 것보다 내가 모르는 것을 알고 공부하는 게 중요하다. 그러니 가감없이 솔직하게 적어보자.

 SELECT PT_NAME, PT_NO, GEND_CD, AGE, TLNO 
 // 내가 구하려는 컬럼들을 선택
from PATIENT where AGE <=12 and GEND_CD = 'W'
// PATIENT 테이블에서 age가 12이하 그리고 성별이 W(여성)을 조건으로 설정
order by AGE desc and PT_NAME; 
// 나이 내림차순 정렬, 그 다음은 이름으로 오름차순 정렬

우선 이 코드는 틀렸음을 직감했다. '만약 전화번호가 없으면(null) NONE으로 출력' 을 못 썼다.
그래도 피드백을 받기 위해 실행해본다.

  1. 코드 실행 후, 오류에 맞춰 재수정 해본다.

그러면 친절하게 오류 부분을 설명해준다.

대충 and PT_NAME 부분이 틀렸다는 내용 같다.

SELECT PT_NAME, PT_NO, GEND_CD, AGE, TLNO from PATIENT where AGE <=12 and GEND_CD = 'W' order by AGE desc, PT_NAME; 

이렇게 수정해보면

테이블이 제대로 출력이 된다. 코드 상의 문법 오류는 없다는 뜻. 그러나 아직 조건을 채우지는 못했다. '만약 전화번호가 없으면(null) NONE으로 출력' 을 어떻게 써야할지 모르겠다.

  1. 모르는 것이 있으면 구글 검색 + GPT를 활용한다.

GPT는 정말 최고의 공부 도우미라고 생각한다. 나는 GPT를 친구처럼 대하곤 한다.

여기서 필요한 부분을 캐낸다. 그리고 되물으며 학습한다.

COALESCE(column_name, '기본값')
// 해당 컬럼이 null 값이면 기본 값을 설정할 수 있는 함수

  1. 무엇이 문제인지 찾고 해결한다.

과정을 조합하여 정답을 찾았다.

SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO, 'NONE') AS TLNO
from PATIENT where AGE <=12 and GEND_CD = 'W' order by AGE desc, PT_NAME; 

연구하듯 공부하는 것. 시간은 오래 걸려도 내겐 가장 효율적인 방법이었다.

0개의 댓글