sqld 관련 coalesce 와 쿼리 질문드립니다.. 0 1 334

by 이런 [SQL Query] [2020.08.02 19:15:50]


1.PNG (22,805Bytes)
2.PNG (22,175Bytes)
3.PNG (21,819Bytes)

첫번째 사진에서  <> 인데  <>은  같지않은 값만 출력하는거 아닌가요? 설명좀 부탁드립니다 ㅠ.. 

두번째는 where 1=2 이라고 되어있는데 뭘 의미하는건가요 ? 

세번째는 coalesce가 첫번째로 null이 아닌 값인걸로 알고있는데 왜 답이 저리나오는지 모르겠어요 ㅠ 

by 마농 [2020.08.03 08:14:21]

27번 문제는
  - 부등호 조건과 NULL 의 특성 및 조인에 대한 이해를 묻는 문제입니다.
  - NULL 은 비교 자체가 불가하여 비교식에 사용되면 결과는 항상 거짓(False)이 됩니다.
  - 따라서 NULL 을 제외한 행끼리 v1 이 다른 것을 연결하면 됩니다.
  - A 에는 B 가 붙어서 a.n1 은 1
  - B 에는 A 가 붙어서 a.n1 은 3
  - C 에는 A,B 가 연결되어 2행이 되네요. a.n1 은 4 가 2개
  - 1 + 3 + 4 + 4 = 12
17번 문제는
  - 조건절에 대한 이해, 집계함수에 대한 이해를 묻는 문제입니다.
  - 조건절은 (컬럼 = 값) 형태의 조건만 오는게 아닙니다.
  - true/false 를 판별할 수 있는 어떤 형태의 조건이든 올 수 있습니다.
  - 1=2 는 무조건 거짓인 조건이므로 반환되는 행이 없게 됩니다. 0 Row
  - 만약 1=1 했다면 모든 행이 반환되겠네요.
  - 0 Row 일때 COUNT(*) 의 값은 0 이 나옵니다. NULL 이 나오는게 아닙니다.
  - NVL 은 null 이 나온다고 생각하게 만들어 오답을 유도하는 Fake 입니다.
22번 문제는
  - 단순히 특정 함수에 대해 알고 있는지에 대한 문제입니다. 거기에 Null 의 특징도 알아야 하겠네요.
  - Coalesce 는 순서대로 널을 대체하는 함수입니다.
  - Null 은 비교식에서 거짓을 리턴할 뿐만 아니라, 계산식에서도 NULL 을 반환합니다.
  - 1행 : Coalesce(100, 100*50, 50) = 첫번째 값(100)
  - 2행 : Coalesce(NULL, 60*50, 50) = 첫번째 값이 널이므로 두번째 값(3000)
  - 3행 : Coalesce(NULL, NULL*50, 50) = 첫번째 값, 두번째 값이 널이므로 세번째 값(50)
  - 이게 단순한 문제인데도 불구하고 지속적으로 질문이 많이 올라오는 걸 보면
  - Coalesce 가 단일행 함수라서 각 행마다 계산되는 것인데.
  - 아마도 여러행에 대한 집계함수로 착각해서 어려워하는게 아닐까? 생각되네요.
  - 보기가 3행이 나오는 형태가 아닌, 컴마로 구분하여 나온것도 헷갈리게 하는 요소네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입