SQL에서 NULL의 의미
WHERE절에 있는 condition(s)의 결과가 TRUE인 tuple(s)만 선택된다.
즉, 결과가 FALSE거나 UNKNWON이면 tuple은 선택되지 않는다.
v NOT IN (v1, v2, v3)는 아래와 같은 의미이다.
v != v1 AND v != v2 AND v != v3
만약 v1, v2 ,v3 중 하나라도 NULL값이면 ??
E.birth_date의 값에 NULL 값이 있으면 제외 되긴 하지만 아래와 같이 작성하는 것이 좋다.
mysql> select * from employee;
+----+---------+------------+------+-----------+-----------+---------+
| id | name | birth_date | sex | position | salary | dept_id |
+----+---------+------------+------+-----------+-----------+---------+
| 1 | MESSI | 1987-02-01 | M | DEV_BACK | 100000000 | 1003 |
| 2 | JANE | 1996-05-05 | F | DSGN | 180000000 | 1004 |
| 3 | JENNY | 2000-10-12 | F | DEV_BACK | 50000000 | 1003 |
| 4 | BROWN | 1996-03-13 | M | CEO | 240000000 | 1002 |
| 5 | DINGYO | 1990-11-05 | M | CTO | 120000000 | 1002 |
| 6 | JULIA | 1986-12-11 | F | CFO | 240000000 | 1002 |
| 7 | MINA | 1993-06-17 | F | DSGN | 160000000 | 1004 |
| 9 | HENRY | 1982-05-20 | M | HR | 82000000 | 1002 |
| 10 | NICOLE | 1991-03-26 | F | DEV_FRONT | 180000000 | 1003 |
| 11 | SUZANNE | 1993-03-23 | F | PO | 75000000 | 1005 |
| 12 | CURRY | 1998-01-15 | M | PLN | 170000000 | 1004 |
| 13 | JISUNG | NULL | M | PO | 90000000 | 1005 |
| 14 | SAM | NULL | M | DEV_INFRA | 70000000 | 1003 |
+----+---------+------------+------+-----------+-----------+---------+
13 rows in set (0.00 sec)
mysql> SELECT D.id, D.name
-> FROM department AS D
-> WHERE D.id NOT IN (
-> SELECT E,dept_id
-> FROM employee E
-> WHERE E.birth_date >= '2000-01-01'
-> );
//NOT IN 대신 NOT EXISTS 로 변경하거나
mysql> SELECT D.id, D.name
-> FROM department AS D
-> WHERE NOT EXISTS (
-> SELECT*
-> FROM employee E
-> WHERE E.dept_id = d.id and E.birth_date >= '2000-01-01'
-> );
+------+-------------+
| id | name |
+------+-------------+
| 1004 | design |
| 1001 | headquarter |
| 1002 | HR |
| 1005 | product |
+------+-------------+
4 rows in set (0.00 sec)
아래와 같이 IS NOT NULL을 넣어 준다.
mysql> SELECT D.id, D.name
-> FROM department AS D
-> WHERE D.id NOT IN (
-> SELECT E.dept_id
-> FROM employee E
-> WHERE E.birth_date >= '2000-01-01'
-> AND E.dept_id IS NOT NULL
-> );
+------+-------------+
| id | name |
+------+-------------+
| 1004 | design |
| 1001 | headquarter |
| 1002 | HR |
| 1005 | product |
+------+-------------+
10. DBMS에 저장해서 쓰는 함수 1 (0) | 2023.08.24 |
---|---|
9. SQL로 데이터 조회하기 5 (0) | 2023.08.23 |
6. SQL로 데이터 조회하기 2 (0) | 2023.08.18 |
5. SQL로 데이터 조회하기(1) (0) | 2023.08.17 |
4. 테이블에 데이터 추가/수정/삭제 하기 (0) | 2023.08.14 |