WHERE 의 필터링 조건 관련 문의 0 4 2,472

by 사랑초 [PL/SQL] [2013.03.21 08:57:15]


안녕하세요...
음.. 
WHERE 절 아래 OR 와 AND 를 같이 사용했을 경우
OR로 인해서 INDEX SCAN 이 발생하나, AND 조건에 대한 조건값을 필터링 해주지 않는 현상을 확인하였습니다.

예를 들면 아래와 같이 2개의 SQL이 존재 시 
1번 SQL은 AND 조건을 무시하고
2번 SQL은 정해진 조건을 모두 만족합니다.

--1번 SQL
SELECT * 
FROM DBA_SOURCE
WHERE TEXT LIKE '%aralle%'
OR TEXT LIKE '%ARALLE%'
AND OWNER NOT IN ('SYSMAN','SYS');

--2번 SQL
SELECT * 
FROM DBA_SOURCE
WHERE (TEXT LIKE '%aralle%'
OR TEXT LIKE '%ARALLE%')
AND OWNER NOT IN ('SYSMAN','SYS');

OR 에 대한 부분을 ( ) 로 묶었을 뿐인데 틀려지는 이유 좀 가르켜 주세요...
by 마농 [2013.03.21 11:57:05]

OR  는 합집합(+) 에 해당하구요.
AND 는 곱집합(*) 에 해당되지요.
연산에서 곱하기가 더하기보다 우선하지요.
a OR b AND c  ==>  a OR (b AND c)


by 사랑초 [2013.03.21 15:17:40]
수 대입으로 풀어보면 위에 기재해 드린 SQL문이
1번은 1 + 2 * 3   : 7 이런것 같고
2번은 (1 + 2) * 3 : 9 이런것 같은데,
AND 조건에 대해서 타지 않는 건 이해가 안되요...ㅠㅠ
1번SQL문으로 놓고 보면 곱집합 연산인 AND 조건이 먼저 타고 
그다음에 OR 조건을 탄다는 얘기인건데 AND 에 대한 필터링이 결과로 안나오는데...
어렵네요..ㅜ

by 이재현 [2013.03.21 12:05:58]

음... 우선순위

1. ()
2. NOT, !=
3. >, <, BETWEEN, ANY, ALL
3. AND
4. OR

by 사랑초 [2013.03.21 15:21:11]
조언 감사합니다^^;

우선순위라는것보다 필터링이 안걸러지는지에 대해서만 계속 보다보니...

곱셈, 나눗셈이 덧셈, 뺄셈보다 우선시 되고
같은 우선순위일 경우 왼쪽에서 오른쪽으로 수행된다고 하는데...
우선시 되더라도 이게 필터링을 하지 말라는 건 아닐텐데 하는생각만..ㅠㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입