728x90

다중행 함수 


=>그룹함수, 통계함수


create table emp1

as

select * from ad30.emp1 ;


select  trunc ( to_char(sysdate, 'yyyy') - to_char(  HIRE_DATE, 'yyyy') + 1, -1 ) as 연령대, 

          count(* ) as 인원수,

          trunc ( count(* )  /  ( select count(*) from EMP1 ) , 2) as 비율

from EMP1

group by trunc ( to_char(sysdate, 'yyyy') - to_char( HIRE_DATE, 'yyyy') + 1, -1 ) 

order by  1 ;


****


조인

연관이 있는 여러 테이블로부터 데이터를 검색하는 방법


Equiijoin


Non-Equiijoin


create table dept

as

select * from hr.dept;


create table locations

as

select * from hr.locations;


create table job_grades

as

select * from hr.job_grades;


- 테이블을 옆으로 합치는 것

- 공통된 컬럼을 조인

- 오라클 전용 구문, ansi 표준 구문


조인의 종류


1. cross join

조건없이 다 join

실무에서 쓰진않음

2. equi join

3. non-equi join

4. outer join

5. self join


오라클 구문

조인 조건 where 절 기술

equal join


사번, 이름, 부서명


SELECT * FROM EMP, DEPT WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_id;


SELECT EMPLOYEE_ID, LAST_NAME, DEPARTMENT_NAME FROM EMP, DEPT WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_id;


-  테이블의 별칭 사용시 as 쓰면 안된다!

SELECT E.EMPLOYEE_ID, E.LAST_NAME, E.DEPARTMENT_NAME FROM EMP E, DEPT D WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID;


표준 구문

조인조건을 from 절에 기술

ansi join


사번, 이름, 부서명

- 두 테이블에 동일한 컬럼이 있는 경우

SELECT E.EMPLOYEE_ID, E.LAST_NAME, D.DEPARTMENT_NAME FROM EMP E JOIN DEPT D USING (DEPARTMENT_ID);


- 두 테이블에 동일한 컬럼이 있는 경우

SELECT E.EMPLOYEE_ID, E.LAST_NAME, D.DEPARTMENT_NAME FROM EMP E JOIN DEPT D ON (DEPARTMENT_ID);


오라클 구문

outer join : LEFT OUTER JOIN, RIGHT OUTER JOIN

FULL OUTER JOIN 지원하지 않음


LEFT OUTER JOIN


SELECT E.EMPLOYEE_ID, E.LAST_NAME, D.DEPARTMENT_NAME FROM EMP E, DEPT D WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID(+);


RIGHT OUTER JOIN


SELECT E.EMPLOYEE_ID, E.LAST_NAME, D.DEPARTMENT_NAME FROM EMP E, DEPT D WHERE E.DEPARTMENT_ID(+)=D.DEPARTMENT_ID;


표준 구문

OUTER JOIN : LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN

OUTER 생략가능


LEFT OUTER JOIN : ***


SELECT E.EMPLOYEE_ID, E_LAST_NAME, D.DEPARTMENT_NAME FROM EMP E RIGHT OUTER 


RIGHT OUTER JOIN


FULL OUTER JOIN


## 여러 테이블 조인


A, B, C


SELECT *

FROM A, B, C

WHERE A.AA=B.BB AND B.BB=C.CC;


SELECT *

FROM A JOIN B USING(AA) JOIN C ON (B.BB=C.CC)


## self join


사번, 사원이름, 상관이름


SELECT E.EMPLOYEE_ID AS 사번, E.LAST_NAME AS 사원이름, M.LAST_NAME AS 상관이름 FROM EMP E, EMP M WHERE E.MANAGER_ID=M.EMPLOYEE_ID;


## non equi join


이름, 월급, 월급레벨


SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVEL FROM EMP E, JOB_GRADES J WHERE E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;




728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기