다중행 함수
=>그룹함수, 통계함수
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;
'DB' 카테고리의 다른 글
| 스마트팩토리 2주 6일차 DB 6일차 DB (0) | 2021.05.04 |
|---|---|
| 스마트팩토리 1주 5일차 DB 5일차 DB (0) | 2021.05.03 |
| 스마트팩토리 1주 4일차 DB 4일차 DB (0) | 2021.04.30 |
| 스마트팩토리 1주 2일차 DB 2일차 DB (0) | 2021.04.28 |
| 스마트팩토리 1주 1일차 DB 1일차 엑셀 (0) | 2021.04.27 |




최근댓글