1. 다음 중 아래와 같은 2건의 데이터 상황에서 SQL의 수행 결과로 가장 적절한 것은?
TAB1
ROWNUM | C1 |
1 | A (줄바꿈) A |
2 | B (줄바꿈) B (줄바꿈) B |
SELECT SUM(CC)
FROM (
SELECT(LENGTH(C1) -
LENGTH(REPLACE(C1,CHAR(10))) +1) CC
FROM TAB1
)
3 - 2 + 1 = 2
5 - 3 + 1 = 3
답 : 5
2. 다음 오라클 환경에서 날짜형 데이터를 다룰 경우, 아래 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
+1 : 하루가 더해짐
+1 /24 : 60분
60분 / 6 = 10분
답 : 2015.01.10 10:10:00
3. 아래는 SEARCHED_CASE_EXPRESSION SQL 문장이다. 이 때 사용된 SEARCHED_CASE_EXPRESSION은 SIMPLE_CASE_EXPRESSION을 이용해 똑같은 기능을 표현할 수 있다. 아래 SQL문장의 ㄱ 안에 들어갈 표현을 작성하시오. (스칼라 서브쿼리는 제외함)
스칼라 서브쿼리
- select 절에서 사용하는 서브쿼리
- 'scalar'는 한 번에 한가지만 처리하는' 이라는 뜻으로, 스칼라 서브쿼리에 의해 나오는 결과는 하나의 행이어야 한다.
SELECT *,
(SELECT DEPT_NAME FROM DEPARTMENTS D WHERE D.DEPT_ID = E.DEPT_ID) --스칼라 서브쿼리
FROM EMPLOYEES E;
--SEARCHED CASE EXPRASSION
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 YORK' THEN 'EAST'
4. 팀별 포지션별 FW, MF, DF, GK 포지션의 인원수와 팀별 전체 인원수를 구하는 SQL을 작성할 때 결과가 다른 것은?
(보기 1은 SQL server 환경이고, 나머지는 ORACLE 환경이다.)
--1
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;
--2
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;
--3
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;
--4
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
5. 다음 중 아래 TAB1 을 보고 각 SQL 실행결과를 가장 올바르게 설명한 것을 고르시오
COL1 | COL2 |
a | NULL |
b | '' |
c | 3 |
d | 4 |
e | 3 |
1) SELECT COL2 FROM TAB1 WHERE COL2 = '' ▶︎ 공집합 빈 공백 값 1건이 조회된다
2) SELECT ISNULL(COL2, 'X') FROM TAB1 WHERE COL1 = 'a' ; ▶︎ 'X'
3) SELECT COUNT(COL1) FROM TAB1 WHERE COL2 = NULL; ▶︎ 1 COL2 IS NULL로 조회해야 함
4) SELECT COUNT(COL2) FROM TAB1 WHERE COL1 IN ('b','c') ▶︎ 1 2
6. 사원 테이블에서 MGR의 값이 7698과 같으면 NULL을 표시하고, 같지 않으면 MGR을 표시하려고 한다.
▶︎ SELECT ENAME, EMPTNO, MGR, NULLIF(MGR, 7698) AS NM FROM EMP
7. 다음 중 아래 데이터를 가지고 있는 EMP_Q테이블에서 세개의 SQL결과로 가장 적절한 것은?
SELECT SAL/COMM FROM EMP_Q WHERE ENAME = 'KING'; ▶︎ 0
SELECT SAL/COMM FROM EMP_Q WHERE ENAME = 'FORD'; ▶︎ error : 0으로 나누면 안된다
SELECT SAL/COMM FROM EMP_Q WHERE ENAME = 'SCOTT'; ▶︎ null : null 연산은 무조건 null
EMP_Q
ENAME(문자타입) | SAL(숫자타입) | COMM(숫자타입) |
KING | 0 | 300 |
FORD | 5000 | 0 |
SCOTT | 1000 | null |
8. 다음 중 아래와 같은 데이터 상황에서 SQL의 수행 결과로 가장 적절한 것은?
C1 | C2 | C3 |
1 | 2 | 3 |
2 | 3 | |
3 |
SELECT SUM(COALESCE (C1,C2,C3)) FROM TAB1;
COALESCE 함수는 인자로 주어진 컬럼들 중에서 null이 아닌 첫 번째 값을 반환하는 함수이다.
1 + 2 + 3 = 6
코우얼레스
9.
ISNULL(표현식1, 표현식2) : 표현식1의 결과값이 null이면 표현식 2의 값을 출력한다.
NULLIF(표현식 1, 표현식 2) : 표현식 1이 표현식 2와 같으면 null, 같지 않으면 표현식 1을 리턴
COALESCE(표현식1,표현식2) : 임의의 개수 표현식에서 null이 아닌 최초의 표현식을 나타낸다.
10. 다음 중 아래 각각 3개의 SQL 수행 결과로 가장 적절한 것은?
집계함수를 사용하면 null값을 제외하고 연산해준다
SELECT AVG(COL3) FROM TAB_A; ▶︎ (20+0)/2 = 10
SELECT AVG(COL3) FROM TAB_A WHERE COL1 > 0; ▶︎ 20/1 = 20
SELECT AVG(COL3) FROM TAB_A WHERE COL1 IS NOT NULL; ▶︎ 20 / 1 = 20
COL1 | COL2 | COL3 |
30 | NULL | 20 |
NULL | 40 | 0 |
0 | 10 | NULL |
'Database > SQLD' 카테고리의 다른 글
SQLD 문제 풀이 7 (0) | 2023.05.15 |
---|---|
SQLD 문제 풀이 6 (0) | 2023.05.15 |
SQLD 문제 풀이 4 (0) | 2023.05.11 |
SQLD 문제 풀이 3 (0) | 2023.05.10 |
SQLD 문제풀이 2 (0) | 2023.05.10 |
댓글