문제 3번같은경우 답이 SELECT SUM(psale) FROM Sale WHERE pid IN (SELECT id FROM Product WHERE name LIKE 'USB%');인데
SELECT SUM(psale) FROM Sale WHERE pid = (SELECT id FROM Product WHERE name LIKE 'USB%'); 이렇게 쓰면 틀린 답이 되나요?
그리고 SELECT 같은 것들 소문자로 쓰게 되면 틀리나요? mysql쓸때는 소문자도 가능했었던거같아 궁금해졌습니다!
안녕하세요 길벗수험서 운영팀입니다.
먼저 첫번째 질문의 경우 오답의 가능성이 큽니다.
해당 SQL 문은 교재에 나오지 않았지만 적합한 문법으로 적힌 문장입니다.
다만 where A = (select ~ 의 경우 (select ~ 의 결과가 하나의 값을 반환할 때만 사용할 수 있습니다.
즉, SELECT id FROM Product WHERE name LIKE 'USB%' 의 결과로 나오는 id의 값이 1개일 때는 정답이 될 수 있으나, 값이 2개 이상이 나오는 경우 '서브쿼리의 열이 1개 보다 많다'는 오류가 발생합니다.
문제3에서는 실제 테이블의 레코드가 나오지 않았으니 다양한 경우를 고려했을 때 IN을 통해 조건을 지정해 주는 것이 더 정답에 가까울 것 같습니다.
두번째 질문의 경우 SQL에서는 대소문자를 가리지 않습니다.
특정 벤더에서 제공하는 DBMS의 경우 대소문자를 구분하지만(그것도 user_name, role_name 같은 것에 한정) 기사시험에서는 대소문자를 구분하지 않는다고 명시하고 있습니다. (문제지 첫장)
행복한 하루되세요 :)
-
관리자2019-06-21 11:24:39
안녕하세요 길벗수험서 운영팀입니다.
먼저 첫번째 질문의 경우 오답의 가능성이 큽니다.
해당 SQL 문은 교재에 나오지 않았지만 적합한 문법으로 적힌 문장입니다.
다만 where A = (select ~ 의 경우 (select ~ 의 결과가 하나의 값을 반환할 때만 사용할 수 있습니다.
즉, SELECT id FROM Product WHERE name LIKE 'USB%' 의 결과로 나오는 id의 값이 1개일 때는 정답이 될 수 있으나, 값이 2개 이상이 나오는 경우 '서브쿼리의 열이 1개 보다 많다'는 오류가 발생합니다.
문제3에서는 실제 테이블의 레코드가 나오지 않았으니 다양한 경우를 고려했을 때 IN을 통해 조건을 지정해 주는 것이 더 정답에 가까울 것 같습니다.
두번째 질문의 경우 SQL에서는 대소문자를 가리지 않습니다.
특정 벤더에서 제공하는 DBMS의 경우 대소문자를 구분하지만(그것도 user_name, role_name 같은 것에 한정) 기사시험에서는 대소문자를 구분하지 않는다고 명시하고 있습니다. (문제지 첫장)
행복한 하루되세요 :)