like를 이용해서 특정 단어를 포함하는 data를 검색할 수 있다. 검색 방법은 다음과 같다.
LIKE 검색시 아무단어나 올수 있다는 표시로 "%"를 해준다. 특정 단어로 시작하는 것은 '단어%'로 표현할 수 있다.
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE 'F%';
F로 시작하는 데이터를 검색했다.
특정 단어로 끝나는 것은 '%단어'로 표현할 수 있다.
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '%F';
F로 끝나는 데이터를 검색했다.
검색 결과는 없다.
특정 단어를 포함하는 것은 '%단어%'로 표현할 수 있다.
SELECT * FROM EMPLOYEE
WHERE ENAME LIKE '%F%';
F로 끝나거나 시작하는 단어도 F를 포함하는 단어에 포함된다.

특정 단어가 N번째인 데이터 검색은 '_(N-1만큼)단어%'를 해주면된다.
이름의 세번째가 A로인 데이터를 찾아보자
SELECT * FROM employee
WHERE ENAME LIKE '__A%';

LIKE도 NOT을 붙이면 부정의 의미가 된다.
모두 앞에 NOT만 붙이면된다.
NULL은 연산이 안되기 때문에 "="로 검색을 할 수가 없다.
예를 들어 다음과 같이 쿼리를 작성할 수 없다.
SELECT * FROM EMPLOYEE
WHERE COMMISSION = NULL; -- X (결과 없음)
그래서 NULL을 찾고 싶은경우에는 IS예약어를 사용해야한다.
ELECT * FROM employee
WHERE COMMISSION IS NULL;
상여금이 NULL인 데이터만 검색이 되었다.
IS뒤에 NOT만 붙여주면 된다.
값의 자료형과 상관없이 데이터 오름차순과 내림차순 정렬이 가능하다. 이때 오름차순과 내림차순의 차이는 ASC와 DESC의 차이만 있고 앞의 예약어는 다 똑같다.
SELECT * FROM employee
ORDER BY SALARY ASC;

월급이 오름차순으로 정렬된 것을 볼수 있다.
여기서 ASC는 생략이 가능하다. 오름차순이 기준값이기 때문이다.
내림차순은 ASC가 아닌 DESC를 해주면된다. 하지만 이것은 생략이 불가능하다.
SELECT * FROM employee
ORDER BY ENAME DESC;
이름 내림차순으로 정렬해보자.
이름이 내림차순으로 정렬되었다.
만약 정렬을 했을경우 동일한 값이 있을 수가 있다. 이때 다른 조건으로 그 정렬을 세분화 할 수 있다.
SELECT * FROM employee
ORDER BY salary DESC, ENAME ASC;
월급이 같을 때 이름의 내림차순으로 정렬해보자.
월급이 같을때 이름이 내림차순으로 정렬되었다.
DB에도 함수가 있다.
문자를 대문자로 바꾸거나, 소문자로 바꾸거나, 첫글자만 대문자로 바꿔주는 함수들이 있다.
SELECT 'Oracle mania', UPPER('Oracle mania') AS "대문자",
LOWER('Oracle mania') AS "소문자",
INITCAP('Oracle mania') AS "첫 글자 대문자" FROM DUAL;

컬럼은 따옴표를 빼주어야하고, SELECT 바로뒤에 함수를 써주면된다.
SELECT 'Oracle mania', UPPER('Oracle mania') AS "대문자",
LOWER('Oracle mania') AS "소문자",
INITCAP('Oracle mania') AS "첫 글자 대문자" FROM DUAL;
SELECT LOWER(ENAME), INITCAP(JOB) FROM employee;
값들의 문자들이 변형되어서 나온다.
조건문에도 사용이 가능하다.
SELECT ENO, ENAME, DNO FROM employee
WHERE ENAME = UPPER('scott');

소문자로 입력이 되어도 매칭이 잘 된 것을 볼 수 있다.
문자의 길이가 몇인지 출려해주는 함수가 있다.
SELECT LENGTH('ORACLE MANAGER'),
LENGTH('오라클 매니저') FROM DUAL;

문자열의 길이가 출력된다.
문자열 붙이기는 두 가지 방법이 있다. 함수를 사용하거나 예약어를 사용하는 방법이 있다.
SELECT CONCAT('ORACLE', 'MANIA') FROM DUAL;
SELECT 'ORACLE' || 'MANIA' FROM DUAL;
두문자열이 합쳐져서 출력된다.
SELECT CONCAT(ENAME, SALARY) FROM employee;
이름과 월급을 붙여보자
두종류의 데이터가 합쳐서 출력되었다.
문자열 합치기 뿐만 아니라 자르기도 가능하다.
DB에서도 인덱스 번호가 있는데 자바와는 다르게 1부터 시작이다.
SELECT SUBSTR('ORACLE MANIA', 4, 3),
SUBSTR('ORACLE MANIA', -1, 1) FROM DUAL;

4번째 자리의 문자인 C부터 3개인 CLE가 출력되고, 음수는 거꾸로 시작되므로 뒤에서 1번째인 A부터 1개인 A가 출력된다.
특정문자가 몇 번째 인덱스에 있는지를 찾는 함수가 있다.
SELECT INSTR('ORACLE MANIA', 'A') FROM DUAL;
문자열에서 A가 세번째에 있다는 것을 알수있다. 이 때 젤 처음의 인덱스만 찾아주고 뒤에 A가 또 있더라도 그 값은 나오지 않는다.
문자열에 특정 문자열을 반복해서 붙이는 함수가 있다. 이 함수는 특직이 있는데
붙이는 방향에 따라 RPAD, LPAD가 있다. R = RIGHT, L = LEFT
SELECT LPAD(SALARY, 10, '*')
FROM EMPLOYEE;
EMPLOYEE 테이블에서 월급에 별을 총 길이가 10자리가 되도록 왼쪽에 붙여보자.

문자열의 공백을 제거하는 함수가 있는데, 양쪽, 오른쪽, 왼쪽의 공백을 제거할 수 있다.
SELECT 'Oracle mania'
, LTRIM(' Oracle mania ')
, RTRIM(' Oracle mania ')
, TRIM(' Oracle mania ')
FROM DUAL;

반올림함수이다.
SELECT 98.7654
, ROUND(98.7654)
, ROUND(98.7654, 2)
, ROUND(98.7654, 1)
, ROUND(98.7654, -1)
FROM DUAL;

자릿수가
SELECT 98.7654
, TRUNC(98.7654)
, TRUNC(98.7654, 2)
, TRUNC(98.7654, -1)
FROM DUAL;

여기도 반올림과 자릿수가 같다
자릿수가
소수점을 다 없애버리는 함수이다. 자릿수를 정할 수 없다.
SELECT 98.7654
, FLOOR(98.7654)
FROM DUAL;

올림함수이다. 자릿수를 정할 수 없다.
SELECT 98.7654
,CEIL(98.7654)
FROM DUAL;

DB에서는 나머지 연산자가 없어서 함수로 구해야한다.
SELECT MOD(31,2)
FROM DUAL;

현재 날짜와 시간을 보여주는 함수이다.
함수라고 하지만 예약어에 가깝다.
SELECT SYSDATE FROM DUAL;

SYSDATE에서 1을 하루로 계산해서 빼면 과거로, 더하면 미래로 갈 수 있다.
SELECT SYSDATE AS 오늘
,SYSDATE - 1 AS 어제
,SYSDATE + 1 AS 내일
FROM DUAL;
