본문 바로가기

DB

데이터베이스 2장(2010/8/23) 오후수업


문제 1)
커미션을 받는 사원 중에서 2000년 이후 입사한 사원의 정보를 얻어 보자

결과> 사원번호, 이름,입사일자, 직무아이디

SELECT employee_id
              , first_name
              , job_id
              , hire_date
FROM employees
WHERE (commission_pct  IS NOT NULL)
AND EXTRACT(YEAR FROM hire_date) >= 2000;

NULL의 비교는 =NULL이 아니라
                      IS NULL이라고 한다.
또는 영업사원반 성과금을 받기 때문에
WHERE job_id LIKE 'SA%'
AND EXTRACT(YEAR FROM hire_date) >= 2000;

이렇게 직무로 가지고 올 수도 있다.

문제 2)
영업직이 아닌 사원 중에서 급여를 5000 이하로 받는 사원의 정보를 얻어보자.

결과 > 영원번호, 이름, 급여, 직무아이디

SELECT employee_id
              , first_name
              , job_id
              , hire_date
FROM employees
WHERE job_id !='SA_MAN'AND job_id != 'SA_REP'
AND salary <=5000;

이거의 긍정은 WHERE (job_id = 'SA_MAN OR job_id = 'SA_REP') AND salary<=5000;


또는
WHERE job_id  NOT LIKE 'SA%'
AND salary <=5000;
LIKE는 %랑같이 써준다.

또는
WHERE job_id NOT IN ('SA_MAN','SA_REP')
AND salary <=5000;
만약에 IN을 써줬을때는 풀 네임을 다 써야 한다.

그룹 만들기(그룹을 나누고 나누어진 구룹의수를 보여줌)
SELECT
(GROUP By
HAVING)
SELECT  job_id
             ,COUNT(*)             --aggregate Function   그 그룹에 속한 수
             ,AVG(salary)             그 그룹에 대한 평균
             ,MIN(hire_date)          그롭속에서 가장 일찍 입사한 년도
             ,MAX(salary)             그룹속 가장 많은 연봉
FROM employees
WHERE job_id !='SA_MAN'AND job_id != 'SA_REP'
AND salary <=5000
GROUP BY job_id;      그룹 만들기


               
SELECT  job_id
                ,COUNT(*)
                ,AVG(salary)
                ,MAX(salary)
                ,MIN(hire_date)
FROM employees
WHERE job_id !='SA_MAN'AND job_id != 'SA_REP'
AND salary <=5000
GROUP BY job_id;
HAVING COUNT(*)>=10;          이것은 10명 이상인 것만 보자~이것이다.



문제 3)
마케팅 관련 직무를 담당하는 사원을 대상으로 입사연도별 입사자의 수를 얻어보자.
결과>직무아이디, 입사인원수

SELECT hire_date
              ,COUNT(*)
FROM employees
WHERE job_id LIKE ('MK%')
GROUP BY  hire_date;

문제 4)
관련 무를 담당하는 사원을 대상으로 입사연도별 입사자의 수를 얻어보자.
결과>직무아이디, 입사인원수
SELECT EXTRACT (YEAR FROM hire_date)
               ,COUNT(*)
FROM employees
--WHERE job_id LIKE 'PU%'
WHERE job_id IN('PU_MAN','PU_CLERK')
GROUP BY  EXTRACT (YEAR FROM hire_date);

만약에
SELECT 에서 직무아이디와, 이름을 만약에 썼을때는 GROUP BY 절에서는 쓰면 에러가 된다.
못본다 이거지


문제 5)
구매 관련 직무를 담당하는 사원을 대상으로 1차 직무아이디 , 2차 연도별로 분류하여 입사자의 수를 얻어보자.
결과>직무아이디, 입사연도, 입사인원수

SELECT job_id
              , EXTRACT (YEAR FROM hire_date)
             ,COUNT(*)
             
FROM employees
WHERE job_id LIKE 'SA%'
GROUP BY job_id, EXTRACT (YEAR FROM hire_date)
ORDER BY job_id;



'DB' 카테고리의 다른 글

- 2 일차 SQL 과제 –  (0) 2010.08.25
DB 3일차 오전  (0) 2010.08.25
DB 2일차 오전  (0) 2010.08.24
- 1 일차 SQL 과제 –  (0) 2010.08.23
데이터베이스 2장(2010/8/23) 오전수업  (0) 2010.08.23