반응형

개발 & 데이터베이스/DB 38

오라클 그룹화 함수 (GROUP BY, HAVING)

GROUP BY 정의 데이터를 그룹으로 묶을 때 사용하며 보통 집계함수인 COUNT, SUM, AVG, MAX, MIN 함수와 함께 사용함 GROUP BY 문법 SELECT [컬럼] FROM [테이블명] WHERE [조건] GROUP BY [컬럼] HAVING [조건] GROUP BY 사용 방법 GROUP BY를 사용하기 위해 테스트 데이터를 생성하겠습니다. CREATE TABLE EXA( NAME VARCHAR2(20) NOT NULL, SCORE INTEGER NOT NULL, GRADE INTEGER NOT NULL, PRIMARY KEY(NAME) ); INSERT INTO EXA VALUES('홍길동', 70, 2); INSERT INTO EXA VALUES('원숭이', 30,2); INSERT..

[ORACLE] 시퀀스(Sequence) 생성과 사용 방법

시퀀스 정의 시퀀스(Sequence)는 오라클에서 지원하는 기능 중 하나로써 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체입니다. 보통 기본키(PRIMARY KEY) 값에 중복을 방지하기 위해서 사용됩니다. 시퀀스는 테이블과 독립적으로 저장, 생성되고 메모리에 Cache 되었을 때 시퀀스 값의 액세스 효율이 증가합니다. 시퀀스 생성 방법 CREATE SEQUENCE [시퀀스 이름] INCREMENT BY [증감 숫자] START WITH [시작 숫자] NOMINVALUE OR MINVALUE [최소값] NOMINVALUE OR MAXVALUE [최대값] CYCLE OR NOCYCLE CACHE OR NOCACHE ORDER OR NOORDER ⑴ INCREMENT BY: 양수면 숫자만큼 ..

[ORACLE] 집합 연산자 종류와 사용 방법 (합집합/교집합/차집합)

집한 연산자 정의 두 개 이상의 쿼리 결과를 하나로 결합할 때 사용하는 연산자 집합 연산자 종류 집합 연산자 설명 UNION (합집합) 두 개의 쿼리 결과를 더해서 정렬 후 출력 (중복 제거) UNION ALL (합집합) 두 개의 쿼리 결과를 더해서 정렬없이 출력 (중복 있음) INTERSECT (교집합) 두 개의 쿼리 결과 중 같은 것만 정렬 후 출력 MINUS (차집합) 앞 쿼리 결과 - 뒤 쿼리 결과를 정렬 후 출력 집합 연산자 사용 방법 1. UNION SELECT * FROM FOOD WHERE FOOD_ID > 108 UNION SELECT * FROM FOOD WHERE PARENT_FOOD_ID = 103 UNION 연산자는 두 개의 쿼리 결과를 더해서 중복을 제거한 후에 출력되기 때문에 ..

[ORACLE] BLOB 타입 조회하는 방법

IT관련 대학생 혹은 신입 프로그래머들은 생소하게 느껴지는 BLOB 타입을 소개하겠습니다. BLOB 타입은 일반적인 조회로 실행하면 에러가 발생합니다. 일반적인 조회 SELECT [BLOB_COLUMN_NAME] FROM 테이블명; BLOB 타입 조회 SELECT DBMS_LOB_SUBSTR(BLOB_COLUMN_NAME) FROM 테이블명; [ORA-06502, ORA-06512 오류 발생 조치 방법] 지정된 버퍼 크기(VARCHAR2 타입)보다 더 큰 데이터를 읽으려고 할 때 발생 최대 버퍼의 사이즈를 늘리거나 4,000 BYTES 내로 데이터를 잘라서 조회하면 해결

[ORACLE] 인덱스 (Index) 조회, 사용 여부 조회 및 리빌드

인덱스는 트리 구조를 가지고 있으며 수정, 삽입, 삭제 등이 오랫동안 누적되면 트리의 깊이가 깊어지면서 조회 속도가 현저히 떨어집니다. 그렇기 때문에 주기적인 관리가 필수적입니다. 그렇다면 어떻게 인덱스를 관리할까요? 인덱스를 조회하는 방법부터 사용 여부 확인 및 리빌드 하는 방법에 대해서 알아보겠습니다. 인덱스 조회 SELECT * FROM USER_INDEXS [USER_IND_COLUMNS, ALL_INDEXS, ALL_IND_COLUMNS]; USER_INDEXS : 현재 계정 소유의 인덱스 정보 USER_IND_COLUMNS : 현재 계정 소유의 인덱스 컬럼 정보 ALL_INDEXS : 전체 인덱스 정보 ALL_IND_COLUMNS : 전체 인덱스 컬럼 정보 인덱스 사용 여부 조회 및 변경 (모..

[ORACLE] MERGE INTO 문으로 INSERT와 UPDATE 동시에 사용하기

MERGE INTO ···정의 값의 존재 여부에 따라서 INSERT, UPDATE, DELETE를 실행하는 쿼리문으로 자바에서 IF문과 비슷한 역할을 수행 MERGE INTO ··· 사용 방법 MERGE INTO [TABLE / VIEW] -- UPDATE, INSERT 할 테이블 혹은 뷰 USING [TABLE / VIEW / DUAL] -- 비교할 대상 테이블 혹은 뷰 ON [조건] -- 비교 조건 WHERE MATCHED THEN -- 조건과 일치할 경우 UPDATE SET . . . WHEN NOT MATCHED THEN -- 조건과 불일치할 경우 INSERT( )VALUES ( ) MERGE INTO ··· 실행 MERGE INTO FOOD USING DUAL ON (FOOD_NAME = '탕수..

[ORACLE] 인덱스 (Index) 생성과 삭제 및 사용 시 주의사항

오늘은 데이터베이스 객체이며, '색인'이라는 사전적 의미를 가지고 있는 인덱스 (Index)에 대해서 알아보겠습니다. 인덱스에는 다양한 종류가 있고 상황에 따라 다르게 사용됩니다. 각종 SNS, 게임 등을 사용자 입장에서 봤을 때 서비스를 이용하면서 가장 답답한 건 '속도'라고 생각합니다. 그렇다면 데이터를 불러오려고 할 때 속도를 높이는 방법에는 무엇이 있을까요? 바로 '인덱스' 기술입니다. 오라클에서는 기본적으로 FULL SCAN을 하도록 되어있습니다. 말 그대로 조회하고자 하는 테이블의 모든 데이터를 한 번씩 다 훑어본다는 뜻으로 데이터양이 많을수록 조회 속도가 현저히 떨어진다는 의미입니다. 인덱스를 사용하게 되면 데이터 조회 속도가 말도 안 되게 개선됩니다. 하지만 무분별한 인덱스 생성으로 인한 ..

[ORACLE] 계층형 쿼리 START WITH ··· CONNECT BY

계층형 쿼리 정의 Oracle만 가지고 있는 기능 중 하나로 동일 테이블에 계층적으로 상위, 하위 데이터가 포함된 데이터를 의미함 ※ 본 기능은 Oracle 8i 부터 지원합니다. 계층형 쿼리 사용 방법 START WITH 조건1 ··· CONNECT BY 조건2 START WITH 조건1 : 조건1에 맞는 루트노드를 구한다. CONNECT BY 조건2 : 부모와 자식노드간 (1:N) 관계를 작성하며, 반드시 PRIOR 연산자를 포함시켜야한다. PRIOR 연산자 : PRIOR 연산자는 계층형 쿼리에서만 사용되는 오라클 SQL 연산자이며, '한식'의 PARENT_FOOD_ID 컬럼의 값을 '음식'의 FOOD_ID 컬럼이 가지고 있으므로 PRIOR 연산자를 FOOD_ID 컬럼 앞에 붙이면 된다. ※ 아래 그..

반응형