SQL SELECT 가이드
SQL SELECT 완벽 가이드
SQL에서 가장 많이 사용하는 명령어는 단연 SELECT입니다. 데이터를 조회하는 것은 모든 데이터 분석의 시작점이며, SELECT 문을 제대로 이해하면 대부분의 분석 작업을 수행할 수 있습니다. 이 글에서는 SELECT의 기초부터 고급 활용법까지 모두 다뤄보겠습니다.
SELECT의 기본 구조
SELECT 문의 기본 형태는 매우 간단합니다.
SELECT 컬럼명 FROM 테이블명;
예를 들어, users 테이블에서 모든 사용자의 이름을 조회하려면 이렇게 작성합니다.
SELECT name FROM users;
여러 컬럼을 동시에 조회하고 싶다면 쉼표로 구분합니다.
SELECT name, email, age FROM users;
모든 컬럼을 조회하고 싶다면 별표(*)를 사용합니다.
SELECT * FROM users;
다만 실무에서는 필요한 컬럼만 명시하는 것이 좋습니다. 성능 면에서도 유리하고, 코드의 의도도 명확해집니다.
WHERE 절로 조건 필터링하기
데이터베이스에는 수많은 데이터가 있습니다. 원하는 데이터만 골라내려면 WHERE 절을 사용합니다.
SELECT name, age FROM users WHERE age >= 20;
이 쿼리는 나이가 20세 이상인 사용자만 조회합니다. WHERE 절에는 다양한 조건을 사용할 수 있습니다.
-- 정확히 일치하는 경우 WHERE city = 'Seoul' -- 범위 지정 WHERE age BETWEEN 20 AND 30 -- 여러 값 중 하나 WHERE city IN ('Seoul', 'Busan', 'Incheon') -- 패턴 매칭 (부분 일치) WHERE email LIKE '%@gmail.com' -- NULL 체크 WHERE phone_number IS NULL
여러 조건을 조합할 때는 AND와 OR를 사용합니다.
SELECT name, age, city FROM users WHERE age >= 20 AND city = 'Seoul' AND email LIKE '%@gmail.com';
ORDER BY로 정렬하기
조회 결과를 특정 기준으로 정렬하려면 ORDER BY를 사용합니다.
SELECT name, age, created_at FROM users ORDER BY created_at DESC;
DESC는 내림차순(큰 값부터), ASC는 오름차순(작은 값부터)을 의미합니다. ASC는 기본값이라 생략 가능합니다.
여러 컬럼을 기준으로 정렬할 수도 있습니다.
SELECT name, city, age FROM users ORDER BY city, age DESC;
이 쿼리는 먼저 도시별로 정렬하고, 같은 도시 내에서는 나이 많은 순으로 정렬합니다.
LIMIT으로 결과 개수 제한하기
상위 N개의 결과만 보고 싶을 때는 LIMIT을 사용합니다.
SELECT name, purchase_amount FROM orders ORDER BY purchase_amount DESC LIMIT 10;
이 쿼리는 구매 금액이 가장 큰 상위 10개의 주문을 조회합니다. 특정 위치부터 조회하고 싶다면 OFFSET을 함께 사용합니다.
SELECT name, age FROM users ORDER BY age DESC LIMIT 10 OFFSET 20;
이는 21번째부터 30번째까지의 결과를 가져옵니다. 페이지네이션 구현할 때 유용합니다.
DISTINCT로 중복 제거하기
중복을 제거하고 고유한 값만 조회하려면 DISTINCT를 사용합니다.
SELECT DISTINCT city FROM users;
이 쿼리는 사용자들이 거주하는 모든 도시 목록을 중복 없이 보여줍니다. 여러 컬럼에 DISTINCT를 적용하면 해당 컬럼 조합이 고유한 행만 조회됩니다.
SELECT DISTINCT city, age FROM users;
집계 함수로 통계 내기
SELECT 문에서는 집계 함수를 사용해 데이터를 요약할 수 있습니다.
-- 개수 세기 SELECT COUNT(*) as total_users FROM users; -- 평균 구하기 SELECT AVG(age) as average_age FROM users; -- 합계 구하기 SELECT SUM(purchase_amount) as total_revenue FROM orders; -- 최댓값, 최솟값 SELECT MAX(age) as oldest, MIN(age) as youngest FROM users;
AS 키워드는 컬럼에 별칭(alias)을 붙여 결과를 읽기 쉽게 만듭니다.
GROUP BY로 그룹별 집계하기
집계 함수의 진정한 힘은 GROUP BY와 함께 사용할 때 나타납니다.
SELECT city, COUNT(*) as user_count FROM users GROUP BY city;
이 쿼리는 도시별로 사용자 수를 집계합니다. 여러 컬럼으로 그룹화할 수도 있습니다.
SELECT city, age, COUNT(*) as count FROM users GROUP BY city, age ORDER BY city, age;
HAVING으로 그룹 필터링하기
그룹화된 결과에 조건을 적용하려면 HAVING을 사용합니다. WHERE는 그룹화 전 행을 필터링하고, HAVING은 그룹화 후 그룹을 필터링합니다.
SELECT city, COUNT(*) as user_count FROM users GROUP BY city HAVING COUNT(*) >= 100;
이 쿼리는 사용자가 100명 이상인 도시만 보여줍니다.
SQL Growth
