상세 컨텐츠

본문 제목

2023.02.08

DB

by 연을 2023. 2. 9. 09:22

본문

728x90
update
update 테이블명 set 컬럼명1=새값1, ..., 컬럼명n=새값n where 조건식(연산자,표현식);

<코드>

update student set math_score=90, kor_score=80, eng_score=85 where sname='김민준';
update student set math_score=80, kor_score=85, eng_score=75 where sname='이서연';
update student set math_score=91, kor_score=88, eng_score=98 where sname='이서준';
update student set math_score=75, kor_score=65, eng_score=66 where sname='유서윤';
update student set math_score=70, kor_score=87, eng_score=76 where sname='윤도윤';
update student set math_score=71, kor_score=81, eng_score=83 where sname='김지우';
update student set math_score=73, kor_score=84, eng_score=75 where sname='박예준';
update student set math_score=68, kor_score=86, eng_score=95 where sname='박민서';
update student set math_score=75, kor_score=74, eng_score=82 where sname='정지후';
update student set math_score=85, kor_score=76, eng_score=54 where sname='최수아';

<결과>

========================================================

의사컬럼(pseudo-column)
.nextval currval rownum
호출할때마다 하나씩 증가해서 보여준다. nextval을 마지막으로 호출한 값을 보여준다. 바뀌지 않음 게시물 paging
switch case
switch(조건/표현식){
case 값1:
....
break;
case 값2:
...
break;
default:
....
}
case when 조건1/표현식1 then 값1
         when 조건2/표현식2 then 값2
         else 값n
end

<코드>

select sname, math_score,
case when math_score>=90 then 'A'
when math_score>=80 then 'B'
when math_score>=70 then 'C'
when math_score>=60 then 'D'
when math_score<60 then 'F'
end as grade from student;

<결과>

======================================================

select * select *(모든 칼럼) or 컬럼명1, ..., 컬럼명n
from 테이블 명 from 테이블명 as 별명
where 조건문 전체 테이블을 볼땐 where이 없을 수 있다.

<코드>

select employee_id,emp_name,salary from worker where manager_id=100;

<결과>

<코드>

매니저가 사장인 직원이 매니저인 직원의 명단 by using in

select emp_name from worker where manager_id in(201,101,102,114,120,121,122,123,124,145,146,147,148,149);
select emp_name from worker where manager_id in(select employee_id from employees where manager_id=100);

둘다 같은 코드지만 밑에 코드를 더 사용한다.

<결과>

<코드>

월급이 5000불이하인 직원의 사번/이름/월급

select employee_id,emp_name,salary from worker where salary<=5000;

<결과>

<코드>

배송부 직원의 사번,이름,월급 : 둘다 결과가 같은 코드이다.

select employee_id,emp_name,salary from worker where department_id=50;
select employee_id,emp_name,salary from worker 
where department_id in(select department_id from departments where department_name='배송부');

<결과>

<코드>

date는 문자열처럼 ' '를 사용한다.

select *from worker where hire_date='98/01/30';

<결과>

<코드>

2000년1월에 입사한 직원의 명단

select emp_name,hire_date from worker where hire_date like '00/01/%';

<결과>

===================================================

내장함수(Build-in) 

숫자함수
ceil 매개변수 n과 같거나 가장 큰 정수 반환
floor 매개변수 n과 작거나 가장 큰 정수 반환
round 소수점 기준(i+1)번 째에서 반올림한 결과
trunc 반올림을 하지 않고 소수점 기준으로 잘라낸 결과
power 제곱한 결과
sqrt 제곱근 반환
remainder a를 b로 나눈 나머지 값 반환 :a-b*round(a/b)
mod a를 b로 나눈 나머지 값 반환 : a-b*floor(a/b)

<코드>

select ceil(3.14),floor(3.14) from dual;
select round(3.54),trunc(3.99) from dual;
select power(5,3) from dual;
select sqrt(16) from dual;
select sqrt(144) from dual;
select remainder(19,4),mod(19,4) from dual;

<결과>

select ceil(3.14),floor(3.14) from dual;
select round(3.54),trunc(3.99) from dual;
select power(5,3) from dual;
select sqrt(16) from dual;
select remainder(19,4),mod(19,4) from dual;

=====================================================

문자함수
substr 시작인덱스 부터 문자열 시작 substr(문자열/컬럼명, 시작인텍스(1~), 길이)
replace 문자열 전체에 있는 공백을 모두 제거 replace(문자열/컬럼명, 찾을 문자열, 대치할 문자열)
instr 문자열에서 찾을 문자열 반환 인덱스번호(1~)=instr(문자열/컬럼명,찾을문자열) 못찾으면 0반환
instr(str, target, start, nth) str에서 start부터 시작해서 찾아진 nth번째의 target문자열의 인덱스
length 문자열 길이 lenght(str)

c/c++/java : index = 0~

pascal : index = 1~

-5 -4 -3 -2 -1 c/c++/java
0 1 2 3 4
h e l l o 문자
1 2 3 4 5 pascal
-5 -4 -3 -2 -1

<substr 코드>

select substr('hello world',2) from dual;

<결과>

<replace 코드>

select replace('hello world',' ','-')from dual;

<결과>

<instr 코드>

select instr(emp_name,'n'),emp_name from employees;
select emp_name from employees where instr(emp_name,'son')>0;
select instr('hello world','l',4,2)from dual;

<결과>

select instr(emp_name,'n'),emp_name from employees; select emp_name from employees where instr(emp_name,'son')>0;
select instr('hello world','l',4,2)from dual;

<length 코드>

select length('hello world')from dual;
select length(emp_name),emp_name from employees;

<결과>

select length('hello world')from dual; select length(emp_name),emp_name from employees;

<코드>

성만 추출하기

select emp_name, substr(emp_name, (instr(emp_name,' '))) from employees;

<결과>

<코드>

이름, 성 따로 추출하기

select emp_name, '['||substr(emp_name,instr(emp_name,' ')+1)||']', 
'['||rtrim(substr(emp_name,1,instr(emp_name,' ')))||']' from employees;

<결과>

성이 먼저 나오고 그 다음 이름

==================================================

ltirm 왼쪽 끝에서 제거 ltrim(문자열/컬럼명,자를문자열) left trim
rtrim 오른쪽 끝에서 제거 ritim(문자열/컬럼명,자를문자열) right trim
lpad 왼쪽에 해당 문자열 채우기 lpad(문자열/컬럼명,최대길이,채울문자열) left padding
rpad 오른쪽에 해당 문자열 채우기 rpad(문자열/컬럼명,최대길이,채울문자열) right padding

<코드>

select ltrim('hello world','he')from dual;
select lpad('hello world',15,'x')from dual;
select rpad('hello world',15,'x')from dual;
select '['||ltrim(rtrim('      hello world        ',' '))||']' from dual;

<결과>

select ltrim('hello world','he')from dual; select lpad('hello world',15,'x')from dual;
select rpad('hello world',15,'x')from dual; select '['||ltrim(rtrim('      hello world        ',' '))||']' from dual;

================================================

날짜함수
sysdate
변환함수
to_char
to_number

 

 

 

728x90

'DB' 카테고리의 다른 글

2023.02.13  (0) 2023.02.13
2023.02.10  (0) 2023.02.10
2023.02.09  (0) 2023.02.09
2023.02.07  (0) 2023.02.07
2023.02.06  (0) 2023.02.06

관련글 더보기