괄호 우선순위??? 1=1의 역활???이것이 몬가요 예제있습니다. 0 7 3,149

by 초슈꽃 [2013.10.01 10:57:46]


AND ((NAME_A IS NULL AND 1=1)
   OR (NMAE_A IS NOT NULL AND NAME_B = NAME_A)) 
구문인데요

보시다시피 and ( (    A문장) or ( B문장) ) 이렇게 괄호가 두번들어가는데요
( A문장 or B문장 ) 이렇게한것과의 창이가 정확히 어떤건지 알고싶고
여기서 의미하는 1=1 참값은 무없이며 이것이 if처럼 쓰인건지 전반적인것을
알고싶네요 고수님들은 간단하것지만 전 조금 헷갈리네요 답변 부탁드립니다 ^^
by 윤 [2013.10.01 11:00:08]
1=1은 항상 참이기에 무의미한뜻으로만 알고있었는데...
where 절 다음으로 and 절 반복하기에 쿼리 작성시 혼동방지를 위해 where 절에 1=1(참)을 써서 다음 단락부터 사용으로만 알고있었습니다..
저도 궁굼해졌습니다 ㅎㅎ

=========================================================================================
where 1=1 이란?  항상참인것

즉, 여러 조건에 대한 AND문을 WHERE절에 사용할 때 이미 AND문이 사용되었는지 아닌지를 판별하여 AND를 먼저 쓰고 조건을 쓸지 아닐지 결정해야 하는 경우에,

where 1=1 을 먼저 쓰고 시작한다면 그런걸 결정하지 않고 그냥 'and 조건' 을 사용하면 된다. (where AND 식)(x)
 1=1 은 무조건 참이라는 식이 있기때문에, 1=1뒤에 라면 AND를 먼저 써도 무방하다.( where 1=1 AND 식)(o)

==============================================================================================
1) select * from aaa
2) select * from bbb where name='name'
가 있을때 and number='11' 조건을 넣어야하는경우 2번째쿼리는 문제가안되지만 1번쿼리는 문법적 오류
이를 해결하기 위해 if문등을 ㅏ용하여 where 문이 사용되었는지를 판별하는 조건을 사용
이경우 조건문이 붙어 내용이 길어지고 가독성이 떨어짐
이때에 where 1=1을 먼저 쓰고 시작하면 그런결 결정하지않고 바로 and 조건으로 사용할수 있다.
1=1 은 무조건 참이어서 쿼리에 어떠한 영향도 주지 않는다.

where 1=1은 무조껀 참이며, where 절이 비어서 오류가 나지 않도록 하기 위한 방법이다.
(올바른 문법은 아니다..) 

by 초슈꽃 [2013.10.01 12:08:11]

저도 궁금합니다 ㅋㅋ;


by 우리집아찌 [2013.10.01 11:21:46]

다이나믹 쿼리 만들때 가끔 씁니다. 뒤에 머가 붙을지 몰라서
다음 같이 1,2,3번 조건 뭐가 들어올지 모를경수 씁니다만...

WHERE 1=1
AND ... <= 1번 조건
AND ..  <= 2번 조건
AND ... <= 3번 조건

by 마농 [2013.10.01 11:26:46]
1=1 조건이 다이나믹 조건을 무조건 AND로 붙이기 위해 맨 앞에 Where 1=1 식으로 추가하기도 하지만
이번 질문의 1=1 은 다른 용도죠.
그냥 OR절의 위,아래 조건의 균형을 맞춰주기 위해 무의미하게 붙여준 조건입니다.
빼도 무관한 구문입니다.

by 마농 [2013.10.01 11:22:35]

name_a 는 조회조건값이 들어가는 변수입니다.
즉 조회조건을 넣고 검색했을 때와 넣지 않고 검색했을 때
이 두가지 경우를 모두 만족하기 위한 조건문입니다.
1-1. name_a IS NULL -- 조회조건이 없을 경우
1-2. 1=1 -- 모든 자료 검색
2-1. name_a IS NOT NULL -- 조회조건이 있을 경우
2-1. name_b = name_a -- name_b 컬럼의 값이 조회조건인 name_a 와 같은 것만 검색
위 1번과 2번 두개 조건이 OR 로 연결되어 조건값 유무에 따라 둘중 하나의 조건이 수행되게 됩니다.


안쪽 괄호는 OR 조건의 양쪽 조건을 구별하기 위한 것으로 빼도 영향은 없습니다.
가장 바깥쪽 괄호는 이 조건 외에 다른 조건과 구별하기 위한 것입니다.
이 괄호를 뺄 경우 다른 조건들이 더 있다면 결과가 달라집니다.
다른 조건들이 AND 조건으로 연결되면 AND 조건이 OR 보다 우선되기 때문에
OR 가 포함된 조건을 사용할때는 항상 괄호에 주의해야 합니다.
예를 들면 우리가 원하는 조건이 (1 OR 2) AND 3 이라고 할때
괄호를 누락하면 1 OR 2 AND 3 이 되고
우선순위에 따라 괄호를 붙여보면
1 OR (2 AND 3) 이 되어 버려 원하는 결과가 안나오게 됩니다.
잘 이해가 안가시면 더하기, 곱하기와 연관지어 생각하셔도 됩니다.
(1 + 2) * 3 = 9
1 + 2 * 3 = 7


by 초슈꽃 [2013.10.01 12:08:41]
시원한 해석 감사드립니다 ^^

by 몬태크리스토 [2013.10.01 14:28:20]

저도 시원하네요...... 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입