https://www.hanbit.co.kr/store/books/look.php?p_code=B6846155853
혼자 공부하는 SQL
데이터베이스 개념부터 SQL 문법까지 입문자의 눈높이에 맞춰 구성했습니다. 지루한 설명 대신 도식화된 이미지와 예제를 통한 실습으로 책의 마지막까지 흥미롭게 학습할 수 있습니다. 프로그
www.hanbit.co.kr
위 내용은 <혼자 공부하는 SQL>을 기반으로 공부하여 작성 내용입니다.
3-2 좀 더 깊게 알아보는 SELECT 문
- ORDER BY : 결과의 정렬
- LIMIT : 결과의 개수 제한
- DISTINCT : 중복된 데이터제거
- GROUP BY : 지정한 열의 데이터들을 같은 데이터끼리 묶어서 결과 추출. 합계, 평균, 개수 등을 처리할 때 사용
- HAVING : WHERE절과 비슷하지만, GROUP BY 절과 함께 사용해야 함
ORDER BY 절
- 결과의 값이나 개수에 대해서 영향 X
- 결과가 출력되는 순서 조절
- 오름차순 -> ASC(숫자가 작은 것이 먼저), 내림차순 -> DESC(숫자가 큰 것이 먼저)
- WHERE 절과 함께 사용가
-- 데뷔 일자(debut_date)가 빠른 순서대로 출력
SELECT mem_id, mem_name, debut_date
FROM member
ORDER BY debut_date;
-- 데뷔 일자(debut_date)가 느린 순서대로 출력
SELECT mem_id, mem_name, debut_date
FROM member
ORDER BY debut_date DESC;
-- 평균 키가 164 이상이고 내림차순으로 정렬
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC;
-- 평균 키가 164 이상이고 내림차순으로 정렬
-- 평균 키가 같을 경우 데뷔일로 오름차순 정렬
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
LIMIT
- 출력의 개수를 제한
- 형식 -> LIMIT 시작, 개수 = LIMIT 개수 OFFSET 시작 -> ex) LIMIT 3 = LIMIT 0, 3
- 주로 ORDER BY와 함께 사용
-- LIMIT 예시
SELECT *
FROM member
LIMIT 3;
-- 위와 같이 아무런 기준 없이 앞에서 3건만 뽑는 경우 별로 없음
-- 데뷔일이 빠른 회원 3건 추출
SELECT mem_name, debut_date
FROM member
ORDER BY debut_date
LIMIT 3;
-- 평균 키가 큰 순으로 정렬하되, 3번째부터 2건만 조회
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 3, 2;
DISTINCT
- 중복된 결과를 제거
-- member 테이블에서 addr 조회
SELECT addr FROM member;
-- 중복된 것을 눈으로 골라내기 어려움
-- ORDER BY를 사용하여 정렬
SELECT addr FROM member ORDER BY addr;
-- 데이터 건수가 수만 개라면 현실적으로 종류를 세는 것은 어려움
-- DISTINCT를 사용하여 중복된 데이터 1개만 남기고 제거
SELECT DISTINCT addr FROM member;
GROUP BY 절
- 그룹으로 묶어주는 역할
함수명 | 설명 |
SUM() | 합계를 구함 |
AVG() | 평균을 구함 |
MIN() | 최소값을 구함 |
MAX() | 최대값을 구함 |
COUNT() | 행의 개수를 셈 |
COUNT(DISTINCT) | 행의 개수를 셈(중복은 1개만 인정) |
SELECT mem_id, amount FROM buy ORDER BY mem_id;
-- 각 회원(mem_id)별로 구매한 개수(amount)를 합쳐서 출력
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;
-- 별칭 사용
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
FROM buy GROUP BY mem_id;
-- 회원이 구매한 금액의 총합
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id;
-- 전체 회원이 구매한 물품 개수의 평균
SELECT AVG(amount) "평균 구매 개수" FROM buy;
-- 각 회원이 한 번 구매 시 평균 몇 개 구매
SELECT mem_id, AVG(amount) "평균 구매 개수"
FROM buy
GROUP BY mem_id;
-- 회원 테이블(member)에서 연락처가 있는 회원의 수 카운트
SELECT COUNT(*) FROM member;
-- 전체 회원 수인 10명 나옴
-- 연락처가 있는 회원만 카운트하려면 국번(phone1) 또는 전화번호(phone2)의 열 이름을 지정해야 함
-- NULL 값인 항목은 제외하고 카운트해야 됨
SELECT COUNT(phone1) "연락처가 있는 회원" FROM member;
Having 절
- WHERE절 대신에 사용하는 것
- WHERE와 비슷한 개념으로 조건을 제한하는 것이지만, 집계 함수에 대해서 조건을 제한하는 것
- 꼭 GROUP BY절 다음에 나와야 함
-- 총 구매액이 1000 이상인 회원 조회
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
WHERE SUM(price*amount) > 1000;
GROUP BY mem_id;
-- 에러 발생
-- 총 구매액이 1000이상인 회원 조회
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;
'SQL' 카테고리의 다른 글
[혼자 공부하는 SQL] chapter 4. SQL 고급 문법(4-2) (1) | 2023.05.08 |
---|---|
[혼자 공부하는 SQL] chapter 4. SQL 고급 문법(4-1) (0) | 2023.05.08 |
[혼자 공부하는 SQL] chapter 3. SQL 기본 문법(3-3) (0) | 2023.05.04 |
[혼자 공부하는 SQL] chapter 3. SQL 기본 문법(3-1) (1) | 2023.05.02 |
[혼자 공부하는 SQL] chapter 2. 실전용 SQL 미리 맛보기 (0) | 2023.05.01 |