안녕하세요! 오늘은 Subquery를 정리해보며 복습해 보겠습니다🙂
Subquery 🧾
Subquery란? 쿼리 안의 쿼리를 의미하며, 보통 Subquery는 SELECT 문장 내부에서 사용되며, Subquery의 결과를 통해 외부 쿼리가 실행됩니다. 이를 통해 복잡한 데이터 추출과 집계를 쉽게 처리할 수 있습니다.
예를 들어서 카카오페이로만 결제한 유저들의 정보를 확인할려면
SELECT u.user_id, u.name, u.email FROM Users u
WHERE u.user_id IN (
SELECT user_id FROM Orders
WHERE payment_method = 'kakaopay'
)
위와 같이 쿼리안에 쿼리문을 작성하여 결과값을 불러올 수 있습니다.
WITH 👪
WITH 절은 서브쿼리를 사용할 때 반복적으로 사용되는 중복 코드를 단순화하고 가독성을 높여주는 문법입니다. WITH 절은 쿼리의 가장 상단에 위치하며, 하나 이상의 서브쿼리를 정의할 수 있습니다. 이렇게 정의된 서브쿼리는 이후 쿼리에서 재사용됩니다.
WITH Sales AS (
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01'
)
SELECT *
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Sales);
이 쿼리는 Orders 테이블에서 OrderDate가 '2023-01-01' 이후인 행들을 Sales라는 서브쿼리로 정의한 뒤, Customers 테이블에서 Sales 서브쿼리에서 추출된 CustomerID와 일치하는 행을 반환합니다.
문자열 🔠
SQL을 사용하다보면 문자열 데이터를 원하는 형태로 정리해야 하는 경우가 있는데 몇 개의 예시로 파악해 보겠습니다.
이메일에서 아이디만 가져오기
SELECT user_id, email, SUBSTRING_INDEX(email, '@', 1) FROM Users
@ 를 기준으로 텍스트를 나누고, 그 중 1번째 부분을 가져옵니다.
이메일에서 이메일 도메인만 가져오기
SELECT user_id, email, SUBSTRING_INDEX(email, '@', -1) FROM Users
@ 를 기준으로 텍스트를 나누고, 그 중 마지막(-1)번째 부분을 가져옵니다.
CASE 🗄
CASE 문법은 특정 조건에 따라 값을 반환하거나 특정 값을 변경하는 데 사용됩니다. 일반적으로 SELECT 문장 내부에서 사용됩니다.
SELECT CustomerID,
CASE
WHEN Country = 'USA' THEN 'United States'
WHEN Country = 'UK' THEN 'United Kingdom'
ELSE Country
END AS CountryName
FROM Customers;
이 쿼리는 Customers 테이블의 Country 열의 값이 'USA'일 경우 'United States', 'UK'일 경우 'United Kingdom', 그 외의 경우에는 해당 값 그대로를 반환하는 CountryName 열을 SELECT 문장에서 생성합니다.
CASE 문법은 여러 조건을 포함할 수 있으며, 각 조건에 따라 다른 결과 값을 반환할 수 있습니다. 다음은 Subquery와 WITH절을 함께 사용한 예시입니다.
WITH Table1 AS (
SELECT pu.point_user_id, pu.point,
CASE
WHEN pu.point >= 10000 THEN '1만 이상'
WHEN pu.point >= 5000 THEN '5천 이상'
ELSE '5천 미만'
END AS level
FROM point_users pu
)
SELECT level, count(*) AS cnt FROM Table1
GROUP BY level
![](https://velog.velcdn.com/images/zihvvan/post/ba15f71f-2f3e-4899-92bd-3a8e3f80ebaf/image.png)
위 쿼리문을 통해 포인트에 따른 회원수를 구분하여 나타낼 수 있습니다.
Subquery와 문자열, WITH절, CASE문법을 사용해보면서 SQL의 이해도를 한단계 더 높일 수 있었습니다. 항상 느끼는거지만 자주 사용해보고 손에 익혀봐야 숙련도가 100%에 도달할 것입니다. 오늘도 읽어주셔서 감사합니다!!😊