Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- FE
- typeScript
- CCM
- 찬양
- GLS
- Software Engineering
- 데이터베이스
- 날솟샘
- 웹개발
- 프론트엔드
- 어노인팅
- 예배
- 묵상
- 화학
- CHEMISTRY
- 혼자공부하는sql
- 글로벌리더십학부
- SQLD
- 설교
- Database
- dbms
- 유태준교수님
- QT
- 전산전자공학부
- 날마다 솟는 샘물
- csee
- 한동대학교
- 일반화학
- SQL
- 남재창교수님
Archives
- Today
- Total
멈추지 않는 기록
[혼자공부하는SQL] 7강 본문
728x90
03-2. 좀 더 깊게 알아보는 SELECT 문
0. 시작하기 전에
- SELECT 문에서는
결과의 정렬을 위한 ORDER BY,
결과의 개수를 제한하는 LIMIT
,중복된 데이터를 제거하는 DISTINT
등을 사용할 수 있다. - GROUP BY절은 지정한 열의 데이터들을 같은 데이터끼리 묶어서 결과를 추출한다.
- HAVING 절을 통해 조건식을 추가할 수 있다.
- HAVING 절은 WHERE 절과 비슷해 보이지만, GROUP BY 절과 함께 사용되는 것이 차이점이다.
1. ORDER BY절
1) SELECT 절의 형식
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
- 위의 순서는 지켜져야 한다. (ex. Where절이 From보다 앞에 나간 경우)
2) ORDER BY
: 결과의 값이나 개수에 대해서는 영향을 미치지 않지만, 결과가 출력되는 순서를 조절한다.
SELECT mem_id, mem_name, debut_date
FROM member
ORDER BY debut_date;
- ASC 오름차순 : 작은 것에서 큰 것으로 (기본값)
- DESC 내림차순 : 큰 것에서 작은 것으로
-- 키를 기준으로 내림차순 정렬
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC;
-- 키를 기준으로 내림차순 정렬
-- 동일한 키일 경우 데뷔 일자를 기준으로 오름차순 정렬 (데뷔 순)
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
3) LIMIT
-- 3개의 행만 보고 싶을 경우 -> LIMIT 사용
SELECT *
FROm member
LIMIT 3;
-- 데뷔 순(오름차순)으로 3개의 행만 보고 싶을 경우
SELECT mem_name, debut_date
FROM member
ORDER BY debut_date
LIMIT 3;
- 반드시 ORDER BY 다음에 LIMIT을 사용한다.
-- 키를 내림차순으로 정렬하고, 3개를 건너 띄고 2개의 행을 보고 싶을 경우
Select * from member ORDER BY height DESC LIMIT 3, 2;
- 정렬된 결과에서 4번째 행부터 시작하여 2개의 행을 가져온다.
- (첫 번째 숫자는 건너뛸 행의 수, 두 번째 숫자는 가져올 행의 수)
강의에서는 이 부분이 잘못되어 있었음
4) DISTINCT
: 여러 개의 중복된 것을 하나만 보여주는 구문이다.
-- addr(주소) 중 중복을 제거해서 보여준다.
select DISTINCT addr from member;
5) GROUP BY
: 그룹으로 묶어주는 역할을 한다.
-- market_db의 구매 테이블(buy)에서 회원(mem_id)이 구매한 물품의 개수를 구할 수 있다.
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;
(1) GROUP BY와 함께 사용되는 집계함수
(aggregate function)
함수명 |
설명 |
---|---|
SUM() | 합계 |
AVG() | 평균 |
MIN() | 최소값 |
MAX() | 최댓값 |
COUNT() | 행의 개수 |
COUNT(DISTINCT) | 행의 개수 (중복은 1개만) |
-- member 별 구매한 수량을 합계로 보고 싶을 때
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수" FROM buy GROUP BY mem_id;
-- member 별 총 구매 금액을 합계로 보고 싶을 때
SELECT mem_id "회원 아이디", SUM(price * amount) "총 구매 금액" FROM buy GROUP BY mem_id;
- 가격과 수량을 곱하여 해당 구매건의 합계를 구하고, 이를 SUM으로 합계로 구한다.
-- 평균 구매 개수
SELECT AVG(amount) "평균 구매 개수" FROM buy;
-- member 별 평균 구매 개수
SELECT mem_id, AVG(amount) "평균 구매 개수" FROM buy GROUP BY mem_id;
-- 회원의 수
SELECT COUNT(*) FROM member;
-- 핸드폰이 있는 회원의 수
SELECT COUNT(phone1) "연락처가 있는 회원" FROM member;
- COUNT의 경우 Null인 것을 빼고 계산한다.
-- 1000만원 이상 구매한 경우 (WHERE절 사용) -> 오류 발생
SELECT mem_id "회원 아이디", SUM(price * amount) "총 구매 금액"
FROM buy
WHERE SUM(price * amount) > 1000
GROUP BY mem_id;
-- 1000만원 이상 구매한 경우 (HAVING절 사용) -> 정상 작동
SELECT mem_id "회원 아이디", SUM(price * amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price * amount) > 1000;
-- 1000만원 이상 구매한 경우 중 내림차순으로 정렬
SELECT mem_id "회원 아이디", SUM(price * amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price * amount) > 1000
ORDER BY SUM(price * amount) DESC;
- WHERE를 사용할 수 없다.
- GROUP 함수에서 조건을 사용할 때에는 HAVING을 사용
728x90
'웹 개발 > MySQL' 카테고리의 다른 글
[혼자공부하는SQL] 9강 (1) | 2025.02.13 |
---|---|
[혼자공부하는SQL] 8강 (0) | 2025.02.13 |
[혼자공부하는SQL] 6강 (0) | 2025.02.13 |
[혼자공부하는SQL] 5강 (0) | 2025.02.13 |
[혼자공부하는SQL] 4강 (0) | 2025.02.13 |