5.1 중요성 부족
Java 언어와 마찬가지로 SQL 언어에는 값이 없음을 나타내는 특수 키워드가 있습니다. null입니다. 또는 자주 쓰는 것처럼 - NULL
.
SQL의 사용법은 NULL
Java의 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 |
좋습니다. 마지막 두 줄이 사라졌습니다. 작동 방식은 다음과 같습니다. 조금 이례적이지만 여전히 특정 논리가 있습니다.