• 데이터간의 다양한 관계를 알아본다(체크)

  • 데이터 간 관계를 기술하는 언어(SQL)을 익힌다.

  • 합리적이고, 효율적인 방법으로 데이터베이스를 구성하는 방법을 이해한다.(체크)

  • 데이터베이스에서 관련 정보를 찾기 위해 SQL쿼리를 작성하는 방법을 알아보자


👊 schema?

스키마(schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다.
데이터 정의하는 방법, 데이터간의 관계를 구성하는 방법 이때 필요한것이 스키마

"데이터베이스의 청사진"


🎟 데이터(data) : 각 항목에 저장되는 값

🎟 엔티티(Entities) : 고유한 정보의 단위, 엔티티는 테이블로 표현됨 (Teacher, Classes, Students)
테이블은 relation으로도 불려짐.
특정 필드 외에 각 엔티티에는 ID필드도 포함이 된다.

🎟 필드(Fields): 각 엔티티에는 해당 엔티티의 특성을 설명하는 필드(Field)가 있다. 행렬이라면 열(column)해당

🎟 레코드(Record) : 테이블에 저장된 항목. 행렬에서의 행(row)해당

🎟 기본 키(Primary Key) : 각 테이블의 고유한 ID
🎟 외래 키(foreign key) : 두 테이블을 서로 연결하는 키

🎟 관계형 데이터베이스
구조화된 데이터는 하나의 테이블로 표현할 수 있다. 테이블을 사용하는 데이터베이스를 관계형 데이터베이스라고 한다.


👊 SQL

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

🎟 GROUP BY

  • 데이터를 조회할 때 그룹으로 묶어서 조회한다. 다음과 같은 쿼리가 있다고 가정한다.
SELECT * FROM customers // customers 테이블의 모든 레코드를 조회
GROUP BY State // customers 테이블의 모든 레코드를 State에 따라 그룹화

🎟 HAVING

  • GROUP BY로 조회된 결과에 필터를 적용할 때에 HAVING을 사용한다.
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00
// invoice테이블을 CustomerId로 그룹화하고 그 평균이 6을 초과한 결과를 조회

❗️주의
HAVING은 그룹화한 결과에 대한 필터이고, WHERE는 저장된 레코드를 필터링합니다. 따라서 실제로 그룹화 전에 데이터를 필터해야 한다면, WHERE을 사용해야한다.

🎟 COUNT()

  • COUNT함수는 레코드의 개수를 셀 때 사용
SELECT *, COUNT(*) FROM customers
GROUP BY State;
// 각 State에 해당하는 레코드의 개수를 확인하는 COUNT 함수 사용예시

🎟 SUM()

  • SUM 함수는 레코드의 합을 리턴한다.
SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId;
// 위 커맨드는 invoice_items라는 테이블에서 Invoiced 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구한다.

🎟 AVG()

  • AVG 함수는 레코드의 평균값을 계산하는 함수이다.
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;

🎟 MAX(), MIN()

  • MAX 함수와 MIN 함수는 각각 레코드의 최댓값과 최솟값을 리턴한다.
    아래 예시에서 MAX를 찾고 싶으면 MIN을 MAX로 바꾸면 된다.
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId

✨ SELECT 실행순서

FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY

SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2
profile
의미없는 삽질은 없다1

0개의 댓글