1. 데이터 조회 - 세부적으로 검색하기
- 연산 및 집계 함수
- COUNT
- SUM
- AVG
- MAX
- MIN
SELECT COUNT(*) FROM products; // products의 행의 갯수
SELECT SUM(price) FROM products; // products안의 price의 총 합
SELECT AVG(price) FROM products; // price의 평균
SELECT MAX(price) FROM products; // price의 최댓값
SELECT MIN(price) FROM products; // price의 최소값
SELECT COUNT(*) FROM products;
SELECT COUNT(*) AS number_of_data FROM products; # 별명 붙이기
SELECT COUNT(*) AS expensive_data FROM products WHERE price >= 1000;
SELECT price FROM products;
SELECT MAX(price) FROM products; # 가장 큰 값
SELECT MIN(price) FROM products; # 가장 작은 값
SELECT AVG(price) FROM products; # 평균값
SELECT COUNT(DISTINCT price) FROM products; # 중복 제거한 price
- LIKE를 이용한 패턴 검색
- WHERE를 이용한 조건 검색의 경우 : 문자열이 완전하게 일치해야 함
- '열이름 LIKE패턴'을 이용해 부분적 일치로도 걸러낼 수 있음
- 사용 가능한 와일드카드
- % : 임의의 문자열
- _ : 임의의 문자(딱 하나)
SELECT name FROM products WHERE name='monitor';
SELECT name FROM products WHERE name LIKE '_onitor';
SELECT name FROM products WHERE name LIKE '%monitor%';
- GROUP BY & HAVING
- GROUP BY(그룹화할 컬럼) : 테이블 내 데이터를 그룹으로 묶어 조회하고 싶을 때 - 주로 집계 함수와 함께 사용
- HAVING(필터 조건) : 그루핑된 결과를 통해 필터링을 하고 싶을 때(그루핑된 결과는 WHERE로 조건식을 걸 수 없다)
CREATE TABLE mytable(
user_id INT NOT NULL,
products_id INT NOT NULL,
price INT NOT NULL,
amount INT NOT NULL
);
INSERT INTO mytable (user_id, products_id, price, amount) VALUES
(1, 1, 100, 1),
(1, 2, 200, 2),
(2, 1, 500, 1),
(2, 2, 100, 2),
(3, 1, 100, 1),
(3, 2, 200, 1),
(4, 1, 500, 1),
(4, 2, 100, 1);
SELECT user_id, SUM(price * amount)
FROM mytable
GROUP BY user_id;
# user_id와 SUM(price * amount)를 조회할건데 user_id로 그루핑을 하고 싶다 mytable에서
SELECT user_id, SUM(price * amount)
FROM mytable
GROUP BY user_id
HAVING SUM(price * amonut) > 500;
# user_id와 SUM(price * amount)를 보고싶다 user_id로 그룹핑을 하는데
# SUM(price * amount) > 500 이 조건을 만족 하는 것만 mytable에서
SELECT category_id, count(*) FROM products GROUP BY category_id;
SELECT category_id, AVG(price) AS avg_price FROM products GROUP BY category_id HAVING AVG(price) > 1200;
SELECT category_id, AVG(price) AS avg_price FROM products GROUP BY category_id HAVING avg_price > 1200;
# AS로 별명을 지어 줄 수 있음
- 서브 쿼리
- 쿼리 속의 쿼리(쿼리 속의 SELECT)
-- 각 사용자가 가장 많이 구매한 상품 아이디찾기
SELECT user_id, products_id
FROM mytable
WHERE (user_id, amount) IN (
SELECT user_id, MAX(amount)
FROM mytable
GROUP BY user_id
);
'데이터베이스' 카테고리의 다른 글
8. 데이터 삭제_DELETE - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.19 |
---|---|
7. 데이터 수정_UPDATE - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.19 |
5. 데이터 조회_SELECT - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.01.17 |
4. 데이터 입력_INSERT - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.17 |
3. 데이터베이스 생성과 관리 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.17 |