12/4 SQL week 1 문제풀이

김태준·2022년 12월 2일
1

DB STUDY

목록 보기
1/17

벌써 2022년도 한달도 안남게 되었다. 남은 한달도 알차게 보내 2022년을 잘 마무리 해야겠다.

12/2 금요일🙄 오늘은 5시간 잤나.. 밀린 강의들을 쭉 듣고 레포트도 2개 작성하였다
시험에 공부에 오늘은 SQL Study까지 죽어나간다 정말😭
매주 일요일 진행하는 SQL study를 위해 정말 오랜만에 SQL문을 다시 공부하였다!
(SQLD 따고 한번도 안했더니.. 1년 반이 지난 듯 하다.)

SQL Study를 하는 목적은 데이터 분석을 하기 위해선 대용량 데이터(DB)를 당연히 다룰줄 알아야 하고 이를 위해 SQL 숙련도 그리고 면접 대비를 위해서다.

SQLD 자격증을 준비하면서도 쿼리를 직접적으로 짜 본 경우는 그동안 없었기에 SELECT(조회), CREATE(생성), UPDATE(갱신), DELETE(삭제) 등 완전 기초적인 것부터 다시 공부하였다.
SQL 기초 정리? 쿼리를 정리한 파트는 아래 블로그를 통해 다시 떠올렸다.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=baek2sm&logNo=221578169366
작성해주신 분 감사드립니다👍

추가로 프로그래머스 MySQL 문제를 풀다가 TABLE 간 JOIN 문제가 나와 아래 블로그 글을 통해 JOIN을 정리할 수 있었다.

https://lcs1245.tistory.com/entry/SQL-JOIN-INNER-JOIN-OUTER-JOIN-LEFT-JOIN-RIGHT-JOIN-SELF-JOIN
작성해주신 분 감사드립니다👍

문제 풀이

과일로 만든 아이스크림 고르기


SQL의 문제 설명의 경우 표로 되어있기 때문에 캡쳐를 활용할 계획이다.

SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF
LEFT JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
WHERE FIRST_HALF.TOTAL_ORDER > 3000
AND ICECREAM_INFO.INGREDIENT_TYPE = 'fruit_based'
ORDER BY FIRST_HALF.TOTAL_ORDER DESC

< 풀이 과정 >

우선 ICECREAM_INFO 테이블의 FLAVOR 컬럼이 FIRST_HALF 테이블의 FLAVOR의 외래 키라 했으므로 테이블 관계가 FIRST_HALF가 더 큰 범주임을 알 수 있다.

  1. 따라서 FIRST_HALF 테이블의 FLAVOR를 조회한다.
  2. 이때 ICECREAM_INFO가 더 작은 범주이므로 LEFT JOIN으로 FLAVOR 컬럼을 기준으로 JOIN
  3. 주어진 문제에서 총주문량이 3000보다 크고 주 성분이 과일이라고 하였으므로 WHERE ~ AND ~ 문 작성
  4. 마지막으로 총 주문량이 순서가 큰대로 조회하는 내림차순 형태이므로 ORDER BY ~ DESC 적용!

처음 풀어보는 SQL 문제라서.. 미숙한 부분이 굉장히 많을 것 같다. 특히 테이블명.컬럼명 으로 지속적으로 작성해야하는 것이 불편하다 좀.. 파이썬처럼 as 같은 게 분명히 SQL에도 있을텐데..

인기있는 아이스크림

SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID 

< 풀이 과정 >
문제를 보자마자 크롬에 "SQL 테이블 정렬 2번"을 검색하여 아래 글을 통해 문제를 해결할 수 있었다. https://dar0m.tistory.com/60

주어진 문제 그대로 총 주문량 기준 내림차순, 총 주문량 동일 시 출하 번호 오름차순 정렬
위 코드처럼 ORDER BY A DESC, B 인 경우, A 기준 내림차순 정렬 A 값 동일 시 B 기준 오름차순 정렬을 의미한다!

흉부외과 또는 일반외과 의사 목록 출력하기

SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') as HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME 

날짜 형태만 잘 변경해주면 어렵지 않았던 문제
DATE_FORMAT(컬럼명, '원하는 날짜 형태') as 부를 컬럼 변수명 으로 처리하였다.

아 참고로, 추가적인 날짜 포맷 형태는 다음과 같다.

12세 이하인 여자 환자 목록 출력하기

SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE <= 12
AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME

< 풀이 과정 >
전화번호 컬럼의 데이터가 비어있는 경우 NONE으로 출력 따라서 IFNULL()을 이용하여 TLNO 컬럼을 처리하였다.

✨ SQL Study 1주차 문제풀이 결과

  1. 기초적인 SQL 쿼리 문법을 공부하고 문제를 푸는데는 그렇게 어려운 부분은 없었다. 다만 풀이 방법이 여러가지 일 것 같은? 그런 느낌들을 많이 받았다.
  2. 문제를 이해한 후 크롬에 SQL JOIN 이런식으로 검색해가면서 문제를 풀었더니 크게 어려운 부분은 없었다!
  3. 확실히 Python 코딩테스트에 비해 다른 점은, 레벨이 높다고 해서 문제 구현이 어려운 문제는 아니고 "함수를 얼마나 많이 아는가"가 가장 중요한 핵심인 것 같다
profile
To be a DataScientist

1개의 댓글

comment-user-thumbnail
2022년 12월 5일

스터디 따라와줘서 고마워 태준 ! 화이팅해봅시다

답글 달기