MySQL - 파생 테이블

안녕하세요, 데이터베이스 열정가 여러분! MySQL 파생 테이블의 세계로 여러분을 안내하게 되어 기쁩니다. 컴퓨터 과학을 오랫동안 가르쳐온 경험을 바탕으로 말씀드리건데, 이 주제는처음에는 무서울 수 있지만, 실제로는 매우 즐겁고 유용합니다. 그럼 시작해보겠습니다!

MySQL - Derived Tables

MySQL 파생 테이블이란?

자, 큰 파티를 준비하는 상상을 해보겠습니다(누가 데이터베이스 파티를 좋아하지 않을까요?). 친구들의 목록이 있지만, 인근 지역에 사는 친구들만 따로 목록을 만들고 싶습니다. MySQL에서 파생 테이블이 하는 일은 바로 이와 같습니다. 즉, 쿼리 내부에서 임시 테이블을 생성하여 데이터를 더 효과적으로 조직하고 분석하는 것입니다.

기술적인 말로 하면, 파생 테이블은 FROM 절에 나타나는 서브쿼리입니다. 마치 양이 통나무를 만들 듯, 임시 테이블을 즉석에서 생성하여 주 쿼리에서 사용할 수 있습니다.

간단한 예를 보겠습니다:

SELECT * FROM
(SELECT name, age FROM people WHERE age > 18) AS adults
WHERE adults.age < 30;

이 쿼리에서 괄호 안에 있는 모든 것은 파생 테이블입니다. 18세 이상의 모든 사람을 임시 테이블로 만들고, 그 테이블에서 30세 미만의 사람을 선택합니다.

파생 테이블에서 WHERE 절 사용하기

WHERE 절은 파생 테이블을 사용할 때 최고의 친구입니다. 이를 통해 파생 테이블과 주 쿼리 모두에서 데이터를 필터링할 수 있습니다. 이전 예제를 확장해보겠습니다:

SELECT * FROM
(SELECT name, age, city FROM people WHERE age > 18) AS adults
WHERE adults.city = 'New York' AND adults.age < 30;

여기서 우리는 먼저 18세 이상의 모든 성인을 파생 테이블로 만들고, 그 테이블에서 뉴욕에 사는 사람들 중 30세 미만인 사람들만 선택합니다. 마치 더블 필터 같은 것입니다!

파생 테이블에서 컬럼 별칭 지정하기

파생 테이블에서 컬럼에 더 설명적인 이름을 주고 싶을 때가 있습니다. 이럴 때 별칭이 유용합니다. 보겠습니다:

SELECT young_adult_name, years_alive FROM
(SELECT name AS young_adult_name, age AS years_alive
FROM people
WHERE age BETWEEN 18 AND 25) AS young_adults;

이 예제에서 우리는 'name'을 'young_adult_name'으로, 'age'를 'years_alive'로 별칭을 지정했습니다. 이렇게 하면 쿼리가 더 읽기 쉽고 설명적이 됩니다.

파생 테이블에서 집계 함수 사용하기

COUNT, AVG, SUM과 같은 집계 함수는 파생 테이블에서 매우 유용할 수 있습니다. 예를 들어, 각 연령 그룹에 속한 사람의 수를 구하고 싶다면:

SELECT age_group, count FROM
(SELECT
CASE
WHEN age < 18 THEN 'Under 18'
WHEN age BETWEEN 18 AND 30 THEN '18-30'
WHEN age BETWEEN 31 AND 50 THEN '31-50'
ELSE 'Over 50'
END AS age_group,
COUNT(*) as count
FROM people
GROUP BY age_group) AS age_distribution
ORDER BY count DESC;

이 쿼리는 연령 그룹으로 사람들을 나누고 각 그룹의 인원 수를 계산하는 파생 테이블을 생성합니다. 그런 다음 이 파생 테이블에서 결과를 선택합니다.

클라이언트 프로그램을 사용하여 테이블 파생하기

우리는 일반적으로 MySQL에서 직접 쿼리를 작성하지만, 클라이언트 프로그램을 사용하여 파생 테이블을 만들 수도 있습니다. Python을 사용한 간단한 예제를 보겠습니다:

import mysql.connector

# 데이터베이스에 연결
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# 파생 테이블을 포함한 쿼리 생성
query = """
SELECT * FROM
(SELECT name, age FROM people WHERE age > 18) AS adults
WHERE adults.age < 30;
"""

# 쿼리 실행
cursor.execute(query)

# 결과 가져오기 및 출력
for (name, age) in cursor:
print(f"{name} is {age} years old")

# 연결 닫기
cursor.close()
cnx.close()

이 Python 스크립트는 MySQL 데이터베이스에 연결하고, 파생 테이블을 포함한 쿼리를 실행한 후 결과를 출력합니다.

결론

그렇습니다, 여러분! MySQL 파생 테이블의 세계를 여러분과 함께 여행했습니다. 파생 테이블은 SQL에서의 비밀 무기입니다. 임시 테이블을 즉석에서 만들어 데이터를 조직하고 분석하는 데 유용합니다.

프로그래밍의 모든 것처럼, 연습이 완벽을 이룬다고 합니다. 그러므로 자신의 프로젝트에서 파생 테이블을 실험해 보지 마세요. 누가 알랍니까? 당신은 도시에서 가장 멋진 데이터베이스 파티를 열 수 있을지도 모릅니다!

여기서 다룰 방법의 빠른 참고자료입니다:

방법 설명
기본 파생 테이블 FROM 절 내에서 임시 테이블 생성
WHERE 절 파생 테이블과 주 쿼리에서 데이터 필터링
별칭 지정 파생 테이블에서 컬럼에 설명적인 이름 부여
집계 함수 사용 COUNT, AVG, SUM과 같은 함수 사용
클라이언트 프로그램 외부 프로그래밍 언어를 사용하여 파생 테이블 생성

Happy querying, and may your databases always be normalized!

Credits: Image by storyset