Certification/SQLD 개발자

[SQLD] SQLD 문제 풀이 31-40

개발자하소서 2023. 10. 14. 15:48
728x90
반응형
SMALL

 

 

📌 SQLD 문제 풀이 31- 40 

 
 
31. 아래와 같은 테이블에 SQL 구문이 실행되었을 경우 최종 출력 값을 작성하시오

 

 

BEGIN TRANSACTION 

INSERT INTO 품목(품목ID, 단가) VALUES('005', 2000) 

COMMIT 

BEGIN TRANSACTION 

DELETE 품목 WHERE 품목ID = '002'

BEGIN TRANSACTION 

UPDATE 품목 SET  단가 = 2000 WHERE 단가 = 1000

ROLLBACK 

SELECT COUNT(품목ID) FROM 품목 WHERE 단가 = 2000

 


①  0

②  2

③  3

④  4

 

더보기

정답 : ③

 

- ROLLBACK 구문은 COMMIT 되지 않은 상위의 모든 Transaction을 모두 rollback한다. 

 

- BEGIN TRANSACTION 으로 트랜잭션을 시작하고 COMMIT TRANSACTION 또는 ROLLBACK 으로  트랜잭션을 종료한다. 

 

 

- ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 수행된다. 

 

 

32. 아래의 상품 테이블의 데이터에 대해 관리자가 아래와 같이 SQL 문장을 실행하여 데이터를 변경하였다. 데이터 변경 후의 상품 ID '001'의 최종 상품명을 작성하시오. 

 

 

BEGIN TRANSACTION;

SAVE TRANSACTION SP1;

UPDATE 상품 SET 상품명 = 'LCD-TV' WHERE 상품ID = '001';

SAVE TRANSACTION SP2;

UPDATE 상품 SET 상품명 = '평면-TV' WHERE 상품ID = '001';

ROLLBACK TRANSACTION SP2;

COMMIT

 

더보기

정답 : LCD - TV 

 

- ROLLBACK TRANSACTON SP2 문장에 의해 UPDATE 상품 SET 상품명 = '평면 TV' WHERE 상품 ID = '001' 이 ROLLBACK 이 되었고, 첫 번째 UPDATE 문장만 유효한 상태에서 COMMIT되었으므로 첫번째 UPDATE한 내역만 반영이 된다, 그러므로 LCD-TV이다. 

 

- 저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK)할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라, 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다. 

 

[ORACLE]

 

-SAVEPOINT TEST1;

- ROLLBACK TO TEST1;

 

[SQL Server]

 

- SAVE TRANSATION TEST1;

- ROLLBACK TRANSACTION TEST1;

 

 

 

 

33. 아래의 ㄱ에 들어갈 내용을 적으시오 

 

 


SQL을 사용하여 데이터베이스에서 데이터를 조회할 때 원하는 데이터 만을 검색하기 위해서 SELECT , FROM 절과 함께 

      ㄱ          을 이용하여 조회되는 데이터 조건을 설정하여 데이터를 제한할 수 있다. 

 

더보기

정답 : WHERE  또는 WHERE절 

 

- WHERE 절은 SQL을 이용하여 데이터베이스로부터 데이터를 검색할 때 조회되어야 하는 데이터를 필터링하는데 사용된다. 

 

WHERE절은 FROM 절 다음에 위치하며 조건식은 아래 내용으로 구성된다. 

 

-- 칼럼명( 보통 조건식의 좌측에 위치)

-- 비교 연산자 

-- 문자, 숫자, 표현식(보통 조건식의 우측에 위치)

-- 비교칼럼명 (JOIN 사용시)

 

 

 

 

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

 

SELECT COUNT(*)

FROM EMP_TBL

WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;

 

① 0

② 1

③ 2

④ 3

 

 

더보기

정답 :  ②

- 논리 연산자의 운선순위는 NOT > AND > OR 순이다. 

 (EMPNO > 100 AND SAL >= 300 ) OR EMPNO = 200

 

 

[연산자의 우선순위]

 

(1) 괄호로 묶은 연산 

(2) 부정 연산자(NOT)

(3) 비교연산자(=,>,<,)와  SQL 비교 연산자(BETWEEN AND, IN, LIKE, IS NULL)

(4) 논리연산자 중 AND, OR 순으로 처리  

 

 

 

 

 

35. 다음 중  SELECT COL1 + COL3 FROM TAB_A; 의 결과로 가장 적절한 것은?

 

 


①  NULL  
  
②  80 10 60

③ 150

④ 50 NULL NULL 

 

더보기

정답 : ④

 

- NULL 값이 포함된 4칙 연산의 결과는 NULL이다. 

- 30 + 20 = 50

- NULL + 40 = NULL

- 50 + NULL = NULL

 

[NULL 의 연산]

 

- NULL 값과의 연산은 NULL 값을 리턴

 - NULL 값과의 비교연산(=,>,>=,<,<=)은 거짓(FALSE)을 리턴 

- 특정 값보다 크다, 적다라고 표현할 수 없음 

 

 

 

36. 다음 중 SQL 문장 중 COLUMN1의 값이 널(NULL)이 아닌 경우를 찾아내는 문장으로 가장 적절한 것은?(ANSI 표준기준)

 


① SELECT * FROM MYTABLE WHERE COLUMN1 IS NOT NULL  

②  SELECT * FROM MYTABLE WHERE COULMN1 <> NULL

③ SELECT * FROM MYTABLE WHERE COLUMN1 != NULL

④ SELECT * FROM MYTABLE WHERE COLUMN1 NOT NULL 

 

더보기

정답 : ①

 

- NULL 값을 조건절에서 사용하는 경우 IS NULL, IS NOT NULL이란  키워드를 사용하여야 한다. 

 

[부정 비교 연산자]

 

- !=  : 같지 않다 

- ^= : 같지 않다

- <> : 같지 않다 

- NOT 칼럼명 : ~와 같지 않다 

- NOT 칼럼명 > : ~보다 크지 않다 

 

 

 

 

37. 아래와 같은 DDL 문장으로 테이블을 생성하고, SQL들을 수행하였을 때 다음 설명 중 옳은 것은?

 

 

CREATE TABLE 서비스 

(
	서비스번호 VARCHAR2(10) PRIMARY KEY, 
	서비스명 VARCHAR2(100) NULL,
	개시일자 DATE NOT NULL
);


[SQL]

ㄱ) SELECT * FROM 서비스 WHERE 서비스번호 = 1;
ㄴ) INSERT INTO 서비스 VALUES ('999', '', '2015-11-11');
ㄷ) SELECT * FROM 서비스 WHERE 서비스명 = '';
ㄹ) SELECT * FROM 서비스 WHERE 서비스명 IN NULL;

 


①  서비스번호 컬럼에 모든 레코드 중에서 '001'과 같은 숫자형식으로 하나의 레코드만이라도 입력되어 있으며 ㄱ) 은 오류없이 실행된다.

②  ORACLE에서 ㄴ)과 같이 데이터를 입력했을 때, 서비스명 컬럼에 공백문자 데이터가 입력된다

③ ORACLE에서 ㄴ)과 같이 데이터를 입력하고, ㄷ)과 같이 조회하였을 떄, 데이터는 조회된다. 

④ SQL Server에서 ㄴ)과 같이 데이터를 입력하고, ㄹ) 과 같이 조회하였을 때 데이터는 조회되지 않는다. 


 

더보기

정답 : ④

 

① 서비스 번호 컬럼의 모든 레코드가 '001' 과 같은 숫자형식으로 입력되어 있어야 오류가 발생하지 않는다

② ㄴ과 같이 데이터를 입력하면, 서비스명 컬럼의 데이터에 대해서 ORACLE에서는 NULL로 입력된다,

③ ㄴ과 같이 데이터가 입력되어있을 때, ORACLE에서 데이터를 조회하려면 서비스명 IS NULL 조건으로 조회하여야 한다. 

④ ㄴ과 같이 데이터가 입력되어 있을 때, SQL Server에서 데이터를 조회하려면 서비스명 = " 로 조회하여야 한다. 

 

 

 

 

38. 아래아 같이 월별매출 테이블이 데이터가 입력되어 있다.

다음 중 2014년 11월부터 2015년 03월까지의 매출금액 합계를 출력하는 SQL 문장으로 옳은 것은?

 

 

 

(1)
SELECT SUM(매출금액) AS 매출금액함계 
FROM 월별매출 
WHERE 년 BETWEEN '2014' AND '2015'
AND 월 BETWEEN '03' AND '12';

(2)
SELECT SUM(매출금액) AS 매출금액함계 
FROM 월별매출 
WHERE 년 IN ('2014', '2015')
AND 월 IN ('11', '12', '03', '04', '05');

(3)
SELECT SUM(매출금액) AS 매출금액함계 
FROM 월별매출 
WHERE (년 = '2014' OR  '2015')
AND ( 월 BETWEEN '01' AND '03' OR 월 BETWEEN '11' AND '12');

(4)
SELECT SUM(매출금액) AS 매출금액함계 
FROM 월별매출 
WHERE 년 '2014' AND 월 BETWEEN '11' AND '12'
OR 년 = '2015' AND 월 BETWEEN '01'  AND '03';

 

더보기

정답 : ④

 

① 의 조건은 2014년 03월부터 12월까지의 매출금액과 2015년 03월부터 2013년 12월까지의 매출금액의 합이다

② 의 조건은 ① 의 조건과 동일하다 

③ 의 조건은 2014년 01월부터 12월까지의 매출금액과 2015년 01월부터 12월까지의 매출금액의 합이다. 즉, 전체 데이터의 합이다.  

④ 의 조건은 2014년 11월 부터 2015년 03월까지의 매출금액의 합이며, 연산자의 우선순위(AND > OR) 에 의해 괄호가 없어도 된다 

 

 

[BETWEEN a AND b]

 

- a와 b 값 사이에 있으면 된다( a와 b 값이 포함됨)

 

[IN(list)]

 

- 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다. 

 

 

 

 

 

39. 아래 테이블 스키마를 참조하여 SQL문장을 작성하였다. 다음 중 결과가 다른 SQL 문장은?

 

 

 

① SELET SVC_ID, COUNT(*) AS CNT 
	FROM SVC_JOIN
    WHERE SVC_END_DATE >= TO_DATE('20150101000000' , 'YYYYMMDDHH24MISS')
    AND SVC_END_DATE = TO_DATE ('20150131235959' , 'YYYYMMDDHH24MISS')
    AND CONCAT (JOIN_YMD, JOIN_HH) = '2014120100'
    GROUP BY SVC_ID;


② SELET SVC_ID, COUNT(*) AS CNT 
	FROM SVC_JOIN
    WHERE SVC_END_DATE >= TO_DATE('20150101' , 'YYYYMMDD')
    AND SVC_END_DATE = TO_DATE ('20150201' , 'YYYYMMDD')
    AND CONCAT (JOIN_YMD, JOIN_HH) = ('2014120100', '00'))
    GROUP BY SVC_ID;


③  SELET SVC_ID, COUNT(*) AS CNT 
	FROM SVC_JOIN
    WHERE '20150101' = TO_CHAR(SVC_END_DATE, 'YYYYMM')
    AND JOIN_YMD = '20141201'
    AND JOIN_HH = '00'
    GROUP BY SVC_ID;


④ SELET SVC_ID, COUNT(*) AS CNT 
	FROM SVC_JOIN
    WHERE TO_DATE('20150101' = 'YYYYMM') = SVC_END_DATE
    AND JOIN_YMD ||  JOIN_HH = '2014120100'
    GROUP BY SVC_ID;

 

 

더보기

정답 :  ④

 

- 1,2,3번 SQL은 모두 가입이 2014년 12월 01일 00시에 발생하였고

  서비스 종료일시가 2015년 01월 01일 00시 00분 00초와

  2015년 01월 01일 23시 59분 59초 사이에 만료되는 데이터를 찾는 조건이지만, 

 

- 4번 SQL은 가입 조건은 동일하지만,

  서비스 종료일자가 2015년 01월 01일 00시 00분 00초에 종료되는 SQL 을 찾는 조건이다. 

 

- CONCAT(A,B) 는 A,B 를 그대로 이어주는 것이다. 

 

- 4번의 TO_DATE('201501' , 'YYYYMM') = END_DATE 일 경우, '201501'을 DATE 타입으로 변환하기 때문에 

2015/01/01 00:00:00이 종료일이 된다. 

 

- 3번의 '201501' = TO_CHAR(END_DATE, 'YYYYMM')일 경우, 종료일을 YYYYMM 형식인 문자열로 변환하니까 

2015년 01월에 포함되는 날짜는 모두 해당되게 된다. 

 

- TO_DAATE('201501', 'YYYYMM') 은 

2015년 01월의 한달기간을 의미하는 것이 아니라, 

2015년 01월 01일 00시 00분 00초의 순간을 의미하는 것이다. 

 

-  

 

 

 

 

 

40. 아래와 같은 내장 함수에 대한 설명 중에서 옳은 것을 모두 묶은 것은?

 

 


(가) 함수의 입력 행수에 따라 단일행 함수와 다중행 함수로 구분할 수 있다.

(나) 단일행 함수는 SELECT , WHERE, ORDER BY, UPDATE의 SET절에 사용이 가능하다

(다) 1:M 관계의 두 테이블을 조인할 경우 M쪽에 다중행이 출력되므로 단일행 함수는 사용할 수 없다.

(라) 단일행 함수는 다중행 함수와 다르게 여러 개의 인수가 입력되어도 단일값 만을 반환한다. 

 


① 가

② 가, 나 

③ 가. 나. 다

④ 가, 나, 다, 라

 

더보기

정답 : ②

 

- 다) 1:M 조인이라 하더라 M쪽에서 출력된 행이 하나씩 단일행 함수의 입력값으로 사용되므로 사용할 수 있다. 

- 라) 다중행 함수도 단일행 함수와 동일하게 단일 값만을 반환한다. 

 

- 함수는 벤더에서 제공하는 내장함수(Built-in Function)와 사용자가 정의할 수 있는 함수(User Defined Function)로 나눌 수 있다. 

 

- 내장 함수는 다시 단일행 함수와 다중행 함수로 나눌 수 있다. 

 

- 다중행 함수는 집계함수, 그룹함수, 윈도우 함수로 구분된다. 

 

728x90
반응형
LIST

'Certification > SQLD 개발자' 카테고리의 다른 글

[SQLD] 1단원 1-10문제  (0) 2023.11.13
[SQLD] SQLD 문제 풀이 41-50  (1) 2023.10.14
[SQLD] SQLD 문제 풀이 21-30  (1) 2023.10.11
[SQLD] SQLD 문제 풀이 11-20  (0) 2023.10.10
[SQLD] SQLD 문제 풀이 1-10  (1) 2023.10.09