문제/SQL

231024 Oracle SQL 필기 TEST's 오답노트

잇꼬 2023. 10. 24. 17:18
728x90
반응형
SMALL

1. 다음 SELECT 문장에서 Column Header 로 출력되는 것은? 

SELECT employee_id, first_name||last_name "Employee Name"
FROM employees;

 

① employee_id, employee name
② Employee_id, Employee Name
③ EMPLOYEE_ID, Employee Name
④ EMPLOYEE_ID, EMPLOYEE NAME

 

 

'내 멋대로'의 해설) 

'Column Header' 는 실행창에서의 출력되는 컬럼이다. 
1. 컬럼은 대·소문자 구분을 하지 않는다.
2. 컬럼의 별칭의 경우에는 대·소문자 구분을 한다. 단, 어떻게 쓰느냐에 따라 다르다. 

    별칭에 큰따옴표를 쓰게 되면 쓰게 된 글자 그대로 출력된다.

 

SELECT
	'emp' emp, 'dept' "dept"
FROM dual;

 

2. 다음 QUERY의 결과는 몇개의 column인가? 

SELECT 'a'||'b'||'C' "Result" 
FROM dual;

① 1
② 3

 

'내 멋대로'의 해설) 

해당 Query 문에서 는 , 없이 || 와 문자형으로 나열되어 있다.

그것은 컬럼명은 "Result" 로 출력해주고 그의 값은 abC 로 해달라는 것이다. 

 

3. 중복 행을 제거 할 때 사용하는 키워드는? 

① ALL
② DISTINCT
③ NVL
④ COALESCE

 

'내 멋대로'의 해설) 

중복행을 제거하는 키워드는 'distinct''unique' 가 있다.

 

4. SELECT문의 기능이 아닌 것은? 


① 열단위 추출를 프로젝션(PROJECTION)이라고 한다.
② 행단위 추출를 선택(SELECTION)이라고 한다.
③ 서로 다른 테이블에서 내가 원하는 데이터를 추출하는 작업을 조인(JOIN)이라고 한다.
④ 새로운 데이터를 입력하는 기능이다. 

 

'내 멋대로'의 해설) 

새로운 데이터를 입력하는 기능은 'INSERT' 문 이다.

 

5. SQL문 작성시 틀린 것은? 

 

① SQL문은 대소문자를 구분하지 않습니다.
② 절은 일반적으로 서로 다른줄에 씁니다. 
③ 키워드는 약어로 사용할 수 있습니다.
④ 들여쓰기를 사용하면 SQL문을 좀더 읽기 쉽게 작성할 수 있습니다.

 

'내 멋대로'의 해설) 

1. 키워드는 약어로 사용할 수 없다. 

2. SQL문은 대소문자를 구분하지 않으나 성능의 차이가 있을 수 있어 구분되게 작성하는 것이 좋다.

 

6. 아래의 SELECT문은 부서번호로 sort하기를 원한다.  ( )에 사용하기에 적당한 것들은  (세 가지)? 

SELECT employee_id, last_name, department_id as dept_id 
FROM employees   
ORDER BY (   );

 

① employee_id
② department_id
③ dept_id
④ 2
⑤ "Dept_id"
⑥ 3

 

'내 멋대로'의 해설) 

1. department_id 는 부서번호의 컬럼명이다. 

2. dept_id 는 부서번호의 별칭이다. 

3. 3 은 컬럼의 위치가 3번째로 사용 가능하다.

 

7. 문자함수에 대한 설명이 틀린것은 ? 


① length : 문자 길이를 반환하는 함수
② upper : 대문자로 변환하는 함수
③ replace : 문자를 추출하는 함수 / 문자를 치환하는 함수
④ instr : 문자의 위치값을 반환하는 함수

 

'내 멋대로'의 해설) 

1. replace 는 문자를 치환하는 함수이다.

2. substr 가 문자를 추출하는 함수이다.

 

8. 다음 문장을 실행한 결과로 맞는 것은? 

SELECT ROUND(45.926,2) 
FROM  DUAL;

① 45.92
② 45.93
③ 45
④ 46

 

'내 멋대로'의 해설) 

ROUND() 함수는 지정된 소수점 자릿수 값을 반올림 하는 함수이다.

 

9. 다음 중 어떤 함수가 IF-THEN-ELSE 문장과 유사한가? 

 

① SQRT
② DECODE
③ NEW_LINE
④ NVL

 

'내 멋대로'의 해설) 

1. IF-THEN- ELSE : DECODE 함수로써, 기준값과 비교값을 내부적으로 같다(=)라는 비교연산자를 사용한다.

2. SQRT : 루트 라는 함수

3. NVL : NULL 값을 실제값으로 대처하는 함수

   IF-NULL THEN RETURN - ELSE- RETURN 

 

10. 아래의 문장을 실행할 때 last_name = 'King', salary = 1000, commission_pct = NULL, hiredate = NULL 인 경우 결과는? 

SELECT  last_name, (salary + commission_pct ) * 12, NVL(hiredate, '2001-01-01')  
FROM employees;


① King,       1000,                 
② King,      12000,  2001-01-01  
③ King,           ,  2001-01-01  
④ King,           ,  

 

'내 멋대로'의 해설) 

처음에는 문제의 뜻을 이해하지 못해서, 다른 문제들을 다 풀고나서 마지막에 푼 문제이다..!

알고보니 해당 문장에 저 DATA 를 넣게 되면 어떻게 되는지에 대한 문제인 것이다! 

1. last_name = 'King' 을 넣으면 그대로 출력,

2. salary = 1000 과 commission_pct = NULL 을 두번째 컬럼인

    (salary + commission_pct)*12 = ( 1000 + NULL)*12 → NULL 값은 값이 없으므로 ()안에 값이 없어 NULL 값으로 출력,

3. hiredate = NULL 을 넣으면 NVL(hiredate, '2001-01-01') = NVL( NULL, '2001-01-01') 이고, NVL()함수는 NULL값을

   다음 값으로 출력하는 함수이다. 그러므로, '2001-01-01' 으로 출력

 

11. 다음 SQL 명령문에서 ERROR가 발생하는 행의 번호는? 

① SELECT   e.employee_id,
② employees.last_name,
③ e.department_id,
④ d.department_id
⑤ FROM employees e, departments d 
⑥ WHERE e.department_id = d.department_id ;

 

'내 멋대로'의 해설) 

SELECT e.employee_id,
employees.last_name,
e.department_id,
d.department_id
FROM employees e, departments d 
WHERE e.department_id = d.department_id ;

해당 SQL 문을 SQL Developer 로 돌리면 한 번에 알 수 있지만!

FROM 절에 보면 테이블명에 뒤에 별칭으로 e , d 로 지정을 해줬다. 

그렇다면, 그에 맞춰서 e.컬럼명, d.컬럼명으로 작성해야 한다. employees.last_name → e.last_name 으로 수정하면 error 나지 않는다.

 

12. 다음 SQL 명령문에서 ERROR가 발생하는 행의 번호는? 

 

① SELECT department_id, sum(salary)  "Salary"
② FROM  employees
③ GROUP BY department_id
④ WHERE sum(salary) > 10000;

 

'내 멋대로'의 해설) 

WHERE 절에는 그룹함수인 SUM()을 쓸 수 없다!

 

13. 모든 DATATYPE 에 가능한 GROUP 함수들은(세 가지)?

① AVG
② MIN
③ MAX
④ COUNT
⑤ STDDEV 
⑥ VARIANCE
⑦ SUM

 

'내 멋대로'의 해설) 

1. DATA TYPE : MIN, MAX, COUNT 

2. 모든 TYPE : AVG, STDDEV, VARIANCE, SUM

 

14. 암시적 commit이 발생하는 경우는? (다섯개)

① select * from employees ;     
② insert into test(id,name) values (1,'james');
③ create table x as select * from employees;    
④ SQL*PLUS의 종료 시(exit)
⑤ delete from emp;      
⑥ revoke select on test_tbl from hr;
⑦ grant select on test_tbl to hr;          
⑧ alter table test_tbl modify  last_name not null;

 

'내 멋대로'의 해설) 

1. CREATE TABLE

2. SQL*PULS의 종료

3. REVOKE 문 (권한 회수)

4. GRANT (권한 부여)

5. ALTER TABLE - MODIFY : 사이즈 및 타입 변형

 

15. 날짜 계산의 결과가 틀린 것은? 

 

① DATE + NUMBER = DATE     
② DATE - NUMBER = DATE
③ DATE - DATE   = NUMBER    
④ DATE + DATE   = DATE

 

'내 멋대로'의 해설)

1. DATE + NUMBER = DATE

2. DATE - NUMBER = DATE

3. DATE - DATE = NUMBER

4. DATE + DATE = X

5. DATE + TIME = DATE TIME

6. DATE - TIME = DATE TIME

 

16. 다음 문장을 실행하는 경우 서브쿼리내에 NULL값이 포함되어 있다면 메인쿼리의 실행결과는 어떻게 되겠는가? 

SELECT last_name
FROM   employees 
WHERE  emp.employee_id NOT IN
                             (SELECT manager_id
                              FROM   employees);


① no rows selected
② 정상적 수행

 

'내 멋대로'의 해설) 

WHERE절에 emp.employee_id 이 부적합한 식별자이다. 

출력이 되기 위해서는

1) 'emp.' 을 없애기.

2) FROM 절에 있는 employees 테이블의 별칭을 emp 로 지정해 준 다음에 SELECT 절 emp.last_name 로 수정하면 출력 된다.

 

17. 서브쿼리의 결과 집합에 행이 있는지 여부를 검사하여 행이 있으면 TRUE를 반환하는 연산자는? 

① NOT IN
② EXISTS
③ NOT EXISTS
④ ALL

 

'내 멋대로'의 해설) 

문제에서도 확인이 되었듯이 '서브쿼리의 결과 집행에 행이 있는지 여부' 를 보는 것은 EXISTSNOT EXISTS 뿐이다.

그 와중에 뒷 문장을 보면 'TRUE' 를 반환해야 하는 EXISTS  이다.

 

18. 두 날짜 간의 달수를 반환하는 함수는? 


① MONTHS_BETWEEN
② ADD_MONTHS 
③ NEXT_DAY 
④ LAST_DAY

 

'내 멋대로'의 해설)

1. ADD_MONTHS : 달수를 더하거나 뺴는 함수 

2. NEXT_DAY : 입력한 날짜를 기준으로 찾고자 하는 '요일'의 첫 번째 날짜를 반환하는 함수

3. LAST_DAY : 기준 날짜 달의 마지막 날짜를 리턴하는 함수

 

19. 다음 문장이 하는 일은? 

ALTER TABLE emp MODIFY (title VARCHAR2(20));


① emp table에 title column을 추가한다.
② emp table에 title column의 TYPE과 SIZE를 변경한다.
③ emp table에 title column의 제약조건을 삭제한다.
④ emp table에 title column의 제약조건을 추가한다

 

 

'내 멋대로'의 해설) 

MODIFY : 컬럼의 타입과 사이즈를 변경할 수 있는 함수이다. 

1.제약조건 삭제

    - ALTER TABLE emp DROP CONSTRAINT 제약조건 컬럼명;

    - ALTER TABLE emp DROP PRIMARY KEY;

2. 제약조건 추가

   - ALTER TABLE emp ADD CONSTRAINT 제약조건컬럼명 UNIQE(제약조건 걸 컬럼명);

 

20. 다음의 SQL 명령문을 순서대로 실행했을 때 database에 영구적으로 반영되는 문장은? 

1) INSERT INTO employees (employee_id, last_name, department_id) VALUES (9999, ‘Smith’, 10);
2) DELETE employees WHERE employee_id = 100;
3) UPDATE employees SET last_name = ‘Clark’;
4) ROLLBACK;
5) INSERT INTO employees (employee_id, last_name, department_id) VALUES (8888, ‘Thomas’, 30);
6) DELETE employees WHERE department_id = 20;
7) COMMIT;

 

① 1, 2, 3번
② 1, 2, 3, 5, 6번
③ 4, 7번
④ 5, 6번

 

'내 멋대로'의 해설)

ROLLBACK : 영구히 복구(그 전의 상태로 되돌아가기)

COMMIT : 영구히 저장(transaction 시작시점부터 저장) 

728x90
반응형
LIST

'문제 > SQL' 카테고리의 다른 글

231026 PL/SQL 복습 겸 문제  (1) 2023.10.26
231024 Oracle SQL 실기 TEST's 오답노트  (0) 2023.10.24
231018 복습 겸 문제  (0) 2023.10.18
23.10.17. Class 복습 겸 문제  (1) 2023.10.17
23.10.16. Class 복습 겸 문제  (0) 2023.10.16