개발/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 : 전체 데이터
