commit / rollback
commit:트랜젝션의 처리 과정을 데이터베이스에
반영하기 위해서, 변경된 내용을 모두 영구 저장
rollback:이전 COMMIT한 곳까지만 복구한다.
as
as는 '~로'라는 뜻을 가지고 있다.
select salary, salary*12 as annual_income,
(salary*12)-(salary*12*0.01) as real_ann_income from employees;
이 경우 salary*12는 annual_income으로 나타내고,
(salary*12)-(salary*12*0.01)는 real_ann_income으로
나타내라는 뜻이다.
✔ 놀랍게도 sql에서는 as를 생략해도 된다.
(기능적 의미를 포함하고 있는 단어를 생략한다는게 신기했다.)
즉,
select salary, salary*12 annual_income,
(salary*12)-(salary*12*0.01) real_ann_income from employees;로
입력해도 똑같은 결과 값을 출력한다.

nvl
🎈 NVL 함수
NVL 함수는 값이 NULL인 경우 지정값을 출력하고,
NULL이 아니면 원래 값을 그대로 출력한다.
문법: NVL("값", "지정값")
🎈 NVL2 함수
NVL2 함수는 NULL이 아닌 경우 지정값1을 출력하고,
NULL인 경우 지정값2를 출력한다.
문법: NVL2("값", "지정값1", "지정값2")
NVL2("값", "NOT NULL", "NULL")
select employee_id,emp_name,salary,nvl(commission_pct,0) as commission,
salary+(salary*nvl(commission_pct,0)) as real_income from employees;
--commission이 없을 경우 commission_pct에 null값이 들어가 있었는데,
--null경우 무한대 값이기 때문에, 산술 계산이 용이하지 않다.
--따라서, nvl(commission_pct,0) 함수를 써서, commission_pct 값을
--0으로 바꿔줌으로써, 모든 employee들의 real_income(실질적 연봉)을
--계산할 수 있게 된다.

is null / is not null
필드 값이 비어 있는 경우 즉, NULL일때에 유무에 대한 조건이다.
문법: SELECT "필드명"
FROM "테이블명"
WHERE "필드명" IS NULL/IS NOT NULL
select emp_name,commission_pct from employees
where commission_pct is not null;
--null이 아닌 값 가져오기

" " 쌍따움표 vs '' 홑따움표
(')홑따옴표 : 문자열을 감싸주는 기호
(")쌍따옴표 : 컬럼명 등을 감싸주는 기호
✔ 쌍따움표 경우 띄어쓰기까지 그대로 보여준다.
✔ 대문자/소문자도 구분해준다.
✔ 사실상, "" 안에 들어가 있는 문자 그대로를
받아온다고 보면 되겠다.
select emp_name as "사원 이름" from employees;

select kor||','||eng||','||math as "Subject : 과목" ,
kor||'-'||eng||'-'||math as subject from stuscore;
-- 아래 결과 값과 비교하면,
-- " " 안에 들어가 있는 column경우, 띄어쓰기,대문자 소문자 구분, 특수기호까지
-- 모두 적힌 그대로를 column name으로 가져오고 있다.
-- 반면 "" 없이 적힌 경우, 소문자로 column name을 정해도
-- 대문자로 결과 값을 표시한다.

비교연산자

✔추가
select emp_name,salary from employees
where salary ^=3000;
-- ^= : 아닌 것
✔날짜도 비교 연산자로 비교 가능
--03/01/01 ~08/12/31
select emp_name, hire_date from employees
where hire_date >= '03.01.01' and hire_date < '08 12 31'
order by hire_date;
select emp_name, hire_date from employees
where hire_date between '03/01/03' and '08-12-31' order by hire_date;
-- '03.01.01' / '08 12 31' / '03/01/03' / '08-12-31'
-- 어떤식으로 yy mm dd를 구분 표시를 해도,
-- 비교연산자가 비교해 올 수 있다.
-- 심지어 띄어쓰기도 구분으로 인식한다.
--between 경우 이상 이하 값이다 / 초과 미만 값이 아니다.
upper() / lower() / Initcap()
LOWER 함수는 데이터 값을 소문자,
UPPER 함수는 데이터 값을 대문자로 변환할 때 사용
INITCAP(initial capital letter) 함수는
데이터 값의 첫 번째 문자만 대문자로 변환할 때 사용
✔주의 (initcap)
문자열의 첫번째 글자가 아니라 단어 단위이다.
단어 단위는 띄어쓰기로 구분한다.
select initcap(emp_name) from employees;
--결과 값을 보면, employee들의 이름이 단어 단위로(띄어쓰기 단위로)
--첫번째 문자를 대문자로 반환해주는 것을 알 수 있다.

in
WHERE 절 내에서 특정값 여러개를 선택하는 SQL 연산자
괄호 내의 값 중 일치하는 것이 있으면 TRUE
문법:
SELECT * FROM 테이블명
WHERE 컬럼명 IN (값1, 값2, ...)
select emp_name, salary from employees
where salary=4000 or salary=6000 or salary=7000;
select emp_name, salary from employees
where salary in(4000,6000,7000);
-- 두 구문은 같은 뜻이다. 하지만 in을 사용함으로써
-- 중복되는 코드를 줄일 수 있다.

like
WHERE절에 주로 사용되며 부분적으로 일치하는 칼럼을 찾을때 사용
문법: SELECT * FROM [테이블명] WHERE LIKE [조건]
✔대문자 소문자 구분함 : 왜냐면, 데이터에서 조건에 맞는
결과 값을 불러오는건데, 데이터는 대문자 소문자를 구분하기 때문.
%는 ‘모든 문자’라는 의미고, _는 ‘한 글자’라는 의미
_ : 글자숫자를 정해줌(EX 컬럼명 LIKE '유_순')
% : 글자숫자를 정해주지않음(EX 컬럼명 LIKE '유%')

기본적인 집계함수 / sum / avg/ count/ max/ min
기능들은 함수 이름 자체에서 직관적으로 해석가능하기 때문에 생략한다.
문법: 함수명(field_name)
select avg(salary) from employees;
숫자함수 ROUND/TRUNC/MOD
round :
round 함수는 column 값을 소수점 n 자릿수가 되도록 반올림을 한다.
(❗n자리에서 반올림하는게 아니라는거에 주의하자)
문법: round ( 'column_name' , n )
trunc :
trunc 함수는 column 값을 소수점 n 자릿수가 되도록 버림을 한다.
(❗n자리에서 버리는게 아니라는거에 주의하자)
문법: trunc( 'column_name' , n )
✔floor함수와 비슷하지만, 자릿수 지정까지 가능하다는 점에서
더 유용한 함수이다.
mod:
mod 함수는 column 값을 n 으로 나눈 나머지를 반환한다.
문법: mod( 'column_name' , n )
❗ n값이 - 경우 정수 값을 뜻함
즉 -1 = 정수 첫째자리에서 버림/반올림
소수점에서는 n 자릿수가 되도록하는거라면,
정수에서는 n번째 자리에서 버림or반올림을 시켜준다.
select * from employees where mod(employee_id,2)=0
order by employee_id;
-- employee_id가 짝수인 값만 산출
select 34.5678,floor(34.5678),round(34.5678,2),trunc(342.5678,2),trunc(3422.5678,-2),
round(35.5678,-1)
from dual;

