본문 바로가기

Database/Oracle (27)

반응형
Database/Oracle

[Oracle] Cartesian Product(카티션곱)이란?

이번 시간에는 CROSS JOIN에 대하여 알아보도록 하겠습니다.크로스 조인은 흔히 Cartesian Product(카티션 곱)이라고 많이들 불립니다.Cartesian Product [카티션 곱]조인 조건절을 적지 않은 경우 해당 테이블에 대한 모든 데이터를 가져오는 현상이 바로 카티션 곱인데요.즉, 조인 쿼리 중에 WHERE 절 혹은 JOIN 조건절이 잘못 기술되었거나 아예 없을 때 발생합니다. 아래 예제를 통하여 한 번 확인해 보도록 할까요?- 출력결과를 화면에 전부 담아내지는 못했지만 총 56개의 결과값이 나왔습니다.- 카티션 곱의 결과 얻어지는 컬럼의 수는 사원 테이블의 컬럼의 수(8)와 부서 테이블의 컬럼의 수(3)를 더한 것이므로 11이 됩니다.- ROW(행) 수는 사원 한 명에 대해서 DEP..

2020. 7. 18.
Database/Oracle

[Oracle] MAX(), MIN() - 최댓값과 최솟값을 구하는 방법

이번 글에서는 최댓값과 최솟값을 구하는 함수인 MAX()와 MIN() 에 대하여 알아보도록 하겠습니다.이번 글은 정말 쉬워서 짧고 간단하게 끝날 예정이니, 감만 익히시면 될겁니다. 문법을 살펴보면 이렇습니다. 인수로는 간단하게 컬럼명을 입력하시면 됩니다.MAX(컬럼)MIN(컬럼) 아래 예제를 통하여 바로 접근해보도록 하겠습니다.아래 쿼리는 EMP 테이블 내에서 가장 높은 급여와 가장 낮은 급여를 구하는 예제입니다.최댓값(MAX)로는 5000, 최솟값(MIN)으로는 800이 조회된 것을 확인할 수 있습니다. 그렇다면 날짜는 어떻게 기준이 잡힐까요?아래 쿼리는 가장 최근에 입사한 사람과 가장 나중에 입사한 사람의 입사날짜를 구하는 예제입니다.MAX(날짜) 를 하면 가장 최근 날짜가.MIN(날짜) 를 하면 가..

2020. 7. 16.
Database/Oracle

[Oracle] COUNT() - 행의 개수를 구하는 방법

데이터베이스를 다루다 보면 테이블에 저장된 데이터의 개수를 파악해야 하는 경우가 매우 많습니다. 예를 들어 전체 사원의 수를 확인하거나, 특정 조건을 만족하는 데이터가 몇 건인지 조회해야 할 때가 대표적입니다. 이럴 때 가장 자주 사용되는 함수가 바로 COUNT() 함수입니다.COUNT() 함수는 조회 결과의 행(row) 개수를 간단하고 정확하게 계산할 수 있도록 도와주며,NULL 값 처리 방식에 따라 사용법이 달라지기 때문에 정확한 이해가 중요합니다. 이번 글에서는 COUNT() 함수와 COUNT(*) 함수의 차이점을 중심으로,예제를 통해 각각의 사용 방법과 조회 결과를 하나씩 살펴보도록 하겠습니다.COUNT()- 행의 개수를 반환하는 그룹 함수입니다.- 그룹 함수이다 보니까 NULL값에 대해서는 개수..

2020. 7. 15.
Database/Oracle

[Oracle] CASE WHEN THEN 문

이번 글에서는 오라클 표현식 CASE ~ WHEN ~ THEN 구문에 대하여 알아보도록 하겠습니다.실제 실무에서도 자주 쓰이는 구문이니까 잘 알아두시면 아주 편리하겠습니다.CASE ~ WHEN ~ THEN 구문- 여러가지 경우에 대해서 하나를 선택하는 함수입니다.- DECODE 함수와 차이점이 있다면 DECODE 함수는 조건이 일치하는 경우에 대해서만 적용되는 반면, CASE 문은 다양한 비교 연산자를 이용하여 조건을 제시할 수 있으므로 범위를 지정할 수 있습니다.- 프로그래밍 언어의 if ~ else 구문과 유사한 구조를 가지고 있습니다.CASE ~ WHEN ~THEN 문법아래 문법으로만 봤을 때는 살짝 복잡해 보일수도 있습니다.CASE 표현식 WHEN 조건1 THEN 결과1 WH..

2020. 7. 14.
Database/Oracle

[Oracle] TRIM(), LTRIM(), RTRIM() - 공백 제거하는 방법

이번 시간에는 공백을 제거하는 방법에 대하여 알아보도록 하겠습니다.TRIM() 함수를 이용하면 아주 손쉽게 공백을 제거할 수 있습니다.LTRIM 함수- 문자열의 왼쪽(앞)의 공백 문자들을 삭제합니다.아래 예제를 통하여 확인해 보도록 하겠습니다.왼쪽부분의 공백은 없어지고 오른쪽의 공백은 아직 남아있네요.RTRIM 함수- 문자열의 오른쪽(뒤)의 공백 문자들을 삭제합니다.마찬가지로 아래 예제를 통하여 확인해 보도록 하겠습니다.LTRIM() 함수와는 반대로 왼쪽 공백은 남아있고 오른쪽 공백은 제거되었네요.TRIM 함수- 문자열의 앞, 뒤 공백 문자들을 삭제합니다.아래 예제를 통하여 확인해 보도록 하겠습니다.LTRIM(), RTRIM() 함수와는 달리 왼쪽, 오른쪽 구분 없이 공백 문자들이 모두 삭제되어서 출력되..

2020. 7. 8.
Database/Oracle

[Oracle] MOD() - 나머지를 구하는 방법

이번 글에서는 나머지를 구하는 방법에 대하여 알아보도록 하겠습니다.프로그래밍 언어에서는 주로 % 연산자로 구하는데요. 오라클에서는 어떻게 나머지를 구할까요?MOD() 함수를 이용하면 아주 간단하게 나머지를 구할 수 있습니다. MOD() 함수나누기 연산을 한 후에 구한 몫이 아닌 나머지를 결과로 되돌려주는 함수입니다.아래 예제를 통하여 자세히 살펴보도록 하겠습니다.나머지 값이 잘 출력된 것을 확인할 수 있습니다.이번에는 사번이 홀수인 사람들을 검색해보는 쿼리를 예로 들어보겠습니다.정수를 2로 나누어서 나머지가 0이면 짝수정수를 2로 나누어서 나머지가 1이면 홀수 실제로 나머지를 이용하여 값을 구하는 일이 많습니다. 이번 기회에 확실하게 MOD() 함수를 마스터해서 실무에서 시간을 단축하셨으면 좋겠습니다.

2020. 7. 6.
Database/Oracle

[Oracle] POWER() - 거듭제곱 구하는 방법

이번 시간에는 제곱값을 구하는 방법에 대하여 알아보겠습니다.제곱값을 구하는 방법은 POWER() 함수를 이용하면 아주아주 간단합니다.POWER 함수POWER(M, N) M의 N승을 구하는 함수입니다.이해를 돕기 위해 예제를 살펴 보도록 하겠습니다.아래 예제는 5의3승을 구하는 쿼리입니다.5^3은 5x5x5x = 125맞죠? 그러니까 125가 됐습니다.

2020. 7. 4.
Database/Oracle

[Oracle] FLOOR(), TRUNC() - 소수점 버리는 방법

이번 글에서는 소수점이하를 버리는 FLOOR()와 TRUNC() 함수에 대하여 다루어 보도록 하겠습니다.FLOOR 함수수점 아래를 버리는 함수입니다.아래 예제는 34.5678을 FLOOR 함수에 적용하면 34가 조회되는 쿼리입니다.TRUNC 함수지정한 자리 수 이하를 버린 결과를 출력해주는 함수두 번째 인자의 값이 2이면 소수점 이하 세 번째 자리에서 버림 연산을 하여 소수점 이하 두 번째 자리까지 표시합니다.아래 예제를 통하여 확인해 보도록 하겠습니다. 두 번째 인자 값이 0인 경우에는 소수점자리에서 버림 연산을 하고 -1인 경우는 일의 자리에서 버림 연산을 하며 두 번째 인자가 주어지지 않은 경우에는 0으로 간주되어 소수점자리에서 버림 연산을 수행합니다.

2020. 7. 3.
Database/Oracle

[Oracle] ROUND() - 반올림 하는 방법

이번 글에서는 반올림하는 방법에 대하여 알아보도록 하겠습니다.Oracle에서 제공하는 ROUND() 함수를 이용하면 아주 간단하게 할 수 있는데요.ROUND() 함수가 무엇인지 알아보겠습니다.ROUND 함수- 반올림 해주는 함수입니다.- 지정한 자릿수에서 반올림을 할 수 있습니다.- 자릿수에 음수를 지정할 수 있는데 이럴 경우 소수점 이하가 아니라 반대쪽인 일단위, 십단위, 백단위 순으로 거슬러 올라가게 되며, 인자 값이 양수일 때와는 달리 해당 자리에서 반올림이 일어나게 됩니다. 아래 예제를 통하여 이해를 돕도록 하겠습니다.인수에 반올림 대상인 값만 적으면 소수점 부분은 모두 제거돼서 34.5678을 반올림하면 35가 구해집니다. 인수에 반올림 대상과, 그 다음에 정수를 적어주면 정수자리까지 반올림한다..

2020. 7. 2.
Database/Oracle

[Oracle] SUBSTR() - 문자열의 일부분 추출하는 방법

이번 글에서는 문자열의 일부분을 잘라내어 그 부분을 추출하는 방법에 대하여 알아보도록 하겠습니다.SUBSTR() 함수를 이용하면 간단하게 추출할 수 있습니다.SUBSTR 함수- 대상 문자열이나 컬럼의 자료에서 시작위치부터 선택 개수만큼의 문자를 추출합니다. 예제를 통하여 자세히 확인해 보도록 하겠습니다. 아래 예제는 인덱스가 1부터 시작하니까 인덱스가 4인 c부터 3개 조회하는 쿼리입니다. 아래 그림에서 확인할 수 있듯이 com부분이 맞네요. 이번에는 다른 예제로 접근해보도록 하겠습니다.시작위치 인자 값을 음수 값으로 줄 수 있는데 이때는 문자열의 앞쪽이 아닌 뒤 쪽에서부터 세어서 시작위치를 잡습니다.

2020. 6. 26.
Database/Oracle

[Oracle] MODIFY - 테이블 컬럼(명, 크기, 타입 등) 변경하는 방법

이번 글에서는 테이블 컬럼을 변경하는 방법에 대해 알아보겠습니다. 컬럼의 이름, 타입, 크기, 기본값을 변경할 수 있습니다. MODIFY 명령어를 이용하면 어렵지 않으니 잘 따라와주세요!ALTER TABLE MODIFY- 테이블에 이미 존재하는 컬럼을 변경할 수 있습니다.- 컬럼을 변경한다는 것은 컬럼에 대해서 데이터 타입이나 크기, 기본값들을 변경한다는 의미입니다.ALTER TABLE MODIFY 문법문법으로 봐도 크게 어렵지 않습니다. ALTER TABLE table_nameMODIFY ( column_name, data type expr, ...); 예제를 통하여 확인해보도록 하겠습니다.아래 예제는 직급(JOB) 컬럼을 최대 30글자까지 저장할 수 있게 변경하는 쿼리입니다.직급 컬럼의 크기가 30글..

2020. 6. 25.
Database/Oracle

[Oracle] SET UNUSED - 컬럼 사용 제한하는 방법 (feat. ALTER TABLE DROP COLUMN)

이번 글에서는 컬럼 사용을 제한하는 방법에 대하여 알아보도록 하겠습니다.간혹 작업하다가 혹시 몰라서 컬럼 사용을 제한하고 작업을 하는 경우나 안쓰는 컬럼이 종종 있습니다.컬럼 사용을 제한하기 위해서는 SET UNUSED 명령어를 사용하면 아주 편리한데요. 지금 알아보겠습니다.SET UNUSED특정 테이블의 컬럼을 무조건 삭제하는 것은 위험합니다.테이블에 저장된 내용이 많을 경우 해당 테이블에서 컬럼을 삭제하는 데 꽤 오랜 시간이 걸리게 될 것입니다. 컬럼을 삭제하는 동안에 다른 사용자가 해당 컬럼을 사용하려고 접근하게 되면 지금 현재 테이블이 사용되고 있기 때문에 다른 사용자는 해당 테이블을 이용할 수 없게 됩니다. 이런 경우 작업이 원활하게 진행되지 않고 락(LOCK)이 발생하게 됩니다. ALTER T..

2020. 6. 22.
Database/Oracle

[Oracle] ROWID란?

ROWID- 테이블에서 행의 위치를 지정하는 논리적인 주소값입니다.- DB 전체에서 중복되지 않는 유일한 값으로 테이블에 새로운 행이 삽입되면 테이블 내부에서 의사 컬럼 형태로 자동적으로 생성됩니다.- 테이블의 특정 레코드를 랜덤하게 접근하기 위해서 주로 사용 됩니다.ROWID는 다음과 같은 형식으로 데이터를 저장합니다.- 데이터 객체번호는 테이블이나 인덱스와 같은 데이터 객체가 생성될 때 할당됩니다.- 상대적인 파일번호는 데이터가 저장되는 물리적인 데이터 파일 번호로서 유일한 값을 가집니다.- 블록번호는 데이터 파일 내에서 행을 포함한 블록 위치입니다.- 행 번호는 블록 내에서 행 위치를 나타내는 번호입니다.

2020. 5. 19.
Database/Oracle

[Oracle] INTERVAL DAY TO SECOND - 두 날짜 사이 기간 저장하기

INTERVAL DAY TO SECOND일, 시, 분, 초를 사용하여 두 날짜 사이의 기간을 저장하기 위한 데이터 형입니다.자릿수를 지정하지 않으면 기본적으로 2자리가 잡힙니다.INTERVAL DAY(일수에 대한 자릿수) TO SECOND(초에 대한 자릿수) EX) INTERVAL DAY TO SECOND 형으로 컬럼을 생성하여 100일이란 기간을 저장해 봅시다.다음은 SAM03이란 이름의 테이블을 새롭게 생성하는 명령어입니다.CREATE TABLE SAM03( DAY01 INTERVAL DAY(3) TO SECOND); 생성된 테이블에 기간을 100일 저장합니다.INSERT INTO SAM03VALUES( INTERVAL '100' DAY(3)); 오늘 날짜를 출력하고 테이블 SAM03의 DAY01 이..

2020. 5. 19.
Database/Oracle

[Oracle] ROLLBACK이란?

ROLLBACK이란?- 작업 중 문제가 발생되어서 트랜잭션의 처리 과정에서 발생한 발견사항을 취소하는 명령어입니다.- ROLLBACK 역시 하나의 트랜잭션 과정을 종료하게 됩니다.- 트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌립니다.- Transaction(INSERT, UPDATE, DELETE) 작업 내용을 취소합니다.- 이전 COMMIT한 곳 까지만 복구합니다.COMMIT과 ROLLBACK의 장점- 데이터 무결성이 보장됩니다.- 영구적인 변경 전에 데이터의 변경 사항을 확인할 수 있습니다.- 논리적으로 연관된 작업을 그룹화 할 수 있습니다.자동 COMMIT, ROLLBACK 되는 경우- SQL*PLUS가 정상 종료되었다면 자동으로 COMMIT 되지만, 비정상 종료되었다면 자동으..

2020. 5. 18.
Database/Oracle

[Oracle] FOREIGN KEY(외래키) 제약 조건 설정

참조 무결성을 위한 FOREIGN KEY 제약 조건- 다음은 ERD(Entity Relation Diagram)로서 테이블을 생성하기에 앞서 데이터베이스 모델링 과정에서 업무를 분석한 후 얻어낸 개체와 관계를 다이어그램으로 나타낸 것입니다.- ERD 를 보고 데이터베이스를 구현할 때에는 부서나 사원과 같은 개체는 테이블로 정의하고 소속이란 관계는 참조의 무결성을 위한 특정 컬럼에 외래 키 제약 조건으로 정의합니다.참조 무결성은 두 테이블 사이(사원, 부서)의 주종관계에 의해서 결정되는데 주체가 되는 테이블은 부모 테이블이 되고 종속이 되는 테이블은 자식 테이블이 됩니다.사원은 회사 내에서 존재하는 부서에 소속되어야 합니다.위와 같이 표현하면 부서가 주체(부모 테이블) 사원이 종속(자식 테이블)이 됩니다...

2020. 5. 15.
Database/Oracle

[Oracle] INSERT ALL - 여러 테이블에 데이터 추가하는 방법

다중 테이블에 다중 행 입력하기- INSERT ALL 문을 사용하면 서브 쿼리의 결과를 조건 없이 여러 테이블에 동시에 입력할 수 있습니다.- INSERT ALL 문을 사용하면 두 번의 쿼리문을 실행하지 않고도 하나의 쿼리문으로 두 개의 테이블에 원하는 컬럼 값을 삽입할 수 있습니다.- 이때 주의할 점은 서브쿼리의 컬럼명과 데이터가 입력되는 테이블의 컬럼명이 동일해야 한다는 것입니다.INSERT ALLINTO EMP_HIR VALUES(EMPNO, ENAME, HIREDATE)INTO EMP_MGR VALUES(EMPNO, ENAME, MGR)SELECT (EMPNO, ENAME, HIREDATE, MGR) FROM EMP WHERE DEPTNO = 20;조건(WHEN)에 의해 다중 테이블에 다중 행 입..

2020. 5. 15.
Database/Oracle

[Oracle] REGEXP_REPLACE() - 특정 패턴을 찾아 바꾸는 함수

REGEXP_REPLACE 함수- 주어진 문자열에서 특정 패턴을 찾아서 주어진 다른 모양으로 치환하는 함수예제 1). 모든 숫자를 특수 기호로 변경하기‘[[:digit:]] 부분은 [:문자클래스:]의 형태로 표현을 합니다. 그리고 “문자 클래스”에 들어갈 수 있는내용은 alpha, blank, cntrl, digit, graph, lower, print, space, upper, xdigit의 종류가 있습니다.많이 사용되는 것의 예를 들면 [:digit:]는 [0-9]의 의미이고 [:alpha:]는 [A-Za-z]와 같은 의미를 나타내고 [:space:]는 공백을 의미합니다.예제 2). 특정 패턴을 찾아서 패턴을 변경하기숫자를 찾아서 숫자 뒤에 ‘-*’를 추가하는 예제입니다.비슷한 예로 아래 화면은 ip..

2020. 3. 26.
반응형