SQLite - 서브쿼리: 초보자 가이드

안녕하세요, 프로그래밍에 도전하는 여러분! 오늘 우리는 SQLite 서브쿼리의 세계에 흥미로운 여정을 떠납니다. 프로그래밍 초보자라도 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되어 단계별로 설명해드릴게요. 시작해보겠습니다!

SQLite - Subqueries

서브쿼리는 무엇인가요?

본격적인 내용에 들어가기 전에 서브쿼리가 무엇인지 이해해보겠습니다. 모임을 계획하고 손님 명단을 작성해야 한다고 가정해봅시다. 먼저 모든 친구들의 목록을 만들고, 그 중에서 인근에 사는 친구들로 좁혀집니다. SQL에서 서브쿼리는 바로 그 두 번째 단계와 같습니다 - 주 쿼리 내에 있는 쿼리로, 결과를 더 정밀하게 만들어줍니다.

SELECT 문에서의 서브쿼리

서브쿼리의 가장 일반적인 사용법 중 하나는 SELECT 문에서입니다.

기본 서브쿼리 예제

SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

이 예제에서 우리는 평균 연봉 이상을 받는 직원들을 찾고 있습니다. 내부 쿼리 (SELECT AVG(salary) FROM employees)는 평균 연봉을 계산하고, 외부 쿼리는 이 결과를 사용하여 직원들을 필터링합니다.

FROM 절에서의 서브쿼리

SELECT department, avg_salary
FROM (
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
) AS dept_salaries
WHERE avg_salary > 50000;

여기서 우리는 부서별 평균 연봉을 계산한 임시 테이블을 만들고, 평균 연봉이 50,000을 초과하는 부서를 선택합니다.

INSERT 문에서의 서브쿼리

서브쿼리는 기존 정보를 기반으로 데이터를 삽입하는 데도 사용할 수 있습니다.

INSERT INTO high_earners (employee_id, name)
SELECT id, name
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);

이 쿼리는 평균 연봉의 1.5배 이상을 받는 직원들을 'high_earners' 테이블에 삽입합니다.

UPDATE 문에서의 서브쿼리

서브쿼리를 기반으로 데이터를 업데이트하는 것은 또 다른 강력한 기능입니다.

UPDATE employees
SET bonus = salary * 0.1
WHERE department_id IN (
SELECT id
FROM departments
WHERE performance_rating > 8
);

이 쿼리는 성과 평가가 8 이상인 부서의 직원들에게 10%의 보너스를 지급합니다.

DELETE 문에서의 서브쿼리

마지막으로, 서브쿼리를 사용하여 데이터를 삭제하는 방법을 살펴보겠습니다.

DELETE FROM products
WHERE id NOT IN (
SELECT product_id
FROM orders
WHERE order_date > DATE('now', '-1 year')
);

이 쿼리는 최근 1년 동안 주문되지 않은 제품들을 삭제합니다.

서브쿼리 메서드

다음 표는 우리가 다루었던 다양한 메서드를 요약합니다:

메서드 설명 예제
SELECT 문에서의 서브쿼리 서브쿼리를 사용하여 주 쿼리를 필터하거나 값 계산 SELECT ... WHERE column > (SELECT AVG(...))
FROM 절에서의 서브쿼리 파생 테이블을 만들어 쿼리를 실행 SELECT ... FROM (SELECT ...) AS derived_table
INSERT 문에서의 서브쿼리 서브쿼리를 기반으로 데이터 삽입 INSERT INTO ... SELECT ... WHERE ...
UPDATE 문에서의 서브쿼리 서브쿼리를 기반으로 데이터 업데이트 UPDATE ... SET ... WHERE column IN (SELECT ...)
DELETE 문에서의 서브쿼리 서브쿼리를 기반으로 데이터 삭제 DELETE FROM ... WHERE column NOT IN (SELECT ...)

결론

축하합니다! 여러분은 SQLite 서브쿼리의 세계로 첫 걸음을 뗐습니다. 자전거 타는 것을 배우는 것처럼, 서브쿼리를 마스터하려면 연습이 필요합니다. 즉시 이해가 되지 않더라도 낙담하지 마세요 - 다양한 쿼리를 실험하면서 점점 익숙해질 것입니다.

마무리하며, 제 교육 경험에서 한 이야기를 전해드리겠습니다: 제가 가르치던 한 학생은 서브쿼리에 어려움을 겪었습니다. 그녀는 서브쿼리를 러시아 인형 상자에 비유했습니다 - 쿼리 내에 쿼리가 들어 있습니다. 이 비유가 도움이 되었고, 그녀는 곧 서브쿼리를 잘 작성하는 최고의 학생 중 하나가 되었습니다.

따라서 서브쿼리를 인형 상자로 볼 수도 있고, 아마도 트레이스 헌트에서 각 쿼리가 보상에 가까워지게 만드는 것으로 볼 수 있습니다. 계속 연습하고 탐구하세요. 데이터의 세계는 방대하고 흥미롭며, 서브쿼리는 그 비밀을 푸는 열쇠입니다!

기쁜 쿼리 작성을 기원하며, 데이터베이스의 세계에서 호기심은 여러분의 최고의 친구입니다. 질문을 계속하면 답을 계속 찾을 수 있습니다!

Credits: Image by storyset