Lsiron
집계함수와 제어키워드 본문
함수의 종류는 크게 3가지로 나뉜다.
1. 행 함수 : 데이터 값을 계산하거나 조작하는 것.
2. 그룹 함수 : 행의 그룹을 계산하거나 요약하는 것.
3. 열의 데이터타입을 변환
SQL에서 데이터를 다루는 다양한 함수와 키워드를 통틀어 "집계 함수"와 "제어 키워드"라고 부를 수 있다.
집계 함수 (Aggregate Functions)
집계 함수는 여러 행의 데이터를 하나의 값으로 요약하는 데 사용된다. 주요 집계 함수로는 다음과 같은 것들이 있다.
1. COUNT() : 행의 개수를 셀 때 사용한다. 즉, 검색한 결과의 데이터의 개수를 가져오는 내장함수 이다.
( NULL 인 데이터는 제외한다. )
사용 상황: 특정 조건을 만족하는 행의 수를 알고 싶을 때.
-- 예시: 전체 학생 수를 구할 때
SELECT COUNT(*) FROM students;
-- 예시: 성적이 'A'인 학생 수를 구할 때
SELECT COUNT(*) FROM students WHERE grade = 'A';
2. SUM() : 숫자 열의 합계를 계산할 때 사용한다.
사용 상황: 특정 열의 총합을 알고 싶을 때.
-- 예시: 전체 급여 합계를 구할 때
SELECT SUM(salary) FROM employees;
-- 예시: 특정 부서의 급여 합계를 구할 때
SELECT SUM(salary) FROM employees WHERE department = 'Sales';
3. AVG() : 숫자 열의 평균값을 계산할 때 사용한다.
사용 상황: 특정 열의 평균을 알고 싶을 때.
-- 예시: 전체 급여 평균을 구할 때
SELECT AVG(salary) FROM employees;
-- 예시: 특정 부서의 급여 평균을 구할 때
SELECT AVG(salary) FROM employees WHERE department = 'Sales';
4. MAX() : 숫자 열의 최대값을 찾을 때 사용한다.
사용 상황: 특정 열의 최대값을 알고 싶을 때.
-- 예시: 최고 급여를 받는 직원의 급여를 구할 때
SELECT MAX(salary) FROM employees;
-- 예시: 특정 부서에서 최고 급여를 받는 직원의 급여를 구할 때
SELECT MAX(salary) FROM employees WHERE department = 'Sales';
5. MIN() : 숫자 열의 최소값을 찾을 때 사용한다.
사용 상황: 특정 열의 최소값을 알고 싶을 때.
-- 예시: 최저 급여를 받는 직원의 급여를 구할 때
SELECT MIN(salary) FROM employees;
-- 예시: 특정 부서에서 최저 급여를 받는 직원의 급여를 구할 때
SELECT MIN(salary) FROM employees WHERE department = 'Sales';
제어 키워드 (Control Keywords)
제어 키워드는 쿼리의 결과를 제한하거나 정렬하는 등의 작업을 수행하는 데 사용된다. 주요 제어 키워드로는 다음과 같은 것들이 있다.
1. LIMIT : 결과 행 수를 제한할 때 사용한다. 즉, 테이블에서 출력하고자 하는 데이터의 개수를 제한하는 명령어 이다.
사용 상황: 큰 데이터셋에서 상위 N개의 행만 조회할 때.
-- 예시: 처음 두 명의 직원 정보를 가져올 때
SELECT * FROM employees LIMIT 2;
-- 예시: 두 번째 데이터부터 다섯 명의 직원 정보를 가져올 때 (첫 번째 컬럼의 시작은 0 이기 때문에 1은 두 번째이다.)
SELECT * FROM employees LIMIT 1, 5;
2. OFFSET : 결과의 시작 위치를 지정할 때 사용한다.
사용 상황: 특정 위치부터 데이터를 조회할 때 LIMIT와 함께 사용한다.
-- 예시: 두 번째 위치부터 두 명의 직원 정보를 가져올 때
SELECT * FROM employees LIMIT 2 OFFSET 1;
3. ORDER BY : 결과를 정렬할 때 사용한다.
사용 상황: 특정 열을 기준으로 정렬할 때.
-- 예시: 직원 정보를 급여 기준으로 오름차순 정렬할 때
SELECT * FROM employees ORDER BY salary ASC;
-- 예시: 직원 정보를 급여 기준으로 내림차순 정렬할 때
SELECT * FROM employees ORDER BY salary DESC;
4. GROUP BY : 결과를 그룹화할 때 사용한다.
사용 상황: 그룹별로 집계 함수를 적용할 때.
-- 예시: 부서별 급여 합계를 구할 때
SELECT department, SUM(salary) FROM employees GROUP BY department;
-- 예시: 부서별 직원 수를 구할 때
SELECT department, COUNT(*) FROM employees GROUP BY department;
5. HAVING : 그룹화된 결과에 조건을 적용할 때 사용한다.
사용 상황: 그룹화된 결과에 조건을 추가할 때 GROUP BY와 함께 사용.
-- 예시: 직원 수가 5명 이상인 부서의 부서명과 직원 수를 구할 때
SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) >= 5;
-- 예시: 급여 합계가 100,000 이상인 부서의 부서명과 급여 합계를 구할 때
SELECT department, SUM(salary) FROM employees GROUP BY department HAVING SUM(salary) >= 100000;
6. JOIN : 여러 테이블에서 데이터를 결합하기 위해 사용된다.
MySQL에서 지원하는 주요 JOIN 유형에는 INNER JOIN, LEFT JOIN (또는 LEFT OUTER JOIN), RIGHT JOIN (또는 RIGHT OUTER JOIN)이 있다.
사용 상황: 서로 다른 테이블 간의 관련 데이터를 결합하여 의미 있는 정보를 추출할 수 있다.
예시를 통해 알아보자.
customers 테이블
customer_id | name |
1 | Alice |
2 | Bob |
3 | Charlie |
orders 테이블
order_id | customer_id |
101 | 1 |
102 | 2 |
103 | 4 |
1) INNER JOIN : INNER JOIN은 두 테이블 간의 일치하는 레코드만 반환한다.
-- 별칭 없음
SELECT customers.name, orders.order_id
FROM customers
JOIN orders
ON customers.customer_id = orders.customer_id;
-- 별칭 사용(A, B)
SELECT A.name, B.order_id
FROM customers A
INNER JOIN orders B
ON A.customer_id = B.customer_id;
이 쿼리는 customers 테이블과 orders 테이블에서 customer_id가 일치하는 모든 고객 이름과 주문 ID를 반환한다.
name | order_id |
Alice | 101 |
Bob | 102 |
2) LEFT JOIN (LEFT OUTER JOIN) : LEFT JOIN은 왼쪽 테이블의 모든 레코드를 반환하고, 오른쪽 테이블에서 일치하는 레코드가 없는 경우 NULL을 반환한다.
-- 별칭 없음
SELECT customers.name, orders.order_id
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
-- 별칭 사용(A, B)
SELECT A.name, B.order_id
FROM customers A
LEFT JOIN orders B
ON A.customer_id = B.customer_id;
이 쿼리는 모든 고객의 이름과, 주문이 있는 경우 해당 주문 ID를 반환한다. 주문이 없는 고객의 경우 주문 ID는 NULL이 된다.
name | order_id |
Alice | 101 |
Bob | 102 |
Charlie | NULL |
3) RIGHT JOIN (RIGHT OUTER JOIN) : RIGHT JOIN은 오른쪽 테이블의 모든 레코드를 반환하고, 왼쪽 테이블에서 일치하는 레코드가 없는 경우 NULL을 반환한다.
-- 별칭 없음
SELECT customers.name, orders.order_id
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;
-- 별칭 사용(A, B)
SELECT A.name, B.order_id
FROM customers A
RIGHT JOIN orders B
ON A.customer_id = B.customer_id;
이 쿼리는 모든 주문 ID와, 해당 주문을 한 고객의 이름을 반환한다. 고객이 없는 주문의 경우 고객 이름은 NULL이 된다.
name | order_id |
Alice | 101 |
Bob | 102 |
NULL | 103 |
'데이터베이스 > MySQL' 카테고리의 다른 글
MySQL 서브쿼리(ANY, ALL) (0) | 2024.07.13 |
---|---|
MySQL의 Index (0) | 2024.07.11 |
구글 클라우드를 통한 MySQL 배포하기 (0) | 2024.07.09 |
정규화와 역정규화 그리고 이상현상, 함수의 종속성 (2) | 2024.07.09 |
데이터 모델링이란? (0) | 2024.07.09 |