본문 바로가기
SQL/프로그래머스 SQL 스터디 2기

[프로그래머스 SQL 스터디 2기] 1주 차 TIL/후기

by codeok 2022. 3. 3.
반응형

 

정말 오랜만에 새로운 포스팅이다. 벌써 새내기 개발자 6개월 차이고 근무하다 보니 정신없이 시간이 갔다.

이번 포스팅을 기점으로 지속적으로 글을 올릴 것이다!

 

IT 현업에 근무하면서 Java, SQL, JS 다방면에 지식이 필요했지만, 개인적인 업무로는 쿼리를 다루는 일이 많았다. 이전에 SQLD 자격증을 취득하기도 했고 그나마? DB에 자신이 있었다...??

 

그렇지만, 복잡한 쿼리를 마주하니 "어떻게 쿼리를 짜야하지?" 생각만 하게 되고 해결을 해도 효율적인 쿼리인지 제대로 짠 쿼리인지 파악을 할 수 없게 되고 일단은 돌아가는 쿼리를 짰다.  

 

그러던 중에 프로그래머스 사이트에서 SQL 코드 리뷰 스터디가 있는 것을 확인했다.

해당 스터디를 40만 원이라는 돈을 주고도 선택한 이유는 다음과 같다.

 

1. 주차별 미션이 잘 정리되어 목표가 분명했다.
  2. 내가 작성한 코드에 대해 리뷰를 받을 수 있다.
3. 매주마다 코딩 테스트를 진행한다.
4. 프로그래머스 브랜드 키트를 준다.

2번째인 코드 리뷰를 받을 수 있다는 점이 가장 큰 장점으로 느껴져서 신청을 하게 되었다.

4번째인 브랜드 키트는 프로그래머스 로고의 티셔츠와 머쓱이라는 캐릭터가 있는 우산, 마우스 패드, 안경닦이를 준다고 한다. 갖고 싶다... 열심히 할 이유가 하나 더 생겼다. 개발자 맞춤 필수 세트인 거 같다ㅋㅋㅋㅋㅋㅋ 

 

과정을 신청한 사이트는 하단에 있습니다.

 

 

[스터디/2기] 학교 밖에서 듣는 전공필수 SQL/DB Essentials

🚀아쉽지만 2기는 마감되었어요. 3기 오픈 알림 신청하고 최저가에 수강하세요! 오픈 알림 신청 개발자에게 데이터베이스를 이해하는 능력은 필수! 데이터베이스의 기본 개념부터 ERD를 읽는 방

programmers.co.kr

 

수업 진행 방식 

수업 진행 방식은 역진행 방식으로 진행을 한다고 한다.

  • Flipped Learning(역진행 수업)
    • 선 강의 → 학습 → 질문
  • 수업 진행 방식
    • 매주 강의 && 2주 차부터 월~금 코딩 테스트
    • 매주 강의는 2개(1개당 약 1시간 30분)
    • 코딩 테스트는 금요일 19시까지 풀어야 한다!
      • 단테(멘토)님이 리뷰해주기에 목요일까지 푸는 게 좋다.

 

이번 스터디를 통해서 TIL은 notion에 작성하고 매주 스스로 진행했던 과제들의 개선점들은 블로그에 작성해보려고 한다.

 

TIL : 관계대수 

 

1주차 TIL : 관계대수

2022-02/19 토 ~ 02/25 금

chatter-jade-8f2.notion.site

 

과제 - 관계대수식 작성 문제

릴레이션(테이블) 구성 학생, 등록, 과목 테이블로 구성되어 있다.

 

Q1. 과목번호가 ‘A1234’인 과목을 등록하여, 성적 ‘B’를 받은 학생의 이름을 검색하시오.

기본키는 밑줄(_)로 표현

기본키 && 외래키는 밑줄과 *로 표현 

 

학생(학번, 이름, 학년, 학과)

등록(학번*, 과목번호*, 성적, 중간시험, 기말시험)

과목(과목번호, 과목명, 학점, 학과, 담당교수)


나의 풀이

학생 테이블에는 성적, 이름 컬럼을 사용하고, 등록 테이블에서는 과목번호 컬럼을 사용하기에 조인이 필요하다고 생각했다. 조인을 한 다음에 성적 = ‘B’이면서 과목번호 = ‘A1234’인 select(수평적 부분집합)를 하면 된다고 생각을 했다.

 

\(\prod\) 이름 ( ( \(\sigma\) 성적 = ‘B’ \(\land\) 과목번호 = ‘A1234’ ( 학생 \(\bowtie\) 등록 ) ) )

 

 

리뷰 코드

개선된 코드에서는 조인을 먼저 하는 것보다 등록 테이블에 성적이 ‘B’이면서 과목번호가 ‘A1234’인 튜플(행)들을 먼저 select(수평적 부분집합)로  조건에 맞는 튜플들을 분류하고, 조금 더 적은 n개의 튜플로 조인을 하는 게 효율적인 코드라고 했다.

 

\(\prod\) 이름 ( 학생 \(\bowtie\) ( \(\sigma\) 성적 = ‘B \(\land\) 과목번호 = ‘A1234’ (등록) ) )

 

 

Q2. ‘운영체제’와 ‘알고리즘’ 과목을 같이 수강한 학생의 학번을 검색하시오.

나의 풀이

과목명이 있는 과목 테이블과 수강한 학번이 있는 등록 테이블이 필요하다.

여기서 중요한 포인트는 ‘운영체제’와 ‘알고리즘’ 과목을 같이 수강한 학생의 학번이다. 작명 연산\(\rho\)을 이용해서 운영체제와 알고리즘을 수강한 학번들을 교집합으로 추출했다.

 

 

\(\rho\)x ( \(\prod\) 학번 ( 등록 \(\bowtie\) ( \(\sigma\) 과목명 = ‘운영체제’ ( 과목 ) ) ) )

\(\rho\)y ( \(\prod\) 학번 ( 등록 \(\bowtie\) ( \(\sigma\) 과목명 = ‘알고리즘’ ( 과목 ) ) ) )

x \(\cap\) y

 

 

해당 문제에서 많이 나온 오답

하단과 같이 한다면 ‘운영체제’와 ‘알고리즘’을 같이 들은 학번을 추출하는 게 아니라, 둘 중에 하나만 듣더라도 결과로 나오게 된다.

 

\(\prod\) 학번 ( 등록 \(\bowtie\) ( \(\sigma\) 과목명 = ‘운영체제’ \(\lor\) 과목명 = ‘알고리즘’ ( 과목 ) ) )

 

 

TIL : ERD

 

1주차 TIL : ERD

오늘은 데이터베이스에서 중요한 ERD에서 대해서 TIL을 진행한다.

chatter-jade-8f2.notion.site

 

1주차 후기 

데이터베이스의 기본인 관계대수와 ERD를 다시 공부를 할 수 있었고, 관계대수에서도 데이터를 어떻게 하면 더 효율적으로 출력할 수 있을까? 생각을 할 수 있게 되었다.

 

단테(멘토)님이 SQL에서 관계대수와 식별/비식별 관계, 참여, 매핑 정보를 이해하는 것이 매우 중요하다고 했다. 

TIL을 작성한 내용을 다음에 다시 복기하도록 하자.

 

2주 차부터는 매주 코딩 테스트 문제도 있기에 미리미리 열심히 하자! 파이팅!

 

2주 차에는 스키마 정의데이터 필터링에 대해서 TIL과 후기를 진행하겠습니다!

반응형