상세 컨텐츠

본문 제목

[ SQLD ] 조건문(DECODE,CASE),집계함수,GROUP,JOIN,서브쿼리

IT_STUDY/SQLD

by hyeminyy 2024. 3. 1. 23:54

본문

728x90

조건문⭐

DECODE

 - SQL의 DECODE 함수는 프로그래밍 언어에서 if문과 비슷하다.

DECODE(A,B,'1',null) A가 B일 경우 '1', 아닐 경우 null(생략가능)
DECODE(A,B,'1','2') A가 B일 경우 '1', 아닐 경우 '2'
DECODE(A,B,'1',C,'2','3') A가 B일 경우 '1', A가 C일 경우 '2', 둘 다 아닐 경우 '3'
DECODE(A,B,DECODE(C,D,'1',null)) A가 B일 경우, C가 D를 만족하면 '1', C가 D를 만족하지 않으면 null(생략가능)
DECODE(A,B,DECODE(C,D,'1','2')) A가 B일 경우, C가 D를 만족하면 '1', C가 D를 만족하지 않으면 '2'

 

CASE ~ WHEN ~ THEN

CASE 조건 WHEN 결과1 THEN 출력1
 	 [WHEN 결과2 THEN 출력2]
         	     ELSE 출력3
END "컬럼명"

DECODE에 적용한 식을 CASE 함수에 적용해보자면..

case when A = 1 then 'a'
	when A = 2 then 'b'
      when A = 3 then 'c'
    		else 'd'
end

 

 

집계함수 ⭐ ⭐

 - Count, min, max, sum ...

 - NULL은 포함되지 않는다.

 - ex) (1, null, 2, 3, null)의 데이터를 기준으로 결과는 다음과 같다.

 Count() - 3

 Sum() - 6

 Avg() - 2

 Min() - 1

 Max() - 3

 

Group by

 - 집약기능을 가지고 있다. ( 다수의 행을 하나로 합친다.)

 - Group by 절에 온 컬럼만 select 절에 올 수 있다.

 - SELECT 절에서 집계 함수를 제외한 칼럼을 GROUP BY절에 기술한다고 생각하면 된다.

select job, SUM(sal) -- 집계함수
from emp
where deptno IN (20,30)
group by job -- 그룹칼럼(selet의 job)
order by job; -- 정렬칼럼

 

Group by절에서 Having(조건절)

select job, SUM(sal) AS sum_sal
from emp
where deptno IN (20,30)
group by job having SUM(sal) > 5000;

 - 급여(sal)의 합계가 5000보다 큰 직업(job)만 조회하는 예제이다.

 

 - 집계 함수의 결과를 조건절에 사용하고 싶은 경우 HAVING 절을 사용하면 된다. HAVING 절에 일반 칼럼을 조건으로 부여할 수 있지만, 일반 칼럼은 WHERE절에서 조건을 부여하는 것이 좋다.

 

조건을 여러 개 부여하는 경우

select job, SUM(sal) AS sum_sal, AVG(sal) AS avg_sal
from emp
where deptno IN (20,30)
group by job
having SUM(sal) > 5000 AND AVG(sal) > 2000

 -  급여(sal)의 합계가 5000보다 큰 직업(job), 평균 2000보다 큰 직업(job)만 조회하는 예제이다.

 

HAVING 절에서 AND또는 OR 연산자를 사용하여 여러 개의 조건을 부여할 수 있다.

 

JOIN ⭐ ⭐

  1. Natual join

 - 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요하다.

 - 조인에 이용되는 컬럼은 명시하지 않아도 자동으로 조인에 사용된다.

 - 동일한 이름을 갖는 컬럼이 있지만 데이터 타입이 다르면 에러가 발생한다.

 - 조인하는 테이블 간의 동일 컬럼이 SELECT 절에 기술되도 테이블 이름을 생략해야 한다.

select department_id 부서, department_name 부서이름, location_id 지역번호, city 도시
from departments
natual join locations
where city = 'Seattle';

 

2. Using 

 - USING 절은 조인에 사용될 컬럼을 지정한다.

 - NATURAL 절과 USING 절은 함께 사용할 수 없다.

 - 조인에 이용되지 않은 동일 이름을 가진 컬럼은 컬럼명 앞에 테이블명을 기술한다.

 - 조인 컬럼은 괄호로 묶어서 기술해야 한다.

 - ALIAS, 접두사를 붙일 수 없다.

select department_id 부서번호, department_name 부서, location_id 지역번호, city 도시
from departments
join locations using (location_id);

 -  from a,b,c

 : a와 b가 join되고, 그리고 c와 join된다.

 

서브쿼리 ⭐ ⭐ ⭐

 - 하나의 SQL문에 포함되어 있는 또 다른 SQL문

 - 주의사항

 1. 서브쿼리를 괄호로 감싸서 사용한다.

 2. 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.

 3. 서브쿼리에서는 ORDER BY를 사용하지 못한다.

 

 - 서브쿼리가 사용 가능한 곳

select 스칼라 서브쿼리
from 인라인 뷰(메인 쿼리의 컬럼 사용 가능)
where 중첩 서브쿼리
group by 사용 불가
having 중첩 서브쿼리
order by 스칼라 서브쿼리
in 서브쿼리 출력값들 ord 조건
any/some 서브쿼리 출력 값들 중 가장 작거나 큰 값과 비교
all any/some과 반대 개념
exists 서브쿼리 내 select 절엔 뭐가 나와도 상관 없다. Row가 있으면 true, 없으면 false

 

 

728x90

관련글 더보기