오라클 LIKE 검색, NULL값, GROUP BY/HAVING
LIKE 검색
정확한 키워드를 모를 경우 일부만으로 검색하는 방법
와일드카드(%,_)를 사용하여 패턴매칭
select 컬럼명 from 테이블명 where 컬럼명 like 패턴
와일드카드
% : 0 ~ n글자, _: 1글자 (글자자수만큼! 3자를 하고싶다면 ___ 3번사용)
LIKE 검색은 매칭하기 위해 DBMS에 부담이 많으므로 LIKE와 OR와 같은 논리조건자를 중복해서 사용하지 않는게 좋음
예제)
emp테이블에서 ENAME이 S로 시작하는/끝나는/중간에 들어있는 직원들을 표시하시오
select * from emp where ename like 'S%';
select * from emp where ename like '%S';
select * from emp where ename like '%S%';
emp테이블에서 ENAME이 A로 시작하는 5자 이름을 가진 직원들을 표시하시오
select * from emp where ename like 'A____';
NULL값
NULL이란 해당 컬럼의 값이 없다는 의미 (해당 컬럼이 NULL 값을 허용하는 경우)
NULL값을 가지고 있는 컬럼을 검색하려면 IS NULL
NULL이 아닌 값을 가지고 있는 컬럼을 검색하려면 is not NULL
예제)
emp테이블에서 관리자(MGR)가 없는 직원을 표시하시오
select *
from emp
where mgr is null;
emp테이블에서 COMM이 있는 직원을 표시하시오
select *
from emp
where comm is not null;
NULL 함수
숫자 컬럼을 연산해야 할 때 NULL을 처리해주는 함수
NULL 값이 나오면 다른값 (주로 0)으로 대체해서 계산에 문제없도록 처리
NVL(), NVL2() / COALESCE()
숫자연산 / 집합함수(SUM())의 경우는 처리가 내장되어있음
직접 함수나 쿼리에 넣는 경우는 NULL함수를 사용해야함
예제)
emp테이블에서 ENAME과 COMM컬럼의 값을 1.5배해서 표시하시오.
(만약에 값이 없으면 0을 표시하시오)
select ename, nvl(comm*1.5,0) from emp;
emp테이블에서 COMM값이 존재하면 Y 없으면 N 으로 표시하시오
select ename, nvl2(comm*1.5,'Y','N') from emp;
emp테이블에서 COMM값을 표시하고, 없으면 1으로 표시하시오
select ename, coalesce(comm,comm,1)from emp;
GROUP BY
집합 함수와 같이 사용해 그룹별 연산을 적용한다
select 컬럼명, 집합함수명(컬럼명) , from 테이블명 group by 컬럼명;
예제)
emp 테이블의 부서별 직원수를 구하라.
select dept.dname, count(dept.dname) as number_count from emp join dept on emp.deptno = dept.deptno
group by dept.dname;
HAVING
HAVING은 집합연산에 WHERE 조건절 대체로 사용
예제)
emp테이블의 부서별 직원수를 구하시오(직원수가 5명 이상인 부서만 출력하시오)
select dept.dname, count(dept.dname) as number_count from emp join dept on emp.deptno = dept.deptno
group by dept.dname
having count(dept.dname) >=5 ;
'Study > 데이터베이스' 카테고리의 다른 글
오라클 스키마 정의, 자료형, 제약조건 (0) | 2018.03.30 |
---|---|
오라클 서브쿼리, 집합연산 (0) | 2018.03.29 |
오라클 SELECT INTO / INSERT INTO SELECT (0) | 2018.03.20 |
오라클 조인 종류 및 개념, 별명 (ALIAS) (0) | 2018.03.13 |
오라클 중복제거 연산자, 논리연산자 (0) | 2018.03.12 |
댓글