Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Android SDK
- Objective C
- 오라클
- ibatis bind
- 예제
- 우편번호
- jdbc
- java
- IO
- 개행처리
- 안드로이드
- SQL
- 설치
- 이클립스
- MVC
- ibatis parameter
- Spring
- SEQUENCE
- ibatis 개행
- IT·컴퓨터
- 연동
- 외래키
- iPhone
- Android
- zipcode
- Eclipse
- 아이폰
- 자바
- Oracle
- 스프링
Archives
- Today
- Total
MisoBoy Blog...
[20110708] Oracle Join 문 본문
-- 1) DECODE()
-- IF ~ ELSE IF ~ ELSE IF ~ ELSE
SELECT ename, job, sal, DECODE(job, 'SALESMAN', sal * 1.1,
'ANALYST', sal * 1.2,
'MANAGER', sal * 1.3, sal)
AS "Salary" FROM EMP;
-- 상반기에 해당하는 월까지에 해당 하는 인원을 출력하자
SELECT COUNT(DECODE(TO_CHAR(hiredate, 'MM'), '01', 1)) "1월",
COUNT(DECODE(TO_CHAR(hiredate, 'MM'), '02', 2)) "2월",
COUNT(DECODE(TO_CHAR(hiredate, 'MM'), '03', 3)) "3월",
COUNT(DECODE(TO_CHAR(hiredate, 'MM'), '04', 4)) "4월",
COUNT(DECODE(TO_CHAR(hiredate, 'MM'), '05', 5)) "5월",
COUNT(DECODE(TO_CHAR(hiredate, 'MM'), '06', 6)) "6월"
FROM EMP
WHERE TO_CHAR(hiredate, 'MM') <= '06';
-- CASE ~ WHEN (Oracle 에서만 사용함)
SELECT ename, job, sal,
CASE
WHEN job = 'SALESMAN' THEN sal * 1.1
WHEN job = 'ANALYST' THEN sal * 1.2
WHEN job = 'MANAGER' THEN sal * 1.3
ELSE sal
END "Salary"
FROM EMP;
SELECT
COUNT(CASE WHEN TO_CHAR(hiredate, 'MM') = '01' THEN COUNT(*) END) AS "1월",
COUNT(CASE WHEN TO_CHAR(hiredate, 'MM') = '02' THEN COUNT(*) END) AS "2월",
COUNT(CASE WHEN TO_CHAR(hiredate, 'MM') = '03' THEN COUNT(*) END) AS "3월",
COUNT(CASE WHEN TO_CHAR(hiredate, 'MM') = '04' THEN COUNT(*) END) AS "4월",
COUNT(CASE WHEN TO_CHAR(hiredate, 'MM') = '05' THEN COUNT(*) END) AS "5월",
COUNT(CASE WHEN TO_CHAR(hiredate, 'MM') = '06' THEN COUNT(*) END) AS "6월",
COUNT(*) "총인원"
FROM EMP
GROUP BY hiredate
HAVING to_char(hiredate,'MM') <= '06';
-- GROP BY 에 대한 조건은 where 가 아닌 HAVING 를 사용해야 한다.
-- GROUP BY 는 해당 그룹에 대한 조건을 출력 하는것이다.
select MAX(sal), MIN(sal) FROM EMP GROUP BY deptno;
SELECT TRUNC(AVG(sal)) FROM EMP GROUP BY job
SELECT * FROM EMP ORDER BY job ASC
SELECT * FROM EMP ORDER BY job ASC, ename DESC
-- JOIN (전체를 여러그룹으로 본다, 테이블 하나가 아니라 여러개의 테이블이다)
-- EQUI JOIN (등가 조인, INNER JOIN)
-- FOREIGN KEY 를 이용해서 두개이상의 테이블 연결
-- EMP 테이블과 dept 테이블의 연관조건을 알아보고 싶다
-- emp 테이블의 제약조건(constraints)을 알면된다
SELECT e.EMPNO, e.DEPTNO, e.JOB, d.DNAME
FROM EMP e, DEPT d --
WHERE e.DEPTNO = d.DEPTNO -- EQUI JOIN
SELECT e.EMPNO, E.ENAME, e.DEPTNO, e.JOB, d.DNAME, d.LOC
FROM EMP e, DEPT d
WHERE e.DEPTNO = d.DEPTNO AND e.ENAME = 'SCOTT';
DESC EMP -- EMP 구성 조회
desc user_tables;
SELECT table_name FROM user_tables;
DESC user_constraints
SELECT owner, constraint_name, constraint_type, table_name,
r_owner, r_constraint_name
FROM user_constraints
WHERE table_name = 'EMP'
SELECT owner, constraint_name, constraint_type, table_name,
r_owner, r_constraint_name
FROM user_constraints
WHERE table_name = 'DEPT'
-- Non-EQUI JON (비등가 조인)
-- 두 테이블간의 직접 대응하는 열이 없다.
SELECT e.Ename, e.SAL, s.GRADE
FROM EMP e, SALGRADE s
WHERE e.SAL BETWEEN s.LOSAL AND s.HISAL AND e.Ename = UPPER('scott');
SELECT ename, mgr FROM EMP WHERE ename = UPPER('scott');
SELECT e1.ENAME, e1.MGR, e2.EMPNO, e2.ENAME
FROM EMP e1, EMP e2
WHERE e1.MGR = e2.EMPNO AND e1.ename = UPPER('scott');
SELECT e1.ENAME, e1.MGR, e2.EMPNO, e2.ENAME
FROM EMP e1, EMP e2
WHERE e1.MGR = e2.EMPNO AND e1.ename = UPPER('scott');
-- 사번, 이름, 매니저번호, 매니저이름, 매니저 위치 출력하라
SELECT e1.empno "사원 번호", e1.ename "사원 이름", e2.EMPNO "매니저 번호",
e2.ENAME "매니저 이름", d.LOC "매니저 근무 위치"
FROM EMP e1, emp e2 , DEPT d
WHERE e1.mgr = e2.empno AND e2.DEPTNO = d.DEPTNO
-- OUTER JOIN (포괄조인)
-- 정보가 부족한 쪽에 ' + ' 기호를 붙인다.
SELECT e.ename, e.deptno, d.dname
FROM EMP e, DEPT d
WHERE e.DEPTNO(+) = d.DEPTNO;
'Oracle' 카테고리의 다른 글
[20110712] Oracle Transaction & DDL(CREATE, DROP, ALTER, COMMENT, TRUNCATE) (0) | 2011.07.12 |
---|---|
[20110711] Oracle Subquery & 복수행 & DML (0) | 2011.07.11 |
Oracle Table (mssql Table, zipcode(우편번호)) (0) | 2011.07.11 |
Oracle Join & 함수 문제 (0) | 2011.07.10 |
[20110708] Oracle 테이블 제거 (FOREIGN KEY) (0) | 2011.07.10 |