MSSQL ?
Microsoft SQL Server의 약어로,
마이크로소프트에서 개발한 관계형 데이터 베이스 관리 시스템(RDBMS) 입니다.
Query ?
문의하다, 질문하다.
데이터베이스에 정보를 요청하는 일.
DB에서 원하는 조건에 맞는 데이터를 조작할 수 있는 SQL 문장의 집합
= 질의문
Employees Table
VacationRequests Table
WITH
일시적인 서브쿼리를 생성하는 방법
서브쿼리
WITH 절 뒤에 정의하며, 이 서브쿼리 결과를 참조 할 수 있습니다.
→ 공통 테이블 식(Common Table Expression, CTE)라고도 부릅니다.
코드의 가독성을 높이고, 중복을 줄일 수 있습니다.
WITH 절과 함께 서브 쿼리 사용 예시
임시 테이블 1개
start_date 1월1일 ~ 1월31일 내에 있는 요청 리스트
CTE : jan_vacation 임시 테이블에 휴가 정보 저장(1월 start)
JOIN : Employees와 jan_vacation을 employee_id와 request_id로 연결
SELECT : 직원의 이름과 휴가 기간 및 유형 출력
임시 테이블 2개
CTE : janS_vacation 임시 테이블에 start_date가 1월인 데이터,
janE_vacation 임시 테이블에 end_date가 1월인 데이터를 저장
JOIN : employee_id, request_id를 기준으로 연결
SELECT : 직원의 이름, 휴가 기간(start/end), 유형 출력
ROLLUP
그룹 함수로 집계된 데이터에서 소계, 합계를 쉽게 구하기 위함
ROLLUP(dept_name, vacation_type) : 그룹화 된 결과에 누적된 합을 추가
- dept_name과 vacation_type으로 그룹화
- 그룹 컬럼으로 지정된 컬럼에 대하여 소계와 합계 집계
++NULL이 아닌, ‘소계, 합계’ 로 label 표시
CASE+GROUPING
GROUPING(dept_name)이 1이면(isNull), ‘합계’ 출력
→ NULL을 반환하는 부서 합계를 의미
GROUPING(vacation_type)이 1이면, ‘소계’ 출력
→ vacation_type 별로 각각의 합계를 의미
++GROUPING
생성된 NULL값을 구별할 때 사용
NULL은 그룹화된 label을 나타내므로, 이를 실질적인 값으로 교체하거나 지정할 때 유용
++IIF
삼항 연산자 형태로 사용, 조건식에 따라 두 값 중 하나를 반환
CASE 말고 IIF 사용해도 같은 결과 도출
PARTITION BY
어떤 항목을 기준으로 테이블을 분리하여 순위나 순서를 나타낼 때 사용
WITH 절로 vacation_count 라는 임시 테이블 생성
++RANK()
SQL 윈도우 함수로, 기준에 따라 순위를 매김
++OVER
윈도우 함수가 동작할 범위를 지정
+++ORDER BY COUNT(*) DESC
각 부서에 해당되는 행의 수를 센 뒤, 가장 많이 사용한(큰 수) 것 부터 순위를 매기겠다는 의미
PARTITION BY dept_name
dept_name 별로 나누고, 그 안에서 순위를 정함
MERGE
변경할 테이블에 데이터가 존재하는지 체크하고,
UPDATE, DELETE, INSERT를 한번에 작업이 가능.
MERGE INTO 변경할 테이블
USING 비교할 테이블 | 서브 쿼리
ON 조건문
WHEN MATCHED THEN
조건을 만족할 경우
UPDATE
DELETE
WHEN NOT MATCHED THEN
조건을 만족하지 않을 경우
INSERT
테이블을 비교하여, 조건에 해당될 때 UPDATE 되도록
++추가 쿼리 연습
고급 SQL 쿼리 연습 문제 (10개)
1. 직원과 부서 정보 결합 (INNER JOIN)
2. 각 부서별 직원 수 조회 (GROUP BY, HAVING)
3. 프로젝트에 참여한 직원 조회 (INNER JOIN)
4. 특정 프로젝트에 참여한 직원들의 급여 평균 (JOIN, GROUP BY)
5. 급여가 평균 급여 이상인 직원 조회 (WITH, SUBQUERY)
6. 프로젝트별 직원의 참여 순위 (PARTITION BY, RANK)
7. 모든 직원의 급여 합계와 각 직원의 급여 비율 (ROLLUP)
8. 부서별 직원 리스트와 해당 프로젝트 이름 조회 (JOIN, WITH)
9. Project Beta에 참여하지 않은 직원 조회 (NOT IN)
10. 가장 오래된 직원부터 최근 입사한 직원 순으로 급여 조회 (PARTITION BY)
'개발자 되기' 카테고리의 다른 글
[Spring] STS3 다운로드 / jdk11, lombok 다운로드 및 초기 설정 + 외부 라이브러리 참조(maven) (24.04.30) (0) | 2024.08.27 |
---|---|
[Eclipse > DBManager] DAO작성 시 DBManager 활용법 (24.04.24) (0) | 2024.08.27 |
[이클립스•Eclipse/Web개발] Dynamic Web Project 생성 + 톰캣 서버 연결 (24.04.24) (0) | 2024.08.27 |
[JDBC / Eclipse - DB mySql 연동] (24.04.16) (0) | 2024.08.27 |
[Web•웹] 외부 라이브러리 jstl 참조 방법 (이클립스) (24.04.12) (0) | 2024.08.27 |