[ select문 ]


- 중복 배제 대표값 검색 : distinct

select distinct job from emp order by job;


- 정렬 : order by

select * from emp order by job, sal desc;


- 별칭 : as(생략 가능)

select ename as 이름, job 직급, sal 급여 from emp;


- 튜플수, 최대, 최소, 평균, 합계 함수

select count(*) 튜플수, sum(sal) 합계, avg(sal) 평균, max(sal) 최대값, min(sal) 최소값 from emp;


- 반올림 함수 : round()

select round( avg(sal) ) from emp;


- 범위 검색

급여가 300 이상 400이하인 직원

select * from emp where sal >= 300 and sal <= 400;


=


select * from emp where sal between 300 and 400;


급여가 300이상 400이하인 직원을 제외하고 출력

select * from emp where sal < 300 or sal > 400;


=

not : 결과 뒤집기( 급여가 300이상 400이하인 튜플을 제외하고 출력)

select * from emp where not(sal >= 300 and sal <= 400)


- 다르다. : !=  or  <>

select * from emp where job <> '부장'

select * from emp where job != '부장'


- ~로 시작하는을 검색하는 : Like

이름이 박 ~~로 시작하는 직원

select * from emp where ename like '박%';

이름이 ~~박으로 끝나는 직원

select * from emp where ename like '%박';

가운대 박이 들어가는 직원

select * from emp where ename like '%박%';


- 계산

select empno, ename, (sal * 12 + comm) as 연봉 from emp;


문제점 : sal이나 comm 두 항목 중 하나의 값이라도 null값이 들어 있으면 결과도 null이 나온다.

-> null과 연산시 무조건 결과는 null !!


해결 방법 : nvl() 함수 사용  nvl(A,B) : A가 null이 아니면 A를 사용하고 null이면 B값으로 사용


select empno, ename, (sal * 12 + nvl(comm,0)) as 연봉 from emp;


- null인지 아닌지를 비교 : is

    is not

: 문제점 : null값을 = 로 비교시 null과의 연산은 무조건 null이기 때문에 제대로 된 결과를 얻을 수 없음

ex) job이 null인 직원을 출력하라

select * from emp where job = null => 이렇게하면 아무것도 안나옴 null이 되어버려서 결과가

따라서,


select * from emp where job is null => 이렇게 해 주어야 함 "IS"를 사용 !! null인지 비교할 때는

<->

select * from emp where job IS NOT null => job이 null이 아닌 직원을 검색


- 날짜 비교

입사일이 2005년 1월 1일 이전인 사원을 검색하라

select * from emp where hiredate <= '2005-01-01';


------------------------------------------------------------------------------


[ 자주사용되는 내장 함수 ]


1. 문자를 합치는 concat("문자열1","문자열2") : 문자열1문자열2

select concat(ename,'의 직책은), concat(job, '입니다.') from emp;


2. 첫 글자를 대문자로 변환 : initcap('문자열')

select initcap('abcdef') from dual; => Abcdef


3. 소문자로 변환 : lower('문자열')

   대문자로 변환 : upper('문자열')

select lower('ABCDE') from dual; =>abcde

select upper('abcde') from dual; => ABCDE


4. ~~에서 ~~까지 잘라내는 substr('문자열','시작인덱스','몇글자') : ~부터 몇글자를 잘라낸다.

주의!) oracle은 시작 인덱스가 0부터가 아니라 1부터임!

예를들어, 주민등록번호에서 남자인지 여자인지 잘라내서 알아보려는 경우

select substr('900317-1081717',8,1) from emp; 가 되어야 함 시작인덱스가 1부터임으로 8이라는 것!


5. 문자열의 길이를 반환하는 : length('문자열') 

select length('hello') from dual; => 5


6. 문자열의 일부를 대체하는 : replace('원본문자열','변환하고싶은 문자열','바꿀 문자열')

select replace('java programming funny', 'funny', 'no funny') from emp;


+ Recent posts