특정 결과값을 얻기 위해 데이터를 입력할 수 있는 특수 명령어
단일행 함수 n → n
다중행 함수 n → 1
FROM DUAL : 더미 테이블을 사용
SQL에서 INDEX는 1부터 시작하고 -1은 맨 뒤를 의미함
함수의 파라미터에 함수를 사용할 수 있음
ABS() : 절대값 함수
ROUND() : 반올림, (값, 자리수)
TRUNC() : 지정한 자리수 이하 버림, (값, 자리수)
MOD() : 나누고 난 나머지 값 연산, (값, 나누는 값)
POWER() : 제곱, (값, 지수)
UPPER(), LOWER() : 대소문자 변환
LENGTH() : 문자열 길이를 반환
LENGTHB() : byte 반환
SUBSTR() : 문자열 추출, (문자, 시작위치, 추출할 개수)
TRIM() : 문자열 앞뒤 여백 제거, LTRIM(), RTRIM() 도 있음
CONCAT() : 문자열을 합침, 같은 표현으로 ||가 있음
REPLACE() : 특정 문자 대체, (문자, 대체할 문자, 대체될 문자)
LPAD(), RPAD() : 특정 문자 채우기 (값, 총 문자길이, 채울 문자)
SYSDATE : 현재 시스템 날짜 정보, 0을 기준으로 오늘
ADD_MONTHS() : 특정 개월수를 더함 (날짜, 더할 개월 수)
MONTHS_BETWEEN() : 두 날짜 사이의 개월 수 검색
NEXT_DAY() : 요일을 기준으로 특정 날짜 검색 (날짜, 요일)
LAST_DAY() : 주어진 날짜를 기준으로 해당 달의 마지막 날 검색
암시적 형변환 : 다른 함수를 사용하여 암시적으로 형변환
명시적 형병환 : 형변환 함수 사용
형변환 과정
--> -->
숫자(Number) 문자(Chracter) 날짜(Date)
<-- <--
to_char() : 날짜를 문자로 변환
to_char() : 숫자를 원하는 형식의 문자로 변환 검색
9 : 실제 데이터의 유효한 자릿수 숫자 의미 (자릿수 채우지 않음)0 : (자릿수 채움, 앞에서부터 채움). : 소수점 표현, : 단위 표현$ : 달러 L or l : L(Locale)지역화폐 표현to_date() : 날짜로 변환, (숫자, 날짜양식)
to_number() : 문자열을 숫자로 변환
REPLACE로 암시적인 형변환
SELECT REPLACE('20,000', ',') - REPLACE('10,000', ',')
FROM DUAL;
DECODE()
SELECT decode(조건컬럼,
조건값1, 출력데이터1,
조건값2, 출력데이터2,
...,
default) AS 사용가능합니다
FROM
CASE
SELECT CASE 조건컬럼
WHEN 조건값1 THEN 출력데이터1
WHEN 조건값2 THEN 출력데이터2
...
ELSE default값
END AS 사용가능합니다
FROM
COUNT() : 개수 확인 함수SUM() : 합계 함수AVG() : 평균MAX() MIN() : 최대값, 최소값해당 절이 추가 됨
GROUP BY : 특정 조건별 그룹화하고자 하는 속성
HAVING : 그룹함수 사용시 조건절
실행순서
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
-- EX
SELECT deptno, job, SUM(sal)
FROM EMP
GROUP BY deptno, job
ORDER BY deptno ASC;
ROLLUP : 중간 합계
특징 : 그룹에 묶이면 마지막껄 빼고 다시 돌려줌,
그리고 마지막은 아무것도 없는 상태로 그룹을 지어줌
-- Ex
SELECT deptno, job, ename, SUM(sal)
FROM EMP
GROUP BY deptno, ROLLUP((job, ename));
다수의 table간에 공통된 데이터를 기준으로 검색하는 명령어
= 사용, 테이블에서 같은 조건이 존재할 경우의 값 검색
SELECT ename, empno, dname
FROM EMP e, DEPT d
WHERE e.deptno = d.deptno;
BETWEEN ~ AND 사용, 두 테이블이 완전하게 일치하지 않고 특정 범위내의 데이터 조인시에 사용
SELECT ename, grade
FROM EMP e, SALGRADE s
WHERE grade = 3 AND sal BETWEEN losal AND hisal;
동일 테이블 내에서 진행되는 조인
SELECT c.ename
FROM EMP s, EMP c
WHERE s.ename = 'SMITH' AND s.deptno = c.deptno AND c.ename != 'SMITH';
두개 이상의 테이블이 조인될때 특정 데이터가 모든 테이블에 존재하지 않고 컬럼은 존재하나 null값을 보유한 경우
검색되지 않는 문제를 해결하기 위해 사용되는 조인
null 값이기 때문에 배제된 행을 결과에 포함 할 수 있으며 (+) 기호를 조인 조건에서 정보가 부족한 컬럼쪽에 적용
oracle DB의 sql인 경우 데이터가 null 쪽 table 에 + 기호 표기
SELECT e.ename, d.deptno, d.dname
FROM EMP e, DEPT d
WHERE e.deptno(+) = d.deptno;
SQL에서 데이터를 출력이 된다고해서 데이터를 잘 가져왔는지 항상 확인할 필요가 있음
마지막에 나온 outer join만 보더라도 (+)의 위치가 바뀌면 이상한 값이 출력됨
로컬 환경에 따라 날짜 표기 방법이 다르므로 출력 결과가 달라짐
ROLLUP은 자주 사용하진 않지만 조금 까다로움
outer join은 이해가 어려움
논리적, 구조적으로 숙련도가 올라가면 대체할 수 있는 상황이 많은 것 같음
SQL을 엄청 달린 것 같다.
대부분의 함수는 다른 프로그래밍 언어와 비슷한 점이 많아서 접근이 쉬웠다.
그룹 함수, Join에 대한 부분은 자주보고 써보면서 익혀야겠다.