컴퓨터활용(컴활) 공부

[데이터베이스] 컴활 실기 풀어보자 (쿼리)

미스털이 사용자 2023. 12. 16. 18:38
반응형

 

(문제 출처 : https://m.cafe.daum.net/hermingway/ZYwR/38 )

 

​​​데이터베이스 컴활 실기문제를 계속해서 풀어보자.

 

 

 

 

 

===

 

쿼리 만들기

조건 만들기

정렬 하기

 

 

 

[만들기]->[쿼리 디자인] 실행

 

 

문제에서 요구하는 테이블(회원) 불러오기

 

 

 

보여줄 필드와 조건 필드 등을 다 불러오기

 

 

 

다음과 같이

문제에서 요구하는 정렬과 조건을 기입

 

 

===

 

SELECT INTO 관련 쿼리 만들기

 

 

 

회원 테이블 대상으로 다음과 같이 구성하고

[전화번호]필드의 조건을 다음과 같이 만든다.

 

1) is null은 문자열이 null(비어있는지) 체크해준다는 뜻이다.

2) 와일드 검색을 쓰되, 앞에 "Not"을 써준다.

 

 

 

그 다음 SELECT INTO 를 해줄 기능

[디자인]->[테이블 만들기]를 실행해서

문제에서 요구하는 테이블 이름을 써준다.

 

 

위의 작업으로

자동으로 생성된 쿼리는

다음과 같다.

 

SELECT 
       회원.회원번호, 회원.성명, 회원.과목, 회원.전화번호 
INTO 
       업데이트_대상회원
FROM 
       회원
WHERE 
       (
              (
                     (회원.전화번호) Is Null
              )
       ) 
       OR 
       (
              (
                     (회원.전화번호) Not Like "010*"
              )
       );
 

 

===

 

크로스탭 : 무조건 "행 머리글", "열 머리글" 먼저 파악하기

 

행 머리글 : 프로그램, 소계(회원번호)

값 : 소계(회원번호)

열머리글 : 구분상세

 

 

 

먼저 문제에서 요구한 테이블 3개를 넣은 후,

[회원.과목] 필드와 [과목.과목코드] 필드가 연관이 있으므로

다음과 같이 드래그해서 연결 지어준다.

 

 

그리고 [디자인]->[크로스 탭] 실행

 

 

파악된 행/열머리글/값을 넣기

행 머리글 : 프로그램, 소계(회원번호)

값 : 소계(회원번호)

열머리글 : 구분상세

 

 

 

그런데

문제가 발생했다.

최우수란 항목이 있는 것..

 

 

문제를 보니, 최우수를 우수회원에 포함시키는 조건을 쓰는 것 같다.

일반 : 일반회원

일반이 아니면 : 우수회원

 

TRANSFORM 
         Count(회원.회원번호) AS 회원번호의개수
SELECT 
         과목.과목명 AS 프로그램, Count(회원.회원번호) AS 소계
FROM 구분상세 
INNER JOIN 
         (회원 INNER JOIN 과목 ON 회원.과목 = 과목.과목코드) 
         ON 
                  구분상세.구분코드 = 회원.구분
GROUP BY 
         과목.과목명
PIVOT 
         구분상세.구분상세;
 

 

여기서 건드려도 될 것 같은게

"PIVOT 절"이다.

이곳에 SWITCH를 넣어보겠다.

 

TRANSFORM 
         Count(회원.회원번호) AS 회원번호의개수
SELECT 
         과목.과목명 AS 프로그램, Count(회원.회원번호) AS 소계
FROM 구분상세 
INNER JOIN 
         (회원 INNER JOIN 과목 ON 회원.과목 = 과목.과목코드) 
         ON 
                  구분상세.구분코드 = 회원.구분
GROUP BY 
         과목.과목명
PIVOT 
         SWITCH (
                  구분상세.구분상세 = '일반' ,'일반회원',
                  true, '우수회원'
         )
 

 

 

그리고

우수회원이 3번째 열이 아니라 4번째 열에서 나타나게 하려면

다음과 같이 정렬 조건을 넣어준다.

TRANSFORM 
         Count(회원.회원번호) AS 회원번호의개수
SELECT 
         과목.과목명 AS 프로그램, Count(회원.회원번호) AS 소계
FROM 구분상세 
INNER JOIN 
         (회원 INNER JOIN 과목 ON 회원.과목 = 과목.과목코드) 
         ON 
                  구분상세.구분코드 = 회원.구분
GROUP BY 
         과목.과목명
ORDER BY
         SWITCH (
                  구분상세.구분상세 = '일반' ,'일반회원',
                  true, '우수회원'
         ) DESC
PIVOT 
         SWITCH (
                  구분상세.구분상세 = '일반' ,'일반회원',
                  true, '우수회원'
         )

 

 

 

 

 

완성된 쿼리는 위와 같다.

 

 

 

===

 

매개변수 입력 받는 문제

 

 

 

먼저 3개 테이블 세팅

 

 

 

그리고

조회할 때 필요한 항목들을 모두 넣는다

 

 

그리고 SQL로 보면 다음과 같은데

SELECT 
        과목.과목명 AS 프로그램, 회원.구분, 회원.성명, 과목.월회비, 구분상세.할인율, 회원.전화번호
FROM 
        (
                구분상세 
                INNER JOIN 
                        회원 
                        ON 
                                구분상세.구분코드 = 회원.구분
        ) 
        INNER JOIN 
                과목 
                ON 
                        회원.과목 = 과목.과목코드;
 

 

여기서 쿼리를 다음과 같이 바꾼다.

(즉 화살표 방향 참고해서 2개의 열을 1개로 나타낸 항목으로 바꿔준다.)

 

즉 아래와 같이 나타내면 된다.

SELECT 
        과목.과목명 AS 프로그램, 회원.구분, 회원.성명, 
        
        (과목.월회비 * (1 - 구분상세.할인율)) AS 납부회비,
        
        회원.전화번호
FROM 
        (
                구분상세 
                INNER JOIN 
                        회원 
                        ON 
                                구분상세.구분코드 = 회원.구분
        ) 
        INNER JOIN 
                과목 
                ON 
                        회원.과목 = 과목.과목코드;
 
 

 

 

그런데

다음과 같이 소수점 까지 나타나게 되는데

문제에서 요구한 것은

1) 십 단위에서 올려서 나타내기

2) 오른쪽 정렬 + 맨 앞에 "\"단위 표시

 

위 서식을 적용시켜준다.

* \\#,#00

 
 

그리고 매개변수 입력하는 것도 구현해야 한다.

대괄호[] 안에 문제에서 요구하는 문자열 넣으면 된다.

 

반응형