오라클에는 다양한 함수들이 존재한다. 오라클 내장 함수는 오라클이 제공하는 기본 연산 기능이다.
SINGLE-ROW FUNCTION은 단일함수로, 단일 행에 대한 계산을 처리하는 함수이다.
AGGREGATE FUNCTION은 집계함수로, 여러 데이터를 집계하여 계산을 처리하는 함수이다.
듀얼테이블 : 임시로 사용할 수 있는, 임시로 결과를 저장할 수 있는 테이블
SELECT * FROM DUAL;
ex) SELECT 1234+5678 FROM DUAL; -> 하면 6912라는 계산결과가 나온다.
UPPER : 모든 글자를 대문자로 변환
ex) SELECT UPPER('hello') "결과" FROM DUAL; -> HELLO 라는 계산 결과가 나온다.
LOWER : 모든 글자를 소문자로 변환
ex) SELECT LOWER('HELLO') "결과" FROM DUAL; -> hello 라는 계산 결과가 나온다.
INITCAP : 첫글자만 대문자로 변환
ex) SELECT INITCAP('hello oracle') "결과" FROM DUAL; -> Hello Oracle 라는 계산 결과가 나온다.
SUBSTR : 문자열 추출(자르기, 원하는 부분 추출)
ex) SELECT SUBSTR('ABCDEFG', 3) "결과" FROM DUAL; -> CDEFG가 계산 결과로 나온다.
자바에서는 01234.. 순으로 0부터시작이지만 오라클은 1234.. 순으로 1부터 시작한다.
또는,
ABCDEFG에서 3번째부터 2개만 볼 수 있도록 자른다면,
SELECT SUBSTR('ABCDEFG', 3, 2) "결과" FROM DUAL; -> CD가 계산 결과로 나온다.
REPLACE : 문자열 교체(치환)
ex) SELECT REPLACE('이런 신발끈 개나리같은 수박씨야!', '신발끈', '***' ) FROM DUAL;
하면 이런 *** 개나리같은 수박씨야! 라고 결과가 나온다.
그리고 이런 식도 존재하는데,
SELECT REGEXP_REPLACE('이런 신발끈 개나리같은 수박씨야!', '신발끈|개나리|수박씨', '***' ) FROM DUAL;
또한 어떤 테이블에 고객명단이 있다고 가정하였을 때, 데이터 중 이름을 성만 놔두고 *로 바꿔서 출력(주민번호뒷자리처럼) 그러면 SUBSTR로 첫글자만 잘라내고, **을 더해서 붙여준다.
SELECT SUBSTR(PERSON_NAME, 1, 1) FROM 테이블명;
SELECT SUBSTR(PERSON_NAME, 1, 1) || '**' FROM 테이블 명;
+) RPAD라는게 존재하는데 다음에 공부해봐야 겠다.
집계함수 : 최대, 최소, 합계, 평균, 개수
MAX : 최대값
SELECT MAX(ASCORE) FROM 테이블명; -> 테이블 내의 A항목 최고점수가 출력된다.
ASCORE 대신 PERSON_NAME 사람명을 입력해도 나오는데, 한글도 숫자로 되어있어서 출력이 가능하다.
그 외에도 날짜또한 모두 나온다.
MIN : 최소값
SELECT MIN(ASCORE) FROM 테이블명; -> 테이블 내의 A항목 최저점수가 출력된다.
SUM : 합계
SELECT SUM(ASCORE) FROM 테이블명; -> 테이블 내의 A항목 총 합계가 출력된다.
AVG : 평균
SELECT AVG(ASCORE) FROM 테이블명; -> 테이블 내의 A항목 평균이 출력된다.
COUNT : 개수
SELECT COUNT(PERSON_NO) FROM 테이블명; -> 테이블 내의 사람 수가 출력된다.
PERSON_NO 대신 * 와일드카드를 집어넣어도 같다.
하지만 차이는 PERSON_NO는 번호가 몇개있나요? 라고 묻는것이고, *와일드카드는 데이터가 몇개있나요?(비어있는것포함)으로 묻는 것이다.
'Database SQL > Oracle' 카테고리의 다른 글
[DB#20] 그룹설정+예제 (0) | 2020.11.30 |
---|---|
[DB#19] 함수 및 서브쿼리 점검 문제 (0) | 2020.11.26 |
[DB#17] 정렬(SELECT) 데이터를 정렬해보자!(ASC, DESC) (0) | 2020.11.26 |
[DB#16] 조회(SELECT) (0) | 2020.11.25 |
[DB#15] 시퀀스(SEQUENCE) (0) | 2020.11.25 |