ENFJ 비전공자 개발스터디

오라클 데이터베이스 Oracle Database 표현식 CASE WHEN THEN 조건식 IN, ANY, SOME, ALL, EXISTS, LIKE, BETWEEN 본문

Database

오라클 데이터베이스 Oracle Database 표현식 CASE WHEN THEN 조건식 IN, ANY, SOME, ALL, EXISTS, LIKE, BETWEEN

madb 2021. 12. 28. 10:13
반응형

오라클 데이터베이스 Oracle Database 표현식

하나이상의 값과 연산자, 함수들이 결합된 식

 

CASE WHEN THEN 

특정 조건에 따라 값을 변경할 수 있는 수식(표현식) 

주로 SELECT절에서 사용

 

문제 : 급여  < 5000 => C 등급, 5000 <= 급여 < 15000 =>B등급
-- 급여 >= 15000 => A등급
-- 급여 : employees.salary 사원번호 : employees.employee_id
-- 사원번호, 급여

SELECT *
  FROM (
SELECT e.EMPLOYEE_ID
		 , e.SALARY
		 , CASE WHEN e.SALARY <= 5000 THEN 'C등급'
						WHEN e.SALARY > 5000 AND e.SALARY <= 15000 THEN 'B등급'
						ELSE 'A등급'
			 END AS salary_grade
--			AND salary_grade ='A등급';
 FROM EMPLOYEES e
)
WHERE salary_grade ='A등급'
;

100 24000 A등급
101 17000 A등급
102 17000 A등급

 

오라클 데이터베이스 Oracle Database 조건식

하나 이상의 표현식과 관계 연산자(논리 연산자)가 결합된 식 

연산자는 논리연산자, 관계 연산자, 기타 연산자

(IN, ANY, SOME, ALL, EXISTS, LIKE, BETWEEN)

 

비교조건식

ANY의 단어 뜻 중 '아무거나 하나'라는 뜻을 생각하면 편하다.

다수의 비교값 중 한개라도 만족하면 true 이다.

ANY는 OR조건으로 바꾸어 표현할 수도 있다

 

 

● ANY 조건 예시 (만족하는 값 하나만 있으면 됨)

조건 결과 설명
 1000 > ANY (500, 1000, 2000) TRUE  ANY 값에 1000 보다 작은 500이 있으므로 TRUE
 1000 = ANY (500, 1000, 2000) TRUE  ANY 값에 같은 값 1000이 있으므로 TRUE
 2000 < ANY (500, 1000, 2000) FALSE  ANY 값에 2000 보다 큰 값이 없으므로 FALSE

 

 = ANY   하나라도 만족하는 값이 있으면 결과를 리턴 (IN과 동일)
 > ANY   값들 중 최소값 보다 크면 결과를 리턴
 >= ANY   값들 중 최소값 보다 크거나 같으면 결과를 리턴
 < ANY   값들 중 최대값 보다 작으면 결과를 리턴
 <= ANY   값들 중 최대값 보다 작거나 같으면 결과를 리턴
 <> ANY   모든 값들 중 다른 값만 리턴 (값이 하나일 때만 가능, 사용X)

ALL은 ANY와 반대이다. 

모든 조건을 만족해야만 한다.

전체 값을 비교하여 모두 만족해야만 true 이다.

ALL은  나올 수 있는 모든 조건에 AND 연산을 수행한것과 동일한 결과를 얻는다.

 

● ALL 조건 예시 (모든 값을 만족해야 함)

조건 결과 설명
 1000 > ALL (500, 1000, 2000) FALSE  1000이 ALL의 모든 값 보다 커야하므로 FALSE
 1000 = ALL (500, 1000, 2000) FALSE  1000이 ALL의 모든 값과 동일해야 하므로 FALSE
 3000 > ALL (500, 1000, 2000) TRUE  3000은 ALL의 모든 값 보다 크므로 TRUE

 

 > ALL   값들 중 최대값 보다 크면 결과를 리턴
 >= ALL   값들 중 최대값 보다 크거나 같으면 결과를 리턴
 < ALL   값들 중 최소값 보다 작으면 결과를 리턴
 <= ALL   값들 중 최소값 보다 작거나 같으면 결과를 리턴
 = ALL   모든 값들과 같아야 결과를 리턴 (값이 하나일 때만 가능, 사용X)
 <> ALL   모든 값들과 다르면 결과를 리턴

 

 

논리조건식

AND는 모든 조건을 만족하는 경우에만 TRUE를 반환하고,

OR는 하나라도 만족하면 TRUE를 반환한다.

NOT은 조건식의 결과가 거짓일 때, TRUE를 반환한다. 

 

NULL조건식

특정 값이 NULL인지 아닌지 판단하는 조건식

앞에 IS를 붙여서 사용한다. (ex WHERE employee_name IS NULL

 

 

BETWEEN AND 조건식

범위에 해당되는 값을 찾을 때 사용하는데 크거나 같고 작거나 같은 값을 찾는다. 

따라서 ‘>=’와 ‘<=’ 논리 연산자로 변환이 가능하다.

 

IN 조건식 

조건절에 명시한 값이 포함된 건을 반환

 IN 역시 OR 조건으로 변환이 가능하며 ‘=ANY’형태로 바꿔 쓸 수 있다.

 

다만 ANY는 등호 연산자 뿐만 아니라 ‘>’, ‘>=’, ‘<’, ‘<=’, ‘< >’, ‘!=’ 등의 비교 연산자도 사용할 수 있다는 점이 다르다.

 

 

EXISTS 조건식

후행 조건절로 값의 리스트가 아닌 서브 쿼리만 올 수 있다

서브 쿼리 내에서 조인 조건(a.department_id = b.department_id)이 있어야 한다. 

 

LIKE 조건식

문자열을 검색할 때 사용하는 조건식이다. 

논리 조건식과 같은 완전 일치가 아닌, 패턴 검색이 가능하다.

 '%'라는 와일드카드를 사용하여 패턴 검색을 진행한다. 

 

반응형