집합 연산
레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산
1. GROUP BY
데이터를 조회할 때 그룹으로 묶어서 조회합니다.
ex 1. 고객 테이블의 State 에 따라 그룹화해서 조회해라.
SELECT * FROM customers
GROUP BY State;
* 만약 쿼리 결과 데이터의 중간이 비어있다면 ??
데이터베이스에서 데이터를 불러오는 과정에서 State 에 따라 그룹을 지정했지만,
그룹에 대한 작업없이 조회만 했습니다.
그래서 쿼리 결과로 나타나는 데이터는 각 그룹의 첫번째 데이터만 표현됩니다.
HAVING
GROUP BY 로 조회한 결과를 필터링 할 수 있습니다.
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00
모든 고객의 주문서에서 가격의 평균을 구한 뒤에, 그 평균이 6.00을 넘는 결과만 조회합니다.
이렇게 GROUP BY로 그룹을 지은 결과에 필터를 적용할 때 HAVING 을 사용할 수 있습니다.
HAVING 은 WHERE 과는 적용방식이 다릅니다.
HAVING 은 그룹화한 결과에 대한 필터이고, WHERE 은 저장된 레코드를 필터링 합니다.
따라서 그룹화 전에 필터를 해야한다면, WHERE 를 사용하는것이 맞습니다.
COUNT , SUM , AVG , MAX , MIN
레코드의 갯수를 헤아릴 때 사용합니다.
ex. 모든 레코드에 대한 COUNT 함수 사용
SELECT * COUNT(*) FROM customers
GROUP BY State;
- 각 그룹의 첫번째 레코드와 각 그룹의 레코드 갯수를 집계하여 리턴합니다.
ex. 각 State 에 해당하는 레코드 갯수를 확인하는 COUNT 함수 사용
SELECT State, COUNT(*) FROM Customers
GROUP BY State;
- 그룹으로 묶인 결과의 레코드 갯수를 확인할 수 있습니다.
SELECT 실행 순서
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
문제
1. 현재 있는 데이터베이스에 존재하는 모든 테이블 정보를 보여주기
SHOW TABLES;
2. USER 테이블의 구조를 보기위한 SQL 을 작성
DESCRIBE USER;
3. USER 테이블에 존재하는 모든 컬럼에 대한 데이터를 확인
SELECT * FROM USER;
4. USER 테이블에 name = 'kim', email='kim@gmail.com' 으로 데이터를 추가
INSERT INTO user(name,email) VALUES ('kim','kim@gmail.com')
5. USER 테이블에 name 이 kim 인 데이터를 찾아라
SELECT * FROM user WHERE user.name = 'kim';
6. USER 테이블에 name 이 kim 이 아닌 데이터를 찾아라
SELECT * FROM user WHERE user.name <> 'kim';
7. Content 테이블에 존재하는 모든 테이블에서 title 컬럼만을 찾기 위한 SQL 작성
SELECT Content.title FROM Content;
8. 위의 테이블에서 Content의 title 과 그 컨텐츠를 작성한 User 의 name 을 찾아라 ( 저자가 없어도 찾음 )
SELECT Content.title, User.name FROM Content LEFT JOIN User ON User.id = Content.id;
9. 위의 테이블에서 Content의 title 과 그 컨텐츠를 작성한 User 의 name 을 찾아라. ( 저자가 있는 컨텐츠의 타이틀만 찾음 )
SELECT Content.title, User.name FROM Content JOIN user ON user.id = content.userId;
10. Content 의 데이터를 수정하기 위한 SQL 을 작성해라.
( title이 database sprint인 content 데이터에서 body를 database is very easy로 수정해야합니다. )
UPDATE Content SET Content.body = 'database is very easy' WHERE Content.title = 'database sprint';
'JPA(MySQL,H2Database)' 카테고리의 다른 글
오류가 발생하지 않았는데 H2 Database 에 테이블이 올라오지 않을 경우 (0) | 2022.10.10 |
---|---|
임베디드 값 타입 (0) | 2022.08.08 |
JPQL 와 JPQL의 테스트 코드 작성 (0) | 2022.07.29 |
EntityManager (0) | 2022.07.29 |
연관 관계 매핑 (0) | 2022.07.15 |