no image
[MySQL] JOIN (INNER JOIN, OUTER JOIN)
JOIN- 2개 이상 테이블에서 연관된 데이터를 결합하여 조회할 때 사용- 여러 테이블을 join하면 각 테이블의 데이터를 공통 컬럼 기준으로 연결해 하나의 결과로 반환한다.- INNER JOIN / LEFT OUTER JOIN / RIGHT OUTER JOIN으로 구분된다. INNER JOIN- 두 테이블에서 모두 일치하는 행만 반환한다!SELECT columnsFROM 테이블1INNER JOIN 테이블2ON 테이블1.column = 테이블2.column; 위 예시에서, 양 테이블의 데이터 중 ON 절의 조건에 맞는 교집합만 결과로 반환한다.조건에 맞지 않은 행은 제외한다.만약, ON절이 없이 INNER JOIN만 있으면, 모든 행을 서로 곱한 결과 즉 카타시안 곱을 만든다! LEFT OUTER..
2025.11.16
no image
[MySQL] 집계함수 (ROUND, COUNT)
ROUND 함수숫자를 지정한 소수점 자리수로 반올림해 반환하는 함수자릿수를 지정하지 않으면 정수로 반올림해준다. ROUND(숫자, 자릿수) 이 때,자릿수를 생략하면 0의 자릿수 즉 정수 단위로 반올림한다. ( 2-> 소숫점 둘째 자리까지)자릿수가 양수이면 소수점 이하 기준으로 반올림한다.자리수가 음수이면 소수점 왼쪽 자릿수를 기준으로 반올림한다. (-2 -> 100의 자리까지 반올림) mysql> SELECT ROUND(125.315);-- 결과: 125mysql> SELECT ROUND(125.315, 0);-- 결과: 125mysql> SELECT ROUND(125.315, 1);-- 결과: 125.3mysql> SELECT ROUND(125.315, 2);-- 결과: 125.32mysql> SEL..
2025.11.12
no image
[MySQL] GROUP BY
GROUP BY절이란여러 행의 데이터를 집계할 때, 하나 이상의 컬럼을 기준으로 그룹화할 때 사용.동일한 값을 가진 행들을 묶어 중복을 제거한다.집계함수와 함께 사용하여 어떤 통계치를 낼 때 사용한다. SELECT 컬럼명1, 컬럼명2, ...., 집계함수(컬럼명)FROM 테이블명GROUP BY (컬럼명1, 컬럼명2,...); 여기서 유의해야할 규칙은, SELECT에 명시된 컬럼들 중집계함수 (MAX, COUNT, AVG 등)안에 들어가지 않는 컬럼명은 전부 GROUP BY절에 명시해야 한다는 것이다. 집계하지 않을 컬럼을 SELECT에 명시해놓고 GROUP BY로 묶지 않는다면, MySQL 입장에서는 헷갈리기 떄문이다. 예를 들어 부서 별 평균 연봉을 구하고자 하는데, SELECT 부서, 성별, AVG..
2025.11.11

[MySQL] JOIN (INNER JOIN, OUTER JOIN)

친환경 개발자
|2025. 11. 16. 23:57

 

JOIN

- 2개 이상 테이블에서 연관된 데이터를 결합하여 조회할 때 사용

- 여러 테이블을 join하면 각 테이블의 데이터를 공통 컬럼 기준으로 연결해 하나의 결과로 반환한다.

- INNER JOIN / LEFT OUTER JOIN / RIGHT OUTER JOIN으로 구분된다.

 

 

 

INNER JOIN

- 두 테이블에서 모두 일치하는 행만 반환한다!

SELECT columns
FROM 테이블1
INNER JOIN 테이블2
ON 테이블1.column = 테이블2.column;

 

위 예시에서, 양 테이블의 데이터 중 ON 절의 조건에 맞는 교집합만 결과로 반환한다.

조건에 맞지 않은 행은 제외한다.

만약, ON절이 없이 INNER JOIN만 있으면, 모든 행을 서로 곱한 결과 즉 카타시안 곱을 만든다!

 

 

 

LEFT OUTER JOIN

- 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블과 일치하는 행만 결합한다.

SELECT columns
FROM 테이블1
LEFT [OUTER] JOIN 테이블2
ON 테이블1.column = 테이블2.column;

 

 

왼쪽 테이블(테이블1)의 모든 행을 가져오고, 오른쪽(테이블2)의 컬럼 값은 일치하는 값이 없으면 결과에 NULL이 들어간다.

 

즉, 왼쪽 기준의 전체 데이터 + 교집합.

 

 

 

RIGHT OUTER JOIN

- 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블과 일치하는 행만 결합한다.

SELECT columns
FROM 테이블1
RIGHT [OUTER] JOIN 테이블2
ON 테이블1.column = 테이블2.column;

 

오른쪽 테이블(테이블1)의 모든 행을 가져오고, 왼쪽(테이블2)의 컬럼 값은 일치하는 값이 없으면 결과에 NULL이 들어간다.

 

즉, 오른쪽 기준의 전체 데이터 + 교집합.

[MySQL] 집계함수 (ROUND, COUNT)

친환경 개발자
|2025. 11. 12. 22:14

 

 

ROUND 함수

숫자를 지정한 소수점 자리수로 반올림해 반환하는 함수

자릿수를 지정하지 않으면 정수로 반올림해준다.

 

 

ROUND(숫자, 자릿수)

 

이 때,

자릿수를 생략하면 0의 자릿수 즉 정수 단위로 반올림한다. ( 2-> 소숫점 둘째 자리까지)

자릿수가 양수이면 소수점 이하 기준으로 반올림한다.

자리수가 음수이면 소수점 왼쪽 자릿수를 기준으로 반올림한다. (-2 -> 100의 자리까지 반올림)

 

mysql> SELECT ROUND(125.315);
-- 결과: 125

mysql> SELECT ROUND(125.315, 0);
-- 결과: 125

mysql> SELECT ROUND(125.315, 1);
-- 결과: 125.3

mysql> SELECT ROUND(125.315, 2);
-- 결과: 125.32

mysql> SELECT ROUND(125.315, -1);
-- 결과: 130   (10단위로 반올림)

mysql> SELECT ROUND(125.315, -2);
-- 결과: 100   (100단위로 반올림)

mysql> SELECT ROUND(-125.315);
-- 결과: -125

 

 

 

COUNT 함수

지정된 표현의 개수를 반환한다.

조건을 만족하는 행의 수를 계산할 때 사용한다.

중요한건, 컬럼의 값이 NULL 이면, 카운트하지 않는다

 

SELECT COUNT(표현식)
FROM 테이블명
[WHERE 조건];

 

SELECT 컬럼 1, 컬럼 2, ... 컬럼 n, COUNT(표현식)
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼 1, 컬럼 2, ... 컬럼 n;

 

COUNT에 들어가지 않는 컬럼은 GROUP BY에 반드시 포함해야 한다.

 

[MySQL] GROUP BY

친환경 개발자
|2025. 11. 11. 17:36

 

GROUP BY절이란

여러 행의 데이터를 집계할 때, 하나 이상의 컬럼을 기준으로 그룹화할 때 사용.

동일한 값을 가진 행들을 묶어 중복을 제거한다.

집계함수와 함께 사용하여 어떤 통계치를 낼 때 사용한다.

 

 

SELECT 컬럼명1, 컬럼명2, ...., 집계함수(컬럼명)
FROM 테이블명
GROUP BY (컬럼명1, 컬럼명2,...);

 

여기서 유의해야할 규칙은,

 

SELECT에 명시된 컬럼들 중

집계함수 (MAX, COUNT, AVG 등)안에 들어가지 않는 컬럼명은 전부 GROUP BY절에 명시해야 한다는 것이다.

 

집계하지 않을 컬럼을 SELECT에 명시해놓고 GROUP BY로 묶지 않는다면,

 

MySQL 입장에서는 헷갈리기 떄문이다.

 

예를 들어 부서 별 평균 연봉을 구하고자 하는데,

 

SELECT 부서, 성별, AVG(연봉)
FROM 직원테이블
GROUP BY 부서;


라고 성별을 추가해버리면,

 

중복된 부서를 전부 그룹화 했을 때 성별이 남자 여자 모두 합쳐졌을 것 아닌가.

 

그럼 MySQL은 남자라고 표시해야할 지 여자라고 표시해야할 지 헷갈릴 것이다.

 

그러니 올바른 쿼리문은 조건에 따라 아래 둘 중 하나이다.

 

 

-- 부서별, 성별별 평균 연봉을 구할 때
SELECT 부서, 성별, AVG(연봉)
FROM 직원테이블
GROUP BY 부서, 성별;
-- 부서별 평균 연봉을 구할 때
SELECT 부서, AVG(연봉)
FROM 직원테이블
GROUP BY 부서;

 

 

여기서 조건을 걸고 싶으면 (예를 들면 성별이 남자인 직원들의 부서별 평균 연봉)

 

HAVING을 사용하면 된다.

 

-- 부서별, 성별별 평균 연봉을 구하되, 각 부서별 성별별 최소 연봉이 150보다 큰 그룹만 표시하도록.
SELECT 부서, 성별, AVG(연봉)
FROM 직원테이블
GROUP BY 부서, 성별
HAVING MIN(연봉)>150;