EditPlus로 연다.


 

select * from tab;


select * from user_sequences;


desc employees;


create user
       table
       sequence

drop user
     table
     sequence



select employee_id, last_name, salary from employees;


 

더보기
더보기
더보기

사원번호 "이 름" "급 여" → 공백때문에 " 이거 붙임.

select employee_id as 사원번호, last_name as "이 름", salary as "급 여" from employees;


select employee_id as 사원번호, last_name as "이 름", salary*12 as "급 여" from employees;


select first_name || ' ' || last_name as "이 름" from employees;


select employee_id as 사원번호, 
       first_name || ' ' || last_name as "이 름", 
       salary*12 || '달러' as "급 여" from employees;

 

달러라는 단어 붙일 때도 똑같이 || 이거 이용하기


SELECT last_name || ' is a ' || job_id AS "Employee Detail"
FROM employees;


select distinct department_id from employees;

 


select last_name, hire_date, department_id
from employees
where department_id = 10 or department_id = 90;


select last_name, hire_date, salary
from employees
where salary>=2500 and salary<3500;

 


select first_name || ' ' || last_name 사원명, '$' || salary "월 급", department_id 부서코드
from employees
where (salary<=2500 or salary>=3000) and department_id = 90;


 

더보기
더보기
더보기

문자열 검색할 때는 대, 소문자 구분 !

select * from employees where last_name='King';



select last_name, job_id, department_id
from employees
where job_id like '%MAN%';


select last_name, job_id, department_id
from employees
where job_id like '%IT%';


 

select last_name, salary, commission_pct
from employees
where commission_pct is not null;

select last_name, salary, commission_pct
from employees
where commission_pct is null;


select employee_id, last_name, job_id
from employees
where job_id='FI_MGR' or job_id='FI_ACCOUNT';
select employee_id, last_name, job_id
from employees
where job_id in('FI_MGR', 'FI_ACCOUNT');


select employee_id, last_name, salary
from employees
where salary>=10000 and salary<=20000;
select employee_id, last_name, salary
from employees
where salary between 10000 and 20000;


select last_name 이름, job_id 업무ID, salary || '원' "급 여" 
from employees
where job_id in('SA_REP', 'AD_PRES') and salary > 10000;


 

select distinct job_id from employees;

 

더보기
더보기
더보기

중복 안 되게라고 하면 distinct 떠오르기 !


select employee_id 사원번호, last_name 이름, hire_date 입사일 
from employees
where hire_date like '05%';

 


중간에 헷갈렸던 작은따옴표와 큰따옴표의 차이를 적어놨다.

더보기
더보기
더보기

Oracle:

  • 작은따옴표는 문자열 리터럴에 사용되고, 큰따옴표는 식별자에 사용된다.


select last_name, department_id, hire_date
from employees
order by 2 desc;

더보기
더보기
더보기

select 뒤에 있는 순서대로 1, 2, 3이 된다.

이렇게 숫자로 내림차순해도 된다.


앞에 있는 데이터가 똑같아서 정렬이 안 될 때 뒤에 있는 것으로 정렬하겠다.

select last_name, department_id, hire_date
from employees
order by 2 desc, 3 asc;

더보기
더보기
더보기

앞에 있는 데이터가 똑같아서 정렬이 안 될 때 뒤에 있는 것으로 정렬하겠다는 것이다.


select last_name "이 름", salary*12 "연 봉"
from employees
order by 2 desc;

 

 

연봉 같은 애들은 이름으로 다시 오름차순하도록 !

select last_name "이 름", salary*12 "연 봉"
from employees
order by 2 desc, 1;


mod - 나머지 / round - 반올림 / trunc - 올림 / ceil - 내림

 

trim - 공백제거 / substr(문자열, 시작위치, 길이) - 문자열 자를 때

 

 

 

nvl - 값이 비어있으면 계산처리가 안되므로  nvl을 써줘야한다.

dcode - 다중if문, switch문


select employee_id, last_name, department_id
from employees
where lower(last_name)='higgins';


 

select mod(10, 3) from dual;


더보기
더보기
더보기

소수점을 기준으로 왼쪽으로 가면 -1, -2, -3 순으로 가고

오른쪽으로 가면 1, 2, 3으로 간다.

 

 

select round(35765.357, 2) from dual;

 

select round(35765.357, 0) from dual;

 

 

select round(35765.357, -3) from dual;

 

 

-3에서 반올림하게 되면, 반올림하고 뒤에는 다 잘려버림


 

select trunc(35765.357, 2) from dual;

 

 

select trunc(35765.357, 0) from dual;

 

 

select trunc(35765.357, -3) from dual;


 

더보기
더보기
더보기

oracle은 문자열 두 개만 결합 가능하다.

select concat('Hello', ' World') from dual;


더보기
더보기
더보기

Express

한글1자 = 3byte

 

Server

한글1자 = 2byte

 

lengthb는 byte를 계산하라는 것이다.

create table text (
str1 char(20),
str2 varchar2(20));

insert into text(str1, str2) values('angel', 'angel');
insert into text(str1, str2) values('사천사', '사천사');
commit;

더보기
더보기
더보기

[lengthB] 

char(20)는 고정이기 때문에 angel 5이고 남은게 15여도 20 반환 / 사천사 9 나머지 11 여기서도 20 반환

 

varchar(20) 은 가변이기 때문에 angel 5반환 / 사천사는 9반환

select lengthb(str1), lengthb(str2) from text;


 

더보기
더보기
더보기

[length]

char(20)일 때 angel 20반환 / 사천사 3(9byte) + 11 = 14 반환

varchar(20)일 때 angel 5 반환 / 사천사는 문자 3개니까 3반환

 

!대한민국 5개(13byte) + 7 => length 12 

select length(str1), length(str2) from text;


select length('korea') from dual; -- 5
select length('코리아') from dual; -- 3
select lengthb('korea') from dual; -- 5
select lengthb('코리아') from dual; -- 9

select instr('HelloWorld', 'W') from dual; -- 6
select instr('HelloWorld', 'o', -5) from dual; -- 5
select instr('HelloWorld', 'o', -1) from dual; -- 7

select substr('I am very happy', 6, 4) from dual; -- very
select substr('I am very happy', 6) from dual; -- very happy

select employee_id, 
       concat(first_name, last_name) name, 
       length(concat(first_name, last_name)) length
from employees
where substr(concat(first_name, last_name), -1) = 'n';

더보기
더보기
더보기

이제 여기서 해결이 안 되는 부분은 성과 이름 사이에 공백을 넣는 법이다.

concat을 이용해서는 어떻게 해야할지 감이 안 온다...

 

 

 

select employee_id, 
       concat(first_name, ' ' || last_name) name, 
       length(concat(first_name, ' ' || last_name)) length
from employees
where substr(last_name, -1) = 'n';

더보기
더보기
더보기

위에서 사용했던 || 이거 이용하면 된다 !!!

그리고 substr에서는 concat을 사용할 필요없이 last_name만으로 확인하면 된다.

summ.n