본문 바로가기
Study/데이터베이스

오라클 LIKE 검색, NULL값, GROUP BY/HAVING

by ✲ 2018. 3. 20.
728x90
반응형

오라클 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 ;




728x90
반응형

댓글