본문 바로가기

SQLD · DB

[ SQLD ] 실습 240802

SELECT * FROM dual

dual 이라는 테이블은 sys 가 소유하는 오라클의 표준 테이블로써

오직 한 행에 한 컬럼만 담고 있는 dummy 테이블 ( 임시 테이블 ) 이다. 

일시적인 산술 연산이나 날짜 연산 등에 주로 사용하며

모든 사용자가 접근할 수 있다 ( 사용할 수 있다 )

 

문자열 단순 조회

 

lower() 함수는 ()괄호 안의 문자열을 모두 소문자로 바꾸어 출력하고,

initcap() 함수는 ()괄호 안의 문자열중 앞 글자만 대문자로 바꾸어 출력하고,

upper() 함수는 ()괄호 안의 문자열을 모두 대문자로 바꾸어 출력한다.

 

원본 last_name을 기준으로 소문자, 앞 글자만 대문자, 대문자 로 바꾼 것을 출력한다.

 

 

길이를 반환하는 length, 문자를 찾는 instr ( 찾는 문자가 없으면 0 을 반환, 있으면 인덱스 값을 반환한다 )

사용방법은 LENGTH(길이를 찾고자 하는 문자열), INSTR(원본문자열, 원본문자열에서 찾고자 하는 문자열)

원본 문자열 'abcdef' 의 길이를 출력하고자 할 때 → LENGTH('abcdef')

원본 문자열  'abcdef' 에서 'b'의 인덱스 ( 위치 ) 를 찾고자 할 때 → INSTR( 'abcdef', 'b')

→ index 의 시작 값은 보통 0 부터 시작하는데 오라클 DB 에서만 인덱스 시작 값이 1 이다.

 

FROM dual → 오라클에서 제공하는 임시테이블에서 조회하기

 

SUBSTR(자를 문자열, 시작인덱스, 길이) → 자를 문자열을 기준 ( 원본 ) 으로 시작인덱스 부터 길이만큼 잘라준다.

SUBSTR(자를 문자열, 시작인덱스) → 길이 값을 제공하지 않으면 문자열 끝까지 잘라준다.

인덱스는 1부터 시작한다. 

CONCAT은 문자를 연결해준다.

SUBSTR('acbcdf', 2, 5) → abcdf 이 문자열을 기준으로 2번 인덱스에 해당하는 c부터

c 부터 길이 5에 해당하는 5개의 글자를 잘라서 반환하기 그래서 반환 값이 cbcdf 다.

CONCAT 함수의 경우 매개 값을 2개만 허용하기 때문에 || ( or 기호 ) 를 사용해서 문자열을 붙이는 것이 낫다.

 

좌, 우측을 지정한 문자열로 채우는 LPAD, RPAD

기존 값 가릴 때, 예를 들면 아이디 뒷 자리 몇 개 별로 처리할 때 사용된다.

LPAD(원본문자열, 길이, 지정문자열) → 원본 문자열을 기준으로 왼쪽에 지정문자열을 채울건데,

원본 문자열의 길이를 포함해 지정한 길이까지 지정문자열을 채워준다. 위 그림에서 'abc'가 원본 문자열이고,

이 원본 문자열의 왼쪽에 지정 문자열인 '*'를 채울건데, 채웠을 때, 그 길이가 원본 문자열의 길이를 포함해서 10 자리다.

그래서 *******abc *이 왼쪽에 7개, 원본 문자열의 길이 3개 합쳐서 10 이 된다.

 

REPLACE 함수

REPLACE(원본값, 원본값에서 바꾸고 싶은 값, 대체할 값) → 원본 값에서 대체할 값을 찾고, 그 값을 대체값으로 모두 변경한다.

예를 들어 REPLACE( hire_date, '/', '') → hire_date 컬럼에 대응하는 값에서 /(슬러시 기호) 값을 모두 찾아 ''(없는걸로) 대체한다.

 

REPLACE(원본문자열, 원본문자열에 있는 어떤 값, 대체할 [ 바꿀 ] 값)

 

반올림 함수 ROUND

괄호 안에 수를 주면 반올림해준다.

원하는 반올림 위치를 매개 값으로 지정할 수 있다.

예를 들어 소수점이하 3자리까지 나타내고 싶다면

ROUND(3.1415, 3) 이렇게 작성하면 소수점이하 3자리까지 출력할 수 있고,

소수점이하 4자리에서 반올림하여 결과는 3.142가 출력된다.

음수를 주는 것도 가능하다.

ROUND(45.923, 0) → 소수점이하의 수를 나타내지 않는다 ( 0 ) 그래서 소수점이하 1의 자리에서 반올림하여 46이 된다.

 

TRUNC 함수는 지정한 소수점 자리까지만 나타낸다.

예를 들어 TRUNC(3.1415, 3) 을 작성하면 결과는 3.141 이 출력된다.

3은 소수점이하 나타낼 자리수를 의미하는데, 해당 자리수 (3) 의 나머지는 모두 잘라낸다는 것이다.

 

CEIL(올림), FLOOR(버림), ABS(절댓값)

오라클에서 /(슬러시 기호)는 나눗셈 연산 기호,

%(퍼센트)는 나눗셈을 한 나머지를 구하는 연산이 아니다.

나눗셈을 한 나머지를 구하는 연산을 하고 싶다면 MOD() 함수를 사용한다.

예를 들어 10 나누기 4의 나머지를 구하고 싶다면 MOD(10, 4) 라고 작성한다.

 

sysdate는 컴퓨터의 현재 날짜, 시간 정보를 가져와서 제공한다.

이와 비슷한 기능을 제공하는 systimestamp 가 있는데,

systimestamp는 밀리세컨초까지 제공한다.

 

날짜도 연산이 가능하다.

SELECT sysdate + 1 FROM dual;

→ 현재 컴퓨터의 날짜 정보 [ 와 시간 정보 ] 에 1을 더한 결과를 임시 테이블 ( dual ) 에서 조회한다.

예를 들어 오늘이 24년 8월 2일이라면 1을 더한 값이니 24년 8월 3일이 되고, 출력은 24/08/03 이 된다.

 

날짜 타입과 날짜 타입은 뺄셈 연산을 지원하지만 덧셈 연산은 허용하지 않는다.

( 날짜 타입과 날짜 타입의 ) 뺄셈 연산의 결과는 일수가 기준이 된다.

 

SELECT

 first_name, sysdate - hire_date

FROM employees;

→ 현재 날짜와 시간 정보를 나타내는 sysdate 에서 입사일 hire_date 를 빼면

입사일로부터 며칠이 지난지를 대략적으로 알 수 있다. 일수를 기준으로 결과가 출력되기 때문

몇 주차인지를 알고 싶다면 주 단위인 7을 나누면 알 수 있고,

근속년수, 몇 년차인지를 알고 싶다면 1년과 대응하는 365 를 나누면 알 수 있다.

 

주 수 확인

SELECT

 first_name,

 ( sysdate - hire_date / 7 ) AS week

FROM employees;

 

년 수 확인 → 근속년수

SELECT

 first_name,

 ( sysdate - hire_date / 365 ) AS week

FROM employees;