[LG U+ Why Not SW Camp 7기] 7월 1주차 회고

배형진·2025년 7월 6일

Why not SW 부트캠프

목록 보기
3/11

📑 7월 1주차 학습 일지


🔎 1주차 학습 목표 및 개요

이번 주는 SQL을 배우기 전에 먼저 데이터베이스에 대한 이론을 학습하였습니다. 또한 SQL 문법에 대해 배우기 시작하면서 DML언어 위주로 스터디를 시작하였습니다. 데이터베이스의 기본적인 개념과 특징에 대한 이해와 SQL을 이용하여 원하는 데이터를 확인하는 것을 목표로 삼았습니다.


📚 주요 학습 내용 정리

1. 데이터베이스의 이해

이번 주는 데이터베이스의 개념과 특징, 그리고 어떠한 종류와 방식이 있는지 스터디를 하였습니다

2. SQL 기초

SQL의 DML을 이용하여 데이터베이스를 다루는 법을 배웠습니다

  • 기본문법/질의를 통해 원하는 데이터를 선택하여 검색하는 방법을 배웠습니다
  • 문자형, 날짜/시간형 함수에 대해 배웠으며 추가로 제어흐름 함수인 if, case와 같은 함수들을 학습하였습니다
  • 집계 함수를 이용하여 원하는 그룹 별로 묶은 뒤 값을 집계하는 방법을 배웠습니다
  • 조인 함수를 이용하여 여러 개의 테이블을 연결하여 데이터를 검색하거나 참조하는 방법을 스터디 하였습니다
  • 서브쿼리를 통해 원하는 데이터를 좀 더 정교하게 필터링하여 데이터를 추출하는 법을 학습하였습니다

🎮 실습/과제 수행 및 문제 해결 과정

이번주 에 실습하면서 겪었던 어려움이나 궁금증의 해결과정을 기록하였습니다

다음은 SQL의 서브쿼리 파트를 배우면서 막혔던 문제입니다

각 제품의 마지막 주문일을 기준으로 제품의 주문단가를 추출하는 연습문제였는데 마지막 주문일의 단가만 뽑는 방법을 생각해내지 못해 문제를 해결하지 못하였습니다

-- 각 제품의 마지막 주문일의 주문단가
SELECT 제품명
, (SELECT 단가*(1-할인율)
	FROM 주문세부
	JOIN 주문
	ON 주문세부.주문번호 = 주문.주문번호
    WHERE 주문세부.제품번호 = 제품.제품번호
    ORDER BY주문일 DESC
    LIMIT 1
	) AS 주문단가
FROM 제품;

그러다가 같이 수업을 듣는 동기 분께서 주신 LIMIT 함수를 이용하라는 힌트로 위 코드와 같이 해결을 하였습니다

LIMIT 함수를 사용하지 않았던 이유는 LIMIT 함수를 이용하면 각 제품 별 마지막 주문 단가가 아닌 모든 제품 중 마지막 주문 단가만 나온다고 생각을 하였기 때문입니다.

이는 상관 서브쿼리에 대한 이해가 부족해서 생긴 문제였는데 내부쿼리 내의 LIMIT가 전체 테이블이 아닌 WHERE절에서 필터링 된 특정 제품의 마지막 주문일에만 적용이 되는 것임을 알게 되었습니다.

원리를 살펴보자면 외부쿼리는 제품의 각 행마다 순차적으로 반복하여 데이터를 추출해주는데 내부쿼리 내에 있는 WHERE절로 인해 주문세부와 제품 테이블에 공통으로 존재하는 제품번호를 가져와 이 제품번호에 속하는 항목들을 주문날짜를 기준으로 내림차순 정렬을 하고 LIMIT 함수로 최상단에 있는 값만 가져오는 것입니다.

즉 쉽게 말해서 서브쿼리는 메인 쿼리의 각 제품(제품번호)에 대해 한 번씩 실행되기 때문에 각 제품 별로 마지막 주문번호가 추출이 가능했던 것이었습니다


SELECT로 기본키를 호출하였을 떄 발생하는 버그..?

테이블의 기본키를 포함하여 데이터를 검색하였을 때 마지막 행에 NULL로 이루어진 행이 생긴다는 것을 발견 하였습니다.

USE wntrade;
SELECT *
FROM 제품;

첨부한 위의 사진과 같이 NULL 값으로 이루어진 행이 마지막에 존재한다는 것을 확인할 수 있습니다
아직 원인은 발견하지 못하였지만 NULL에 값이 입력이 가능하고 심지어 APPLY까지 될 수 있다는 것을 발견하였고 NULL에 임의의 값을 입력해서 데이터를 손상시키지 않도록 주의해야 할 것 같다는 생각을 하였습니다.

혹시 원인을 아시는 분은 알려주시면 감사하겠습니다.


🔮 주간 회고

1. Like (좋았던 점)

  • SQL을 처음 써보며 데이터를 조건에 맞게 추출하는 것이 재미있고 유용하게 느껴짐
  • 동기들과 서로 잘 안풀리는 문제들을 도와거나 문제의 원인을 분석하고 해결해 나가는 과정이 좋았음
  • 쿼리의 효율성을 분석하는 방법(EXPLAIN )을 알게되어 이를 통해 나중에 좀 더 효율적인 쿼리를 설계 해볼 수 있을것 같다는 생각이 듬

2. Learned (배운 점)

  • DBMS 개요 및 종류, SQL의 기본 질의문과 연산자, 단일행 함수, CASE문 등 SQL 기초 문법
  • 집계 함수와 GROUP BY, JOIN의 유형, 서브쿼리의 사용 방식, DML문(INSERT, UPDATE, DELETE) 등 SQL 전반적인 구조와 활용법.
  • SELECT, GROUP BY, ORDER BY, 등 SQL의 실행 순서와 구조적 사고.
  • 실습을 통해 데이터를 가공하고 통합하는 사고 방식

3. Lacked (부족했던 점)

  • 데이터를 생성하는 SQL 스크립트를 직접 작성해보지 않아 DB 생성 및 초기화에 대한 실습 경험 부족.
  • 서브쿼리 vs JOIN 선택 기준에 대한 이해 부족.
  • DML 구문이 익숙하지 않아 데이터 조작에 대한 자신감 부족.

4. Longed for (더 바라는 점 / 앞으로의 계획)

  1. SQL 문법 복습 및 정리: 노션에 일별 정리, 쿼리 실습 결과 기록.
  2. 공모전 아이디어 구체화 및 기획서 초안 작성
  3. 정처기 1단원 복습 및 주말 활용한 SQL 실습 챕터(ch9) 학습.

📅 이번 주말 학습 계획

이번 주말에는 정보처리기사의 필기 시험을 대비하여 3과목 스터디와 기출문제를 풀 계획이며, 생활이동 데이터 해커톤을 위해 팀원들과 같이 기획서 작성 작업을 할 예정입니다. 마지막으로 이번주에 배운 SQL을 복습할 겸 교재에서 주어진 데이터를 바탕으로 실습을 해볼 계획입니다

1개의 댓글

comment-user-thumbnail
2025년 7월 15일

따봉 드리겠습니다

답글 달기