책 내용 질문하기
정보처리기사 실기 SQL 질문
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
0
조회수
309
작성일
2017-05-25
작성자
탈퇴*원
첨부파일

1. GROUP BY 질문

2권 데이터베이스 94 PAGE 문제 10번의 답이

SELECT 결제여부, COUNT(*) AS 학생수

FROM 결제

GROUP BY 결제여부;

입니다.

1-1. 여기에서 만약 GROUP BY를 안쓰면 어떤 결과가 나타나게 되나요?

1-2 그리고 COUNT나 SUM 같은 걸 쓰면 GROUP BY를 항상 사용해야하나요?

2. JOIN 질문

OUTER JOIN에서 (+)를 어디에 사용해야할지 잘 모르겠습니다.

101 PAGE 문제 2의 경우는 학생.학과코드 = 학과.학과코드(+) 인데

일단 검색결과에 학생 테이블의 학번이 모두 나와있으므로

학과에 +를 해주게 된건가요?

그리고 학생.학과코드 = 학과.학과코드(+) 를 학과.학과코드(+) = 학생.학과코드

라고 써도 정답으로 인정되나요?

답변
2017-05-26 09:51:15

안녕하세요.

1)

Group By를 지정하지 않으면 "count(*) as 학생수"에 의해 전체 레코드 수인 9가 산출되지만

결제여부 필드도 함께 출력해야 하기 때문에 오류가 발생합니다.

즉,

SELECT count(*) as 학생수
from 결제;
위와 같이 집계함수를 이용해 하나의 필드를 대상으로 추출한다면 결과가 9가 산출되지만

그룹이 지정되지 않은 상태에서 집계함수를 적용하는 필드외에 일반 필드가 함께 있다면 오류가 발생합니다.

이런 경우에는 반드시 그룹을 지정해야 합니다.

2)

검색 결과를 보면

학번은 학생 테이블의 값이 모두 출력되고

학과코도는 학생 테이블과 학과 테이블에 공통인 값만 출력되었습니다. 이에 따라 학과명도 같이 적용되었구요.

그러므로 이는

학생 테이블을 기준으로 한 JOIN인데

방법2를 보면 FROM 학생, 학과 로 인해 학생 테이블이 왼쪽에 있음을 알 수 있습니다.

결국 이는 학생 테이블을 기준으로 한 LEFT JOIN입니다.

LEFT JOIN의 표현 방법은

SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 LEFT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;

또는

SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명(+);

그러므로 이를 적용하면

SELECT 학번, 학생.학과코드, 학과명
FROM 학생 LEFT OUTER JOIN 학과
ON 학생.학과코드 = 학과.학과코드;

또는

SELECT 학번, 학생.학과코드, 학과명
FROM 학생, 학과
WHERE 학생.학과코드 = 학과.학과코드(+);

가 됩니다.

WHERE 문에서 학과.학과코드(+) = 학생.학과코드 로 기술하려면

FROM 절도 학과, 학생으로 위치를 변경하면 됩니다.

오늘도 즐거운 하루 되세요.

  • *
    2017-05-26 09:51:15

    안녕하세요.

    1)

    Group By를 지정하지 않으면 "count(*) as 학생수"에 의해 전체 레코드 수인 9가 산출되지만

    결제여부 필드도 함께 출력해야 하기 때문에 오류가 발생합니다.

    즉,

    SELECT count(*) as 학생수
    from 결제;
    위와 같이 집계함수를 이용해 하나의 필드를 대상으로 추출한다면 결과가 9가 산출되지만

    그룹이 지정되지 않은 상태에서 집계함수를 적용하는 필드외에 일반 필드가 함께 있다면 오류가 발생합니다.

    이런 경우에는 반드시 그룹을 지정해야 합니다.

    2)

    검색 결과를 보면

    학번은 학생 테이블의 값이 모두 출력되고

    학과코도는 학생 테이블과 학과 테이블에 공통인 값만 출력되었습니다. 이에 따라 학과명도 같이 적용되었구요.

    그러므로 이는

    학생 테이블을 기준으로 한 JOIN인데

    방법2를 보면 FROM 학생, 학과 로 인해 학생 테이블이 왼쪽에 있음을 알 수 있습니다.

    결국 이는 학생 테이블을 기준으로 한 LEFT JOIN입니다.

    LEFT JOIN의 표현 방법은

    SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
    FROM 테이블명1 LEFT OUTER JOIN 테이블명2
    ON 테이블명1.속성명 = 테이블명2.속성명;

    또는

    SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
    FROM 테이블명1, 테이블명2
    WHERE 테이블명1.속성명 = 테이블명2.속성명(+);

    그러므로 이를 적용하면

    SELECT 학번, 학생.학과코드, 학과명
    FROM 학생 LEFT OUTER JOIN 학과
    ON 학생.학과코드 = 학과.학과코드;

    또는

    SELECT 학번, 학생.학과코드, 학과명
    FROM 학생, 학과
    WHERE 학생.학과코드 = 학과.학과코드(+);

    가 됩니다.

    WHERE 문에서 학과.학과코드(+) = 학생.학과코드 로 기술하려면

    FROM 절도 학과, 학생으로 위치를 변경하면 됩니다.

    오늘도 즐거운 하루 되세요.

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.