[MySQL] SELECT문에서의 =와 비트연산자(bitwise operator) 그리고 논리연산자(logical operator)
▶앞서 설명했던 내용
앞서서 MySQL의 연산자에 대해서 설명하면서 =가 SET, UPDATE 문에서 대입 연산자로 쓰인다고 설명했었다. 따라서 이외의 경우에는 =의 경우 비교연산자로 적용되는 것을 알 수가 있고, 비교연산자로 쓰이면 '!'를 제외한 논리 연산자보다 순서가 앞선다 그리고 중요한 사실은 어떻게 되든 비트 연산자보단 후순위가 된다는 점이다. 쉽게 말해서, SET, UPDATE 구문에서 대입연산자를 사용하는 경우를 제외한다면, 명령어의 수행순서는 비트연산자(bitwise operator)->=(등호)->논리연산자(logical operator)가 된다.(!는 비트연산자보다 순서가 앞서니깐 제외한다.)
▶비트연산자를 사용할 경우 어떤 결과가 나오는가?
MySQL에서는 조건을 걸때, 0과 1을 많이 쓴다. 그런데 파라미터를 거쳐서 변수 0과 1을 사용할 경우, 의미가 매우 달라지는 경우가 존재한다. 다음과 같은 예시를 보자.
1. SELECT * FROM member WHERE jj_id = '0' & '0'
2. SELECT * FROM member WHERE jj_id = '0' AND '0'
1번의 경우 =보다 &(비트 AND연산자) 가 더 순서가 앞서니깐, 이를 먼저 연산하고 id = 0 과 같은 과정을 수행하게 된다.
2번의 경우 =, AND순으로 우선순위가 부여된다. 따라서 '0'과 id = '0'을 AND로 비교하게 된다.(=> (jj_id = '0') AND 0)
종합적으로, 1번의 경우 id = 0 와 같은 값을 비교에 쓰고, 2번의 경우 0과 같은 값을 비교에 사용하고 있다. 둘의 결과 값은 아래와 같이 상당히 달라지는 것을 확인해볼 수 있다.
▶결론
이항연산자가 등호보다 우선 순위가 앞서기 때문에, 0과 1을 활용한 명령어를 작성할 경우 이 점을 고려해서 명령어를 짠다면 보다 입체적인 명령어 사용을 할 수 있을 것으로 생각된다.