안녕하세요! 데코입니다!
오늘은 프로그래머스 코딩테스트 연습 문제에서 "그레이그레이"님이 질문하신
내용에 대하여 포스팅하려고 합니다!
바로 포스팅 시작할게요! :)
1. 질문 : WHERE 1=1을 사용하는 이유
2. 답변
제가 프로그래머스에 있는 MySQL문제들에서 제가 작성한 쿼리도 같이 첨부하는데
지난 포스팅에서 저의 쿼리를 보고 '그레이그레이'님이 질문을 주셨습니다.
아래와 같이 쿼리에서 저는 WHERE 문에 꼭 "WHERE 1=1"을 적어줍니다.
WHERE 1=1을 왜 적는지에 대해서 질문을 주셨어요!
"1=1"은 항상 참인 조건입니다.
즉, 해당 조건에 있는 내용은 없어도 동일한 결과가 나옵니다.
제가 이용하는 이유를 간단하게 말하자면 아래 3가지 이유입니다.
1) 쿼리에서 쓰인 조건을 남들과 쉽게 공유
2) 편리하게 조건 추가 가능
3) 디버깅의 경우 특정 조건 주석을 통해 오류 확인
예시와 함께 조금 더 자세하게 적어볼게요!
1) 쿼리에서 쓰인 조건을 남들과 쉽게 공유
-- 가장 큰 물고기 10마리 구하기(프로그래머스/MySQL/Level 1)
-- https://kkw-da.tistory.com/133
-- [1] 정리 안한 쿼리
SELECT ID, LENGTH
FROM FISH_INFO
WHERE LENGTH IS NOT NULL
ORDER BY LENGTH DESC, ID ASC
LIMIT 10
-- [2] 정리한 쿼리
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE 1=1
AND LENGTH IS NOT NULL
ORDER
BY LENGTH DESC
, ID ASC
LIMIT 10
쿼리[1]와 쿼리[2]의 결과는 동일한 쿼리입니다.
쿼리를 정리하지 않으면 가독성이 떨어지게 됩니다!
가독성을 위해 WHERE 1=1을 적고,
그 아래에 AND 조건1 AND 조건2를 써 내려가면서 어떤 조건이 쓰였는지 명확하게 알 수 있습니다.
2) 편리하게 조건 추가 및 수정 가능
1)에서 말한 내용과 유사한 내용이지만
조건을 추가하기 위해서 AND 조건만 새로 추가해 주면 되니까
새로운 조건을 추가하기에 편합니다.
또한 몇 개의 조건이 추가되었는지 직관적으로 파악이 되어서 개인적으로 좋다고 생각합니다.
분석가들마다 작성하는 쿼리 스타일이 다르고 통일시키기는 어렵지만
그래서 가독성이 좋게 쿼리를 작성하는 것이 서로 업무하고 소통하는데 중요하독 생각을 하는 편이거든요.
그래서 코드도 최대한 "나만 아는 쿼리"보다는 "누구나 쉽게 알아볼 수 있는 쿼리"가 되도록 작성하고 있습니다.
-- 가장 큰 물고기 10마리 구하기(프로그래머스/MySQL/Level 1)
-- https://kkw-da.tistory.com/133
-- [1] 기존 쿼리
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE 1=1
AND LENGTH IS NOT NULL
-- [2] 조건이 추가된 쿼리
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE 1=1
AND LENGTH IS NOT NULL
AND FISH_TYPE = '0'
3) 디버깅의 경우 특정 조건 주석을 통해 오류 확인
예시로 보여드리는 쿼리는 매우 짧은 쿼리로 이뤄져 있지만
업무에서 사용하는 코드들은 엄청 긴 코드들도 이뤄져 있습니다.
그러다 보니, 디버깅(오류)이 생기면 어디가 오류인지 파악하기 어렵습니다.
그럴 때, AND 조건에서 오류가 발생한 것이라면
해당 라인 주석을 통해 실행해서 오류가 맞는지 확인이 가능합니다.
-- 가장 큰 물고기 10마리 구하기(프로그래머스/MySQL/Level 1)
-- https://kkw-da.tistory.com/133
-- [1-1] 정리가 안된 쿼리
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE LENGTH IS NOT NULL
AND FISH_TYPE = '0'
-- [1-2] 정리가 안된 쿼리(조건 주석처리)
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE -- LENGTH IS NOT NULL
-- AND
FISH_TYPE = '0'
-- [2-1] 정리한 쿼리
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE 1=1
AND LENGTH IS NOT NULL
AND FISH_TYPE = '0'
-- [2-2] 정리한 쿼리(조건 주석처리)
SELECT ID
, LENGTH
FROM FISH_INFO
WHERE 1=1
-- AND LENGTH IS NOT NULL
AND FISH_TYPE = '0'
[1-2]에서 보는 것과 같이 WHERE 다음에 오는 조건을 주석처리하기 위해서는 코드가 지저분해집니다.
이에 반해 [2-2]에서는 주석을 바로 걸어서 코드에 영향을 주지 않으면서 조건문을 주석처리할 수가 있습니다.
오늘은 이전 포스팅에서 그레이그레이님이 질문하신
'WHERE 1=1'을 사용하는 이유에 대해 설명해 보았습니다!
설명에서 어려운 부분 혹은 잘 이해가 안 가는 부분
그리고 더 궁금한 내용이 있다면
언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해 드릴게요!
공감과 댓글은 큰 힘이 됩니다!
오늘도 블로그 방문해 주시고
포스팅 읽어주셔서 감사합니다!
'Skill Sets > SQL' 카테고리의 다른 글
[SQL] 연도별 대장균 크기의 편차 구하기(프로그래머스/MySQL/Level 2) (46) | 2024.07.07 |
---|---|
[SQL] 특정 형질을 가지는 대장균 찾기(프로그래머스/MySQL/Level 1) (38) | 2024.06.30 |
[SQL] 잡은 물고기 중 가장 큰 물고기의 길이 구하기(프로그래머스/MySQL/Level 1) (38) | 2024.06.29 |
[SQL] 특정 물고기 잡은 수 구하기(프로그래머스/MySQL/Level 2) (36) | 2024.06.28 |
[SQL] 한 해에 잡은 물고기 수 구하기(프로그래머스/MySQL/Level 1) (35) | 2024.06.22 |