오라클 뷰(VIEW) 생성, 삭제




VIEW 생성


한 개 이상의 테이블, 뷰 데이터를 볼 수 있는 데이터 베이스 객체이다.

뷰를 사용 하면 테이블 처럼 사용가능 하며 SELECT 외에는 사용이 불가능 하다.


일단 생성 예제를 보도록 하겠다.


CREATE OR REPLACE VIEW GRADEINFO AS

   SELECT B.NAME, A.GRADE 

   FROM TBL_STUDENT A, TBL_HUMAN B

   WHERE A.HUMAN_ID = B.ID;


이렇게 VIEW를 생성 하면 다음 결과 값이 같다.


SELECT * FROM GRADEINFO;

 SELECT B.NAME, A.GRADE 

   FROM TBL_STUDENT A, TBL_HUMAN B

   WHERE A.HUMAN_ID = B.ID;


GRADEINFO 테이블에는 INSERT, DELETE, UPDATE가 불가능 하다.


CREATE OR REPLACE VIEW [VIEW 명] AS

 [SELECT 문] ;


VIEW 생성시 "ORA-01031: insufficient privileges" 에러가 발생시 아래 처럼 VIEW 생성 권한을 추가해 준다.


GRANT CREATE VIEW TO [DBUSERNAME];




VIEW 삭제



VIEW를 삭제하는 예제는 아래와 같다.


DROP VIEW GRADEINFO;


[VIEW 삭제 방법]

DROP VIEW [VIEW 명];


이상으로 VIEW 생성 및 삭제에 대해 알아보았습니다.

도움이 되셨나요?

반응형

UNION, INTERSECT, MINUS




UNION( 중복 제거 합집합 ), UNION ALL ( 중복 포함 합집합 )



UNION은 합집합을 의미 한다.

2개 이상의 테이블 조회 결과중 중복을 제외 하고 모두 출력 된다.


예제를 통해 이해를 돕도록 하겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80;

[결과]

2

3


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3

4


각각의 쿼리 실행의 결과가 (2,3), (3,4)입니다.

이것을 UNION을 이용해서 중복된 값을 제거 하고 조회 되도록 해보겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

UNION

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

2

3

4


UNION을 사용하는 방법은 2개 이상의 데이터 조회 SELECT 구문 사이에 UNION 을 넣어 주면 된다.

[SELECT를 이용한 데이터 집합1]

UNION

[SELECT를 이용한 데이터 집합2]


중복된 값을 제거 하지 않고 모두 표시 하고 싶을 때는 UNION ALL을 사용 한다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

UNION ALL

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

2

3

3

4


UNION ALL을 사용하는 방법은 2개 이상의 데이터 조회 SELECT 구문 사이에 UNION ALL을 넣어 주면 된다.

[SELECT를 이용한 데이터 집합1]

UNION ALL

[SELECT를 이용한 데이터 집합2]




INTERSECT(교집합)



INTERSECT은 교집합을 의미 한다.

2개 이상의 테이블 조회 결과중 중복 값만 출력 된다.


예제를 통해 이해를 돕도록 하겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80;

[결과]

2

3


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3

4


각각의 쿼리 실행의 결과가 (2,3), (3,4)입니다.

이것을 INTERSECT을 이용해서 중복된 값만 조회 되도록 해보겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

INTERSECT

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3



MINUS(차집합)



MINUS은 차집합을 의미 한다.

2개 이상의 테이블 조회 결과중 기준이 되는 테이블에서 나머지 테이블의 중복된 값을 제거하고 출력 된다.


예제를 통해 이해를 돕도록 하겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80;

[결과]

2

3


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3

4


각각의 쿼리 실행의 결과가 (2,3), (3,4)입니다.

이것을 MINUS을 이용해서 첫번째 테이블 결과중 두 번째 테이블과 중복값을 제거하고 조회 되도록 해보겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

MINUS

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

2


반응형

오라클 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

+ Recent posts