SQL _ SELECT(사칙연산, 연결연산, 내장형함수, 형변환함수, NULL함수)
1. 사칙연산

2. 연결연산 (||)


3. 내장형(built-in) 함수
- 미리 만들어 놓은 함수
- 문자형 함수 : UPPER , SUBSTR , TRIM , REPLACE
- 숫자형 함수 : MOD , ROUND
- 날짜형 함수 : SYSDATE
* 본업시 전부 외울 필요없이 필요할 때만 구글링
1) 문자형 함수
(1) UPPER
- 기능 : 입력받은 문자열에서 소문자를 대문자로 바꿔준다
- 입력 값 : 문자형 리터럴 1개 혹은 문자형 컬럼
- 출력 값 : 문자형 리터럴 1개
- 예시 1) SELECT UPPER('abcde123@@') AS UPPER사용

- 예시 2) SELECT CUST_ID , PASSWD , UPPER(PASSWD) AS 패스워드대문자

(2) SUBSTR
- 기능 : 입력받은 문자형 리터럴에서 시작위치에서 길이만큼 잘라낸다
- 입력 값 : 문자형 리터럴 1개 , 시작위치 , 길이
- 출력 값 : 문자형 리터럴 1개
- 예시
SELECT PRD_ID
, PRD_NAME
, PRD_DETAIL
, SUBSTR(PRD_DETAIL , 1 , 5) || '...' AS 상품설명생략 -- 첫번째부터 5번째 단어까지 출력 (띄어쓰기 포함)
FROM TB_PRD
WHERE PRD_TYPE = '가전';

(3) TRIM
- 기능 : 입력받은 문자형 리터럴의 양 끝의 공백을 제거한다. (단, 문자 중간의 공백은 제거 X)
- 입력 값 : 문자형 리터럴 1개 (기본적으로 쓰는 방식 기준)
- 출력 값 : 문자형 리터럴 1개
- 예시
SELECT TRIM(' 안녕하세요 ') , TRIM( '안 녕 하 세 요 ')
FROM DUAL ;

(4) REPLACE
- 기능 : 입력받은 문자형 리터럴 안에있는 바뀔값을 바꿀값으로 변경하여 출력한다.
- 입력 값 : 문자형 리터럴 1개 , 바뀔값, 바꿀값
- 출력 값 : 문자형 리터럴 1개
- 예시
SELECT PRD_ID
, PRD_NAME
, PRD_DETAIL
, REPLACE(PRD_DETAIL , ' ' , '') --값에 있는 띄어쓰기(' ') 를 공백('')으로 치환
FROM TB_PRD
WHERE PRD_TYPE = '가전';

2) 숫자형 함수
(1) MOD
- 기능 : 피제수를 제수로 나눈 나머지 숫자형 리터럴을 출력한다.
- 출력 값 : 숫자형 리터럴 1개 -- 예시) 10 % 3 = 1
- 입력 값 : 숫자형 리터럴 2개 ( 피제수 , 제수 ) -- 예시 ) 피제수 : 10 , 제수 : 3
- 예시
SELECT MOD(100 , 8) AS 나머지값
, MOD(30 ,10) AS 나머지값2
FROM DUAL ;

(2) ROUND
- 기능 : 실수를 소수점 자릿수까지 반올림한 결과를 출력한다.
- 입력 값 : 숫자형 리터럴 2개 ( 실수 , 소수점자릿수 )
- 출력 값 : 숫자형 리터럴 값
- 예시
SELECT ROUND(1.452 , 2) , ROUND(1.452 , 1)
FROM DUAL

3) 날짜형 함수
(1) SYSDATE
- 입력 시 바로 출력이 되며, 현재 시간을 초단위까지 날짜형 리터럴로 출력
- 실무에서는 현재 시간을 입력하거나, 아래와 같이 날짜를 조작해 사용하기도 합니다
- 예시
SELECT SYSDATE + 1 AS 하루더함
, SYSDATE + 1/24 AS 한시간더함
, SYSDATE + 1/24/60 AS 일분더함
, SYSDATE + 1/24/60/60 AS 일초더함
FROM DUAL ;

4. 형변환함수
- 특정 자료형으로 변경하는 함수
- 연산을 하기 전 형 변환 발생
- 형 변환 우선순위 : 날짜형(1순위) > 숫자형 > 문자형
- TO_CHAR, TO_DATE, TO_NUMBER( )

- 예시
SELECT TO_NUMBER('1') -- 문자형('1')을 숫자형(1) 로 형변환해 출력
FROM DUAL ;
SELECT TO_CHAR(1) --숫자형(1)을 문자형('1') 로 형변환해 출력
FROM DUAL ;
SELECT TO_CHAR(SYSDATE , 'YYYY/MM/DD HH24:MI:SS') --날짜형(SYSDATE) 을 문자형으로 변경
FROM DUAL ;
SELECT TO_DATE('20230101' , 'YYYY/MM/DD') - 문자형('20230101141212')을 날짜형(2023/01/01 14:12:12) 으로 변경
FROM DUAL ;
SELECT TO_DATE('20230101141212' , 'YYYY/MM/DD HH24:MI:SS') --문자형('20230101141212')을 날짜형(2023/01/01 14:12:12) 으로 변경
FROM DUAL;
5. NULL함수
- NULL값을 대체할 수 있는 함수
- 정상적인 산술,비교 연산 등이 불가능
- NVL, NVL2, DECODE, COALESCE ( **NVL 와 DECODE 는 정말 자주 사용)
1) NVL( data1 , data2 )
- data1에 NULL 값이 들어오면 data2를 출력하고 NULL이 아니면 data1을 출력
- 예시
SELCET CUST_ID
, PHONE_NO
, NVL (PHONE_NO, '연락처없음') AS NVL적용
FROM TB_CUST

2) DECODE( data1 , data2 , data3 , data4 … )
- data1 과 data2 가 동일하면 data3을 출력하고 , 그렇지 않으면 data4를 출력
- 예시
SELCET CUST_ID
, PHONE_NO
, DECODE (PHONE_NO, NULL , '연락처없음', PHONE_NO) AS DECODE적용
FROM TB_CUST
