Language/SQL

[MySQL] 데이터를 조회하는 SELECT ~ FROM ~ WHERE 문 (2)

seoraroong 2024. 8. 20. 22:51

SELECT 문에 대한 첫번째 포스팅에서 다룬 부분에 이어 조금 더 심화된 SELECT문을 알아보도록 하자.

 

 

ORDER BY 절

ORDER BY 절은 결과 값이나 개수에 영향을 미치지 않지만 결과가 출력되는 순서를 조절하는 역할을 한다.

SELECT mem_id, mem_name, debut_date
    FROM member
    ORDER BY debut_date;

-> default 값은 ASC (Ascending, 오름차순)

     DESC (Descending, 내림차순) 으로 정렬하고 싶다면 맨 뒤에 명시해주면 된다.

 

 

SELECT mem_id, mem_name, debut_date, height
    FROM member
    WHERE height >= 164
    ORDER BY height DESC;

-> ORDER BY 절과 WHERE 절은 함께 사용할 수 있다.

    ORDER BY 절은 WHERE 절 뒤에 작성해야 한다.

 

 

SELECT mem_id, mem_name, debut_date, height
    FROM member
    WHERE height >= 164
    ORDER BY height DESC, debut_date ASC;

-> 정렬 기준은 여러 개로 지정할 수 있다.

 

 

 

 

출력의 개수를 제한하는 LIMIT

LIMIT은 출력의 개수를 제한하며 주로 ORDER BY 절과 함께 사용한다

 

SELECT mem_name, debut_date
    FROM member
    ORDER BY debut_date
    LIMIT 3;

-> member 테이블에서 데뷔 일자가 빠른 순서대로 정렬해 3개의 데이터의 mem_name, debut_date 열만 출력

 

 

SELECT mem_name, height
    FROM member
    ORDER BY height DESC
    LIMIT 3, 2;

-> LIMIT 시작, 개수로 중간부터 출력할 수 있다,

    LIMIT 시작, 개수 = LIMIT 개수 OFFSET 시작

    LIMIT은 첫 데이터를 0으로 본다.

 

 

 

 

중복된 결과를 제거하는 DISTINCT

DISTINCT는 조회된 결과에서 중복된 데이터를 1개만 남긴다

SELECT DISTINCT addr FROM member;

 

 

 

 

GROUP BY

데이터를 그룹으로 묶어주는 역할을 한다.

 

집계 함수 : GROUP BY 절과 함께 쓰이며 데이터를 grouping 해주는 기능

 

SUM() 합계
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 행의 개수 (중복은 1개만 인정)

 

 

SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

-> SUM() 을 이용해 회원별 구매 개수의 합계 출력하기

 

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
    FROM buy GROUP BY mem_id;

-> 회원이 구매한 금액의 총합 출력하기

 

 

 

 

HAVING 절

WHERE 절과 비슷하게 조건을 제한하지만 ‘집계 함수에 대해 조건을 제한’한다.

집계 함수는 WHERE 절에 작성할 수 없다

HAVING 절은 반드시 GROUP BY 절 뒤에 작성해야 한다

(GROUP BY 절과 관련된 조건절은 HAVING 사용)

 

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
    FROM buy
    GROUP BY mem_id
    HAVING SUM(price*amount) > 1000;

-> HAVING 절과 SUM()을 사용해 총 구매액이 1000 이상인 회원을 출력하기