300x250

이 포스팅은

Oracle SQL 실전 오라클 SQL 가이드

 

Oracle SQL

『ORACLE SQL』는 실전 오라클 SQL 가이드북이다. 초보자들도 조인, 서브 쿼리를 쉽게 배울 수 있도록 예제를 통해 설명한다. 오라클 기반의 실습 환경을 바탕으로 쓰여 졌지만 가능한 표준 SQL을 근

book.naver.com

책을 읽고 요약하여 정리하였습니다.

 

 

그룹 함수를 포함한 조건일반 조건과 계산하는 과정이 상당히 다름.

일반 조건 : 컬럼의 값을 단지 조건과 비교

그룹 함수 포함 조건 : GROUP BY 절을 사용 우무에 따라 결과 값이 달라짐, 그룹함수가 포함된 경우 동일한 시점에 처리할 수 없다.

이를 위해 HAVING 절을 제공.

 

HAVING 절은 조건 중에 그룹 함수가 포함된 것만을 모아서 기술하는 구문

 

그룹 함수와 HAVING 절


- 해석상 WHERE 절과 동일.

- 조건 내용에 그룹 함수를 포함하는 것만을 포함

- HAVING 절은 GROUP BY 절 뒤에 기술

 

부서별 급여 평균이 3천 달러 미만인 부서의 부서번호와 평균 급여

SELECT dno, ROUND(AVG(sal))
FROM emp
GROUP BY dno
HAVING AVG(sal) < 300

- HAVING 절에 그룹함수를 포함한 조건절을 기술하는 목적으로 사용

- 그룹핑된 컬럼의 조건을 기술하는 절

- 그룹핑된 컬럼에 대한 단순 조건은 HAVING 절에 기술 가능하나 SQL 문장의 의도 파악이 힘들 수 있으므로 권장하지 않음.

 

 

 

ORACLE SQL 문 작성, 실행 순서

작성 실행 순서
SELECT 5
FROM 1
WHERE 2
GROUP BY 3
HAVING 4
ORDER BY 6

 

1. FROM 절 : 조회 대상 테이블

FROM CAR_MFG

 

2. WHERE : 일반 조건 

예 ) WHERE CAR_TYPE IN ( "스포츠카", "SUV" ) 

-> CAR_TYPE이 스포츠카, SUV가 아닌 행

-> " 4 전기차 타이칸4S 2020:02-03 20:00:00 " 제거

 

3. GROUP BY: 컬럼 그룹화

예 ) GROUP BY CAR_TYPE

 

4. HAVING : 그룹화 조건 
예) HAVING COUNT(*) > 1

 

5. SELECT : 데이터 추출

예) SELCT CAR_TYPE, COUNT(*) AS COUNT

6. ORDER BY : 데이터 순서 정렬

반응형
300x250

이 포스팅은

Oracle SQL 실전 오라클 SQL 가이드

 

Oracle SQL

『ORACLE SQL』는 실전 오라클 SQL 가이드북이다. 초보자들도 조인, 서브 쿼리를 쉽게 배울 수 있도록 예제를 통해 설명한다. 오라클 기반의 실습 환경을 바탕으로 쓰여 졌지만 가능한 표준 SQL을 근

book.naver.com

책을 읽고 요약하여 정리하였습니다.

 

 

GROUP BY


그룹 함수를 GROUP BY 절에 지정된 컬럼의 값이 같은 행에 대해서 통계 정보를 계산 

~ 별로 통계값을 계산하고자 하면 반드시 GROUP BY절에 ~별로에 해당하는 컬럼을 기술해야 함.

Example ) AVG함수를 job 값이 같은 행끼리만 계산

SELECT job, ROUND(AVG(sal)), ROUND(AVG(sal*12+nvl (comm,0))) 
FROM emp
GROUP BY job

 

카디널리티 


- 검색되는 각 컬럼의 행의 수를 의미하거나 컬럼에 저장된 값의 종류를 의미하기도 함

- 동시에 검색되는 각 컬럼과 항목들의 행의 개수를 의미

- 그룹 함수에서 카디널리티는 동시에 검색되는 각 컬럼과 항목들의 행의 개수를 의미 

- 하나의 SELECT 문장에서 각 검색 항목들은 반드시 카디널리티가 일치해야 함.

- 이를 위해 GROUP BY 절을 이용

 

GROUP BY와 정렬


- 오라클은 기본적으로 GROUP BY를 수행 할 때, 정렬을 수행하지 않고 해시 함수를 이용

- 그러므로 결과 값도 GROUP BY 절에 기술된 컬럼으로 정렬되서 검색 되지 않음.

- 대부분의 경우에 정렬보다는 해시의 수행 성능이 훨씬 빠르기 때문.

- 정렬된 검색결과를 얻고자 한다면 ORDER BY 절을 기술

 

 

오라클 GROUP BY 관련 오류 


https://ckstmsla.tistory.com/entry/ORA-00979-not-a-GROUP-BY-expression

 

반응형
300x250
  1. 형식 :
    - 등가 EQUI
    - 비 등가 NON EQUI

  2. 문법 :
    - ANSI Std
    - Oracle Std

  3. 기준 테이블 :  
    - Inner, Outer ( Left, Right, Full )
    - 그외 : Self, Cross 

  4. 연산 : 
    - NL
    - HASH
    - SORT MERGE
    - STAR 

 

 

형식


1. 등가 ( EQUI )

- 조인 조건에 ' = ' 등호 사용

- 가장 많이 사용되는 조인 방식

- NATURAL JOIN

- JOIN ~ USING

 

 

2. 비 등가 ( NON EQUI ) 

- 등가 방식 제외한 방식들

 

 

 

문법


1. ANSI ( American National Standards Institute ) 에서 발표한 표준
 - JOIN 구문

 - 조인조건 -> ON 절

- 검색조건 ->  WHERE 절

- 등가, 내부조인에  NATURAL JOIN USING 사용

//SQL-99 NATURAL
FROM LEFT_TABLE L NATURAL JOIN RIGHT_TABLE R

//SQL-99 JOIN~USING
FROM LEFT_TABLE L JOIN RIGHT_TABLE R USING(KEY)

//SQL-99 JOIN~ON
FROM LEFT_TABLE L JOIN RIGHT_TABLE R ON(L.KEY=R.KEY)

//SQL-99 OUTER JOIN
FROM LEFT_TABLE L LEFT OUTER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY ) 
FROM LEFT_TABLE L RIGHT OUTER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY ) 
FROM LEFT_TABLE L FULL OUTER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY ) 

 

 

2. Oracle 

;

기준 테이블


1.  Inner 
- 서로 매칭되는 것만 가져온다.

// 명시적
SELECT *
FROM LEFT_TABLE L INNER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY )

// 암시적
SELECT *
FROM LEFT_TABLE L, RIGHT_TABLE R
WHNERE L.KEY = R.KEY

 

 

 

2. Outer

미매칭 ( 매칭 되지 않는 )  데이터도 가져온다.

 

a )  Left : " 왼쪽 " 테이블 미매칭 데이터 포함

->  왼쪽 테이블 데이터를 모두 가져오고, 오른쪽 테이블의 데이터

//SQL-99
SELECT *
FROM LEFT_TABLE L 
LEFT OUTER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY )

//ORACLE
SELECT *
FROM LEFT_TABLE L, RIGHT_TABLE R
WHERE L.KEY = R.KEY (+)

 

b )  Right : "오른쪽 " 테이블 미매칭 데이터 포함

//SQL-99
SELECT *
FROM LEFT_TABLE L
RIGHT OUTER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY )

//ORACLE
SELECT *
FROM LEFT_TABLE L, RIGHT_TABLE R
WHERE L.KEY(+)= R.KEY 

 

 

c )  Full 

//ORACLE 집합 연산 사용

//SQL-99
SELECT *
FROM LEFT_TABLE L 
FULL OUTER JOIN RIGHT_TABLE R ON ( L.KEY = R.KEY )

 

 

 

 

 

출처 SQL의 조인 종류를 설명하는 그림 : 클리앙 (clien.net)

원본 출처 : imgflip.com

 

 

3.Cross

- 모든 경우의 수에 대한 결합

A 테이블 15개 행 

B 테이블 10개 행

결과 : 15 X 10 = 150개 행

반응형
300x250

 

이 포스팅은

Oracle SQL 실전 오라클 SQL 가이드

 

Oracle SQL

『ORACLE SQL』는 실전 오라클 SQL 가이드북이다. 초보자들도 조인, 서브 쿼리를 쉽게 배울 수 있도록 예제를 통해 설명한다. 오라클 기반의 실습 환경을 바탕으로 쓰여 졌지만 가능한 표준 SQL을 근

book.naver.com

책을 읽고 요약하여 정리하였습니다.

 

1999년 SQL 표준안


 

- 조인을 표현하는 여러 가지 새로운 방법이 제시

- 자연 조인,  좌우 외부 조인, 교차 조인 등

 

 

 

자연 조인 Natural Join


- 동일한 타입과 이름을 가진 컬럼을 조인 조건으로 이용

- 조인 문장을 간단힌 표현하는 방법으로 등가 조인 하는 방법의 하나

- SELECT에 테이블 이름을 생략하고 컬럼명만 표기

- 두 테이블간 조인할 수 있는 동일한 이름, 타입을 가진 컬럼 필요

- 반드시 조인에 이용되는 컬럼은 별도로 명시하지 않아도 자동으로 조인에 사용

- 조인 조건을 쓸 필요가 없다.

 

제약

- 동일한 형식기을 갖는 공통 컬럼이 반드시 존재해야함

-> 에러나 경고 발새하지 않지만 선택된 레코드가 없음.

 

SELECT 컬럼...
FROM 테이블1
NATURAL JOIN 테이블2
WHERE 검색 조건

 

 

 

Using 절을 이용한 조인


 

- 조인에 사용될 컬럼을 명시적으로 지정.

- NATURAL절과 USING절은 함께 사용 불가

- 3개 테이블 이상 조인할 경우 가독성이 좋다.

- 조인에 이용되지 않을 동일 이름을 가진 컬럼은 컬럼명 앞에 테이블 명을 기술

- 조인에 이용되는 컬럼을 표기함으로써 가독성을 높이는 효과

- 디버깅이나 튜닝 작업에 유리

SELECT 컬럼...
FROM 테이블1
JOIN 테이블2 USING ( 조인 컬럼 ) [ JOIN 테이블 3 USING ( 조인컬럼 ) ...]
WHERE 검색 조건

 

 

반응형

+ Recent posts