#1. 데이터는 선생님께 받은 임시데이터를 사용하였다.

#2. 기본적인 쿼리문 위주이며, group by 부터 join의 활용까지의 내용이다.


-- 문제 : 각 부서별 평균 급여를 계산


-- 단계 1 : 부서별로 출력

select * from s_emp;

select 

    dept_id 

 from s_emp 

group by dept_id 

order by dept_id;


-- 단계 2: 평균급여를 계산

select 

     dept_id

    ,round(avg(salary)) as 평균급여 

 from s_emp 

group by dept_id 

order by dept_id;

-----------------------------------------------------------------------------------------


-- 문제 : 각 부서별로 직책이 사원인 직원들의 평균급여를 계산

-- 단계 : 위의 내용에서 직책을 사원으로 제한

select 

     dept_id

    ,round(avg(salary)) as 평균급여 

 from s_emp 

where title = '사원' 

group by dept_id 

order by dept_id;


-----------------------------------------------------------------------------------------


-- 문제 : 각 지역별로 몇 개의 부서가 있는지를 나타내기

-- 단계 1 : 지역별로 출력

select * from S_DEPT;

select 

    region_id 

 from s_dept 

group by region_id 

order by region_id;


-- 단계 2 : 각 그룹별로 몇개씩있는지 카운트

select 

     region_id 

    ,count(*) as 부서수 

 from s_dept 

group by region_id 

order by region_id;

-----------------------------------------------------------------------------------------


-- 문제 : 각 부서별로 평균 급여를 구하되 평균 급여가 2000이상인 부서만 출력

-- 단계 1 : 각 부서별로 평균 급여를 출력 위의 문제를 참고

select 

     dept_id

    ,round(avg(salary)) as 평균급여 

 from s_emp 

group by dept_id 

order by dept_id;


-- 단계 2 : 평균급여가 2000이상인 부서를 출력

select 

     dept_id 

    ,round(avg(salary)) as 평균급여 

 from s_emp 

group by dept_id

having round(avg(salary)) > 2000

order by dept_id;


---------------------------------------------------------------

-- 문제 : 각 직책별로 급여의 총합을 구하되 직책이 부장인 사람은 제외하시오

--      단, 급여총합이 8000이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오

-- 단계 1 : 직책별로 급여의 총합을 구하기

select * from s_emp;

select 

     title 

    ,sum(salary) as 총합급여

 from s_emp 

group by title

order by title;


-- 단계 2 : 직책이 부장인 사람을 제외

select 

     title 

    ,sum(salary) as 총합급여

 from s_emp 

where 

    title not like '%부장'

group by title

order by title;


-- 단계 3 : 급여총합이 8000이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오

select 

     title 

    ,sum(salary) as 총합급여

 from s_emp 

where title not like '%부장'

group by title

having sum(salary) >= 8000

order by sum(salary);

----------------------------------------------------------------

-- 5.6 그룹을 서브그룹으로 세분화하기

-- 문제 : 각 부서내에서 각 직책별로 몇명의 인원이 있는지를 나타내시오

-- 단계 1 : 각 부서별로 인원을 출력 / 위의 내용을 참고

select 

     dept_id

    ,count(*) as 인원수

 from s_emp 

group by dept_id

order by dept_id;

-- 문제 : 직책별 조건을 추가    

select 

     dept_id

    ,title

    ,count(*) as 인원수

 from s_emp 

group by 

     dept_id

    ,title

order by dept_id

;


----------------------------------------------------------------


-- 6.4 : JOIN

-- 문제 : 직원테이블과 부서테이블을 조인하여 사원의 이름과 부서, 부서명을 나타내시오

-- 단계 1 : 직원테이블과 부서테이블을 조인

select 

    * 

 from 

     s_emp

    ,s_dept

where s_emp.dept_id = s_dept.id

;


-- 단계 2 : 사원의 이름과 부서, 부서명을 출력


select 

    s_emp.name

    ,s_emp.dept_id

    ,s_dept.name as 부서명

 from 

     s_emp

    ,s_dept

where s_emp.dept_id = s_dept.id

;

    

-- 6.5 : 칼럼과 테이블의 alias 사용

-- 문제 : 서울 지역에 근무하는 사원에 대해 각 사원의 이름과 근무하는 부서명을 나타내시오

-- 단계 1 : 지역테이블, 사원테이블, 부서테이블을 조인

select

    *

 from 

    S_DEPT d

    ,S_EMP e

    ,S_REGION r

where 

    d.REGION_ID = r.ID

    and e.DEPT_ID = d.ID

;


-- 단계 2 : 서울 지역에 근무하는 사원 출력

select

    *

 from 

    S_DEPT d

    ,S_EMP e

    ,S_REGION r

where 

    d.REGION_ID = r.ID

    and e.DEPT_ID = d.ID

    and r.NAME = '서울특별시'

;

    

-- 단계 3 : 사원의 이름과 근무하는 부서명

select

    e.NAME as 사원명

    ,d.NAME as 부서

 from 

    S_DEPT d

    ,S_EMP e

    ,S_REGION r

where 

    d.REGION_ID = r.ID

    and e.DEPT_ID = d.ID

    and r.NAME = '서울특별시'

;


'Database' 카테고리의 다른 글

[오라클] 기본개념과 SQL과 관련된 정의  (0) 2018.02.09
[오라클] 설치하기  (0) 2018.02.06
블로그 이미지

UKkim

,


#1. DB란?

 - 데이터 저장소


#2. DBMS란?

 - DataBase Management System

 - DB 관리 시스템. 명령어나 소통을 도와주는 시스템


#3. 데이터베이스 용어

 - 테이블 : 행과 열의 조합으로 구성된 기본 저장단위

 - 뷰 : 테이블을 조합하여 만든 가상 테이블로 타 프로그램과의 연동이나 수정/삭제 등의 권한을 못하게 하는 역할을 한다.

 - 시퀸스 : 자동으로 고유한 숫자값을 생성해주며 기본 키 값을 생성

 - 인덱스 : 책의 목차개념과 동일. 검색속도 향상을 위해 사용된다.

 - 시노님 : Object에 대한 또다른이름으로 alias 역할을 한다.


※ 오라클의 경우 관리자 사용자로 SYS/system이 있으며 이를 사용하는 것은 시스템을 망가뜨릴수 있어 다른 사용자를 만들어 사용하여야한다.


※ 오라클에서는 유저와 스키마의 개념이 불분명한데 유저는 사용자를 의미하며 스키마는 그 사용자의 구조와 같은 개념을 가진다고 보면 된다.


#4. SQL명령어의 기본부류

 1) DDL (Data Definition Language) : 구조를 만들거나, 변경, 삭제를 담당

   - CREATE / ALTER / DROP

 2) DML (Data Manipulation Language) : 새로운 행을 입력, 수정, 삭제를 담당

   - INSERT / UPDATE / DELETE

 3) DCL (Data Control Language) : 권한을 부여 또는 삭제를 담당

   - GRANT / INVOKE


'Database' 카테고리의 다른 글

[오라클] 예제 문제풀이 모음  (0) 2018.02.11
[오라클] 설치하기  (0) 2018.02.06
블로그 이미지

UKkim

,


# 오라클 설치







# SQLDeveloper의 경우는 압축만 풀어주면된다.





# 설치 완료!!

 - SID의 경우 xe이거나 orcl 임. 

 - 테스트 해보고 정상이면 완료를 하면 사용이 가능하다.



'Database' 카테고리의 다른 글

[오라클] 예제 문제풀이 모음  (0) 2018.02.11
[오라클] 기본개념과 SQL과 관련된 정의  (0) 2018.02.09
블로그 이미지

UKkim

,