본문 바로가기
Database/SQL

[SQL] 공부 Review

by 나비와꽃기린 2015. 1. 30.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

▶▶▶ employee 테이블에서 입사  달 별로 인원수를 조회하시오 

 

SELECT

TO_CHAR(hire_date,'MM')||'월' AS 월,

COUNT(*)  직원수

FROM employees

GROUP BY TO_CHAR(hire_date,'MM')

ORDER BY 월;

 

|| 숫자에다가 글 붙이는?

알리아스로 정렬 가능.

 

▶▶▶각 부서별로 가장 많은 급여를 받는 직원의 부서명, 이름, 급여정보를 출력하시오.

 

SELECT

d.department_name 부서이름,

e.first_name 사원이름,

e.salary 급여

FROM employees e,departments d

WHERE e.department_id=d.department_id

 AND (e.salary,d.department_name) IN (SELECT                

MAX(e1.SALARY),d1.department_name

FROM employees e1,departments d1

WHERE e1.department_id=d1.department_id

 

GROUP BY d1.department_name);

 

 

 

▶▶▶ 부서별 직원들의 최대, 최소, 평균급여를 조회하되

평균급여가 IT부서의 평균급여보다 많고 Sales 평균보다 적은 부서 정보만 출력하시오.

 

SELECT

d.department_name,

MAX(e.salary),

MIN(e.salary),

AVG(e.salary)

FROM employees e,departments d

WHERE e.department_id=d.department_id

GROUP BY d.department_name

HAVING AVG(e.salary)>(SELECT

AVG(e1.salary)

FROM employees e1,departments d1

WHERE e1.department_id=d1.department_id

AND d1.department_name='IT')

           AND AVG(e.salary)<(SELECT

AVG(e2.salary)

FROM employees e2,departments d2

WHERE e2.department_id=d2.department_id

 

AND d2.department_name='Sales');

 

 

 

▶▶▶ 각 부서별로 직원이 한명만 있는 부서만 조회.

단 직원이 없는 부서에 대해서는 '<신생부서>' 라는 문자열 출력되도록 하고

출력결과는 내림차순으로 정렬.

 

SELECT

NVL(d.department_name,'<신생부서>') 부서명,

count(*) 직원수

FROM employees e,departments d

WHERE e.department_id=d.department_id(+)

GROUP BY d.department_name

HAVING count(*)=1

ORDER BY d.department_name DESC NULLS LAST;

 

 

▶▶▶ 부서별 입사월별 직원수를 출력하시오.

직원수가 5명 이상인 부서만 출력.

출력결과는 부서이름 순

 

SELECT

d.department_name 부서명,

TO_CHAR(hire_date,'MM') 입사월,

count(*) 직원수

FROM employees e,departments d

WHERE e.department_id=d.department_id

GROUP BY d.department_name,TO_CHAR(hire_date,'MM')

HAVING count(*)>=5

 

ORDER BY d.department_name;

 

 

▶▶▶ 국가별 도시별 직원수 조회

부서정보가 없는 직원은 국가명과 도시명 대신에 '<부서없음>'으로 출력되도록 해라.

 

SELECT

NVL(c.country_name,'<부서없음>') 국가명,

NVL(l.city ,'<부서없음>') 도시명,

count(*) 직원수

FROM countries c,locations l,departments d,employees e

WHERE c.country_id(+)=l.country_id

              AND d.location_id=l.location_id(+)

     AND d.department_id(+)=e.department_id

GROUP BY c.country_name,l.city

 

ORDER BY c.country_name;

 

 

 

 

▶▶▶ 각 부서별 최대 급여자의 아이디, 이름, 급여를 출력하시오

단, 최대 급여자가 속한 부서의 평균급여를 마지막으로 출력하여

평균급여와 비교할수 있도록 하세요

 

 

SELECT

e.employee_id,

e.first_name,

vt.maxsalary,

vt.avgsalary

FROM employees e,(SELECT

    ROUND(MAX(e1.salary),0) maxsalary,

    ROUND(AVG(e1.salary),0) avgsalary,

    e1.department_id di

                                     FROM employees e1

    GROUP BY e1.department_id) vt

WHERE e.salary=vt.maxsalary

AND  e.department_id=vt.di;

 

 

 

 

▶▶▶ 테이블생성

 

CREATE TABLE SALGRADE(

GRADE NUMBER(2) PRIMARY KEY,

LOSAL NUMBER(5) NOT NULL,

HISAL NUMBER(5) NOT NULL);

 

 

INSERT INTO SALGRADE(GRADE,LOSAL,HISAL)

VALUES(1,1000,5000);

 

INSERT INTO SALGRADE(GRADE,LOSAL,HISAL)

VALUES(2,5001,10000);

 

 

INSERT INTO SALGRADE(GRADE,LOSAL,HISAL)

VALUES(3,10001,20000);

 

INSERT INTO SALGRADE(GRADE,LOSAL,HISAL)

VALUES(4,20001,30000);

 

 

 

 

SELECT

CONCAT(s.grade,'등급') 급여등급,

COUNT(*) 직원수

FROM employees e,salgrade s

WHERE e.salary BETWEEN LOSAL AND HISAL

GROUP BY s.grade

 

ORDER BY COUNT(*) DESC;

 

 

 

//문자 붙이기 concat.

 

 

 

SELECT

NVL(TO_CHAR(TRUNC(e.commission_pct,1)),'<커미션없음>') 커미션,

count(*) 직원수

FROM employees e

GROUP BY TRUNC(e.commission_pct,1);

 

 

//TRUNC 소수점 버리는거

 

SELECT

d.department_name 부서명,

e.first_name 직원명,

e.salary 급여,

e.commission_pct 커미션

FROM employees e, departments d

WHERE e.department_id=d.department_id

AND (e.commission_pct=.4 OR e.commission_pct=.35);

 

 

 

 

========================jdbc======================

 

SELECT

l.city,

d.department_name,

e.first_name,

e.salary

FROM employees e,departments d,locations l

WHERE e.department_id=d.department_id

      AND d.location_id=l.location_id

      AND l.city LIKE '?'

      AND d.department_name LIKE '?';

 

 

 길% => 길vv ,길XXX ,길OOOO 길로시작하는 모든 애를 출력

 

%갈 => 길로 끝나는것 

 

%길%=> 길 이 들어가있으면 뽑는것

 

_길 => 저길 ,이길, 가길 처럼... 앞 한 글자만

 

길_ => 길1, 길2, 길3 처럼... 뒤에 한 글자만

'Database > SQL' 카테고리의 다른 글

[SQL] 공부 Review  (0) 2015.01.25
[SQL] 공부 Review  (2) 2015.01.25
[SQL] 공부 Reiview  (0) 2015.01.25