데이터간의 다양한 관계를 알아본다(체크)
데이터 간 관계를 기술하는 언어(SQL)을 익힌다.
합리적이고, 효율적인 방법으로 데이터베이스를 구성하는 방법을 이해한다.(체크)
데이터베이스에서 관련 정보를 찾기 위해 SQL쿼리를 작성하는 방법을 알아보자
스키마(schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다.
데이터 정의하는 방법, 데이터간의 관계를 구성하는 방법 이때 필요한것이 스키마
"데이터베이스의 청사진"
🎟 데이터(data) : 각 항목에 저장되는 값
🎟 엔티티(Entities) : 고유한 정보의 단위, 엔티티는 테이블로 표현됨 (Teacher, Classes, Students)
테이블은 relation으로도 불려짐.
특정 필드 외에 각 엔티티에는 ID필드도 포함이 된다.
🎟 필드(Fields): 각 엔티티에는 해당 엔티티의 특성을 설명하는 필드(Field)가 있다. 행렬이라면 열(column)해당
🎟 레코드(Record) : 테이블에 저장된 항목. 행렬에서의 행(row)해당
🎟 기본 키(Primary Key) : 각 테이블의 고유한 ID
🎟 외래 키(foreign key) : 두 테이블을 서로 연결하는 키
🎟 관계형 데이터베이스
구조화된 데이터는 하나의 테이블로 표현할 수 있다. 테이블을 사용하는 데이터베이스를 관계형 데이터베이스라고 한다.
🗣 SQL 내장함수
집합연산 : 레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산
SELECT * FROM customers // customers 테이블의 모든 레코드를 조회
GROUP BY State // customers 테이블의 모든 레코드를 State에 따라 그룹화
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00
// invoice테이블을 CustomerId로 그룹화하고 그 평균이 6을 초과한 결과를 조회
❗️주의
HAVING은 그룹화한 결과에 대한 필터이고, WHERE는 저장된 레코드를 필터링합니다. 따라서 실제로 그룹화 전에 데이터를 필터해야 한다면, WHERE을 사용해야한다.
SELECT *, COUNT(*) FROM customers
GROUP BY State;
// 각 State에 해당하는 레코드의 개수를 확인하는 COUNT 함수 사용예시
SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId;
// 위 커맨드는 invoice_items라는 테이블에서 Invoiced 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구한다.
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId
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