91p에서 제일 위의 예제2번
SELECT 부서, COUNT(*) AS 사원수
FROM 사원
WHERE 기본급 >= 100
GROUP BY 부서
HAVING COUNT(*) >= 2;
127p에서 문제 6번
SELECT 이름
FROM 자격증
GROUP BY 이름
HAVING COUNT(*)>=2;
이 두 가지의 문제에서 헷갈리는 부분이 있습니다.
91P의 예제 2번의 경우는 SELECT절에서 COUNT(*)가 선언되어있고, 127P에서의 SELECT절에서 COUNT(*)가 선언되지 않았는데
이 두 가지의 차이가 헷갈립니다.
만약 91P에서 COUNT(*)가 없을 경우, 또는 127P에서 COUNT(*)가 있을 경우의 차이를 알고 싶습니다.
그리고 COUNT()에 *을 넣을 시 전체 튜플을 대상으로 튜플의 수를 구하는 것인데, 만약 COUNT(부서)로 할 경우 결과가 달라지는지 궁금합니다.
마지막으로 83P의 문제 7번에서 제일 아래 빈칸 2번과 3번에서 CONSTRAINT VALID-직위 CHECK(VALUE IN('','',''); 이 부분의 VARID와 VALUE는 무슨 의미이며, 고정된 형식인지 궁금합니다.
안녕하세요 길벗수험서 운영팀입니다.
질문의 의도를 정확히 파악하지 못했습니다.
91페이지의 예제 2번의 경우 'count(*) as 사원수'가 없다면 조회되는 필드 중 '사원수' 필드가 사라지고 '부서' 필드만이 출력되게 되겠죠.
127페이지의 문제 6번의 경우 'count(*)'가 있다면 조회되는 필드가 하나 늘어 'count(*)'라는 필드에 값이 2가 출력될 것입니다. 김선달의 자격증의 개수가 2개니까요.
count(부서)를 넣어도 아무 상관이 없습니다. 두개의 SQL문 모두 '부서' 필드로 그룹화가 되어 있으므로 어느 필드를 대상으로 count함수를 써도 무관하기에 count(*)를 사용한 것입니다.
만약 sum이나 avg같은 함수를 사용하려면 계산하려는 값이 들어있는 필드를 넣어줘야겠지만요.
그룹함수는 그룹된 영역만을 기준으로 함수가 적용된다는 점 잊지마세요.
'VALID-직위'는 단순히 제약조건의 이름일 뿐입니다. 사용자가 임의로 정할 수 있는 것이죠.
constraint 제약조건명 check(필드명 in( )) 형식으로 사용되는 구문은 사용되는 곳이 어디냐에 따라 조금 달라집니다.
일반적으로 필드명이 들어가야 하지만, create domain의 경우 도메인이 어떤 필드에 적용되냐에 따라 필드명이 달라지기 때문에 필드명이 아닌 value가 들어가게 됩니다.
create domain일 때 check in 구문을 쓴다면 필드명이 아닌 value가 들어가야 한다는 점은 암기해둬야 합니다.
create table이라면 필드명이 들어갑니다. 예를 들어 작성해본다면,
create table AA (
id int,
val2 char(10),
constraint cst_val2 check(val2 in('aa', 'bb', 'cc')));
이렇게 되겠네요. cst_val2는 제가 임의로 정한 제약조건명이고, val2는 제약조건이 적용되는 필드명이 됩니다.
행복한 하루되세요 :)
-
관리자2019-03-19 13:48:19
안녕하세요 길벗수험서 운영팀입니다.
질문의 의도를 정확히 파악하지 못했습니다.
91페이지의 예제 2번의 경우 'count(*) as 사원수'가 없다면 조회되는 필드 중 '사원수' 필드가 사라지고 '부서' 필드만이 출력되게 되겠죠.
127페이지의 문제 6번의 경우 'count(*)'가 있다면 조회되는 필드가 하나 늘어 'count(*)'라는 필드에 값이 2가 출력될 것입니다. 김선달의 자격증의 개수가 2개니까요.
count(부서)를 넣어도 아무 상관이 없습니다. 두개의 SQL문 모두 '부서' 필드로 그룹화가 되어 있으므로 어느 필드를 대상으로 count함수를 써도 무관하기에 count(*)를 사용한 것입니다.
만약 sum이나 avg같은 함수를 사용하려면 계산하려는 값이 들어있는 필드를 넣어줘야겠지만요.
그룹함수는 그룹된 영역만을 기준으로 함수가 적용된다는 점 잊지마세요.
'VALID-직위'는 단순히 제약조건의 이름일 뿐입니다. 사용자가 임의로 정할 수 있는 것이죠.
constraint 제약조건명 check(필드명 in( )) 형식으로 사용되는 구문은 사용되는 곳이 어디냐에 따라 조금 달라집니다.
일반적으로 필드명이 들어가야 하지만, create domain의 경우 도메인이 어떤 필드에 적용되냐에 따라 필드명이 달라지기 때문에 필드명이 아닌 value가 들어가게 됩니다.
create domain일 때 check in 구문을 쓴다면 필드명이 아닌 value가 들어가야 한다는 점은 암기해둬야 합니다.
create table이라면 필드명이 들어갑니다. 예를 들어 작성해본다면,
create table AA (
id int,
val2 char(10),
constraint cst_val2 check(val2 in('aa', 'bb', 'cc')));
이렇게 되겠네요. cst_val2는 제가 임의로 정한 제약조건명이고, val2는 제약조건이 적용되는 필드명이 됩니다.
행복한 하루되세요 :)