MySQL과 null 값 비교
MySQL 테이블에 CODE라는 열이 있으며, 이 열은 NULL일 수 있습니다. 예를 들어 CODE='C'가 포함된 행이 있으며 선택한 결과 집합에서 무시하려고 합니다.결과 세트에 CODE=COMD 또는 CODE!='C' 중 하나를 포함할 수 있습니다.
다음 쿼리는 CODE가 NULL인 행을 반환하지 않습니다.
SELECT * from TABLE where CODE!='C'
하지만 이 쿼리는 예상대로 작동하며 올바른 방법이라는 것을 알고 있습니다.
SELECT * from TABLE where CODE IS NULL OR CODE!='C'
궁금한 점은 CODE!='C'만 있는 경우 CODE=C'가 반환되지 않는 이유는 무엇입니까? 'C'는 NULL이 아닙니다. 여기서는 값을 문자로 비교하지 않습니다.왜 그렇게 안 되는지 누가 좀 밝혀줄 수 있어요?
MySQL에서는NULL
는 값이 없는 것이 아니라 '알 수 없는 값'으로 간주됩니다.NULL의 MySQL Reference를 참조하십시오.
와의 산술적 비교NULL
true 또는 false를 반환하지 않고 반환한다.NULL
대신. 그래서...NULL != 'C'
돌아온다NULL
true를 반환하는 것이 아니라
'NULL'과의 산술 비교는 false를 반환합니다.SQL에서 이를 확인하려면:
SELECT IF(NULL=123,'true','false')
확인하다NULL
사용할 필요가 있는 가치IS NULL
&IS NOT NULL
교환입니다.
테스트 및 다음 문서를 기반으로 합니다.http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
<=>를 사용하여 null을 비교하고 부울 결과를 얻을 수 있습니다.
메모: EQ 연산자가 아닌 것처럼 보이지만 EQ 연산자입니다.
예를 들어 다음과 같습니다.
select x <=> y;
or
select @x <=> @y;
또한 string vs null, string vs string 등을 비교합니다.
SQL에서 NULL 값은 다른 값과 비교할 수 없는 특수한 값입니다.NULL과의 직접 비교 결과는 항상 NULL이지만 구현에 따라서는 FALSE가 발견될 수 있습니다.
null 값을 테스트하려면IS NULL
그리고.IS NOT NULL
.
SELECT *
FROM `table_name`
WHERE IFNULL(`column_name` != 'C', TRUE)
지정된 문제는 조인에서도 나타날 수 있으며 위의 답변은 특별히 도움이 되지 않습니다.내가 선호하는 방법은 그렇지 않으면 불가능한 가치로 결합하는 것이다.예를 들어, 이것은
select foo from bar
inner join baz on bar.x = baz.y
이라면 소용없다bar.x
그리고.baz.y
둘 다 null입니다(결과는 얻을 수 없습니다).회피책은 예를 들어 를 사용하는 것입니다.
select foo from bar
inner join baz on coalesce(bar.x, -1) = coalesce(baz.y, -1)
어디에-1
는 "불가능한" 값입니다.즉, 데이터 세트에 표시할 수 없습니다.
select * from user where application_id='1223333344' and name is null;
사용방법:
SELECT * from TABLE where NOT(CODE <=> 'C')
언급URL : https://stackoverflow.com/questions/9608639/mysql-comparison-with-null-value
'source' 카테고리의 다른 글
MySql workbench 쿼리 이력(마지막으로 실행된 쿼리/쿼리). 즉, 테이블 생성/변경, 선택, 업데이트 쿼리 삽입 (0) | 2022.12.08 |
---|---|
Java에서 toString 메서드를 사용하는 방법 (0) | 2022.12.08 |
URL에서 JSON 개체 가져오기 (0) | 2022.12.08 |
스프링 데이터 저장소는 실제로 어떻게 구현됩니까? (0) | 2022.12.08 |
pyenv, virtualenv, anaconda의 차이점은 무엇입니까? (0) | 2022.12.08 |