SQL(8)
-
반복문 의존증
많은 엔지니어 및 프로그래머는 공통적으로 문제를 해결할 때 반복문을 사용하는 것에 익숙해져 있다.→ 복잡한 문제를 작고 개별적인 단위(레코드)로 나눈 다음, 그 단위에 반복문을 적용해 해결하는 사고방식이다.“문제가 생기면 일단 분할하고 보자”, “상향 식으로 접근하자”, “모듈을 작게 나누자”의 프로그래밍 철학 이러한 반복문 의존증을 SQL 및 RDB의 패러다임 관점에서 이야기 해보자. SQL 및 RDB의 패러다임SQL에는 본질적으로 반복문이 없다.이는 SQL은 처음부터 반복문이 없는 것이 더 좋다는 철학을 바탕으로 설계됐기 때문인데,이로 인해 사용자에게 편리함을 제공한다. SQL은 기본적으로 집합(Set) 기반의 언어이고,개발자가 개별 레코드를 어떻게 처리할지 명시적으로 반복문을 작성할 필요 없이,원..
2025.08.03 -
절차 지향에서 선언형으로
최근 SQL을 튜닝을 공부하면 할수록 느끼는 건데,단순히 문법을 외우는 걸 넘어서 생각의 체계 자체를 바꾸는게 필요한 것 같다. 절차 지향형 vs 선언형 사고 SQL을 작성하면서 statement 중심의 절차 지향형 사고에 머무를 때가 많다.쿼리를 작성하다 보면, “어떻게 이걸 구현하지?”에 초점이 맞춰진다. 근데 중급자 이상으로 가려면 반드시 넘어야 할 벽이 있다고 한다.바로 expression 중심의 선언형 사고이다.SQL은 프로그래밍 언어가 아니라, 질의(Query) 언어다.무엇을 원하는지를 말하면, DB가 어떻게든 해준다. UNION 쓰지 말자 (웬만하면)조건 분기 때문에 UNION을 여러 번 쓰고 있다면?CASE 식으로 훨씬 자연스럽고 깔끔하게 표현할 수 있다.UNION은 성능적 안티 패턴이..
2025.08.01 -
신규 가입자의 2주차 재방문율 감소 문제
📌 비지니스 문제 시나리오최근 월간 활성 사용자(MAU)는 안정적이지만, 신규 가입자의 2주차 재방문율이 20% 이하로 떨어짐PM은 "추천 상품 노출 방식"이 문제라고 가설을 세웠지만,마케팅팀은 "신규 사용자 온보딩 프로세스의 부족"이 더 큰 문제라고 주장함.현재 팀의 핵심 과제는 리텐션(사용자 재방문) 개선입니다. 미션:리텐션 분석을 통해 2주차 재방문율이 낮은 원인을 규명하는 코드 작성과,작성한 SQL을 최적화된 방식으로 작성하여 분석 속도를 높이며,최종적으로 실행 계획을 예측 → 옵티마이저 관점에서 성능을 점검해야 함 ➡️ Step 1. 리텐션 분석 기본 프레임 설계이 문제를 해결해 나아가 보자. ❓ 리텐션을 어떤 방식으로 정의할 것인가? (코호트 vs 비코호트)리텐션은 기본적으로 “특정 시점 이..
2025.07.22 -
[SQL] 프로그래머스 Lv.4 보호소에서 중성화한 동물
문제 설명 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다.보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요. 처음 작성한 풀이보호소에 들어올 당시 중성화 x → ANIMAL_INS 테이블과보호소를 나갈 당시 중성화 o → ANIMAL_OUTS 테이블을 JOIN동물 아이디와 생물 종, 이름을 조회아이디 순 정렬 → ORDER BYSELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAMEFROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON (B.ANIMAL_ID = A.ANIMAL_ID)WHERE A.SEX_UPON_INTAKE LIKE..
2025.04.05 -
[SQL] LeetCode #511 - Game Play Analysis
SQL 문제 풀이 - 첫 로그인 날짜 찾기단순 SQLD 시험 응시를 넘어 앞으로 꾸준하게 SQL을 공부해보려고 합니다. 그 과정 중 난이도와 상관 없이 1문제라도 꾸준하게 "분석적으로" 풀이해볼 생각입니다. 많관부 문제 설명(player_id, event_date) is the primary key (combination of columns with unique values) of this table. This table shows the activity of players of some games. Each row is a record of a player who logged in and played a number of games (possibly 0) before logging out on some..
2025.03.19 -
정규화
정규화 정규화는 관계형 데이터베이스 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스이다. 즉, 테이블 간 관계를 재구성하여 고유하고 잘 조직된 관계를 생성하는 것이 목표이며, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다. 쇼핑 사이트 주문 처리 시스템을 구축한다고 가정해보자.간단한 주문 데이터로는 어떤 것이 필요한지 생각해 볼 필요가 있다.CREATE TABLE order_table( 주문번호 INT NOT NULL, 날짜 DATE, 고객이름 VARCHAR(10), 연락처 VARCHAR(11), 주문상품 VARCHAR(100));INSERT INTO order_table VALUES(1, "2025-03-18", "장세민", "0101234..
2025.03.19