[SQL] SQL은하지 쿼리와 동일한에 널 값을 표시하지?
SQLSQL은하지 쿼리와 동일한에 널 값을 표시하지?
이 호기심 단지 질문이다 그러나 나는 데이터베이스보고 열 중 하나에 대한 쿼리와 테이블에서 데이터를 당겨입니다. 내가 쿼리 등을 실행하면 열이 네 가지 값 NULL, 0, 1, 2가 있습니다 :
SELECT * FROM STATUS WHERE STATE != '1' AND STATE != '2';
나는 실행하는 것과 같은 결과를 얻을 :
SELECT * FROM STATUS WHERE STATE = '0';
즉 조회 된 칼럼에서 최고의 명령에 널 (null) 값을 가진 행이 항상 SQL에서 일어나는 않는 결과에서 생략 할 것 같다?
나는 오라클 SQL 개발자를 통해 내 명령을 실행하고 있습니다.
해결법
-
==============================
1.여러 언어에서 NULL은 다르게 처리한다 : 대부분의 사람들은 두 개의 값 논리 곳 진실과 거짓에 대해 알고있는 부울 식의 비교가 값이 (심지어 거짓은 0으로 정의하고 다른 것 같은 사실이다).
여러 언어에서 NULL은 다르게 처리한다 : 대부분의 사람들은 두 개의 값 논리 곳 진실과 거짓에 대해 알고있는 부울 식의 비교가 값이 (심지어 거짓은 0으로 정의하고 다른 것 같은 사실이다).
표준 SQL에서는 3 치 논리에 대해 생각해야합니다. NULL이 실제 값으로 처리되지 않으며, 당신은 오히려 "알"을 호출 할 수 있습니다. 귀하의 경우 상태는 0, 1, 또는 다른 어떤 경우에 따라서 값이 불명 한 경우는 명확하지 않다. NULL 그래서! = NULL로 한 결과를 다시.
이것은 당신이 NULL이 될 수 있습니다 뭔가를 필터링 whereever, 당신이 스스로 치료 NULL 값을 가지고 결론 지었다. 구뿐만 아니라 다른 참고 : NULL 값이 오직 X와 비교 될 수 대신 X = NULL의 NULL이다. 논리 연산의 결과를 나타내는 진리표에 대한 위키 백과를 참조하십시오.
-
==============================
2.정상의 Yest 것을 고정에, 당신은 아마 데이터베이스 설정을 넣을 수 있습니다
정상의 Yest 것을 고정에, 당신은 아마 데이터베이스 설정을 넣을 수 있습니다
그러나 당신은 당신의 코드를 수정하고 그런 식으로 뭔가를 할 수 :
SELECT * FROM STATUS WHERE STATE != '1' OR STATE != '2' or STATE is null;
더 많은 정보를 원하시면,이 봐 : http://www.w3schools.com/sql/sql_null_values.asp
-
==============================
3.여러 나의 신속 읽기 어려워 질 수있는 곳으로 그리고 결과로 불확실.
여러 나의 신속 읽기 어려워 질 수있는 곳으로 그리고 결과로 불확실.
나는 예를 들어, 별도의 괄호 플러스 (이 경우 NOT IN)은 IN 문장의 사용을 권장합니다
상태 SELECT * FROM WHERE (주 NOT IN ( '1', '2')) 또는 STATE가 null;
Implmentations 데이터베이스 공급 업체 그러나 확인 결과를 확인해야 위의 명시 적 문법에 따라 다를 수 있습니다.
-
==============================
4.그래서처럼 사용 NVL !! STATUS FROM SELECT * WHERE NVL (STATE, 'X') = '1'AND NVL (STATE, 'X') = '2';
그래서처럼 사용 NVL !! STATUS FROM SELECT * WHERE NVL (STATE, 'X') = '1'AND NVL (STATE, 'X') = '2';
-
==============================
5.나는 오라클 동작을 조회 스크립트를 생성 :
나는 오라클 동작을 조회 스크립트를 생성 :
create table field_values ( is_user_deletable VARCHAR2(1 CHAR), resource_mark VARCHAR2(3 CHAR) ) insert into field_values values (NULL, NULL); insert into field_values values ('Y', NULL); insert into field_values values ('N', NULL); select * from field_values; -- 3 row -- 1 row, bad update field_values set resource_mark = 'D' where is_user_deletable = 'Y'; update field_values set resource_mark = 'D' where is_user_deletable <> 'N'; update field_values set resource_mark = 'D' where is_user_deletable != 'N'; update field_values set resource_mark = 'D' where is_user_deletable not in ('Y'); -- 2 rows, good, but needs more SQL and more comparisons. Does DB optimizes? update field_values set resource_mark = 'D' where is_user_deletable = 'N' or is_user_deletable is null; -- it better to have ('Y' and NULL) or ('N' and NULL), but not 'Y' and 'N' and NULL (avoid quires with https://en.wikipedia.org/wiki/Three-valued_logic) -- adding new column which is 'Y' or 'N' only into existing table may be very long locking operation on existing table (or running long DML script)
from https://stackoverflow.com/questions/8036691/sql-not-displaying-null-values-on-a-not-equals-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 액세스 / SQL (쓰기 충돌)에서 편집 기록 문제 (0) | 2020.07.04 |
---|---|
[SQL] 어떻게 MySQL의 날짜에서 연도와 월을 추출하고이를 비교합니까? (0) | 2020.07.04 |
[SQL] MySQL은 년, 월, 일 필드에서 날짜를 만들기 (0) | 2020.07.04 |
[SQL] NOT LIKE IN과 SQL 쿼리 (0) | 2020.07.04 |
[SQL] 정수와 일, 월 및 연도 주어진 SQL Server에서 날짜를 만드는 방법 (0) | 2020.07.04 |