--각 년도별 입사자수를 출력하시오. 년도는 오름차순 정렬
SELECT SUBSTR(hire_date, 1, 2) 년도, COUNT(hire_date)||'명' 입사자수
FROM employees
GROUP BY SUBSTR(hire_date, 1, 2)
ORDER BY SUBSTR(hire_date, 1, 2) ASC
--월별 입사자수를 출력하시오. 입사자가 많은 순서대로 정렬하시오.
SELECT SUBSTR(hire_date, 4, 2) 월, COUNT(hire_date)||'명' 입사자수
FROM employees
GROUP BY SUBSTR(hire_date, 4, 2)
ORDER BY COUNT(hire_date) DESC
--------------------------------------------------------------------
--서브쿼리
--최대급여를 출력하시오
SELECT MAX(salary)
FROM employees
--최대급여를 받는 사원의 사번, 이름, 급여를 출력하시오.
1)최대급여계산
2)1)와 같은 급여를 받는 사원을 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary = (SELECT MAX(salary)FROM employees)
--'IT'부서(DEPARTMENT_NAME) 소속사원의 이름과 입사일을 출력하시오.
1)부서명이 IT인 부서번호 얻기
2)1)와 같은 부서번호를 갖는 사원을 출력
SELECT first_name "이름", TO_CHAR(hire_date,'YY/MM/DD') "입사일", department_id "부서번호"
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT')
--업무명(job_title)이 President인 사원의 사원명과 업무(job_id)을 출력하시오.
1)업무명(job_title)이 President인 업무번호얻기
2)1)과같은 업무번호를 갖는 사원을 출력
SELECT first_name "사원명", job_id "업무"
FROM employees
WHERE job_id = (SELECT job_id
FROM jobs
WHERE job_title = 'President')
--업무명(job_title)이 President인 사원을 제외한 사원명과 직종(job_id)을 출력하시오.
1)업무명(job_title)이 President인 사원을 제외한 사원명 얻기
2)1)과같은 사원명을 갖는 사원의 직종을 출력
SELECT first_name, job_id
FROM employees
WHERE job_id <> (SELECT job_id
FROM jobs
WHERE job_title = 'President')
--Seattle city에 있는 부서번호와 부서명을 출력하시오.
1)Seattle city에 있는 부서번호 얻기
2)1)과같은 부서명을 출력
SELECT department_id "부서번호", department_name "부서명"
FROM departments
WHERE location_id = (SELECT location_id
FROM locations
WHERE city = 'Seattle')
--매니저가[이름 last_name 'King'이고 first_name이 'Steven']인 사원의 이름과 급여를 출력하시오.
1)매니저가[이름 last_name 'King'이고 first_name이 'Steven']인 사번얻기
2)1)과같은 사원의 급여를 출력
SELECT first_name||' '||last_name "이름", salary "급여"
FROM employees
WHERE manager_id = (SELECT employee_id
FROM employees
WHERE first_name = 'Steven' AND last_name = 'King')
--평균급여보다 많은 급여를 받는 사원들의 사번, 급여를 출력하시오.
1)평균급여얻기
2)1)보다 큰 급여를 받는 사원 출력
SELECT employee_id "사번", salary "급여"
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees)
--'Sales'부서의 평균급여보다 많은 급여를 받는 사원들을 출력하시오.
SELECT employee_id "사원번호", first_name "이름"
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'Sales'))
--'Sales'부서의 평균급여보다 많은 급여를 받는 'Sales' 사원들을 출력하시오. <- JOIN 활용
SELECT employee_id "사원번호", first_name "이름"
FROM employees e JOIN departments d ON e.department_id = d.department_id
WHERE d.department_name = 'Sales' AND salary > (SELECT AVG(salary)
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'Sales'))
--상호연관 Subquery로 변경가능
일반 Subquery : Subquery수행후 Mainquery수행
상호연관Subquery : mainquery수행결과를 Subquery에 반영수행 결과를 Mainquery에 반영 <- 사용안하는게 좋음 퍼포먼스가 떨어짐 어쩔수 없이 써야할때 쓰도록
SELECT employee_id "사원번호", first_name "이름"
FROM employees e JOIN departments d ON e.department_id = d.department_id
WHERE d.department_name = 'Sales' AND salary > (SELECT AVG(salary)
FROM employees
WHERE department_id = d.department_id)
--Subquery 반환행의 종류
-단일행 : 비교연산자 사용가능
-다중행 : IN, >ALL, >ANY
--Subquery 반환컬럼의 종류
-단일컬럼
-다중컬럼 : main쿼리의 where절 컬럼수와 subquery의 컬럼수를 일치(페어와이징한다고 표현)
--Subquery의 위치별 종류
-WHERE절 : 일반적 Subquery
-FROM절 : inline view
-SELECT절 : scalar subquery
>>다중행 Subquery
--last_name이 S로 시작하는 사원의 부서명을 출력하시오.
SELECT department_id, department_name
FROM departments
WHERE department_id IN (SELECT department_id
FROM employees
WHERE last_name LIKE 'S%')
>>다중컬럼 서브쿼리<<
부서별 최대급여를 받는 사원의 부서번호, 사번, 급여를 출력하시오
SELECT department_id, employee_id, salary
FROM employees
WHERE (department_id, salary) IN (SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id)
ORDER BY department_id, salary
>>FROM절에서 사용되는 subquery : inline view <<
ROWNUM컬럼 : 의사컬럼, 행번호값을 갖음. 1부터 시작
SELECT rownum, employee_id, salary
FROM employees
SELECT rownum, employee_id, salary
FROM employees
WHERE salary BETWEEN 5000 AND 10000
SELECT rownum, employee_id, salary
FROM employees
ORDER BY salary DESC
1)
SELECT rownum, a.*
FROM (SELECT employee_id, salary
FROM employees
ORDER BY salary DESC) a
WHERE rownum BETWEEN 11 AND 20
2)
SELECT *
FROM (SELECT rownum rn, a.*
FROM (SELECT employee_id, salary
FROM employees
ORDER BY salary DESC) a
) b
WHERE rn BETWEEN 21 AND 30
--Smith사원의 입사일, 부서명을 출력하시오.
SELECT e.hire_date 입사일,
(SELECT department_name
FROM departments d
WHERE d.department_id = e.department_id) 부서명
FROM employees e
WHERE last_name = 'Smith'
-------------------------------------테이블 구조 생성, 변경 및 삭제 하는 DDL(Data Definition Language)
>>D D L<<
객체 생성 - CREATE
객체 구조변경 - ALTER
객체 제거 - DROP
---------------------
--테이블 생성
CREATE TABLE a (
c1 number default 0,
c2 varchar2(10),
c3 date)
DESC a;
---------------------
--테이블 제거
DROP TABLE a
---------------------
--테이블 구조변경
--컬럼추가
ALTER TABLE a
ADD c4 char(1)
---------------------
--컬럼 이름변경
ALTER TABLE a
RENAME COLUMN c4 TO c41
DESC a;
--컬럼 제거
ALTER TABLE a
DROP COLUMN c41
--컬럼 자료형변환 또는 자리수 변환
ALTER TABLE a
MODIFY c2 VARCHAR2(20)
-----------------------------
>>Dictionary View <<
DESC USER_TABLES
SELECT * FROM user_tables
SELECT * FROM user_sequences
SELECT * FROM user_indexes
--고객테이블-- Customer
아이디 id varchar2(20)
비밀번호 password varchar2(20)
이름 name varchar2(20)
전화번호 phone_no varchar2(20)
우편번호 zip_code char(6)
주소 address varchar2(50)
성별 gendar char(1) default 'M'
생년월일 birth_date varchar2(8)
가입일자 reg_date date default SYSDATE
CREATE TABLE Customer(
id varchar2(20),
password varchar2(20),
name varchar2(20),
phone_no varchar2(20),
zip_code char(6),
address varchar2(50),
gendar char(1) default 'M',
birth_date varchar2(8),
reg_date date default SYSDATE
)
DESC Customer
>>D M L <<
자료추가 : INSERT
자료수정 : UPDATE
자료삭제 : DELETE
INSERT INTO Customer(id, password, name) VALUES( 'id1', 'p1', 'n1')
INSERT INTO Customer(id, password, name, phone_no) VALUES( 'id2', 'p2', 'n2', '')
INSERT INTO Customer(id, password, name, phone_no) VALUES( 'id3', 'p3', 'n3', NULL)
INSERT INTO Customer VALUES( 'id4', 'p4', 'n4', '', '', '', '', '', '')
SELECT *
FROM Customer
'공부 > KITRI(한국정보기술연구원) 공공데이터 기반 JAVA Programming과정' 카테고리의 다른 글
KITRI 공공데이터 기반 JAVA Programming과정 6일차 (0) | 2015.05.09 |
---|---|
KITRI 공공데이터 기반 JAVA Programming과정 5일차 (0) | 2015.05.09 |
KITRI 공공데이터 기반 JAVA Programming과정 4일차 (0) | 2015.05.09 |
KITRI 공공데이터 기반 JAVA Programming과정 2일차 (0) | 2015.05.08 |
KITRI 공공데이터 기반 JAVA Programming과정 1일차 (1) | 2015.05.08 |