SQL> select d.department_name,count(e.employee_id)
from employees e, departments d
where e.department_id=d.department_id
group by d.department_name;

SQL> select first_name||' '||last_name||'의 연봉은'||salary||'입니다.'as 결과
from employees e, departments d
where e.department_id=d.department_id and
and department_name='IT'
order by salary;

SQL> select employee_id,first_name,job_title,department_name
from employees e, departments d, locations l, jobs j
where e.department_id=d.department_id and
d.location_id = l.location_id and
e.job_id =j.job_id
and l.city='Seattle';

select job_title job, sum(salary) 급여
from employees e, jobs j
where j.job_id=e.job_id
and job_title not like '%Representative%'
group by job_title
having sum(salary)>30000
order by sum(salary);
->job_title not like '%Representative%' 이부분 다시보기.

select d.department_name 부서명, count(e.employee_id) 인원수
from employees e, departments d
where e.department_id=d.department_id
and to_char(hire_date,'YYYY')<2005
group by d.department_name;
hire_date<'2005/01/01' 이렇게 표현해도됨

group by에 department_id하나만 명시할시 select절에도 department_id만 쓸 수 있음. select절에 쓰는 건 무조건 group by로 묶여야 하므로 두 개를 group by절에 추가해야함.
select e.department_id 부서번호, d.department_name 부서명, count(e.employee_id) 인원수,
max(e.salary) 최고급여,min(e.salary) 최저급여, trunc(avg(e.salary)) 평균급여, sum(e.salary) 급여총액
from departments d, employees e
where e.department_id=d.department_id
group by e.department_id, d.department_name
having count(e.employee_id)>=3
order by 인원수 desc;
SQL> conn scott/tiger
Connected.
SQL> set linesize 300;
SQL> set pagesize 100;
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
14 rows selected.
SQL> insert into emp values(7777,'RM',null,null,sysdate,500,null,null);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
7777 RM 24/04/09 500
15 rows selected.
SQL> insert into emp values(8888,'슈가',null,null,sysdate,500,null,null);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
7777 RM 24/04/09 500
8888 슈가 24/04/09 500
16 rows selected.
SQL> select d.dname, e.ename
2 from emp e,dept d
3 where e.deptno = d.deptno;
DNAME ENAME
---------------------------- --------------------
RESEARCH SMITH
SALES ALLEN
SALES WARD
RESEARCH JONES
SALES MARTIN
SALES BLAKE
ACCOUNTING CLARK
RESEARCH SCOTT
ACCOUNTING KING
SALES TURNER
RESEARCH ADAMS
SALES JAMES
RESEARCH FORD
ACCOUNTING MILLER
14 rows selected.
SQL> select ename,dname
2 from emp e, dept d
3 where e.deptno=d.deptno(+);
ENAME DNAME
-------------------- ----------------------------
MILLER ACCOUNTING
KING ACCOUNTING
CLARK ACCOUNTING
FORD RESEARCH
ADAMS RESEARCH
SCOTT RESEARCH
JONES RESEARCH
SMITH RESEARCH
JAMES SALES
TURNER SALES
BLAKE SALES
MARTIN SALES
WARD SALES
ALLEN SALES
슈가
RM
16 rows selected.
SQL> select ename,dname
2 from emp e, dept d
3 where e.deptno(+)=d.deptno;
ENAME DNAME
-------------------- ----------------------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
INSA
OPERATIONS
16 rows selected.
SQL> select * from salgrade;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SQL> select e.ename,e.sal,g.losal,g.hisal,g.grade
2 from emp e,salgrade g
3 where e.sal>=g.losal and e.sal<=g.hisal;
ENAME SAL LOSAL HISAL GRADE
-------------------- ---------- ---------- ---------- ----------
SMITH 800 700 1200 1
ADAMS 1100 700 1200 1
JAMES 950 700 1200 1
WARD 1250 1201 1400 2
MARTIN 1250 1201 1400 2
MILLER 1300 1201 1400 2
ALLEN 1600 1401 2000 3
TURNER 1500 1401 2000 3
JONES 2975 2001 3000 4
BLAKE 2850 2001 3000 4
CLARK 2450 2001 3000 4
SCOTT 3000 2001 3000 4
FORD 3000 2001 3000 4
KING 5000 3001 9999 5
14 rows selected.
where e.sal>=g.losal and e.sal<=g.hisal;를
where e.sal between g.losal and g.hisal;로 표현할 수도 있음
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
7777 RM 24/04/09 500
8888 슈가 24/04/09 500
16 rows selected.
SQL> select e.empno 사원번호, e.ename 사원명,m.empno 관리자번호, m.ename 관리자명
2 from emp e, emp m
3 where e.mgr = m.empno;
사원번호 사원명 관리자번호 관리자명
---------- -------------------- ---------- --------------------
7902 FORD 7566 JONES
7788 SCOTT 7566 JONES
7900 JAMES 7698 BLAKE
7844 TURNER 7698 BLAKE
7654 MARTIN 7698 BLAKE
7521 WARD 7698 BLAKE
7499 ALLEN 7698 BLAKE
7934 MILLER 7782 CLARK
7876 ADAMS 7788 SCOTT
7782 CLARK 7839 KING
7698 BLAKE 7839 KING
7566 JONES 7839 KING
7369 SMITH 7902 FORD
13 rows selected.
SQL> select mgr, count(empno)
2 from emp
3 group by mgr;
MGR COUNT(EMPNO)
---------- ------------
7839 3
3
7782 1
7698 5
7902 1
7566 2
7788 1
7 rows selected.
select m.ename 관리자명,count(e.empno) 인원수
from emp e, emp m
where e.mgr=m.empno
group by m.ename;
관리자명 인원수
-------------------- ----------
JONES 2
FORD 1
CLARK 1
SCOTT 1
BLAKE 5
KING 3
6 rows selected.
select e.employee_id, e.first_name,nvl(m.first_name,'관리자 없음') 관리자명
from employees e, employees m
where e.manager_id=m.employee_id(+)
and e.first_name like '_t%'
=>외부조인 기억안나서 (+)쓰지않아서 출력되지않았음
select department_name, floor(avg(salary)) 평균연봉
from departments d, employees e
where e.department_id=d.department_id
group by department_name
having floor(avg(salary)) >5000
order by floor(avg(salary)) desc;
select first_name,salary,hire_date, department_name
from departments d, employees e
where e.department_id=d.department_id
and months_between(sysdate,hire_date)>240;
select job_title, count(employee_id)
from jobs j, employees e
where j.job_id=e.job_id(+)
group by job_title;
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.