본문 바로가기

Database (84)

반응형
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.
Database/Oracle

[Oracle] REGEXP_COUNT() - 특정 문자의 개수를 세는 함수

REGEXP_COUNT ()함수- 특정 문자의 개수를 세어주는 함수입니다. 예제들을 통하여 REGEXP_COUNT() 함수를 사용해 보도록 하겠습니다.아래 쿼리는 주어진 문자열에서 대문자 ‘A’가 몇 개인지 찾아주는 예입니다.아래 쿼리는 RESULT2 컬럼에서 소문자 I 옵션을 줘서 대소문자 구분 없이 모두 몇 개가 나오는지 세어서 출력하는 예제입니다.i 옵션 : 대소문자를 구분하지 않고 검색합니다.c 옵션 : 대소문자를 구분해서 검색합니다.m 옵션 : 검색 조건을 여러 줄로 줄 수 있습니다 아래 쿼리는 Escape Character를 조회하는 예제입니다.

2020. 3. 26.
Database/Oracle

[Oracle] RATIO_TO_REPORT() - 비율을 구하는 함수

RATIO_TO_REPORT()- 비율을 구하는 함수 예제를 통하여 RATIO_TO_REPORT() 함수를 사용해 보도록 하겠습니다.아래 쿼리는 개개인의 SAL 비중을 나타내는 쿼리입니다.빨간 밑줄 그어져 있는 부분을 보면 ROUND((RATIO_TO_REPORT(sal) OVER())*100, 2)라고 되어있습니다.RATIO_TO_REPORT(컬럼명) OVER() 를 이용하면 컬럼에 대한 비율을 구할 수 있습니다. 파란 박스를 보시면 SUM(SAL) OVER() 한 값이 29025가 나온 것을 보실 수 있습니다. 그리고 비율 함수를 이용하여 FORD와 SCOTT이 총 급여에서 차지하고 있는 비중은 어느정도인지 확인해 보니 약 10%인 것을 보실 수 있습니다. 일부로 비율 계산을 보기 쉽게 FORD와 S..

2020. 3. 26.
Database/Oracle

[Oracle] 인덱스의 속도 비교

인덱스란 SQL 명령문의 처리 속도를 향상시키기 위해서 컬럼에 대해서 생성하는 오라클 객체입니다.인덱스를 왜 사용하는 것일까요?- 빠른 검색을 하기 위해서 사용합니다.인덱스의 장점검색 속도가 빨라집니다.시스템에 걸리는 부하를 줄여서 시스템 전체 성능을 향상시킨다.인덱스의 단점인덱스를 위한 추가 공간이 필요하다.인덱스를 생성하는데 시간이 걸린다.데이터의 변경 작업 (INSERT, UPDATE, DELETE)이 자주 일어날 경우에는 오히려 성능이 저하된다인덱스 정보 조회 책의 색인란과 동일한 역할인 쿼리를 빠르게 수행하기 위한 용도로 사용되는 인덱스는 기본 키나 유일 키와 같은 제약 조건을 지정하면 따로 생성하지 않더라도 자동으로 생성해줍니다.기본 키나 유일 키는 데이터 무결성을 확인하기 위해서 수시로 데이..

2020. 3. 22.
Database/Oracle

[Oracle] 데이터 딕셔너리 뷰

데이터 딕셔너리란?- 데이터베이스 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블을 데이터 딕셔너리라고 합니다.- 데이터 딕셔너리는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신되는 테이블로 사용자는 데이터 딕셔너리의 내용을 직접 수정하거나 삭제할 수 없습니다.- 이러한 데이터 딕셔너리를 사용자가 조회해 보면 시스템이 직접 관리하는 테이블이기에 암호 같은 기호만 보여질 뿐 내용을 알 수 없습니다.- 데이터 딕셔너리 원 테이블은 직접 조회하기란 거의 불가능한 일입니다.데이터 딕셔너리 뷰- 의미 있는 자료 조회가 불가능하기에 오라클은 사용자가 이해할 수 있는 데이터를 산출해 줄 수 있도록 하기 위해서 데이터 딕셔너리에서 파생한 ..

2020. 3. 22.
Database/Oracle

[Oracle] UNION과 UNION ALL의 개념 및 예제 쿼리

UNION- 합집합과 같은 개념- SELECT 절에 나열된 모든 컬럼에 대해 두 테이블에 있는 내역 조회- DISTINCT 역할 : 한 테이블 기준 동일한 데이터는 한 번만 조회됨- SELECT 리스트의 컬럼의 개수, 순서, 타입이 같아야 함UNION ALL- 합집합과 같은 개념- SELECT 절에 나열된 모든 컬럼에 대해 두 테이블에 있는 내역 조회- SELECT 리스트의 컬럼의 개수, 순서, 타입이 같아야 함- UNION과 다른 점은 한 테이블에 있는 동일 데이터가 모두 조회됨SELECT col1, col2, col3FROM table1WHERE ...UNION[UNION ALL]SELECT col1, col2, col3FROM table2WHERE ...합집합과 UNION예제를 통하여 UNION을 ..

2020. 3. 20.
Database/Oracle

[Oracle] 다중 행 서브쿼리 -개념 및 예제

다중 행 서브쿼리란?- 다중 행 서브 쿼리는 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용됩니다.- 결과가 2개 이상 구해진 쿼리문을 서브 쿼리로 기술할 경우에는 다중 행 연산자와 함께 사용해야 합니다.종류의미IN메인 쿼리의 비교 조건 ('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다.ANY, SOME메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다.ALL메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.EXIST메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다. EX) 10번 부서에 근무하는 사원의 이름과 10번 부서의 부서명을 출력 EX..

2020. 3. 20.
Database/Debug Log

[Oracle - Error] ORA-00918: 열의 정의가 애매합니다 - "column ambiguously defined"

이번 글에서는 ORA-00918: 열의 정의가 애매합니다 에러에 대하여 알아보도록 하겠습니다.ORA-00918: 열의 정의가 애매합니다 | ORA-00918: "column ambiguously defined"쿼리를 작성하다가 이런 에러가 발생하신 경험이 있으실 겁니다.예제를 통하여 에러가 발생하는 이유와 해결방법에 대하여 알아보겠습니다. 아래 쿼리는 emp 테이블과 dept 테이블을 조인하여 사원명(ename), 부서명(dname), 부서 번호(deptno)를 조회하는 예제입니다.SELECT ename, dname, deptnoFROM emp, deptWHERE emp.deptno = dept.deptnoAND ename = 'SCOTT'; 위의 쿼리를 실행하니 바로 ORA-00918: "column ..

2020. 3. 20.
Database/Debug Log

[Oracle - Error] ORA-01722: 수치가 부적합합니다 - The specified number was invalid

이번 글에서는 ORA-01722: 수치가 부적합합니다 에러에 대하여 알아보도록 하겠습니다.ORA-01722: 수치가 부적합합니다 | ORA-01722: "invalid number" 쿼리를 작성하다가 이런 에러가 발생하신 경험이 있으실 겁니다.예제를 통하여 에러가 발생하는 이유와 해결방법에 대하여 알아보겠습니다. 아래 쿼리는 VARCHAR2 TYPE의 'Oracle'을 NUMBER TYPE으로 바꿔보자 라는 예제입니다.문자열인 'Oracle'을 숫자로 바꿀 수 있을까요? 불가능합니다. 위의 쿼리를 실행하니 ORA-01722: "invalid number" 에러가 발생하였습니다. ORA-01722 에러는 타입이 일치하지 않은 경우에 종종 발생합니다.주로 VARCHAR2 TYPE에 NUMBER TYPE이 ..

2020. 3. 19.
Database/Oracle

[Oracle] TO_NUMBER 함수 - 문자를 숫자로 바꿔주는 형 변환①

오라클을 사용하면 숫자, 문자, 날짜의 데이터 형을 다른 데이터형으로 변환해야 하는 경우가 생깁니다. 이럴 때 사용하는 함수가 형 변환 함수입니다. 형 변환 함수로는 TO_CHAR, TO_DATE, TO_NUMBER 가 있습니다.구분설명TO_CHAR날짜형 혹은 숫자형을 문자형으로 변환한다.TO_DATE문자형을 날짜형으로 변환한다.TO_NUMBER문자형을 숫자형으로 변환한다. TO_NUMBER특정 데이터를 숫자형으로 변환해주는 함수입니다.아래의 쿼리는 '20,000'을 '10,000'의 차이를 알아보기 위한 예제입니다.아마 문자열인 '20000' - '10000' 이런식으로 계산이 된다면, 에러가 발생할 것입니다.따라서, 산술연산을 하려면 문자형을 숫자형으로 변형한 후 실행해야 합니다.EX) 문자열 : '..

2020. 3. 19.
Database/Oracle

[Oracle] ORDER BY - 정렬 순서 정하는 방법

이번 글에서는 정렬하는 방법에 대해 작성해보려고 합니다.정렬이란 크기 순서대로 나열하는 것을 말합니다. 'ORDER BY' 라는 명령문에 정렬 방식을 추가하면 아주 간단하게 정렬이 됩니다.정렬 방식에는 오름차순 방식과, 내림차순 방식이 있습니다.오름차순(ascending) 정렬 방식- 작은 것이 위에 출력되고 아래로 갈수록 값이 큰 값이 출력- ex) 1, 2, 3, 4, 5- ORDER BY의 default는 ascending방식내림차순(descending) 정렬 방식- 큰 것이 위에 출력되고 아래로 갈수록 값이 작아지는 값이 출력- ex) 5, 4, 3, 2, 1 row를 정렬하기 위해서는 SELECT문에 ORDER BY절을 추가하고 어떤 컬럼을 기준으로 어떤 정렬을 할 것인지를 결정해야 합니다. ..

2020. 3. 19.
Database/Oracle

[Oracle] IN() - 여러 개를 조회

IN 연산자동일한 필드가 여러 개의 값 중에 하나인 경우인지를 살펴보기 위해서 비교연산자와 논리연산자 OR을 사용하여 복잡하게 쿼리문을 작성하지 않고 IN 연산자를 사용하여 훨씬 간단하게 표현할 수 있습니다.column_name IN(A, B, C) 특정 필드의 값이 A이거나 B이거나 C 중에 어느 하나만 만족하더라도 출력하도록 하는 표현을 IN 연산자를 사용하여 할 수 있습니다. 예제를 통하여 IN() 함수에 대해 알아보도록 하겠습니다.다음 예제는 커미션(COMM)이 300이거나 500이거나 1400인 사원을 검색하는 예제입니다. WHERE절에 COMM IN(300, 500, 1400) 을 줌으로써 OR 조건을 여러개 사용하지 않고 간단하게 쿼리가 작성되었습니다.

2020. 3. 18.
반응형