기록용 블로그

[SQL] 기본 문법들 (case문, rank, join 등) 본문

개발/DB

[SQL] 기본 문법들 (case문, rank, join 등)

andjane 2023. 4. 9. 17:03

 

1) 분기문

 

1. simple case expression 

SELECT 
            (CASE [컬럼명] WHEN [비교값1] THEN [반환값1]
                         WHEN [비교값2] THEN [반환값2]
                                          .
                                          .
              ELSE [WHEN절 이외의 조건일때 반환될 값]
              END) AS [별칭 컬럼명]
FROM [테이블명]

 

2. searched case expression

SELECT 
            (CASE WHEN [조건문1] THEN [반환값1]
                  WHEN [조건문2] THEN [반환값2]
                   					 .
                                     .
              ELSE [WHEN절 이외의 조건일때 반환될 값]
              END) AS [별칭 컬럼명]
FROM [테이블명]

 


 

2) 집합연산 : 두 개 이상의 SELECT 쿼리 결과를 하나로 합쳐 줌.

- 합쳐주는 SELECT 구문의 반환 컬럼의 갯수와 순서가 모두 동일해야 함.

- 또한 각 컬럼의 데이터 형식이 같아야 함

 

1. UNION : 중복되는 결과 제거

SELECT [컬럼1]
      ,[컬럼2]
      ,[컬럼3]
  FROM [테이블명1]
 UNION
SELECT [컬럼1]
      ,[컬럼2]
      ,[컬럼3]
  FROM [테이블명2]

 

 

 

2. UNION ALL : 중복되는 결과 포함

SELECT [컬럼1]
      ,[컬럼2]
      ,[컬럼3]
  FROM [테이블명1]
 UNION ALL
SELECT [컬럼1]
      ,[컬럼2]
      ,[컬럼3]
  FROM [테이블명2]

 


 

3. 순위 집계

 

1. RANK : 동일한 값에 대해서는 동일한 순위값을 부여하고, 동일한 순위값 갯수만큼 등수를 건너뛰고 다음 순위를 부여 

SELECT RANK() OVER(PARTITION BY [그룹할 컬럼들] ORDER BY [순위를 매길 때 사용할 컬럼들])
  FROM [테이블명1]
예) 1등(100점), 2등(90점), 3등(85점), 3등(85점), 5등(80점) ....

 

2. DENSE_RANK : 동일한 값에 대해서는 동일한 순위값을 부여하는 대신, 등수를 건너뛰지 않고 다음 순위를 부여

SELECT DENSE_RANK() OVER(PARTITION BY [그룹할 컬럼들] ORDER BY [순위를 매길 때 사용할 컬럼들])
  FROM [테이블명1]
예) 1등(100점), 2등(90점), 3등(85점), 3등(85점), 4등(80점) ....

 

3. ROW_NUMBER : 동일한 값에 대해서도 고유한 순위값을 부여

SELECT ROW_NUMBER() OVER(PARTITION BY [그룹할 컬럼들] ORDER BY [순위를 매길 때 사용할 컬럼들])
  FROM [테이블명1]
예) 1등(100점), 2등(90점), 3등(85점), 4등(85점), 5등(80점) ....

 


4. JOIN

 

1. INNER JOIN : 교집합

 

 

2. OUTER JOIN

-- LEFT OUTER JOIN : LEFT 에 중점

SELECT *
  FROM [테이블1] AS A
  LEFT OUTER JOIN [테이블2] AS B
    ON A.KEY = B.KEY

 

 

 

-- RIGHT OUTER JOIN : RIGHT 에 중점

SELECT *
  FROM [테이블1] AS A
  RIGHT OUTER JOIN [테이블2] AS B
    ON A.KEY = B.KEY

 

 

-- FULL OUTER JOIN : 전체 데이터