Oracle 3일차.
2021. 9. 9. 10:55ㆍOracle
ORDER BY절
- 로우를 정렬하려면 SELECT문에 ORDER BY절을 추가해야 한다.
AS는 생략 가능
EX)SELECT ENAME, SAL*12+NVL(COMM, 0) ANNSAL FROM EMP;
연결 연산자
- SELECT문 내부에 "||" 수직바를 사용해서 표현한다.
- 기존의 컬럼내에 문자열을 추가하고자 할 떄 사용한다
TRIM은 중간에 있는 문자는 처리 못함
EX)
SELECT TRIM('O' FROM 'aaaaaORACLEaaaaa')FROM DUAL;
--이같이 가운데에 있는 문자열을 없애는 명령어는
--인식하지 못한다.
2) 형 변환 함수(숫자형, 문자형, 날짜형)
- 숫자, 문자, 날짜의 데이터형을 다른 데이터형으로 변환하는 함수이다.
--그룹함수
SELECT SUM(SAL) FROM EMP;
--SUM(컬럼명) : 컬럼의 총합을 표시.
SELECT AVG(SAL) FROM EMP;
--AVG(컬럼명) : 컬럼의 평균을 표시.
SELECT ROUND(AVG(SAL), 2) FROM EMP;
SELECT MAX(SAL), MIN(SAL) FROM EMP;
--최대 최소값 구하기.
SELECT COUNT(COMM) FROM EMP;
--갯수 세기, 널은 제외.
SELECT DEPTNO FROM EMP GROUP BY DEPTNO;
--전체 사원 중에서 부서번호별 부서번호 표시.
SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO;
--부서별 급여 평균.
--그룹을 짓고 그다음에 그룹함수 처리.
SELECT DEPTNO,ENAME, AVG(SAL) FROM EMP GROUP BY DEPTNO;
--부서별로 묶었을때, 부서가 최소 단위. 그러므로 부서명은 가능하지만,
--사원 명은 사용 불가.
--관련 오류 : NOT A GROUP BY EXPRESSION
그룹함수 사용 예제.
3) HAVING 절
- GROUP BY 절에 의해 생성된 결과 값 중 원하는 조건에 부합하는 자료만 보고자 할 때 사용한다.
10. 조인
조인의 필요성
- 오라클은 관계형 데이터베이스인데 모든 정보들이 하나의 테이블에 몰려 있는 것이 아니라 여러 테이블에 정규화 되어 분산되어 있다. 따라서 각 테이블끼리는 서로 특정한 규칙이나 관계가 있도록 설계되어 있다.
- 데이터가 여러 곳에 흩어져 있기 때문에 사용자가 원하는 데이터를 모두 찾으려면 여러 테이블을 다 조회해야 한다.
- 그래서 등장한 기술이 JOIN이다.
- JOIN
- 여러 테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여준다.
- 예를 들어 사원테이블에서 이름을 가져오고 부서테이블에서 부서명만을 가져와서 새로운 결과를 도출하는 것이 JOIN이다.
- 조인의 종류
- CARTESIAN PRODUCT(카티션 곱)
- EQUI JOIN
- NON-EQUI JOIN
- SELF JOIN
- OUTER JOIN
1) CARTESIAN PRODUCT(논리곱,카티젼 프로덕트)
- 두개 이상의 테이블이 조인될 때 WHERE절에 공동되는 컬럼에 의한 조인이 발생되지 않아 모든 데이터가 검색 결과로 나타나는 경우이다.
- 그래서 데이블에 존재하는 모든 데이터가 검색 결과로 나타난다.
- [SELECT * FROM EMP, DEPT;] 쿼리문을 실행하면 컬럼수는 11개(EMP컬럼 8개 + DEPT컬럼 4개 - DEPTNO 중복컬럼 1개)와 로우수는 56개(EMP로우 14개 * DEPT로우 4개)로 아무런 의미를 갖지 못한다. 조인 결과가 의미를 가지려면, WHERE절에 올바른 조인 조건을 지정해야 한다.
2) EQUI JOIN
- 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 조인 기법이다.
- 예) 사원 정보를 출력할 때, 각 사원이 소속된 부서의 상세 정보를 출력하기 위해 두 개의 테이블을 조인하는 쿼리문
- 일치하는 값을 뽑아냄.
3) NON-EQUI JOIN(비등가 조인)
- 동일 컬럼이 없이 다른 조건을 사용하여 조인 할 떄 쓰인다.
- EQUI JOIN과 NON-EQUI JOIN의 차이점
- EQUI JOIN : JOIN조건에 서로 다른 조건(=)을 가진 데이터를 JOIN해서 가져오는 방법
- NON-EQUI JOIN : 같은 조건이 아닌 크거나 작거나 하는 경우 JOIN을 수행하는 방법
4) SELF JOIN
- 자기 자신과 조인을 하는 기법이다.
- 조인은 서로 다른 두 개의 테이블을 연결하기도 하지만 하나의 테이블 내에서 조인을 해야만 자료를 얻을 수 있는 경우에 쓰인다.
- 이름이 SMITH인 사원의 매니저 이름을 알아내려면 이 역시 EMP테이블에서 확인 할 수 있다. 그럼 담당 매니저의 이름을 알아내려면 어떻게 해야할까? 매니저 테이블이 있다면 이 두 테이블을 조인하여 알아낼 수 있겠지만 매니저 역시 이 회사에 사원이기 때문에 중복된 데이터가 생길 수 있으므로 SMITH 담당 매니저의 정보는 사원 테이블을 참조해서 얻어내야 한다. 이렇게 자신과 자기 자신을 조인하는것이 SELF JOIN이라고 한다.
5) OUTER JOIN
- 조인 조건에 만족하지 않는 행도 나타내는 조인 기법이다.
- 2개 이상의 테이블이 조인될 때, 어느 한쪽의 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않는 경우 그 데이터가 출력되지 않는 문제를 해결하기 위해서 사용되는 조인기법이다.
- [SELECT COUNT(*) FROM EMP;] 쿼리문을 실행하면 EMP테이블의 로우는 14개이다. 하지만 SELF JOIN에서 매니저가 누구인지의 예에서는 로우가 13개로 나와있다. 그 이유는 이름이 KING인 사원의 정보가 제외되었기 때문이다.
- 그럼 왜 제외가 되었을까? KING은 사장(PRESIDENT)으로 매니저가 존재하지 않으므로 MGR 컬럼값이 NULL이기 때문이다. 이때 조인 조건에 만족하지 못하였더라도 해당 로우를 나타내고 싶을 때 OUTER JOIN을 사용한다.
'Oracle' 카테고리의 다른 글
Oracle 5일차. (0) | 2021.09.13 |
---|---|
Oracle 4일차. (0) | 2021.09.10 |
Oracle 예제3. (0) | 2021.09.09 |
Oracle 2일차 (0) | 2021.09.08 |
Oracle 1일차 (0) | 2021.09.07 |