오늘부터 메타코드M AI 교육 플랫폼에서 무료로 강의를 수강하고,
블로그에 공부 후기를 작성하는 메타코드 서포터즈 5기를 신청하게 되었다.
메타코드는 인공지능, 데이터분석과 같은 최근 중요도가 높은 분야에 대해서
현직자 분들이나 KAIST, 서울대 박사 분들께서 직접 강의를 찍어주시고 계신다.
따라서, 실무에서 쓰이는 스킬들을 핵심만 짚어서 학습할 수 있다는 점에서 꼭 추천하고 싶다.
또한, 메타코드 회원 가입을 하면 12,000 포인트를 지급해주는데,
이 포인트를 이용해서 상시로 진행하는 이벤트에 응모할 수도 있으니 한 번 도전해보시길!
신규 개설된 유료 강의를 선착순으로 무료로 들을 수 있는 기회도 있으니 놓치지 말자!
1. 서브쿼리
SQL 서브쿼리는 다른 SQL 쿼리 내에 포함된 쿼리를 의미한다.
서브쿼리는 주로 데이터를 추출, 필터링 또는 변환하기 위해 사용되며,
메인 쿼리의 WHERE, FROM, 또는 SELECT 절에 포함될 수 있다.
서브쿼리는 종종 괄호로 둘러싸여 있으며, 메인 쿼리의 일부분으로 작동한다.
서브쿼리의 종류는 다음과 같다.
1. Scalar Subquery: 단일 값만 반환하는 서브쿼리
2. Multi-row Subquery: 여러 행을 반환하는 서브쿼리
3. Multi-column Subquery: 여러 열을 반환하는 서브쿼리
4. Correlated Subquery: 서브쿼리가 메인 쿼리의 각 행에 대해 한 번씩 실행되는 경우
1.1 서브쿼리 사용 예제
1.1.1 WHERE 절에서 서브쿼리 사용
이 SQL 쿼리는 'products' 테이블에서 특정 조건을 만족하는 제품들의 이름('productName')과 구매 가격('buyPrice')을 선택한다. 구체적으로, 구매 가격이 모든 제품의 평균 구매 가격보다 높은 제품들을 조회한다.
SELECT productName
buyPrice,
FROM products
WHERE buyPrice > (SELECT AVG(buyPrice) FROM products);
메인 쿼리에서 두 개의 컬럼, 'productName'과 'buyPrice'를 'products' 테이블에서 선택하고,
WHERE buyPrice > (SELECT AVG(buyPrice) FROM products)
메인쿼리의 'WHERE' 절은 서브쿼리의 'products' 테이블에서 'buyPrice' 컬럼의 평균 값을 계산한 후
단일 값을 반환한 평균 구매 가격보다 'buyPrice'가 큰 행만 선택한다.
1.2 Table Subquery
SQL에서 테이블 서브쿼리는 주로 FROM 절에서 사용되는 서브쿼리로, 메인 쿼리에 임시 테이블처럼 제공된다.
테이블 서브쿼리는 반환한 결과 집합을 메인 쿼리의 테이블처럼 사용하여 다양한 연산을 수행할 수 있게 한다.
이는 복잡한 질의를 단순화하고, 쿼리의 가독성을 높이는 데 유용하다.
FROM 절에 사용되는 서브쿼리는 별칭이 필수인 점을 기억하자
1.3 상관 Subquery
상관 서브쿼리는 서브쿼리가 메인 쿼리의 각 행에 대해 한 번씩 실행되는 서브쿼리이다.
따라서 메인 쿼리의 100개의 행이 있다면 상관 서브쿼리도 100번 실행한다.
메인 쿼리의 열을 참조하므로, 메인 쿼리의 각 행마다 서브쿼리를 재실행하여 조건을 평가하는데,
이는 서브쿼리와 메인 쿼리 간의 상호 의존성을 만들어내며,
특정 조건을 만족하는 데이터를 선택하거나 계산할 때 유용하다.
상관 서브쿼리는 보통 WHERE, HAVING, SELECT 절에서 사용된다.
상관 서브쿼리는 메인 쿼리의 현재 행에 의존하여 실행되므로, 서브쿼리 내에서 메인 쿼리의 열을 참조한다.
2. Common Table Expression (CTE)
CTE(Common Table Expression)와 서브쿼리(Subquery)는 SQL에서 복잡한 쿼리를 단순화하고 가독성을 높이기 위해 사용되는 두 가지 방법입니다. 둘 다 임시 결과 집합을 정의할 수 있지만, 각자의 장단점과 적합한 사용 사례가 있다.
CTE는 쿼리의 시작 부분에 정의된 임시 결과 집합으로, WITH 키워드를 사용하여 선언된다.
또한 쿼리 내에서 여러 번 참조할 수 있으며, 특히 재귀 쿼리 작성 시 유용하다.
WITH DepartmentAvgSalaries AS (
SELECT DepartmentID, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY DepartmentID
)
SELECT e.EmployeeID, e.Name, e.Salary, d.AvgSalary
FROM Employees e
JOIN DepartmentAvgSalaries d
ON e.DepartmentID = d.DepartmentID
WHERE e.Salary > d.AvgSalary;
이 예제에서는 각 부서의 평균 급여를 계산하는 CTE를 정의하고, 이를 메인 쿼리에서 사용하여
평균 급여보다 높은 급여를 받는 직원들을 조회한다.
그렇다면 CTE의 장단점은 무엇일까?
장점
가독성: 복잡한 쿼리를 단계별로 나눌 수 있어 가독성이 높아짐
재사용성: 한 번 정의된 CTE는 쿼리 내에서 여러 번 참조
재귀 쿼리 지원: CTE는 재귀 쿼리를 작성할 때 특히 유용함
디버깅 용이: 단계별로 쿼리를 분리할 수 있어 디버깅이 용이함
단점
일부 데이터베이스의 제한: 모든 데이터베이스에서 동일하게 최적화 어려움
메모리 사용: 큰 결과 집합을 생성하는 CTE는 메모리를 많이 사용
오늘 강의 후기
SQL에서 가장 중요한 개념 중 하나인 서브쿼리 & CTE를 배웠는데,
뭔가 기존에 책으로 공부하던 것보다 핵심만 딱 요약해서 설명해주시는 느낌이라서
공부하는 데도 지루하지 않고 조금 더 내용적으로도 잘 이해되는 것 같다.
앞으로 강의와 실습을 바탕으로 SQL 마스터 해보자 ,,
해당 강의를 들을 지 말지 고민말고 한 번 들어보시길!
이상훈 강사님의 데이터분석가 입문 필수 SQL 부트캠프
데이터 분석가 공부를 시작하려는 학생들에게 강추합니다!
* 서포터즈 지원을 받아 작성하였습니다
'Portfolio > 메타코드M 서포터즈 5기' 카테고리의 다른 글
[메타코드 강의 후기] WINDOW 함수 (0) | 2024.07.14 |
---|---|
[메타코드 강의 후기] Having & JOIN 구문 (0) | 2024.07.08 |
[메타코드 강의 후기] SQL 부트캠프 | WHERE & ORDER BY & GROUP BY (0) | 2024.06.30 |
[메타코드 강의 후기] SQL 부트캠프 | DataType & Table 생성 (4) | 2024.06.23 |
[메타코드 강의 후기] SQL 부트캠프 | 데이터베이스란? (1) | 2024.06.16 |