별의 공부 블로그 🧑🏻‍💻
728x90
728x170

SQLD 실전 문제 : SQL 기본 ②

문제 41

Q. 다음 중, 아래와 같은 2건의 데이터 상황에서 SQL의 수행 결과로 가장 적합한 것은? (단, 이해를 돕기 위해 ↓는 줄바꿈을 의미 → 실제 저장값이 아님, CHR(10) : ASCII 값 → 줄바꿈을 의미)

SELECT SUM(CC)
FROM (
    SELECT(LENGTH(C1) - LENGTH(REPLACE9C1, CHR(10))) + 1) CC
    FROM TAB 1
)


① 2
② 3
③ 5
④ 6

 

더보기

정답 : 

해설 : 라인수를 구하기 위해서 함수를 이용해서 작성한 SQL이다.

- LENGTH : 문자열의 길이 반환하는 함수

- CHR : 주어진 ASCII 코드에 대한 문자를 반환하는 함수 (CHR(10) : 줄바꿈)

- REPLACE : 문자열을 치환하는 함수 (REPLACE(C1, CHR(10)) : 줄바꿈 제거)

 

※ 단일행 문자형 함수의 종류

- Oracle 함수/SQL Server함수

문자형 함수 설명
LOWER(문자열) 문자열의 알파뱃 문자를 소문자로 바꾸어 준다.
UPPER(문자열) 문자열의 알파벳 문자를 대문자로 바꾸어 준다.
ASCII(숫자) 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다.
CHR/CHAR(ASCII번호) ASCII 코드 번호를 문자나 숫자로 바꾸어 준다.
CONCAT(문자열1, 문자열2) - Oracle, MySQL에서 유효한 함수이며 문자열1과 문자열2블 연결한다. 
- 합성 연산자 '||'(Oracle)나 '+'(SQL Server)와 동일하다.
SUBSTR/SUBSTRING(문자열, m[, n]) - 문자열 중  m 위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다.
- n이 생략되면 마지막 문자까지이다.
LENGTH/LEN(문자열) 문자열의 개수를 숫자값으로 돌려준다.
LTRIM(문자열 [, 지정문자]) - 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거한다. (지정 문자가 생략되면 공백 값이 디폴트)
- SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. (즉, 공백만 제거할 수 있다.)
RTRIM(문자열 [, 지정문자]) - 문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당 문자를 제거한다. (지정 문자가 생략되면 공백 값이 디폴트)
- SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. (즉, 공백만 제거할 수 있다.)
TRIM([leading | trailing | both]
지정문자 FROM 문자열)
- 문자열에서 머리말, 꼬리말, 또는 양쪽에 있는 지정 문자를 제거한다. (leading,| trailing | both 가 생략되면 both가 디폴트)
- SQL Server에서는 TRIM 함수에 지정문자를 사용할 수 없다. (즉, 공백만 제거할 수 있다.)

 

문제 42

Q. 오라클 환경에서 날짜형 데이터를 다룰 경우, 아래 SQL 결과로 가장 적절한 것은?
SELECT TO_CHAR(TO_DATE('2015.01.10 10', 'YYYY.MM.DD HH24')
+ 1/24/(60/10), 'YYYY.MM.DD HH24:MI:SS') FROM DUAL;

① 2015.01.10 11:01:00
2015.01.10 10:05:00
2015.01.10 10:10:00
2015.01.10. 10:30:00

 

더보기

정답 : 

해설 : 오라클에서 날짜의 연산은 숫자의 연산과 같다. 특정 날짜에 1을 더하면 하루를 더한 결과와 같으므로 1/24/60 = 1분을 의미한다. 1/24(60/10) = 10분과 같으므로 2015년 1월 10일 10시에 10분을 더한 결과와 같다.

 

※ DUAL 테이블의 특성

- 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.

- SELECT ~ FROM ~의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.

- DUMMY 라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.

 

※ 단일행 함수의 종류

종류 내용 함수의 예
문자형 함수 문자를 입력하면 문자나 숫자 값을 반환한다. LOWER, UPPER, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM, TRIM, ASCII
숫자형 함수 숫자를 입력하면 숫자 값을 반환한다. ABS, MOD, ROUND, TRUNC, SIGN, CHR/CHAR, CEIL/CEILING, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN
날짜형 함수 DATE 타입의 값을 연산한다. SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER(TO_CHAR(d, 'YYYY' | 'MM' | 'DD')) / YEAR | MONTH | DAY
변환형 함수 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. TO_NUMBER, TO_CHAR, TO_DATE / CAST, CONVERT
NULL 관련 함수 NULL을 처리하기 위한 함수 NVL/ISNULL, NULLIF, COALESCE

 

문제 43

Q. 아래는 SEARCHED_CASE_EXPRESSION SQL 문장이다. 이때 사용된 SEARCHED_CASE_EXPRESSION은 SIMPLE_CASE_EXPRESSION을 이용해 똑같은 기능을 표현할 수 있다. 아래 SQL 문장의 (  ㄱ  ) 안에 들어갈 표현을 작성하시오. (스칼라 서브쿼리는 제외함.)
[SEARCHED_CASE_EXPRESSION 문장 사례]
SELECT LOC,
    CASE WHEN LOC = 'NEW YORK' THEN 'EAST'
      ELSE 'ETC'
    END as AREA
FROM DEPT;

[SIMPLE_CASE_EXPRESSION 문장 사례]
SELECT LOC,
    CASE (    ㄱ    )
      ELSE 'ETC'
    END as AREA
FROM DEPT;

 

더보기

정답 : LOC WHEN 'NEW WORK' THEN 'EAST'

해설 : SEARCHED_CASE_EXPRESSION을 SIMPLE_CASE_EXPRESSION으로 변환하는 문제이다.

 

문제 44

Q. 팀별 포지션별 FW, MF, DF, GK 포지션의 인원수와 팀별 전체 인원수를 구하는 SQL을 작성할 때 결과가 다른 것은? (보기 1은 SQL Server 환경이고, 보기 2, 3, 4는 ORACLE 환경이다.)
① 
SELECT TEAM_ID,
    ISNULL(SUM(CASE WHEN POSITION = 'FW' THEN 1 END), 0) FW,
    ISNULL(SUM(CASE WHEN POSITION = 'MF' THEN 1 END), 0) MF,
    ISNULL(SUM(CASE WHEN POSITION = 'DF' THEN 1 END), 0) DF,
    ISNULL(SUM(CASE WHEN POSITION = 'GK' THEN 1 END), 0) GK,
        COUNT(*) SUM
        FROM PLAYER
        GROUP BY TEAM_ID;

 

 
SELECT TEAM_ID,
    NVL(SUM(CASE POSITION WHEN = 'FW' THEN 1 END), 0) FW,
    NVL(SUM(CASE POSITION WHEN = 'MF' THEN 1 END), 0) MF,
    NVL(SUM(CASE POSITION WHEN = 'DF' THEN 1 END), 0) DF,
    NVL(SUM(CASE POSITION WHEN = 'GK' THEN 1 END), 0) GK,
        COUNT(*) SUM
        FROM PLAYER
        GROUP BY TEAM_ID;

 

 
SELECT TEAM_ID,
    NVL(SUM(CASE WHEN POSITION = 'FW' THEN 1 END), 0) FW,
    NVL(SUM(CASE WHEN POSITION = 'MF' THEN 1 END), 0) MF,
    NVL(SUM(CASE WHEN POSITION = 'DF' THEN 1 END), 0) DF,
    NVL(SUM(CASE WHEN POSITION = 'GK' THEN 1 END), 0) GK,
        COUNT(*) SUM
        FROM PLAYER
        GROUP BY TEAM_ID;

 

SELECT TEAM_ID,
    NVL(SUM(CASE POSITION WHEN = 'FW' THEN 1 ELSE 1 END), 0) FW,
    NVL(SUM(CASE POSITION WHEN = 'MF' THEN 1 ELSE 1 END), 0) MF,
    NVL(SUM(CASE POSITION WHEN = 'DF' THEN 1 ELSE 1 END), 0) DF,
    NVL(SUM(CASE POSITION WHEN = 'GK' THEN 1 ELSE 1 END), 0) GK,
        COUNT(*) SUM
        FROM PLAYER
        GROUP BY TEAM_ID;

 

 

더보기

정답 :

해설 : 지문4는 CASE 문장에서 데이터가 없는 경우를 0으로 표시해야(ELSE 0), 다른 3개의 지문과 같은 결과가 나온다.

 

문제 45

Q. 다음 중 아래 TAB1을 보고 각 SQL 실행 결과를 가장 올바르게 설명한 것을 고르시오.

① SELECT COL2 FROM TAB1 WHERE COL1 = 'b';
실행 결과가 없다. (공집합)
② SELECT ISNULL(COL2, 'X') FROM TAB1 WHERE COL1 = 'a';
 실행 결과로 ’X'를 반환한다.
③ SELECT COUNT(COL1) FROM TAB1 WHERE COL2 = NULL;
실행 결과는 1이다.
④ SELECT COUNT(COL2) FROM TAB1 WHERE COL1 IN ('b', 'c');
→ 실행 결과는 1이다.

 

더보기

정답 : ②

해설 : ISNULL 함수는 결과값이 NULL일 경우 지정된 값을 반환한다. 칼럼의 NULL 값을 확인할 때는 ISNULL을 사용해야 한다.

 

※ NULL의 특성

- 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고. 공백은 하나의 문자이다.
- 테이볼을 생성할 때, NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
- 널 값올 포함하는 연산의 경우 결과 값도 널 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.
- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 'x' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.

 

문제 46

Q. 사원 테이블에서 MGR의 값이 7698와 같으면 NULL을 표시하고, 같지 않으면 MGR을 표시하려고 한다. 아래 SQL 문장의 (  ㄱ  ) 안에 들어갈 함수명을 작성하시오. 
SELECT ENAME, EMPNO, MGR (    ㄱ    )(MGR, 7698) as NM
FROM EMP;

 

더보기

정답 : NULLIF

해설 : NULLIF 함수는 EXPR1이 EXPR2와 같으면 NULL을, 같지 않으면 EXPR1을 리턴한다. 특정 값을 NULL로 대체하는 경우에 유용하게 사용할 수 있다. 

- NULLIF(EXPR1, EXPR2)

 

※ 단일행 NULL 관련 함수의 종류

- Oracle 함수/SQL Server 함수

일반형 함수 함수 설명
NVL(표현식1, 표현식2) /
ISNULL(표현식1, 표현식2)
- 표현식1의 결과값이 NULL이면 표현식2의 값올 출력한다.
- 단, 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다.
- NULL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다.
NULLIF(표현식1, 표현식2) 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
COALESCE(표현식1, 표현식2, ...) - 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다.
- 모든 표현식이 NULL이라면 NULL을 리턴한다.

 

문제 47

Q. 다음 중 아래 데이터를 가지고 있는 EMP_Q 테이블에서 세 개의 SQL 결과로 가장 적절한 것은?
SELECT SAL/COMM FROM EMP_Q WHERE ENAME = 'KING';
SELECT SAL/COMM FROM EMP_Q WHERE ENAME = 'FORD';
SELECT SAL/COMM FROM EMP_Q WHERE ENAME = 'SCOTT';

※ 단, SCOTT의 COMM은 NULL 값임.


① 0, NULL, NULL
② 0, 에러 발생, 에러 발생
③ 에러 발생, 에러 발생, NULL
④ 0, 에러 발생, NULL

 

더보기

정답 :

해설 : NULL이 포함된 연산의 결과는 NULL이다. 분모가 0이 들어가는 경우 연산 자체가 에러를 발생하며, 원하는 결과를 얻을 수 있다.

 

※ NULL 포함 연산의 결과

NULL + 2, 2 + NULL, NULL - 2, 2 - NULL, NULL * 2, 2 * NULL, NULL / 2, 2 / NULL 의 결과는 모두 NULL이다.

 

문제 48

Q. 다음 중 아래와 같은 데이터 상황에서 SQL의 수행 결과로 가장 적절한 것은?

 

SELECT SUM(COALESCE(C1, C2, C3))
FROM TAB1;


① 0
② 1
③ 6
④ 14

 

더보기

정답 : ③

해설 : COALESCE 함수는 첫번째 NULL이 아닌 값을 반환한다. COALESCE(C1, C2, C3)는 각 행에서 첫번째로 NULL이 아닌 값인 1, 2, 3을 반환한다. 따라서 결과의 합은 6이다.

 

문제 49

Q. 아래의 각 함수에 대한 설명 중, (  ㄱ  ), (  ㄴ  ), (  ㄷ  )에 들어갈 함수를 차례대로 작성하시오.

(    ㄱ    )(표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다.
(    ㄴ    )(표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
(    ㄷ    )(표현식1, 표현식2) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다.

 

더보기

정답 : (ㄱ) : NVL, (ㄴ) : NULLIF, (ㄷ) : COALESCE

해설 : ISNULL, NVL 함수는 표현식1의 결과값이 NULL이면 표현식2의 값을 출력하며, NULLIF 함수는 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다. COALESCE 함수는 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다.

 

※ NULL 관련 함수

- NVL(표현식1, 표현식2)

- ISNULL(표현식1, 표현식2)

- NULLIF(표현식1, 표현식2)

- COALESCE(표현식1, 표현식2, ...)

 

문제 50

Q. 다음 중 아래 각각 3개의 SQL 수행 결과로 가장 적절한 것은?
SELECT AVG(COL3) FROM TAB_A;
SELECT AVG(COL3) FROM TAB_A WHERE COL1 > 0;
SELECT AVG(COL3) FROM TAB_A WHERE COL1 IS NOT NULL;

 


① 20, 20, 20
② 20, 10, 10
③ 10, 20, 20
④ 10, 10, 10

 

더보기

정답 : ③

 

※ 집계 함수의 종류

집계 함수 사용 목적
COUNT(*) NULL 값을 포함한 행의 수를 출력한다.
COUNT(표현식) 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다.
SUM([DISTINCT | ALL] 표현식) 표현식의 NULL 값을 제외한 합계를 출력한다.
AVG([DISTINCT | ALL] 표현식) 표현식의 NULL 값을 제외한 평균을 출력한다.
MAX([DISTINCT | ALL] 표현식) - 표현식의 최댓값을 출력한다.
- 문자, 날짜 데이터 타입도 사용 가능
MIN([DISTINCT | ALL] 표현식) - 표현식의 최댓값을 출력한다.
- 문자, 날짜 데이터 타입도 사용 가능
STDDEV([DISTINCT | ALL] 표현식) 표현식의 표준편차를 출력한다.
VARIAN([DISTINCT | ALL] 표현식) 표현식의 분산을 출력한다.
기타 통계 함수 밴더별로 다양한 통계식을 제공한다.

 

728x90

 

문제 51

Q. 어느 기업의 직원 테이블(EMP)이 직급(GRADE) 별로 사원 500명, 대리 100명, 과장 30명, 차장 10명, 부장 5명, 직급이 정해지지 않은(NULL) 사람 25명으로 구성되어 있을 때, 다음 중 SQL문을 SQL1)부터 SQL3)까지 순차적으로 실행한 결과 건수를 순서대로 나열한 것으로 가장 적절한 것은?
SQL1) SELECT COUNT(GRADE) FROM EMP;
SQL2) SELECT GRADE FROM EMP WHERE GRADE IN ('차장', '부장', '널');
SQL3) SELECT GRADE, COUNT(*) FROM EMP GROUP BY GRADE;


① 670, 15, 6
② 645, 40, 5
③ 645, 15, 6
④ 670, 40, 6

 

더보기

정답 : ③

 

※ GROUP BY 문

SELECT [DISTINCT] 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식]
[HAVING 그룹조건식];

 

문제 52

Q. 아래는 어느 회사의 광고에 대한 데이터 모델이다. 다음 중 광고매체ID별 최초로 게시한 광고명과 광고시작일자를 출력하기 위하여 아래 (  ㄱ  )에 들어갈 SQL로 옳은 것은?


[SQL]

SELECT C.광고매체명, B.광고명, A.광고시작일자
FROM 광고게시 A, 광고 B, 광고매체 C,
     (    ㄱ    ) D
WHERE A.광고시작일자 = D.광고시작일자
AND A.광고매체ID = D.광고매체ID
AND A.광고ID = B.광고ID
AND A.광고매체ID = C.광고매체ID
ORDER BY C.광고매체명;


① 

SELECT D.광고매체ID, MIN(D.광고시작일자) AS 광고시작일자
FROM 광고게시 D
WHERE D.광고매체ID = C.광고매체ID
GROUP BY D.광고매체ID;


② 

SELECT 광고매체ID, MIN(광고시작일자) AS 광고시작일자
FROM 광고게시
GROUP BY 광고매체ID;


③ 

SELECT MIN(광고매체ID) AS 광고매체ID, MIN(광고시작일자) AS 광고시작일자
FROM 광고게시
GROUP BY 광고ID;


④ 

SELECT MIN(광고매체ID) AS 광고매체ID, MIN(광고시작일자) AS 광고시작일자
FROM 광고게시;

 

더보기

정답 : ②

해설 : 광고게시 테이블에서 광고매체ID별로 광고시작일자가 가장 빠른 데이터를 추출하는 SQL을 작성해야 한다.

 

※ GROUP BY 절과 HAVING 절의 특성

- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
- GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.
- 집계 함수는 WHERE 절에는 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다.)
- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.
- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.

 

문제 53

Q. 다음 중 오류가 발생하는 SQL 문장인 것은?

① 

SELECT 회원ID, SUM(주문금액) AS 합계
FROM 주문
GROUP BY 회원ID
HAVING COUNT(*) > 1;


② 

SELECT SUM(주문금액) AS 합계
FROM 주문
HAVING AVG(주문금액) > 100;


③ 

SELECT 메뉴ID, 사용유형코드, COUNT(*) AS CNT
FROM 시스템사용이력
WHERE 사용일시 BETWEEN SYSDATE - 1 AND SYSDATE
GROUP BY 메뉴ID, 사용유형코드
HAVING 메뉴ID = 3 AND 사용유형코드 = 100;


④ 

SELECT 메뉴ID, 사용유형코드, AVG(COUNT(*)) AS AVGCNT
FROM 시스템사용이력
GROUP BY 메뉴ID, 사용유형코드;

 

더보기

정답 : ④

해설 : 중첩된 그룹 함수의 경우 최종 결과값은 1건이 될 수 밖에 없기 때문에 GROUP BY 절에 기술된 메뉴ID와 사용유형코드는 SELECT 절에 기술될 수 없다.

 

문제 54

Q. 다음 중 아래와 같은 테이블 A에 대해서 SQL을 수행하였을 때의 결과로 가장 적절한 것은?
CREATE TABLE A
(
    가 VARCHAR(5) PRIMIARY KEY,
    나 VARCHAR(5) NOT NULL,
    다 INT NOT NULL
);

 


[SQL]

SELECT MAX(가) AS 가, 나, SUM(다) AS 다
FROM A
GROUP BY 나
HAVING COUNT(*) > 1
ORDER BY 다 DESC;




② 




④ 위의 SQL은 SELECT 절에 COUNT를 사용하지 않았으므로, HAVING 절에서 오류가 발생한다.

 

더보기

정답 : ②

해설 : SQL 실행 순서에 의해 HAVING 절은 SELECT 절보다 선행 처리 되기에, SELECT 절 COUNT 함수 사용 여부는 관게 없다. 위의 SQL은 나 칼럼으로 GROUP BY를 수행하였을 때 건수가 2건 이상인 데이터를 추출하여 SUM(다)DML 값이 큰 순으로 정렬하는 SQL이므로 CNT가 2이상인 것만 출력된다.

 

문제 55

Q. 다음 중 아래 SQL의 실행 겱과로 가장 적절한 것은?
SELECT ID FROM TBL
GROUP BY ID
HAVING COUNT(*) = 2
ORDER BY (CASE WHEN ID = 999 THEN 0 ELSE ID END)




② 





 

더보기

정답 : ②

해설 : GROUP BY HAVING 한 결과에 대해 정렬 연산을 하는 것이다. ID 건수가 2개이며, ORDER BY 절 CASE 문에 의해 999는 0으로 치환되고, 그 외는 ID 값으로 정렬된다.

 

※ ORDER BY 문장

  • ASC(Ascending) : 오름차순, 기본값(생략 가능)
  • DESC(Descending) : 내림차순
SELECT 칼럼명 [ALIAS명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식]
[HAVING 그룹조건식]
[ORDER BY 칼럼(Column)이나 표현식 [ASC 또는 DESC]];

 

문제 56

Q. 다음 SQL 중 오류가 발생하는 것은?

① 

SELECT 지역, SUM(매출금액) AS 매출금액
FROM 지역별매출
GROUP BY 지역
ORDER BY 매출금액 DESC;


② 

SELECT 지역, 매출금액
FROM 지역별매출
ORDER BY 년 ASC;


③ 

SELECT 지역, SUM(매출금액) AS 매출금액
FROM 지역별매출
GROUP BY 지역
ORDER BY 년 DESC;


④ 

SELECT 지역, SUM(매출금액) AS 매출금액
FROM 지역별매출
GROUP BY 지역
HAVING SUM(매출금액) > 1000
ORDER BY COUNT(*) ASC;

 

더보기

정답 : ③

해설 : GROUP BY를 사용할 경우 GROUP BY 표현식이 아닌 값은 기술될 수 없다.

 

문제 57

Q. 다음 중 ORDER BY 절에 대한 설명으로 가장 부적절한 것은?

① SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하는데 사용한다.
② DBMS 마다 NULL 값에 대한 정렬 순서가 다를 수 있으므로 주의해야 한다.
③ ORDER BY 절에서 칼럼명 대신 Alias 명이나 칼럼 순서를 나타내는 정수도 사용이 가능하나, 이들을 혼용하여 사용할 수 없다.
④ GROUP BY 절을 사용하는 경우 ORDER BY 절에 집계 함수를 사용할 수도 있다.

 

더보기

정답 : ③

해설 : ORDER BY 절에 칼럼명 대신 Alias 명이나 칼럼 순서를 나타내는 정수를 혼용하여 사용할 수 있다.

 

※ ORDER BY 절 특징

- 기본적인 정렬 순서는 오름차순(ASC)이다.

- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다.

- 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력된다.

(예: '01-JAN-2020'은 '01-SEP-2020'보다 먼저 출력된다.)

- Oracle에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.

- 반면, SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.

 

문제 58

Q. 다음 SQL의 실행 결과로 가장 적절한 것은?


[SQL]

SELECT ID, AMT
FROM TBL
ORDER BY (CASE WHEN ID = 'A' THEN 1 ELSE 2 END), AMT DESC


① 


② 




④ 

 

더보기

정답 :

해설 : CASE 절을 이용해서 원래의 정렬 순서를 변경하였다. 그래서 ID가 'A'인 것이 가장 먼저 표시되도록 하였다.

 

문제 59

Q. 다음 중 SELECT 문장의 실행 순서를 올바르게 나열한 것은?

① SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
② FROM - SELECT - WHERE - GROUP BY - HAVING - ORDER BY
③ FROM - WHERE - GROUP BY - HAVING - ORDER BY - SELECT
④ FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

 

더보기

정답 : ④

해설 : SELECT 문장의 실행 순서는 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 이다.

 

※ SELECT 문장 실행 순서

① 발췌 대상 테이블을 참조한다. (FROM)
② 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)
③ 행들을 소그룹화 한다. (GROUP BY)
④ 그룹핑된 값의 조건에 맞는 것만을 출력한다. (HAVING)
⑤ 데이터 값을 출력/계산한다. (SELECT)
⑥ 데이터를 정렬한다. (ORDER BY)

 

문제 60

Q. 아래의 팀별성적 테이블에서 승리건수가 높은 순으로 3위까지 출력하되 3위의 승리건수가 동일한 팀이 있다면 함께 출력하기 위한 SQL 문장으로 올바른 것은?


① 

SELECT TOP(3) 팀명, 승리건수
FROM 팀별성적
ORDER BY 승리건수 DESC;


② 

SELECT TOP(3) 팀명, 숭리건수
FROM 팀별성적;


③ 

SELECT 팀명, 승리건수
FROM 팀별성적
WHERE ROWNUM <= 3
ORDER BY 승리건수 DESC;


④ 

SELECT TOP(3) WITH TIES 팀명, 승리건수
FROM 팀별성적
ORDER BY 승리건수 DESC;

 

 

더보기

정답 : ④

해설 : SQL Server의 TOP N 질의문에서 N에 해당하는 값이 동일한 경우 함께 출력하도록 하는 WITH TIES 옵션을 ORDER BY 절과 함께 사용해야 한다.

 

※ TOP () 예제

사원 테이블에서 급여가 높은 2명을 내림차순으로 출력하는데, 같은 급여를 받는 사원이 있으면 같이 출력한다.
SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;

 

문제 61

Q. 다음 중 5개의 테이블로부터 필요한 칼럼을 조회하려고 할 때, 최소 몇 개의 JOIN 조건이 필요한가?

① 2개
② 3개
③ 4개
④ 5개

 

더보기

정답 : ③

해설 : 여러 테이블로부터 원하는 데이터를 조회하기 위해서는 전체 테이블 개수에서 최소 N-1개 만큼의 JOIN 조건이 필요하다.

 

문제 62

Q. 아래의 영화 데이터베이스 테이블의 일부에서 밑줄 친 속성들은 테이블의 기본키이며, 출연료가 8888 이상인 영화명, 배우명, 출연료를 구하는 SQL로 가장 적절한 것은?
배우(배우번호, 배우명, 성별)
영화(영화번호, 영화명, 제작년도)
출연(배우번호, 영화번호, 출연료)


① 

SELECT 출연. 영화명, 영화.배우명. 출연.출연료
FROM 배우, 영화, 출연
WHERE 출연료 >= 8888
AND 출연.영화번호 = 영화.영화번호
AND 출연.배우번호 = 배우.배우번호;


② 

SELECT 영화.영화명, 배우.배우명, 출연료
FROM 영화, 배우, 출연
WHERE 출연.출연료 〉8888
AND 출연.영화번호 = 영화.영화번호
AND 영화.영화번호 = 배우.배우번호;


③ 

SELECT 영화명. 배우명, 출연료
FROM 배우, 영화, 출연
WHERE 출연료〉= 8888
AND 영화번호 = 영화.영화번호
AND 배우번호 = 배우.배우번호;


④ 

SELECT 영화.영화명. 배우.배우명, 출연료
FROM 배우, 영화, 출연
WHERE 출연료 〉= 8888
AND 출연.영화번호 = 영화.영화번호
AND 출연.배우번호 = 배우.배우번호;

 

더보기

정답 : ④

해설 : 영화명과 배우명은 출연 테이블이 아니라 영화와 배우 테이블에서 가지고 와야 하는 속성이므로 출연 테이블의 영화번호와 영화 테이블의 영화번호 및 출연 테이블의 배우번호와 배우 테이블의 배우번호를 조인하는 SQL문을 작성해야 한다.

 

※ EQUI JOIN 문장

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 = 테이블2.칼럼명;    /* WHERE 절에 JOIN 조건을 넣는다. */

 

※ ANSI/ISO SQL 표준 EQUI JOIN 문장

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.칼럼명1 = 테이블2.칼럼명2;    /* ON 절에 JOIN 조건을 넣는다. */

 

문제 63

Q. 다음 중 아래에서 Join에 대한 설명으로 가장 적절한 것은?
가) 일반적으로 Join은 PK와 FK 값의 연관성에 의해 성립된다.
나)  DBMS 옵티마이저는 From 절에 나열된 테이블들올 임의로 3개 정도씩 묶어서 Join을 처리한다.
다) EQUI Join은 Join에 관여하는 테이블 간의 걸럼 값들이 정확하게 일치하는 경우에 사용되는 방법이다.
라) EQUI Join은 '=' 연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용하는 경우에는 모두 Non EQUI Join이다.
마) 대부분 Non EQUI Join을 수행할 수 있지만. 때로는 설계상의 이유로 수행이 불가능한 경우도 있다.


① 가, 다, 라

② 가, 나, 다
③ 가, 나, 다, 라
④ 가, 다, 라, 마

 

더보기

정답 : ④

해설 : DBMS 옵티마이저는 From 절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 Join을 수행한다.

 

※ 두 개 이상의 테이블 둘을 연결 또는 결합하여 데이터를 출력하는 것을 JOIN이라고 하며, 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다.

 

문제 64

Q. 다음 SQL의 실행 결과로 맞는 것은?


[SQL]

SELECT COUNT(*) CNT
FROM EMP_TBL A, RULE_TBL R
WHERE A.ENAME LIKE B.RULE;


① 0

② 2
③ 4
④ 6

 

더보기

정답 : ③

해설 : LIKE 연산자를 이용한 조인의 이해가 필요하다. SQL의 실행 결과는 다음과 같다.

EMPNO ENAME RULE
1000 SMITH S%
1100 SCOTT S%
1000 SMITH %T%
1100 SCOTT %T%

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖