CP

[SQL] 예제로 정리하기

효니K 2019. 4. 19. 16:56
반응형


--1. 부서별 평균 급여를 구하되, 평균 급여가 2000이상인 부서만 나타내는 select문
select dept_id, avg(salary) from s_emp
group by dept_id
having avg(salary)>=2000;

--2. 각 직책별로 급여의 총합을 구하되 직책이 사원인사람은 제외
--단, 급여총합이 3000이상인 직책만 나타내며, 급여총합에 대한 내림차순으로 정렬
select title, sum(salary) from s_emp
where title <>'사원'
group by title
having sum(salary) >=3000
order by 2 desc;

--3.직급이 부장인 사람이 2명이하인 부서가 몇개인지 나타내시오
select count(*) from (select dept_id, count(*) from s_emp
where title like '%부장' group by dept_id having count(*) <=2);

--4.담당직원이 배정되지 않은 고객을 모두 나타내시오
select c.*,e.id, e.name 담당자이름 from s_emp e, s_customer c
where e.id (+)= c.sales_rep_id  and e.id is null;

--5.
--pk: 각 행을 구별할 수 있는 키, not null, 중복 x, 자동으로 index생성
--fk: 다른 테이블의 pk

--6. constraint 종류(5가지)
--not null, unique, pk, fk, check

--7.자동으로 고유한 숫자값을 생성해주며 주로 기본키 값을 생성하기 위해 사용하는 object
--> sequence

--8.전체 임직원 중에서 연봉이 제일 높은 사람 3명의 이름과 연봉을 출력하는 문장을 작성
select name, salary from s_emp
where rownum<=3 order by 2 desc;

--9.인덱스 생성하기에 적절한 경우
--조건절이나 조인에서 자주 사용되는 컬럼,
--컬럼이 넓은 범위의 값을 가질 떄
--null값이 많은 컬럼
--테이블에 데이터가 많고, 조회되는 행이 전체의 10~15%일 때

--10. SELECT * FROM S_EMP WHERE TITLE <> '사원'; -> 비효율적이다. NOT EXISTS를 사용해서 효율적으로 작성하시오
SELECT * FROM S_EMP E WHERE NOT EXISTS (SELECT 'X' FROM S_EMP WHERE E.TITLE ='사원');

반응형