Oracle

-- 한 줄 주석은 이렇게 --


/*

여러 줄 주석은 이렇게.

Java랑 같다.

*/



Concatenation(column + column)

결과만 붙어 보이는 것이고 원 데이터는 변하지 않음.


select first_name || ' ' || last_name

-> first_name + last_name


select first_name || '''s last name is || last_name

-> first_name's last name is last_name


' ' 안에 '를 쓰고 싶으면 두 번('') 쓴다.



Column 이름 바꿔서 보기

select first_name (as) name -> 대문자 NAME으로 나옴.

select first_name (as) "Name" -> 문자 'Name' 그대로 나옴.



Where == 조건 검사(if)

select first_name || ' ' || last_name "이름",

    salary "연봉"

from employees

where first_name = 'Lex';


비교는 ==가 아닌 =으로. String은 " "가 아닌 ' '로 묶음.



IN

select first_name

from employees

where first_name in ('Lex', 'John');


where a in (a, b, c);

in으로 값이 같은지 검사.



like

where first_name like '%a%';


% 임의의 길이 문자열

_ 한 글자 길이


ex)

Ad

Abella

Abert

Hellooo

Two

Wind


where first_name like 'A%'

-> Ad, Abella, Abert


where first_name like 'A_'

-> Ad


where first_name like '%e%'

-> Abella, Abert, Hello


where first_name like '_e%'

-> Hellooo


where first_name like '_w_'

-> Two



NULL 검사

where first_name is null / is not null



order by

1234... -> 오름차순(asc)

10987... -> 내림차순(desc)



단일함수

SELECT문에서 쓰면 계산되어 나옴.


substr(s , n, m) s의 n부터 m까지 반환

select first_name,

    substr(first_name, 1, 3),

    substr(first_name, -5, 2) -- 글자 수 넘어가면 null 됨.

from employees

where department_id = 100;


lpad / rpad(s, n, c) s의 왼/오른쪽을 c로 채움. n은 총 문자 길이

select first_name,

    lpad(first_name, 10, 'o'), -- 숫자는 총 문자 길이

    rpad(first_name, 10, '/')

from employees;


trim / ltrim / rtrim(s, c) s에서 c 제거

select ltrim('ababaccdcd', 'ab') -- 문자 연속이 끝나면 trim 끝. 그 뒤는 검사 안함.

from dual;

-> 결과 : ccdcd

'ab'를 묶어 제거하는 것이 아니라 a 제거하고 b 제거하고 이런식.


select '---' || trim(' ' from '    data base****') || '---' -- 공백을  [    data base****]에서 제거함.

from dual; -- 가상 테이블

결과 : ---data base****---



Query 순서

select * from * where * order by *


ex)

SELECT first_name,

    manager_id,

    commission_pct,

    salary

FROM employees

WHERE manager_id IS NOT NULL

    AND commission_pct IS NULL

    AND salary > 3000

ORDER BY salary ASC;



COMMIT

insert, update, delete는 바로 반영되지 않는다.

commit 해야 반영됨.

rollback : 이전 commit한 시점으로 돌아감.