오늘보다 더 나은 내일의 나에게_

Oracle 21/12/27 본문

Oracle

Oracle 21/12/27

chan_96 2022. 1. 12. 21:41
728x90

실습 예제

14. 30번 부서 내의 모든 직업들을 유일한 값으로 출력/ 90번 부서 또한 포함하고, 직업을 오름차순으로 출력

     -유일한 값 => 중복제거(DISTINCT)

14번 문제

 

JOIN

여러 테이블에서 테이블에서 데이터를 검색

-내부적으로 하나의 테이블로 병합 작업 진행

-테이블들이 가지고 있는 행을 하나로 조합

-행을 조합할 때 무결성이 보장이 되어야 한다.

-무결성을 보장하기 위해서 ex(d_id = d_id) 조건이 필요

-조건이 조인 조건이라 표현

-조인을 수행하기 위해서는 조인 조건이 필요하며, 조인 조건을 통해서 하나의 행으로 조합을 할 때 무결성을 보장

-조인이 일어나면 반드시 n-1개 만의 조인 조건이 WHERE 절에 명시됨(n-1 => 조인 table의 개수)

- FROM절에 AS 별칭을 사용해서 SELECT절에 테이블명을 별칭으로 간략히 사용!!

 

 

**조인 조건 주의사항**

*N-1조 인 조건 WHERE절에 반드시 명시

*똑같은 이름을 가진 COLUMN이 명시되었을 때 => 반드시 소유주의 TABLE 이름을, 접두어로 명시

*SELECT절에서 COLUMN명 앞에 테이블 이름을 적어주는 게 성능상 좋다

*컬럼의 소유주의 TABLE의 접두어를 앞에 작성!

 

 

카티시안 곱(Cartesian Product) => 조인 조건을 생략한 경우, 조인 조건이 부적합 경우
-카티시안 곱이 생성되지 않도록 하려면 WHERE절에 항상 유효한 조인 조건을 포함시켜야 한다!

 

EX(2829(EMPLOYEES X DEPARTMENT) = 107(EMPLOYEES) X 27(DEPARTMENT))

 

등가 조인(Equi)  같은 DATA 존재할 때 사용(주로 사용되는 JOIN)
비등가 조인(Non_Equi) 다른 DATA가 존재할 때 사용
포괄 조인(Outer) 어느 한쪽의 TALBE에 DATA가 많을 때 수행
자체 조인(Self) 1개의 TABLE을 가지고 JOIN(등가 , 비등가, 포괄조인을 사용)

등가 조인

=> 테이블에 같은 DATA가 존재할 때 사용

- PK, FK 존재할 때 (PK, FK 같은 값)

 

EX) 회사에 근무하는 사원의 번호와 이름과 그 사원이 근무하는 부서의 이름과 지역번호를 출력

 

 

조인에서 일반조건이 있을 때 WHERE절에서 AND 조건으로 추가해야 한다
(JOIN조건을 먼저 작성하는 게 좋다)

예제

더보기

예제

 

**세 개 이상의 TABLE JOIN**

=> N-1개의 조건이 필요

예제

 

포괄 조인(OUTER)

-어느 한쪽 테이블의 테이블의 데이터가 많을 때 사용

-데이터가 적은 테이블 끝에 (+) 표시 추가! / (NULL 값 행 삽입)

예제

비등가 조인

-데이터가 전혀 다를 때 수행하는 조인

 


자체 조인(SELF)

자체 참조 => 한 테이블 내에서 한 칼럼이 다른 칼럼을 참조

-첫 번째 행은 무조건 NULL

-한 개의 테이블을 두 개의 가상 테이블로 만들어 별칭을 두어 사용!


더보기
EX) 사원의 번호, 이름과 그 사원을 관리하는 관리자 번호 관리자 이름을 출력

 

15. 모든 사원들의 이름, 부서 이름 및 부서 번호를 출력

 

16. 급여가 15000 이상인 사원의 이름과 급여, 그 사원이 근무하는 부서 이름을 출력
17. 연봉이 150000 이상인 사원의 이름과 연봉, 그 사원이 근무하는 부서 이름과 부서가 위치한 지역번호를 출력 연봉은 AnnSal로 출력

 

18. 업무에 MAN이 포함이 되며, 급여가 2500이상인 사원에 대하여 사원번호, 사원 이름, 업무, 급여, 부서명을 출력하고, 급여를 많이 받는 순서대로 출력

**포함(%, _) => LIKE
**내림차순 => DESC
19. Toronto에 근무하는 사원의 이름과 급여, 부서이름과 도시명을  출력(LOCATION테이블 CITY 컬럼)

=> N-1 조건이 필요(3개의 테이블의 조인이어서 2개의 조건이 필요!)

 



그룹 함수를 사용한 데이터 집계

그룹 함수란.. => 그룹 함수는 행 집합에 작용하여 그룹 당 하나의 결과를 생성

AVG 평균(숫자 데이터만 사용가능!)
COUNT 행의 수 반환/ 형식(* 전체를 출력할수도있고, 컬럼이 올수도있다)
* => 행으로 인식해서 행의 개수를 반환
MAX 최대값
MIN 최소값
STDDEV  
SUM 총 합(숫자 데이터만 사용가능!)
VARIANCE  

 

함수의 첫 번째 값으로 ALL(기본값)/DISTICNT이다.
기본적으로 ALL이 기본값이기 때문에 중복제거하지 않고 출력

**그룹 함수는 NULL 값 무시**

예제


더보기
AVG, SUM 예제_ 급여의 평균과, 급여의 합계 예제

 

DATE 타입에서 MIN 오래된 날짜 값(아스키코드 값으로)

 

MIN, MAX 예제

 

COUNT => 출력이 되는 행의 개수를 반환
*를 사용COUNT 예제
컬럼을 사용한 COUNT

 

**그룹 함수는 NULL 값 무시**

NVL함수를 같이 사용한다!!!(NULL값을 대체)


데이터 그룹 생성  GROUP BY

=> 그룹화되지 않은 COLUMN을 그룹화시켜준다

     그룹 함수가 SELECT 절에 사용이 됐을 때 GROUP BY절에 명시를 해줘야 한다!

      SELECT절에 GROUP 절을 구분할 컬럼을 명시하는 게 좋다

      WHERE절과 ORDER BY 절 사이에 위치!

 

HAVING 절 => 그룹에 대한 조건(GROUP BY절에서 사용!) / (일반 행의 조건 주면 X)
=> HAVING 절은 WHERE 절과 ORDER BY 절 사이에 위치!!

WHERE 절 => 행의 조건(그룹에 대한 조건을 주면 X)

 

예제

더보기
GROUP BY 예제1
GROUP BY 예제2

 

HAVING 절 => 그룹에 대한 조건


오류 내용 정리

더보기

ERROR at line 1:
ORA-00918: column ambiguously defined

동일한 열 이름이 조인되는 개별 테이블 둘 이상에 존재한다.

SQL에 사용할 열을 결정할 수 있는 충분한 정보가 포함되어 있지 않다.

 

SELECT절에서 2개의 TABLE에 있는 속해있는 COLUMN 때문에 ERROR발생!!

 

해결방법 => COLUMN명 앞에 TABLE명 작성

ERROR_column ambiguously defined

 

ERROR at line 1:

ORA-00937: not a single-group group function

=> 단일 그룹 함수가 아니다!

 

해결방법

-SELECT 절에 그룹 함수가 오면 SELECT 절의 나머지 컬럼은 GROUP BY절에 기술

-SELECT 절에 그룹함수가 오거나 GROUP BY 절 이하에 기술된 컬럼이 오면 나머지 컬럼은 SELECT 절 뒤에 올 수 없다.

728x90

'Oracle' 카테고리의 다른 글

Oracle 12/12/29  (0) 2022.01.12
Oracle 21/12/28  (0) 2022.01.12
Oracle 21/12/24  (0) 2022.01.12
Oracle 21/12/23  (0) 2022.01.12
Oracle 21/12/22  (0) 2022.01.12
Comments