SQL 시험
October 05, 2018
3,4,8,9번 문제 틀림
문제1.
각 부서별 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내는 SELECT문을 작성하시오
select dept_id, avg(salary)
from s_emp
group by dept_id
having avg(salary) >= 2000
;
문제2.
각 직책(s_emp.title)별로 급여(s_emp.salary)의 총합을 구하되 직책이 사원인 사람은 제외하시오. 단, 급여총합이 3000이상인 직책만 나타내며, 급여 총합에 대한 내림차순으로 정렬하시오.
select title, sum(salary)
from s_emp
where title <> '사원'
group by title
having sum(salary) >= 3000
order by 2 desc
;
문제3.
직급(s_emp.title)이 ‘부장’(영업부장, 지부장 포함)인 사람이 2명 이하인 부서(s_emp.dept_id)가 몇개인지 나타내는 SELECT문을 작성하시오.
select count(*)
from (select dept_id, count(*)
from s_emp
where title like '%부장'
group by dept_id
having count(*) <= 2)
;
문제4.
담당직원(s_customer.sales_rep_id)이 배정되지 않은 고객(s_customer.name)을 모두 나타내는 select문을 작성하시오.
select e.name 직원, c.name 고객
from s_emp e, s_customer c
where e.id (+) = c.sales_rep_id
and e.id is null;
;
문제5. Primary Key와 Foreign Key에 대해서 아는대로 적으시오.
Primary Key | Foreign Key |
---|---|
각 행을 구별할 수 있는 컬럼(들) | 다른 테이블의 Primary Key 컬럼 |
Not Null + Unique. 인덱스 자동생성 | Null이거나 PK값 중의 하나이어야 한다 |
문제6.
COUNSTRAINT의 종류를 모두 적으시오
Not Null Unique Primary Key Foreign Key Check
문제7.
자동으로 고유한 숫자값을 생성해주며 주로 기본키 값을 생성하기 위해 사용하는 object는?
시퀀스
문제8.
전체 임직원 중에서 연봉이 제일 높은 사람 3명의 이름과 연봉을 출력하는 문장을 작성하시오.
select *
from (select name, salary
from s_emp
order by salary desc)
where rownum <= 3
;
문제9.
인덱스를 생성하기에 적절한 경우를 모두 고르시오
- 조건절이나 조인에서 자주 사용되는 컬럼
- 컬럼이 넓은 범위의 값을 가질 때
- NULL값이 많은 컬럼
- 테이블에 데이터가 많고, 조회되는 행이 전체의 10~15%일 때
1,2,3,4 모두 정답
문제10.
아래의 SQL문은 비효율적이다.(s_emp.title에 인덱스가 작성되어 있다고 가정) 이 문장을 NOT EXISTS를 사용해서 효율적으로 작성하시오.
select id, name, title from s_emp
where title <> '사원'
;
답
select id, name, title
from s_emp e
where not exists (select 'X'
from s_emp
where e.title = '사원')
;