오늘은 여기 좀 더 복잡한 데이터 조회 요청이 들어왔을 때 subquery로 처리하는 방법과
NULL이 DB에서 조금 다른 의미를 가지고 있다는 것을 적어보려고 한다!!
흔히 우리가 아는 프로그래밍 언어에서 NULL은 안에 들어있는게 없는 빈 공간을 의미한다
하지만 DB에서 null은 단순히 비어있다를 의미하지 않는다!
만약 누군가의 생일 데이터가 null이라면 이건 그 사람이 아직 생일을 작성하지 않았거나
생일을 공개하기 싫어서 공개 안한거일수도 있다!
만약 임직원 id가 14,15인 사람의 생일이 null이다!
이건 14와 15가 생일이 같은지 아닌지 알 수가 없다!!
고로 이건 unknown이라고 표현한다!
select id from employee where birth_date=NULL;
NULL은 같은지 안 같은지 확인이 안되서 =인 비교 연산을 사용하면 안된다
select id from employee where birth_date is NULL;
이렇게 is를 써서 null이 있는지 확인하는게 맞는 표현법이다!
true, false 뿐만 아니라 unknown도 있다!
차고로 where 절에서 선택할때는 true인거만 선택한다! 애매한 unknown과 false는 선택에서 제외!
v not in (v1,v2,v3) -> 만약 v1 v2 v3중 하나가 null이라면?
3 not in (1,3, null) -> false
3 not in (1,2, null) -> unknown -> 즉 알 수 없다!
id가 14인 임직원보다 생일이 빠른 임직원의 id, 이름, 생일 알기
일단 id가 14인 임직원의 생일을 봐보자
그리고 생일을 비교해야하므로 저 조회한 데이터의 생일보다 빠르면 된다!
서브 쿼리란 메인 쿼리 안에 하나의 쿼리를 더 넣어서 좀 더 정교한 데이터 요청을 처리하는 것을 말한다!
이렇게 하면 두가지 쿼리를 합쳐서 하나의 결과를 도출하게 된다!
항상 서브 쿼리는 ()로 감싸야 오류가 안난다!!!