SQLite - 서브쿼리: 초보자 가이드
안녕하세요, 프로그래밍에 도전하는 여러분! 오늘 우리는 SQLite 서브쿼리의 세계에 흥미로운 여정을 떠납니다. 프로그래밍 초보자라도 걱정하지 마세요 - 저는 여러분의 친절한 안내자가 되어 단계별로 설명해드릴게요. 시작해보겠습니다!
서브쿼리는 무엇인가요?
본격적인 내용에 들어가기 전에 서브쿼리가 무엇인지 이해해보겠습니다. 모임을 계획하고 손님 명단을 작성해야 한다고 가정해봅시다. 먼저 모든 친구들의 목록을 만들고, 그 중에서 인근에 사는 친구들로 좁혀집니다. 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