문제 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) 그룹속 가장 많은 연봉
또는 영업사원반 성과금을 받기 때문에
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;
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;
문제 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 |