처음 무엇인가 배울때 무지한건 죄가 아니다.
그러나 무식한 공부방법과 미루는 습관으로 인해 발전하지 않는 것은 죄가 된다.
그래서 사전캠프중 퀘스트를 완료한 후 TIL 을 쓰다가 새벽감성에 젖어 혼자 이런저런생각을 하다 생긴 의문점을 풀어보려고 한다.
관련내용은 https://code-jong10.tistory.com/5 여기에 있는데
간략하게 요약하자면
SQL문법 공부후 퀘스트 풀이 후 팀원들과 브레인스토밍을 하던 과정에서
특정 값 사이의 데이터를 뽑아내는 쿼리를 짤때
Where A BETWEEN N AND N
WHERE N < A < N
이렇게 두가지의 답이 나온것 이었다.
수식으로 보면 같은 의미라서 동일한 결과값이 도출되야 한다 예상했고 정답을 몰라 팀장님이 실제 DB에 데이터를 넣고 쿼리를 돌려보고싶다고 하자
DB에 넣는방법을 알아보는게 귀찮기도 하고 AI배울려고 모였다보니 ChatGPT 를 활용하려고 하다 사고가 나버렸다.(귀찮아서 잔머리 쓴 대가)
TIL 을 읽어본 사람은 알겠지만 동일한 값이 나올때가있고, 맞지않는 문법이라며 다른 대안을 제시할때도 있었다.
처음에는 단순 오류인줄 알았지만 'AI를 이해하기위한 필수용어' 를 공부하다 Hallucination 을 조심해야한다는 말도 있어서 챗지피티를 완전히 신뢰하지 못하기도하고 SQL 공부도 할겸 직접 찾아보기로 하였다.
검색을하면 쉬운단계 이기도 하고 여러가지 정보가 많이 뜨지만 쉽게쉽게 가려다가 또 뒤통수 맞을수도 있고
나와 같은수준의 사람이 정리할겸 쓴 티스토리나 벨로그 따위는 쉽게 믿으면 안되서
공식문서를 찾아보려하는데 SQL 관련은 Oracle 부터 Microsoft SQL 과 MYSQL 너무 많지만 모든 버전과 시스템마다 약간씩 차이나는걸 다 알아보긴 힘들어 내기준 가장 편하게 정리가 잘되어있는 Microsoft SQL Server 공식문서를 찾아보았다.
링크는 요기 https://learn.microsoft.com/en-us/sql/?view=sql-server-ver15
내가 궁금한것은 비교 연산자를 두번 사용하는게 BETWEEN AND 로 묶어둔 것과 같은 처리를 하는지가 궁금한건데
비교연산자는 이것들 밖에 없었으며,
당연하게 범위 지정을 위한 비교연산자 두개 < < 에 관한내용은 없었다.
그래서
BETWEEN 부분을 살펴보았는데
떡하니 테스트할 범위를 지정하려면 이 BETWEEN 을 사용해라!!
라고 말하듯 간단하게 한줄만 적혀있었다.
그래서 아니 010101 이런 이진수보다 당연히 수식적으로 사고하는게 익숙한 사람들이 우리와 같은실수를 수없이 했을탠데 관련내용은 없을까? 하고 스크롤을 내려보면
범위 지정을 위해 BETWEEN 이 아닌 비교연산자 2개를 사용한 예제가 있었다.
여기서 WHERE 절을 보면
WHERE ep.Rate > 27 AND ep.Rate < 30
뭔진 모르지만 ep.Rate 라는 컬럼을 27과 30 사이의 범위로 지정해서 데이터를 뽑아갈라하나보다 라는 의도를 파악할수있다.
우리가 한것처럼 비교연산자 두개로
27< ep.Rate < 30
이 아닌 연산이 두개가 처리되다 보니 AND 로 묶어둔것을 확인 할 수 있었다.
그래서 이론으로는 확인했으니 좀더 확실하게 실제 쿼리를 돌려보려고한다.
강의를보며 사용했던 디비버를 일단키고 가장 만만한 데이터를 보니
price 가 가장 만만해보였다.
그후 price가 20000 부터 30000 사이의 값들은 제대로 뽑힌걸 확인했고
AND 로 비교연산자 두개를 사용해 범위지정한것도 동일한 결과가 나온걸 확인했다.
그렇다면 여기서 AND 없이 비교연산자 2개 만 사용하면 문법적 오류가 나올까? 란 의심을 갖고 돌려보는데
?????????
이게 왜 돌아가?
하고 price값을보니 20000 과 30000 사이가 아닌 값들이 지멋대로 들어가있었다.
처음에는 챗지피티의 할루시네이션이 아닌 사용자 편의를 위해 SQL 문법이 발전하면서 버전업에 따라 비교연산자2개로 범위지정도 가능하게 바뀐건가?? 라는 의심을 하였지만
어림도 없는 소리였단걸 깨달았다.
나중에 SQL을 더 파다보면 오류가 안나고 쿼리는 돌아가는데 값이 이상한걸보면 내의도대로 범위지정이 된것이 아니라 저렇게 비교연산자 2개를 AND 를 안쓰고 묶어두는게 다른걸 뜻하는 구문규칙일수도 있겠거니 하고 합리적 의심만 남겨둔채 좀더 공부해보려고 한다.
나중에 SQL 강의를 완강하고도 이 의심을 해소 못하면 다시 혼자 공부해보기 위함과 어제 팀원들에게 잘못된 정보를 전달해서 기록할 겸 이 글을 썻다.
제발 강의를 보다가 깨달음을 얻어서 이 의심을 해소하기위해 기록용으로 또 글을쓰는 귀찮은 짓을 안하길 빌고 빌어야겠다.
처음이라 그런지 글쓰고 캡처하고 이런거 귀찮아서 뒤져버리겟다.ㅜ.ㅜ
'SQL > Insights' 카테고리의 다른 글
' = NULL ' (X) ' IS NULL ' (O) (0) | 2024.11.12 |
---|