[Udemy]/Oracle SQL(Imtiaz Ahmad)

15. Query Filtering Conditions & Operator Precedence

Ben의 프로그램 2023. 9. 9. 18:31
728x90
Or 연산자에 대한 또 다른 이해
위의 SQL 은 옳게 작성된 SQL(시퀄) 일까요? 직원 테이블에서 커미션이 NULL이고 급여가 1100과 5000 사이이고, 3000이 아닌 직원 혹은 커미션이 0 인 직원을 보여주는 SQL 인데요. 옳게 작성된 SQL 이라고 보기가 어렵습니다. 

만약에 OR 연산자의 위치를 위와 같이 한 줄 위로 이동시키면 SQL은 전혀 다른 SQL이 되는데요. 위와 같이 OR 연산자를 중심으로 2개의 조건절로 나뉘게 되는 것을 볼 수 있습니다. 

위와 같이 명확하게 한 조건에 대해서 Parenthesis 로 묶어주어야 합니다. (Wrapped in Parenthesis) Parenthesis 로 묶인 조건들은 마치 하나의 조건인 것 처럼 묶여서 처리됩니다(Evaluated Together).  이렇게 조건을 작성할 때는 명확하게 처리하고자 하는 조건들에 대해서 Parenthess 처리하는 것이 강력하게 권장됩니다. 그럼 위와 같이 작성했던 SQL은 올바르게 작성된 것일까요? 사실 그렇지 않습니다. 왜냐하면 우리가 찾고자 했던 결과물은 COMM 이 NULL 이거나 0 이고 혹은 SAL 이 1100과 5000 사이여야하며, 3000이 아니어야 합니다. 지금 작성한 쿼리는 COMM=0 이기만 하면 SAL 에 대한 조건 처리는 되지 않은 결과물이 출력되게 됩니다. 

 그럼 위와 같이 SQL을 작성하는게 최선일까요? 그렇지 않습니다. 반복되고 있는 SQL 들이 눈에 보이기 때문이죠. Parenthesis 를 잘 활용하면 다음과 같은 동작을 수행하는 SQL 을 더 짧고 간결하게 작성할 수 있습니다. 

이렇게 작성할 수 있습니다. 이렇게 작성하면 검색된 EMP 테이블에 대해 2가지의 조건 묶음을 만족하는 결과들이 출력됩니다. 이렇게 작성하는 또 다른 장점은 SQL 이 그 자체로 영어처럼 읽을 수 있게 된다는 것인데요. SQL을 자연스럽게 활용하고 작성하고 사용할 수 있게 되는 첫 단계가 됩니다.