5.1 중요성 부족

Java 언어와 마찬가지로 SQL 언어에는 값이 없음을 나타내는 특수 키워드가 있습니다. null입니다. 또는 자주 쓰는 것처럼 - NULL.

SQL의 사용법은 NULLJava의 null 사용법과 매우 유사합니다. Java에는 필드에 null 값이 포함된 개체가 있을 수 있습니다. SQL에는 행에 NULL 값이 포함된 테이블이 있을 수 있습니다.

일부러 제품 테이블에 브랜드가 없는 몇 가지 제품을 추가하겠습니다. 제품의 브랜드를 알 수 없는 경우 값은 입니다 NULL.

이러한 제품을 표시하기 위해 ID를 기준 으로 제품 테이블을 역순으로 정렬 하고 10개의 레코드를 가져옵니다. 요청은 다음과 같습니다.

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

다음 쿼리 결과를 얻습니다.

ID 이름 상표 가격 세다
15 대갈못 없는 0.01 1000
14 나사 없는 0.10 1000
13 서다 이케아 100.00 10
12 화분 스마트플라워 99.00 9
열하나 안락의자 보쉬 44.00 8
10 그릇 보쉬 199.00 10
9 옷장 이케아 99.00 10
8 램프 엘지 15.00 100
7 TV 엘지 350.00 4
6 선반 보쉬 25.00 114

예, 테이블에 리벳과 나사를 추가했습니다. 가격과 수량은 있지만 브랜드는 없습니다.

5.2 NULL과의 비교

null을 사용할 때 때때로 Java에서 화를 내곤 했던 것을 기억하십니까? null 값을 참조할 수 있는 변수는 equals()를 통해 비교할 수 없습니다. 예:

Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) {  //an exception will be raised here}

당신은 그것을 믿지 않을 것이지만 SQL 언어에서는 NULL 값으로 작업할 때 뉘앙스도 기다리고 있습니다. 그리고 다음과 같이 들립니다.아무것도 NULL이 아니다.

브랜드가 다음과 같은 모든 제품을 필터링하려는 경우 null:

SELECT * FROM product
WHERE brand = NULL

빈 테이블이 표시됩니다.

ID 이름 상표 가격 세다

그러나 브랜드가 같지 않은 쿼리를 작성하면 NULL동일한 결과를 얻게 됩니다.

SELECT * FROM product
WHERE brand != NULL

다시 빈 테이블을 얻게 됩니다.

ID 이름 상표 가격 세다

NULL을 사용한 모든 비교/작업은 NULL을 반환합니다.:

표현 결과
브랜드 = NULL 없는
브랜드 != NULL 없는
NULL = NULL 없는
NULL!= NULL 없는

예,NULL과 NULL을 비교해도 답은 NULL.

5.3 NULL이고 NULL이 아니다

그렇다면 일부 필드(또는 일부 열)에 값이 있는지 어떻게 확인합니까 NULL? 그리고 이를 위해 SQL에는 특별한 표현이 있습니다 - IS NULL. 이렇게 생겼습니다.

variable IS NULL

테이블의 열이 같지 않은지 확인하려면 NULL다음과 같이 작성해야 합니다 IS NOT NULL.

variable IS NOT NULL

브랜드가 와 같은 제품 테이블에서 모든 제품을 선택하는 쿼리를 작성해 보겠습니다 NULL. 이러한 요청은 다음과 같습니다.

SELECT * FROM product
WHERE brand IS NULL

그리고 다음 쿼리 결과를 얻습니다.

ID 이름 상표 가격 세다
14 나사 없는 0.10 1000
15 대갈못 없는 0.01 1000

이제 가격이 $20 미만인 모든 제품을 표시해 보겠습니다.

SELECT * FROM product
WHERE price  < 20

그리고 다음 쿼리 결과를 얻습니다.

ID 이름 상표 가격 세다
2 의자 이케아 5.00 45
8 램프 엘지 15.00 100
14 나사 없는 0.10 1000
15 대갈못 없는 0.01 1000

이제 가격은 20달러 미만이어야 하고 브랜드는 그렇지 않다고 지정합니다 NULL.

SELECT * FROM product
WHERE price  < 20 AND brand IS NOT NULL

다음 쿼리 결과를 얻습니다.

ID 이름 상표 가격 세다
2 의자 이케아 5.00 45
8 램프 엘지 15.00 100

좋습니다. 마지막 두 줄이 사라졌습니다. 작동 방식은 다음과 같습니다. 조금 이례적이지만 여전히 특정 논리가 있습니다.