Database TIL 06

Nabang Kim·2021년 8월 30일

Database

목록 보기
6/8
post-thumbnail

2021년 8월 26일에 작성된 문서 6번 입니다.
데이터 베이스 배운 내용을 정리했습니다.



SQL 내장함수

집합연산: 레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산

1. GROUP BY : 데이터를 조회할 때 그룹으로 묶어 조회.

SELECT * FROM customers;

//customers 테이블의 모든 레코드를 조회
SELECT * FROM customers
GROUP BY State;

//customers 테이블의 모든 레코드를 State에 따라 그룹화
  • GROUP BY로 State에 따라 그룹화할 수 있다.

    쿼리의 결과를 확인하면, 데이터가 중간에 비어있는 것을 확인할 수 있습니다. 데이터베이스에서 데이터를 불러오는 과정에서 State에 따라 그룹을 지정했지만, 그룹 대한 작업없이 조회만 했습니다. 그래서 쿼리의 결과로 나타나는 데이터는 각 그룹의 첫번째 데이터만 표현됩니다.



2. HAVING : GROUP BY 로 조회된 결과를 필터링

SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00

// invoices 테이블을 
// CustomerId로 그룹화하고 
// 그 평균이 6을 초과한 결과를 조회
  • GROUP BY로 그룹을 지은 결과에 필터를 적용할 때에는 HAVING을 사용
  • HAVING은 WHERE과는 적용하는 방식이 다르다.
    • HAVING : 그룹화한 결과에 대한 필터
    • WHERE : 저장된 레코드를 필터링
      • 그룹화 전에 데이터를 필터해야 한다면, WHERE을 사용.



3. COUNT() : 레코드의 갯수를 헤아릴 때

  • 각 그룹의 첫번째 레코드각 그룹의 레코드 갯수를 집계하여 리턴
SELECT *, COUNT(*) FROM customers
GROUP BY State;

//모든 레코드에 대한 COUNT 함수 사용
  • 그룹으로 묶인 결과의 레코드 갯수를 확인.
SELECT State, COUNT(*) FROM customers
GROUP BY State;

//각 State에 해당하는 레코드의 갯수를 확인



4. SUM() : SUM 함수는 레코드의 합을 리턴

SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId;
//SUM 함수 사용 

위 커맨드는 invoice_items라는 테이블에서 InvoiceId 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구합니다.



5. AVG() : 레코드의 평균값을 계산

SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;

//AVG 함수 사용



6. MAX(), MIN() : 레코드의 최대값과 최소값을 리턴

SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId

//MIN 함수 사용

위 커맨드에서 MIN을 MAX로 변경하면, 각 고객이 지불한 최대 금액을 리턴.



SELECT 실행 순서

데이터를 조회하는 SELECT 문은 정해진 순서대로 동작

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2

//SELCT 문의 실행 순서

예시 쿼리문의 실행 순서

순서쿼리문설명
1FROM invoicesinvoices 테이블에 접근.
2WHERE CustomerId >= 10CustomerId필드 10이상인 레코드 조회
3GROUP BY CustomerIdCustomerId를 기준으로 그룹화
4HAVING SUM(Total) >= 30Total필드 총합 30이상인 결과만 필터
5SELECT CustomerId, AVG(Total)조회 결과에서 CustomerId 필드와 Total필드 평균값을 구한다.
6ORDER BY 2AVG(Total)필드 기준으로 오름차순 정렬한 결과 리턴






Written with StackEdit.

0개의 댓글