[mysql] SQL WHERE 조건이 같지 않습니까?

where 절을 부정 할 수 있습니까?

예 :

DELETE * FROM table WHERE id != 2;



답변

이렇게 할 수 있습니다

DELETE FROM table WHERE id NOT IN ( 2 )

또는

DELETE FROM table WHERE id <>  2 

@Frank Schmitt가 언급했듯이 NULL 값에 대해서도주의해야 할 수 있습니다. 2NULL을 포함하여 그렇지 않은 모든 것을 삭제하려면 OR id IS NULLWHERE 절에 추가하십시오 .


답변

귀하의 질문은 이미 다른 포스터에 의해 답변되었습니다.

 delete from table where id <> 2

(또는 그 변형, id = 2 등이 아님)은 id가 NULL 인 행을 삭제하지 않습니다.

id = NULL 인 행도 삭제하려는 경우 :

delete from table where id <> 2 or id is NULL


답변

delete from table where id <> 2

편집 : MySQL의 구문을 수정하려면


답변

다음을 수행 할 수 있습니다.

DELETE * FROM table WHERE NOT(id = 2);


답변

<>where 절을 부정하는 데 사용 합니다.


답변

형식 논리와 대수로 돌아갑니다. 같은 표현

A & B & (D | E)

두 가지 방법으로 부정 될 수 있습니다.

  • 명백한 방법 :

    !( A & B & ( D | E ) )
  • 위의 내용을 다시 설명 할 수도 있습니다. 논리 표현식의 몇 가지 속성 만 기억하면됩니다.

    • !( A & B )와 동일 (!A | !B)합니다.
    • !( A | B )와 동일 (!A & !B)합니다.
    • !( !A ) (A)와 동일합니다.

    적용되는 전체 표현식에 NOT (!)을 배포하여 연산자를 반전하고 진행하면서 이중 음수를 제거합니다.

        !A | !B | ( !D & !E )

따라서 일반적으로 모든 where 절은 위의 규칙에 따라 부정 될 수 있습니다. 이것의 부정

select *
from foo
where      test-1
  and      test-2
  and (    test-3
        OR test-4
      )

이다

select *
from foo
where NOT(          test-1
           and      test-2
           and (    test-3
                 OR test-4
               )
         )

또는

select *
from foo
where        not test-1
  OR         not test-2
  OR   (     not test-3
         and not test-4
       )

어떤게 더 좋아? 매우 상황에 맞는 질문입니다. 당신 만이 결정할 수 있습니다.

그러나 NOT을 사용하면 옵티마이 저가 할 수있는 작업과 할 수없는 작업에 영향을 미칠 수 있습니다. 최적이 아닌 쿼리 계획을 얻을 수 있습니다.


답변

WHERE id <> 2 잘 작동해야합니다 … 그게 당신이 추구하는 것입니까?