글의 목적
- 프로그래머스 MYSQL문제에 대한 느낌을 좀 정리해 두려고.
- 문제를 풀면서 공부해야할 키워드들을 정리해두고 하나씩 익숙하게 만들어갈 예정
본론
- 문제는 최대한 서브쿼리를 지양하고 INNER JOIN같은 경우는 WHERE 절로 INDEX들을 JOIN해서 풀었음.
- 총 76문제였는데 서브쿼리는 마지막에 4단계 5단계에서 서브쿼리를 쓸수밖에 없는 문제들이 있었음. 한 5문제 빼고는 다 JOIN으로 해결함.
- 너무 쉬운 키워드는 제외하고 기억해둘 만한 것들을 정리하려고 함.
- ORDER BY디폴트값 오름차순(ASC) 내림차순(DESC)
- CASE WHEN THEN ELSE END
- DATE_FORMAT("%Y-%m-%d")
- 프로그래머스는 이걸 정말 좋아한다........
- JOIN(LEFT, RIGHT, SLEF등등 전부 알아두면 좋음.)
- WHERE과 ID값으로 조인(JOIN 명령어 없이 INDEX를 활용한 JOIN, 예전부터 나는 이게 좀 편하다)
- WHERE IN ('', '')
- WHERE LIKE '%D%'
- 특정지역의 DATA를 추출할때는 '%서울%'이 아닌 '서울%'로 해야한다.
EX) 경기 과천시 광명로 181 서울랜드는 서울이 아닌데 뽑히기 때문!!! ^.^
- 특정지역의 DATA를 추출할때는 '%서울%'이 아닌 '서울%'로 해야한다.
- WHERE IS NOT NULL
- COUNT(개수), SUM(총합), AVG(평균) GROUP BY(묶음)
- ROUND(반올림)
- ROUND(TABLE, 1) 뒤에 숫자는 해당 소수점 반올림을 뜻함. 숫자 안써도 됨. 안쓰면 첫째자리에서 반올림.
- HAVING
- (PRICE-PRICE%10000)0, 10000, 20000 ~
- LEFT JOIN으로 그룹별 LIMIT 뽑기
- GROUP BY SUM으로 조건별 합치기
- 이중정렬 ORDER BY AA DESC, BB ASC
- GROUP BY HANVING COUNT(*) >
- IF문
- YEAR, MONTH
- DATEDIFF(날짜, 날짜)+1
- 셀프조인의 중복처리와 중복활용
- GROUP_CONCAT
- 서브쿼리
- 어쩔수 없이 SUBQUERY를 써야하는 경우가 있음.(특정값 이상의 ID만 따로 정렬해야한다던지, 그럼 특정값에 해당하는것을 먼저 뽑을 수밖에 없음.)
- UNION, UNION ALL
- CTE, WITH RECURSIVE (재귀 쿼리)
- IFNULL
- 3개 이상의 테이블의 조인은 필요한것먼저, 3개 이상을 한번에 할 필요가 없음.
결론
- 프로그래머스 MYSQL문제를 주말동안 다 풀어봤는데 생각보다 재밌었다.
- 정답률이 높은 순서로 풀었는데 뒤에 정답률이 낮은 문제는 왜 낮은지 알 것 같았다.
- 너무 말이 모호하고 애매하다. 문제파악하는게 더 시간이 오래걸릴 정도....
- 이게 이런 말이었어? 라는 문제도 종종 있다.
- 그래도 SQL 쿼리가 더 익숙해졌다.
- 정답 쿼리만 깃에 업로드할지 말지 고민중이다. o.o
- 정리 했다.
'데일리' 카테고리의 다른 글
[2023.11.24] 내가 놓치고 있던 부분을 발견하여 정리1 (cookie, session, JWT) (2) | 2023.11.24 |
---|---|
[2023.11.15] Redis 이해하기 (1) | 2023.11.15 |
[23.11.04] LEFT JOIN과 WHERE IS NULL을 활용한 그룹 별 최상단행 뽑기 (2) | 2023.11.04 |
[23.10.31] 테스트 자동화 nestjs (66) | 2023.10.31 |
[23.10.31] js(자바스크립트) 스코프 (0) | 2023.10.31 |