[ 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;