데이터 조회 시 결과를 정렬할 때에는 ORDER BY, 중복을 제거할 경우 DISTINCT, 묶어서 보여줘야 하는 경우에는 GROUP BY, 일부만 보여줘야 할 때에는 LIMIT을 사용할 수 있다.
기본적으로 사용 순서는 아래와 같다.
SELECT 컬럼명
FROM 테이블병
WHERE 조건식
GROUP BY 컬럼명
HAVING 그룹의 조건
ORDER BY 컬럼명
LIMIT 결과 개수
1. ORDER BY
ORDER BY 뒤에는 정렬 기준이 되는 컬럼명을 써주면 된다.
기본적으로 정렬은 오름차순(ASC)으로 정렬이 되며, 내림차순은 DESC라고 명시해주면 된다.
예시
use market_db;
-- mem_name 컬럼 기준으로 오름차순 정렬
SELECT *
FROM member
ORDER BY mem_name;
-- mem_name 컬럼 기준으로 내림차순 정렬
SELECT *
FROM member
ORDER BY mem_name DESC;
2. DISTINCT
중복 제거시 SELECT 절에 DISTINCT를 사용한다.
예시
use market_db;
-- addr 컬럼을 중복 제거하여 조회
SELECT DISTINCT addr
FROM member;
3. GROUP BY
데이터를 묶어서 보여줘야 하는 경우 GROUP BY를 사용한다.
GROUP BY와 주로 사용되는 집계 함수는 다음과 같다.
- SUM() : 합계
- AVG() : 평균
- MIN() : 최솟값
- MAX() : 최댓값
- COUNT() : 행의 개수
- COUNT(DISTINCT) : 중복 제거한 행의 개수
예시
use market_db;
-- 멤버의 키 합계를 addr별로 조회
SELECT addr, SUM(height)
FROM member
GROUP BY addr;
-- 멤버의 키 평균을 addr별로 소수점 첫 번째 자리까지 반올림하여 조회
SELECT addr, ROUND(AVG(height), 1)
FROM member
GROUP BY addr;
-- 멤버의 키 최솟값을 addr별로 조회
SELECT addr, MIN(height)
FROM member
GROUP BY addr;
-- 멤버의 키 최댓값을 addr별로 조회
SELECT addr, MAX(height)
FROM member
GROUP BY addr;
-- 전화번호가 있는 멤버의 수를 addr별로 조회
-- phone1 컬럼이 NULL인 행은 count 하지 않는다.
SELECT addr, COUNT(phone1)
FROM member
GROUP BY addr;
-- 멤버의 수를 addr별로 조회
SELECT addr, COUNT(*)
FROM member
GROUP BY addr;
-- 키가 165 이상인 멤버의 수를 addr별로 조회
-- mem_id는 member 테이블의 PRIMARY KEY로 NOT NULL이므로 COUNT(*)와 동일한 결과가 조회된다.
SELECT addr, COUNT(mem_id)
FROM member
WHERE height >= 165
GROUP BY addr;
4. LIMIT
보여주고자 하는 행의 개수를 제한할 때 사용한다.
LIMIT 뒤에 숫자를 한 개 써주면 0번째 인덱스부터 지정한 개수만큼의 행을 보여준다.
LIMIT 뒤에 숫자를 두 개 쓰면 특정 인덱스부터 특정 개수만큼 조회할 수 있는데, Java와 같이 테이블 행도 인덱스는 0부터 시작이므로 이점을 유의해서 사용해야 한다.
예시
use market_db;
-- mem_name 컬럼 기준으로 오름차순 정렬 후 3개 조회 (인덱스 0 ~ 2)
SELECT *
FROM member
ORDER BY mem_name
LIMIT 3;
-- mem_name 컬럼 기준으로 오름차순 정렬 후 4번째 행부터 3개 조회 (인덱스 3 ~ 5)
SELECT *
FROM member
ORDER BY mem_name
LIMIT 3, 3;
'개발 > SQL' 카테고리의 다른 글
[MySQL] 데이터 형식(정수형, 문자형, 실수형, 날짜형) (0) | 2022.09.19 |
---|---|
[MySQL] AUTO_INCREMENT 사용하기 (0) | 2022.09.19 |
[MySQL] 데이터 조회 (LIKE) (0) | 2022.09.19 |
[MySQL] MySQL Workbench로 인덱스, 뷰, 스토어드 프로시저 만들기 (0) | 2022.09.19 |
[MySQL] MySQL Workbench로 데이터베이스 만들기 (0) | 2022.09.19 |