오라클 GROUP BY, HAVING 절




GROUP BY절 사용법


GROUP는 특정 컬럼을 기준으로 집계를 내는데 사용된다.

일단 예를 들어 보도록 하겠습니다.

아래와 같이 학급 전체의 성적을 나타내는 테이블이 있습니다.

class는 반 명이며 name 학생 이름 score는 해당 학생의 성적 점수 입니다.




이제 이런 학급 전체 성적을 학급 별로 총합 집계를 내고 싶으면 group by를 이용합니다.


SELECT CLASS, SUM(SCORE) 

FROM TBL_REPORT_CARD 

GROUP BY CLASS;


그럼 다음과 같이 학급별로 점수 총합의 결과가 출력 됩니다.



Group by를 사용 하는 방법은 아래와 같습니다.



SELECT [GROUP BY 절에 지정된 컬럼1] [GROUP BY별로 집계할 값] 

FROM [테이블 명] 

GROUP BY [ 그룹으로 묶을 컬럼 값 ]




Having절 사용법


Having 절은 Group by로 집계된 값 중 where 절 처럼 특정 조건을 추가한다고 생각 하시면 됩니다.

예를 들어 학급별 총합 결과 중에 150점 이상인 것만 출력 하고 싶으면 다음과 같이 예제를 작성하면 됩니다.



SELECT CLASS, SUM(SCORE) 

FROM TBL_REPORT_CARD 

GROUP BY CLASS

HAVING SUM(SCORE) > 150 ;


결과 값은 아래와 같습니다.


Having 절을 사용 하는 방법은 아래와 같습니다.


SELECT [GROUP BY 절에 지정된 컬럼1] [GROUP BY별로 집계할 값] 

FROM [테이블 명] 

GROUP BY [ 그룹으로 묶을 컬럼 값 ]

HAVING [조건 추가] ;


이상으로 Group by와 Having 절에 대해 알아봤습니다.

도움이 되셨나요?

반응형

오라클 표현식(Case~When~Then)




표현식 사용법



특정 값에 대해 정해진 조건에 따라 다르게 표현하기 위해 나타내는 식입니다.

예를 들어 90~100 점은 A, 80~90 은 B로 표현 하고 싶은데 실제 테이블에 저장 하고 있는 값은 

아래 처럼 점수만 있을 때 표현식을 가지고 A,B를 표시하는 것이 가능합니다.


아래 테이블에는 점수 정보만 제공 하고 있습니다.



이것을 표현식을 이용하여 A,B,C로 나오게 해보겠습니다.


SELECT ID, NAME, SCORE,

      CASE WHEN SCORE > 90 THEN 'A'

           WHEN SCORE > 80 AND SCORE < 90 THEN 'B'

           WHEN SCORE > 70 AND SCORE < 80 THEN 'C'

           ELSE 'D'

      END AS GRADE

FROM TBL_REPORT_CARD



위의 결과는 아래와 같습니다.





테이블에 없던 GRAND 컬럼을 표현식으로 꾸며 봤습니다.

표현식 사용 법은 간단히 다음과 같습니다.


CASE WHEN [조건1] THEN [값1]

        WHEN [조건2] THEN [값2]

....

        ELSE [그밖에 값]

END AS [컬럼 값]


예제를 가지고 설명을 드리겠습니다.



CASE WHEN SCORE > 90 THEN 'A'


SCORE 컬럼 값이 90 이상이면 A



       WHEN SCORE > 80 AND SCORE < 90 THEN 'B'


SCORE 컬럼 값이 80이상이고 90이하면 B



       ELSE 'D'


그밖에는 D



END AS GRADE


표현식 종료 AS (ALIAS 이다. 즉 컬럼에 어떻게 표현 할지 나타내는 예약어다. )


이상으로 오라클 표현식에 대해 설명 드렸습니다.

도움이 되셨나요?

반응형

'인프라 > Oracle' 카테고리의 다른 글

[Oracle] UNION, INTERSECT, MINUS  (1) 2016.12.05
[Oracle] GROUP BY 절, HAVING 절  (0) 2016.12.04
[Oracle] 시퀀스(Sequence) 사용법  (0) 2016.11.29
[Oracle] 테이블스페이스(Table Space) 생성  (0) 2016.11.27
[Oracle] 정렬(ORDER BY)  (0) 2016.11.22

오라클 시퀀스(Sequence) 사용법




시퀀스 생성



시퀀스는 순번을 생성해주는 객체이다.

예를 들어 사원 번호를 1번부터 직원 수 만큼 따는데 중복이 있어서는 안된다.

프로그램에서 따로 관리 하기에는 복잡해지니 시퀀스를 이용하여 중복되지 않게 

순번을 얻어 올 수 있어 매우 편리한 객체라 할 수 있다.


시퀀스 생성 하는 방법은 아래와 같다.


CREATE SEQUENCE [스키마 명].[시퀀스 명]

INCREMENT BY [증감 숫자]

START WITH [시작 숫자]

NOMINVALUE 혹은 MINVALUE [최소값]

NOMAXVALUE 혹은 MAXVALUE [최대값]

NOCYCLE 혹은 CYCLE

NOCACHE 혹은 CACHE; 


증감 숫자가 최대 값에 도달 하면 생성을 중단 할 지 ( NOCYCLE ) 처음 부터 다시 생성 할지 ( CYCLE )

메모리에 시퀀스 값을 미리 할당 ( CACHE ) 혹은 할당 하지 않음 ( NOCACHE )



시퀀스를 생성하는 예제 이다.


CREATE SEQUENCE SEQ_USER_ID

INCREMENT BY 1

START WITH 1

MINVALUE 1

MAXVALUE 99999

NOCYCLE

NOCACHE;



시퀀스를 생성 후 번호를 얻어와 보자 얻어오는 방법은 아래와 같다.


[시퀀스 명].NEXTVAL



시퀀스 조회 예제는 아래와 같다.

아래 쿼리를 계속 생성하면 1씩 증가되는 것을 확인 할 수 있다.


SELECT SEQ_USER_ID.NEXTVAL FROM DUAL;


또한 데이터 생성시 아래 처럼 다음 아이디 값을 넣을 수 있다.


INSERT INTO TBL_HUMAN VALUES( SEQ_USER_ID.NEXTVAL, 'JOJO', '30' );



이상으로 오라클 시퀀스 사용법을 마치겠습니다.

도움이 되셨습니까?

반응형

테이블 스페이스(Table Space) 생성




Table Space 생성



오라클에 데이터를 저장하는 논리적 단위 중 가장 상위 개념이 테이블 스페이스다.

물리적은 파일이며 논리적 단위 중에는 데이터 블럭 -> 익스텐트 -> 세그먼트 -> 테이블 스페이스 순으로 있다.


1. 테이블 스페이스를 생성 하기 위해서는 우선 DBA로 접속을 해야 한다.


CONN SYS/ORACLE AS SYSDBA


2. 테이블 스페이스를 생성한다.


CREATE TABLESPACE sample_ts DATAFILE

'C:\tablespace\sample_ts' SIZE 100M AUTOEXTEND ON NEXT 5M;


각 구문마다 설명 드리겠습니다.


CREATE TABLESPACE sample_ts DATAFILE

sample_ts 이름으로 테이블을 생성 하였습니다.


'C:\tablespace\sample_ts' 

저장 되는 데이터 파일은 C:\tablespace\sample_ts 입니다.


SIZE 100M AUTOEXTEND ON NEXT 5M;

총 사이즈는 100MB 까지 저장 가능 하며 100MB가 초과 하면 자동으로 5MB씩 늘리게끔 되어있습니다.


생성된 파일은 아래와 같습니다.

계정생성시 기본 Table Space 지정 하기


1. 이후 생성할 테이블 스페이스 사용해줄 사용자를 생성 한다.


CREATE USER SAMPLE_USER IDENTIFIED BY PASSWORD

DEFAULT TABLESPACE SAMPLE_TS
TEMPORARY TABLESPACE TEMP;


2. 권한 부여


GRANT CONNECT, RESOURCE TO SAMPLE_USER;


반응형

+ Recent posts