반응형

안녕들 하시죠!

이번 시간에도 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 복습해보겠습니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1. 사원수가 3명 이상인 부서명과 인원수를 출력하시오. ( group by, having )

having절 -- group by로 묶은 값들에 조건을 추가한다 (=where)

SELECT [그룹으로 묶은 컬럼명]
     , [집계할 컬럼명]
FROM [테이블명]
GROUP BY [그룹으로 묶을 컬럼명]
HAVING [그룹으로 묶은 값에 조건 추가]

count 함수 -- 테이블 전체 행 검색 ( count(*) )

                   특정 컬럼의 숫자 검색 ( count(컬럼명) )

1
2
3
4
5
select job
     , count(*)
from emp
group by job
having count(*>= 3;
cs

 

2. 직무 중 가장 적게 수입을 가지는 직무의 평균 월급을 출력하시오.
1
2
3
select min(AVG(sal)) 
from emp 
group by job;
cs

 

3. 사원번호, 사원이름, 부서이름, 부서번호를 출력하시오. ( Join )

Oracle 내부조인 -- 테이블간에 동일한 컬럼을 조인

1
2
3
4
5
6
7
select emp.ename
     , emp.empno
     , dept.dname
     , dept.deptno
from emp
   , dept
where emp.deptno = dept.deptno;
cs

Natural 조인 -- 테이블간에 동일한 모든 컬럼을 조인 

1
2
3
4
5
select ename
     , empno
     , dname
     , deptno
from emp natural join dept;
cs

Join On -- 조인의 세부조건을 지정할 수 있다.

1
2
3
4
5
6
select ename
     , empno
     , dname
     , dept.deptno
from emp join dept
on emp.deptno = dept.deptno;
cs

Join Using -- 컬럼을 선택해서 조인.

1
2
3
4
5
6
select ename
     , empno
     , dname
     , deptno
from emp join dept
using (deptno);
cs

 

 

 

4. 부서가 30이고, 급여가 1500이상인 사원의 이름, 급여, 부서명, 부서번호를 출력하시오. ( Join on )
1
2
3
4
5
6
7
8
select emp.ename
     , emp.sal
     , dept.dname
     , dept.deptno
from emp join dept
on emp.deptno = dept.deptno
where emp.deptno = 30
and sal >= 1500;
cs

 

5. 사원수가 5명이 넘는 부서의 부서명과 사원수를 출력하시오.

 

1
2
3
4
5
6
7
8
select dept.dname
     , count(*)
from emp
   , dept
where emp.deptno = dept.deptno
group by emp.deptno
       , dept.dname
having count(*>= 5;
cs

 

6. ADAMS 사원이 근무하는 부서이름과 지역이름을 출력하시오.
1
2
3
4
5
6
7
select dept.dname
     , dept.loc
     , emp.ename
from emp
   , dept
where emp.deptno = dept.deptno
and emp.ename = 'ADAMS';
cs

 

7. NEW YORK 이나 DALLAS 지역에 근무하는 사원들의 사원번호, 사원이름을 사원번호 순으로 검색하시오.
1
2
3
4
5
6
7
select e.empno
     , e.ename
from emp e
   , dept d
where e.deptno = d.deptno
and (d.loc = 'NEWYORK' or d.loc='DALLAS')
order by e.empno;
cs

오늘은 여기까지입니다 감사합니다.

반응형

 

안녕들 하시죠!

이번 시간에도 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 복습해보겠습니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1. 직책이 SALESMAN, ANALYST인 사람의 모든 정보를 출력하시오. ( or, like, in, any, some )
1
2
3
4
select *
from emp
where job = 'SALESMAN' 
or job = 'ANALYST';
cs
 
1
2
3
4
select *
from emp
where job like 'S%' 
or job like 'A%';
cs

 

1
2
3
4
5
6
7
8
9
10
11
select *
from emp
where job in ('SALESMAN''ANALYST');
 
select *
from emp
where job = any ('SALESMAN''ANALYST');
 
select *
from emp
where job = some ('SALESMAN''ANALYST');
cs

 

2. 1981년 5월 1일 ~ 1982년 2월 사이에 입사한 사원들의 모든 정보를 부서번호순(오름차순)으로 검색하시오. ( TO_DATE )
1
2
3
4
5
select *
from emp
where hiredate >= TO_DATE('19810501''yyyymmdd'
and hiredate < TO_DATE('19820228''yyyymmdd')
order by deptno;
cs

 

3. 1981년에 입사한 사원의 이름과 사원번호를 출력하는데 사원번호가 내림차순으로 정렬하시오. ( TO_CHAR )
1
2
3
4
5
6
select ename
     , empno
from emp
where hiredate >= '19810101'
and hiredate <= '19811231'
order by empno desc;
cs
1
2
3
4
5
select ename
     , empno
from emp
where to_char(hiredate,'YYYY'= '1981'
order by empno desc;
cs

 

4. 직급이 SALESMAN 일 경우 급여 * 1.1, CLERK 일 경우 급여 * 1.3, MANAGER 일 경우 급여 * 1.5 를 하고 모든 정보를 출력하시오. ( DECODE )

DECODE 함수 = ( IF-ELSE )

ex) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2....)

1
2
3
4
5
6
7
select empno
     , job
     , ename
     , sal
     , decode(job, 'SALESMAN', sal*1.1'CLERK', sal*1.3'MANAGER', sal*1.5, sal) as 인상된급여 
from emp;
 
cs

 

 

 

 

 

 

 

5. 모든 사원들에게 커미션을 200씩 추가하여 사원이름, 커미션 값을 출력하시오. ( nvl )

NVL 함수 = 값이 NULL인 경우 지정값을 출력한다. NVL("값", "지정값")

NVL2 함수 = 값이 NULL이 아닌 경우 지정값1을 출력하고 NULL인 경우 지정값2를 출력한다. NVL2("값", "지정값1", "지정값2")

1
2
3
select ename
     , nvl(comm,0+ 200 
from emp;
cs

 

6.  커미션을 가지고 있는 사원은 Y, 커미션이 NULL값인 사원은 N을 포함하여 사원이름과 커미션 값을 출력하시오.( nvl2 )
1
2
3
select ename
     , nvl2(comm, 'Y''N'
from emp;
cs

 

7. 1981년 입사자들의 평균 임금을 출력하시오.
1
2
3
select AVG(sal)
from emp
where TO_CHAR(hiredate,'YYYY'= '1981';
cs

 

8. 사원번호, 사원이름, 총 급여(SAL+COMM)을 출력하시오. 
1
2
3
4
select empno
     , ename
     , sal+nvl(comm,0)
from emp;
cs

 

9. SALESMAN 의 커미션 평균을 출력하시오. ( group by )

 

GROUP BY 함수 = 특정 컬럼을 기준으로 집계를 내는데에 사용한다.

SELECT [그룹으로 묶은 컬럼명]
     , [집계할 컬럼명]
FROM [테이블명]
GROUP BY [그룹으로 묶을 컬럼명]
1
2
3
4
5
select job
     , AVG(nvl(comm,0))
from emp
where job='SALESMAN'
group by job;
cs

 

오늘은 여기까지입니다 감사합니다 !

반응형

 

안녕들 하시죠!

이번 시간부터 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 기초부터 복습할 생각입니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1.  부서번호 10번인 사원들의 사원번호, 사원이름, 월급을 출력하시오.
1
2
3
select empno, ename, sal
from emp
where deptno=10;
cs

 

2.  사원번호 7369인 사원 이름, 입사일, 부서번호를 출력하시오.
1
2
3
select ename as 사원이름, hiredate as 입사일, deptno as 부서번호
from emp
where empno=7369;
cs

 

3. 사원번호 7300크고 7400 작은 사원 이름, 입사일, 부서번호를 출력하시오.
1
2
3
select ename as 사원이름, hiredate as 입사일, deptno as 부서번호
from emp
where empno > 7300 AND empno < 7400;
cs

 

 

4.  EMP 모든 정보를 (사원번호 기준 내림차순으로) 검색하시오.

정렬
ASC - 오름차순 ( DEFAULT값 )
DESC - 내림차순

1
2
3
select *
from emp
order by empno desc;
cs

 

5. 이름이 S로 시작하는 모든 사람의 사원번호와 이름을 출력하시오.
1
2
3
select *
from emp
order by empno desc;
cs

 

6. 직속상관 사원번호가 없는 사원의 모든 정보를 검색하시오.
1
2
3
select *
from emp
where mgr is null;
cs

 

오늘은 여기까지입니다 감사합니다 !

반응형

 

안녕들 하시죠!

이번시간에는 뒤돌아서면 까먹는 SQL 쿼리 복습을 위한 테이블 세팅을 진행해보겠습니다.

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
CREATE TABLE DEPT( -- 부서테이블
    DEPTNO NUMBER(2CONSTRAINT pk_dept PRIMARY KEY-- 부서번호
    DNAME VARCHAR2(14), -- 부서이름
    LOC VARCHAR2(13-- 부서위치
);
INSERT INTO DEPT VALUES (10,'ACCOUNTING''NEW YORK');
INSERT INTO DEPT VALUES (20'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40'OPERATIONS''BOSTON');
CREATE TABLE EMP( -- 사원테이블
    EMPNO NUMBER(4CONSTRAINT pk_emp PRIMARY KEY-- 사원번호
    ENAME VARCHAR2(10), -- 사원이름
    JOB VARCHAR2(9), -- 직급
    MGR NUMBER(4), -- 직속상사 사원번호
    HIREDATE DATE, -- 입사날짜
    SAL NUMBER(7,2), -- 사원급여
    COMM NUMBER(7,2), -- 보너스(커미션)
    DEPTNO NUMBER(2-- 부서번호
);
INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',null,TO_DATE('1981-11-17','yyyy-mm-dd'),5000,null,10);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,TO_DATE('1981-04-02','yyyy-mm-dd'),2975,null,20);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,TO_DATE('1981-05-01','yyyy-mm-dd'),2850,null,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,TO_DATE('1981-06-09','yyyy-mm-dd'),2450,null,10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,TO_DATE('1987-04-19','yyyy-mm-dd'),3000,null,20);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,TO_DATE('1981-12-03','yyyy-mm-dd'),3000,null,20);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,TO_DATE('1981-02-20','yyyy-mm-dd'),1600,300,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,TO_DATE('1981-02-22','yyyy-mm-dd'),1250,500,30);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,TO_DATE('1981-09-28','yyyy-mm-dd'),1250,1400,30);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,TO_DATE('1981-09-08','yyyy-mm-dd'),1500,null,30);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,TO_DATE('1981-12-03','yyyy-mm-dd'),950,null,30);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,TO_DATE('1982-01-23','yyyy-mm-dd'),1300,null,10);
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,TO_DATE('1980-12-17','yyyy-mm-dd'),800,null,20);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,TO_DATE('1987-05-23','yyyy-mm-dd'),1100,null,20);
COMMIT;
CREATE TABLE salgrade( -- 급여테이블
    grade number(7,2), -- 급여등급
    losal number(7,2), -- 최저급여
    hisal number(7,2-- 최고급여
);
INSERT INTO salgrade values(1,700,1200);
INSERT INTO salgrade values(2,1201,1400);
INSERT INTO salgrade values(3,1401,2000);
INSERT INTO salgrade values(4,2001,3000);
INSERT INTO salgrade values(5,3001,9999);
 
COMMIT;
cs

 

반응형

안녕들 하시죠!

이번시간에는 오라클 11g 설치에 대해 알아보겠습니다.

 

먼저 아래의 URL을 통해 Oracle 홈페이지로 들어갑니다.

https://www.oracle.com/kr/index.html

 

 

다운로드로 들어가보겠습니다.

 

 

Database 11g Express Edition 버전으로 설치해보겠습니다.

 

 

Windows x64 버전으로 다운받겠습니다.

 

 

로그인을 하게되면 바로 다운로드가 됩니다.

 

 

setup.exe 를 실행해주세요.

 

다음

 

 

 

아래의 비밀번호는 중요하니 기억해둬야 합니다.

 

 

 

 

이제 시작화면에서 SQL PLUS를 찾습니다.

 

사용자명 : system

비밀번호 : 위에서 설정한 비밀번호

 

다음에 접속됨:

이 나오게 되면 설치가 끝납니다.

 

오늘은 여기까지입니다 감사합니다 !

+ Recent posts