oracle-sql(2)

easyliving·2023년 1월 7일

DB+BACK_END (ORACLE/MYSQL)

목록 보기
19/20

commit / rollback

	commit:트랜젝션의 처리 과정을 데이터베이스에 
    반영하기 위해서, 변경된 내용을 모두 영구 저장
    
    rollback:이전 COMMIT한 곳까지만 복구한다.
    

commit/rollback

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") 

nlv vs nlv2


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;

profile
가끔져요

0개의 댓글