본문 바로가기

Data/Oracle SQL

(3)
Join이 가장 기본적이고 핵심적인 문법이다 쿼리를 돌려봤는데 너무 느려서 머리를 싸매고 문제를 찾았다. 하지만 프론트, 백엔드 모두 작성된 것은 문제가 없었고... 도대체 문제가 무엇인지 몰라서 발광(?)에 가까운 심정으로 모니터만 뚫어져라 쳐다봤다. 문제는 생각보다 간단했다. 사용하는 테이블 중 한 테이블에 JOIN이 안 걸려있던 것이다. 수억 건에 달하는 데이터를 전부 호출하니 당연하게도 느릴 수밖에 없는 구조였다. 이때서야 JOIN의 중요성을 깨달았다. 다른 문법이야 옳고 그름이 쉽게 보이는데, 테이블 하나에 조인이 걸려있냐 안 걸렸냐 그것은 문법상 오류도 아니므로 돌려봐서 문제를 깨닫기도 어렵다. 실제로 돌려볼 때는 데이터가 없었으니 더 문제가 없다고 생각했다.
독특한 SQL 사용방법, WHERE 0 = ? SQL을 보다 WHERE 절에 특이한 조건을 넣는 패턴을 보게 됐다. SELECT * FROM TABLE WHERE 0 = ? 이런 패턴이다. 도대체 왜 0을 넣을까 생각을 하고 고민도 많이 해봤지만, 해답은 간단했다. 내가 작업 중인 프로그램에서는 보편적으로 0, 1을 사용하여 성공실패를 나타내기 때문이었다. 0 = ? 이 TRUE라면 어떤 조건을 실패했을 경우 성립되는 조건이라는 것이었다. 너무 어려웠는데 밥 먹고 차분히 생각해보니 바로 답이 나와버렸다... 역시 사람은 휴식이 필요해!
집계함수 중 COUNT(*)은 대체 뭘까? 쿼리를 보다가 COUNT(*)이라는 표현을 접했다. 이 짧은 함수가 이해가 잘 되지 않아서 정리해봤다. 1. COUNT() SQL 문법 중 COUNT()는 집계함수로 분류된다. 집계함수를 쉽게 인식하자면 다음과 같다. 여러 행의 데이터를 하나의 그룹으로 묶는다. 묶은 그룹을 기준으로 하나의 결과값을 도출한다. 집계함수는 여러 데이터에서 단 하나의 결과값을 얻고자 할 때 사용한다. COUNT()는 이런 측면에서 보면 정말로 단순하다. COUNT('A')라고 표현하면, 'A'라는 값을 가진 행의 개수를 출력한다. COUNT(1)이라고 표현하면, 1이라는 값을 가진 행의 개수를 출력한다. 그렇다면 COUNT(*)는 대체 뭘까? 간단히 생각하면 그 어떤 값이라도 있는 행의 개수를 출력한다는 것이다. 여기서 의문..