쥬로그

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

Study/Oracle

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

쥬쥬씨 2021. 8. 30. 15:56
반응형

< LIKE 검색, NULL 값, GROUP BY/HAVING >

* LIKE 검색에서 사용하는 와일드 카드는 %와 _가 있다.

  %는 0자 이상 여러 자에 매칭되는 와일드카드 문자이고, _는 1자에 대응하는 와일드카드 문자이다.

* HAVING 절을 사용해서 GROUP BY한 결과물에 조건을 줘서 필터링해 표시한다.


* LIKE 검색

- 정확한 키워드를 모를 경우 일부만으로 검색하는 방법

- 와일드카드 (Wildcard)

  %: 0 ~ n글자

  _: 1 글자

- 와일드카드를 사용하여 검색

 

    select 컬럼명 from 테이블명 where 컬럼명 like 패턴

 

  !  

  LIKE 검색은 매칭 과정에 DBMS 부담이 크기 때문에 OR와 같은 논리조건자를 중복해서 사용하지 않는 게 좋음

  ex) select * from 테이블명 where like 컬럼명1 like ... or 컬럼명2 like ... ;

 

ex) 1. emp 테이블에서 ENAME 이 S로 시작하는/끝나는/중간에 들어있는 직원들을 표시하시오.

     2. emp 테이블에서 ENAME이 A로 시작하는 5자 이름을 가진 직원들을 표시하시오.

-> 1. select * from emp where ename like 'S%';

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

       select * from emp where enmae like '%S%';

    2. select * from emp where ename like 'A____';

 

 

* NULL 값

- 해당 컬럼의 값이 없다는 의미 (해당 컬럼이 NULL 값을 허용하는 경우)

- NULL 값을 가지고 있는 컬럼을 검색하려면 is NULL

  NULL이 아닌 값을 가지고 있는 컬럼을 검색하려면 is not NULL 사용

- 0 값은 NULL이 아니다. (헷갈리지 말기)

 

ex) 1. emp 테이블에서 관리자(MGR)가 없는 직원을 표시하시오.

     2. emp 테이블에서 COMM이 있는 직원을 표시하시오.

-> 1. select * from emp where mgr is null;

    2. select * from emp where comm in not null;

 

 

* NULL 함수

- 숫자 컬럼을 연산해야 할 때 NULL을 처리해주는 함수

- NULL 값이 나오면 다른 값(주로 0)으로 대체해서 계산에 문제 없도록 처리한다.

- 숫자연산 / 집합함수의 경우는 처리가 내장되어 있다.

- 직접 함수나 쿼리에 넣는 경우, NULL 함수를 사용해야 한다.

 

    NVL() / NVL2() / COALESCE()

    NVL(a, b) -> a: NULL을 포함하는 컬럼 이름 or 임의의 값

                  -> b: NULL 값을 대치할 값

 

    NVL2(a, b, c) -> a: NULL을 포함하는 컬럼 이름 or 임의의 값

                      -> b: a가 NULL이 아니면 b를 출력

                      -> c: a가 NULL이면 c를 출력

 

    COALESCE(a, b, c) -> a값이 NULL인지 확인

                             -> NULL이 아닐 경우 a 값 반환

                             -> NULL일 경우 b값 NULL인지 확인

                             -> NULL이 아닐 경우 b 값 반환

                             -> b가 NULL일 경우 c 값 반환

 

ex) 1. emp 테이블의 ENAME과 COMM 컬럼의 값을 1.5배해서 표시하시오 (만약 값이 없으면 0을 표시하시오)

    2. emp 테이블의 COMM 값이 존재하면 'Y', 없으면 'N'를 표시하시오.

    3. emp 테이블의 COMM 값을 표시하고, 없으면 1을 표시하시오.

-> 1. select ename, nvl(comm*1.5, 0) from emp;

    2. select ename, nvl2(comm*1.5 'Y', 'N') from emp;

    3. select ename, coalesce(comm, comm, 1) from emp;

 

 

* GROUP BY

- 집합함수와 같이 사용해 그룹별 연산을 적용한다.

 

    select 컬럼명, 집합함수명(컬럼명) from 테이블명 group by 컬럼명;

 

ex) emp 테이블의 부서별 직원수를 구하시오.

-> select dept.dname, count(dept.dname) as number_count from emp join dept on emp.deptno = dept.deptno group by dept.dname;

    실행 순서: 조인 -> 부서명으로 group by 연산 적용 -> 부서명으로 count()

 

 

* HAVING

- 집합연산에 WHERE 조건절 대체로 사용

 

ex) 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;

    실행순서: 조인 -> 부서명으로 group by 연산 적용 -> 부서명으로 count -> 레코드가 5 이상인 부서만 출력되도록 havig 연산 적용


< Point >

☆ 오라클에서 사용하는 NULL 함수는 NVL() 이다.

☆ LIKE검색에서 특정 키워드가 어느 부분에 나와도 매칭되는 와일드 카드는 %~% 이다.

☆ KOR, KOREA에 모두 매칭되는 와일드카드는 KOR% 이다.


< 요약 >

* LIKE 검색

- 패턴을 기반으로 검색하는 기능

- 와일드카드 &(여러 자 매칭), _(1자 매칭)

* NULL 값

- 컬럼 값이 존재하지 않을 때 사용

- 검색 시 is NULL / is not NULL

* NULL 함수

- 숫자 컬럼 연산 시 NULL 값 처리

- NVL() / NVL2() / COALESCE()

* GOURP BY

- 집합 함수를 사용해 그룹 연산

* HAVING

- GOURP BY와 같이 사용해 조건을 적용

반응형