GROUP BY
그룹으로 묶어주는 역할, 보통 AS와 같이 쓰인다.
AS 는 영어 뜻처럼 '~로써' 라고 생각하면 된다. GROUP BY [그룹화할 데이터] AS [이름] 이렇게 사용한다.
집계 함수와 함께 쓰이고는 한다.
집계 함수는 다음과 같다.
AVG() | 평균값 |
MIN() | 최솟값 |
MAX() | 최댓값 |
COUNT() | 행의 개수, COUNT(DISTINCT)의 경우 중복 제거 |
STDEV() | 표준 편차 |
VARIANCE() | 분산 |
SUM() | 합 |
형태는 다음과 같다.
SELECT [가져올 값], (집계 함수) FROM [가져올 곳] GROUP BY [그룹화할 기준]
AS를 사용한다면 다음과 같다.
SELECT [가져올 값], (집계 함수) AS [이름] FROM [가져올 곳] GROUP BY [그룹화할 기준]
SELECT CountryCode, SUM(Population) FROM city GROUP BY CountryCode;
위와 같이 작성 시 CountryCode와 그 CountryCode에 해당하는 도시 인구의 합을 그룹화 해서 출력해준다.
이제 AS 를 사용해서
SELECT CountryCode, SUM(Population) AS "COUNTRY POPULATION" FROM city GROUP BY CountryCode;
위와 같이 작성해주면
이처럼 묶이게 된다.
집계함수를 이용하면 도시의 개수도 알아 낼 수 있다.
SELECT COUNT(*) FROM CITY;
위와 같이 모든 도시의 개수를 출력해준다.
COUNT 대신 SUM(Population) 이 들어간다면 모든 도시의 인구의 합, AVG(Population)이 들어간다면 모든 도시의 인구 평균을 출력해줄 것이다.
HAVING
집계 함수에 WHERE 처럼 조건을 걸어줄 때 사용, group by 뒤에 등장한다.
형태는
SELECT [가져올 값] (집계 함수) FROM [가져올 곳] GROUP BY [그룹화할 기준] HAVING [조건]
[조건] 은 SUM(Population) > 50000, AVG(Population) > 10000 등과 같이 작성한다.
SELECT CountryCode,SUM(Population) AS "TOTAL POPULATION" FROM city GROUP BY CountryCode HAVING SUM(Population)>25000000;
슬슬 한줄로 적기에는 무리가 올 길이가 되어간다.
SELECT CountryCode,SUM(Population)
AS "TOTAL POPULATION"
FROM city
GROUP BY CountryCode
HAVING SUM(Population)>25000000;
이렇게 적어주어도 된다.
차근 차근 해석해보면 국가 코드와 인구의 합을 국가 코드 기준으로 그룹화 하는데 인구의 합이 기준 이상인 값만 고르는 것이고 그것에 "TOTAL POPULATION"이라는 이름을 붙여서 출력한다.
아직까지 드는 생각은 SQL 자체가 해석하기 꽤나 직관적인 언어인 것 같다는 생각이 든다.
실행 시 위와 같이 나온다.
WITH ROLLUP
총합 혹은 중간 합계가 필요한 경우 사용한다.
형태는
SELECT [가져올 값] (집계 함수) FROM [가져올 곳] GROUP BY [그룹화할 기준] WITH ROLLUP;
이다.
SELECT CountryCode,Name,SUM(Population) FROM city GROUP BY CountryCode,Name WITH ROLLUP;
위와 같이 작성 시 국가 코드와 이름으로 그룹화 하면서 각 도시별 인구와 각 국가의 인구를 얻을 수 있다.
이처럼 국가 코드, 도시 이름, 인구수 그리고 NULL이 출력된 줄에 해당 국가 코드를 가진 도시의 인구수 합이 출력된다.
JOIN
데이터베이스 내의 여러 테이블들을 조합하는 역할,
형태는
SELECT [가져올 값] FROM [가져올 곳] JOIN [합칠 곳]
이다.
무작정 합치는 것보다는 특정 조건을 만족하면 합치는 경우 ON을 이용해준다.
형태는
SELECT [가져올 값] FROM [가져올 곳] JOIN [합칠 곳] ON [조건]
이다.
이제 지금까지 사용했던 도시 테이블과 국가 테이블을 합쳐보겠다.
첫 번째 방식이다.
SELECT * FROM city JOIN country;
그냥 단순하게 합치는 것이다.
두 번째 방식이다.
SELECT * FROM city JOIN country ON city.Countrycode=country.Code;
도시의 국가코드와 국가의 코드가 같으면 합치는 코드이다.
첫 번째 형태로 작성 시 아래와 같이 출력된다.
두 번째 형태로 작성 시 아래와 같이 출력된다.
3개 이상의 테이블도 join 시켜줄 수 있다.
SELECT *
FROM city
JOIN country ON city.Countrycode=country.Code
JOIN countrylanguage ON city.CountryCode = countrylanguage.Countrycode;
다음과 같이 적어줌으로써 3개의 테이블을 join 시켜주었다.
'프로그래밍 > MySQL 기초' 카테고리의 다른 글
MySQL 문법 - 6 (CREATE) (0) | 2022.05.27 |
---|---|
MySQL 문법 - 5 (내장함수 정리) (0) | 2022.05.27 |
MySQL 문법 - 3 (SubQuery / ANY / SOME / ALL / ORDER BY / DISTINCT / LIMIT ) (0) | 2022.05.27 |
MySQL 문법 - 2 (SELECT FROM / WHERE / BETWEEN / LIKE) (0) | 2022.05.19 |
MYSQL 문법 - 1 (SHOW / USE / DESCRIBE / SELECT * FROM) (0) | 2022.05.18 |