Database
data와 base의 합성어, 체계적인 데이터 모음
데이터
저장이나 처리에 효율적인 형태로 변환된 정보
기존의(과거) 데이터 저장 방식
- 파일(file)을 이용
- 어디에서나 쉽게 사용 가능
- 데이터를 구조적으로 관리하기 어려움
- 스프레드 시트(Spreadsheet)를 이용
- 테이블의 열과 행을 사용해 데이터를 구조적으로 관리 가능
- 한계
- 크기: 일반적으로 약 100만 행까지만 저장가능
- 보안: 단순히 파일이나 링크 소유 여부에 따른 단순한 접근 권한 기능 제공
- 정확성
- 만약 데이터가 바뀌면 이 변경으로 인해 테이블 모든 위치의 해당 값을 업데이트 해야함
- 찾기 및 바꾸기 기능을 사용해 바꿀 수 있지만 만약 데이터가 여러 시트에 분산되어 있다면 변경에 누락이 생기거나 추가적인 문제가 발생할 수 있음
Relational Database (관계형 데이터베이스)
데이터 간의 관계가 있는 데이터 항목들의 모음
- 테이블, 행, 열의 정보를 구조화하는 방식
- 서로 연관된 데이터 포인터를 저장하고 이에 대한 액세스를 제공
관계
여러 테이블 간의 (논리적)연결
관계형 데이터베이스 관련 키워드
- Table (aka Relation)
- 데이터를 기록하는 곳
- Field (Column, Attribute)
- 각 필드에서 고유한 데이터 형식(타입)이 지정됨
- Recod (Row, Tuple)
- 각 레코드에는 구체적인 데이터 값이 저장됨
- Database (Schema)
- 테이블의 집합
- Primary Key (기본키, PK)
- 각 레코드의 고유한 값
- 관계형 데이터베이스에서 레코드의 식별자로 활용
- Foreign Key (외래키, FK)
- 테이블의 필드 중 다른 테이블의 레코드를 식별할 수 있는 키
- 다른 테이블의 기본 키를 참조
- 각 레코드에서 서로 다른 테이블 간의 관계를 만드는데 사용
DBMS (Database Management System)
데이터베이스를 관리하는 소프트웨어 프로그램
- 데이터 저장 및 관리를 용이하게 하는 시스템
- 데이터베이스와 사용자 간의 인테페이스 역할
- 사용자가 데이터 구성, 업데이트, 모니터링, 백업, 복구 등을 할 수 있도록 도움
RDBMS (Relational Database Management System)
관계형 데이터베이스를 관맇하는 소프트웨어 프로그램
- SQLite
- MySQL
- PostgreSQL
- Oracle Database
데이터베이스 정리
- Table은 데이터가 기록되는 곳
- Table에는 행에서 고유하게 식별 가능한 기본 키라는 속성이 있으며, 외래 키를 사용하여 각 행에서 서로 다른 테이블 간의 관계를 만들 수 있음
- 데이터는 기본 키 또는 외래 키를 통해 결합(join) 될 수 있는 여러 테이블에 걸쳐 구조화 됨
SQL (Structure Query Language)
- 테이블의 형태로 구조화된 관계형 데이터베이스에 요청을 질의(요청)
- 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
- 관계형 데이터베이스와의 대화를 위해 사용하는 프로그래밍 언어
SQL Syntax
- SQL 키워드는 대소문자를 구분하지 않는다.
- 하지만 대문자로 작성하는 것을 권장 (명시적 구분)
- 각 SQL Statements의 끝에는 세미콜론(';')이 필요
- 세미콜론은 각 SQL statements을 구분하는 방법 (명령어의 마침표)
SQL Statements
SQL을 구성하는 가장 기본적인 코드 블록
수행 목적에 따른 SQL Statements 4가지 유형
유형 | 역할 | SQL 키워드 |
DDL (Data Definition Language) |
데이터의 기본 구조 및 형식 변형 | CREATE DROP ALTER |
DQL (Data Query Language) |
데이터 검색 | SELECT |
DML (Data Manipulation Language) |
데이터 조작 (추가, 수정, 삭제) |
INSERT UPDATE DELETE |
DCL (Data Control Language) |
데이터 및 작업에 대한 사용자 권한 제어 |
COMMIT RPLLBACK GRANT REVOKE |
참고사항
Query
- "데이터베이스로부터 정보를 요청" 하는 것
- 일반적으로 SQL로 작성하는 코드를 쿼리문(SQL문)이라 한다
SQL 표준
- SQL은 미국 국립 표준 협회(ANSI)와 국제 표준화 기구(ISO)에 의해 표준이 채택됨
- 모든 RDBMS에서 SQL 표준을 지원
- 다만 각 RDBMS마다 독자적인 기능에 따라 표준을 벗어나는 문법이 존재하니 주의
SELECT statement
- 테이블에서 데이터를 조회
- SELECT 키워드 이후 데이터를 선택하려는 필드를 하나 이상 지정
- FROM 키워드 이후 데이터를 선택하려는 테이블의 이름을 지정
원하는 필드만 조회
전체 필드 조회
- ' * ' (asterisk)를 사용하여 모든 필드 선택
조회 시 Field name을 변경해서 출력
초단위 데이터를 분단위로 바꿔서 출력
- 60000으로 나눈 분 단위 값을 출력
QRDER BY statement
- 조회 결과의 레크드를 정렬
ORDER BY syntax
- FROM clause 뒤에 위치
- 하나 이상의 컬럼을 기준으로 결과를 오름차순(ASC, 기본 값), 내림차순(DESC)으로 정렬
정렬에서 NULL 값이 존재할 경우
- NULL 값이 존재할 경우 오름차순 정렬 시 결과에 NULL이 먼저 출력
Filtering Data 관련 Keywords
- Clause
- DISTINCT
- WHERE
- LIMIT
- Operator
- BETWEEN
- IN
- LIKE
- Comparsion
- Logical
DISTINCT statement
- 조회 결과에서 중복된 레코드를 제거
DISTINCT syntax
- SELECT 키워드 바로 뒤에 작성해야함
- SELECT DISTINCT 키워드 다음에 고유한 값을 선택하려는 하나 이상의 필드를 지정
WHERE statement
- 조회 시 특정 검색 조건을 지정
WHERE syntax
- FROM clause 뒤에 위치
- search_condition은 비교 연산자 및 논리연산자(AND, OR, NOT 등)을 사용하는 구문이 사용됨
WHERE 활용
Operators
Comparison Operators (비교 연산자)
- =, >=, <=, !=, IS, LIKE, IN, BETWEEN...AND
Logical Operators (논리 연산자)
- AND(&&) , OR(||), NOT(!)
LIMIT clause
조회하는 레코드 수를 제한
LIMIT syntax
- 하나 또는 두 개의 인자를 사용 (0 또는 양의 정수)
- row_count는 조회하는데 최대 레코드 수를 지정
LIMIT & OFFSET 예시
LIMIT 활용
GROUP BY clause
레코드를 그룹화하여 요약본 생성 ('집계 함수' 와 함께 사용)
Aggregation Functions (집계 함수)
값에 대한 계산을 수행하고 단일한 값을 반환하는 함수
- SUM, AVG, MAX, MIN, COUNT
GROUP MY syntax
- FROM 및 WHERE 절 뒤에 배치
- GROUP BY 절 뒤에 그룹화 할 필드 목록 작성
- DISTINCT 와 비슷하나 그룹화는 정렬도 해줌
1. Country 필드를 그룹화
2. COUNT 함수가 각 그룹에 대한 집계된 값을 계산
GROUP BY 활용
HAVING Clause
- 집계 항목에 대한 세부 조건을 지정
- 주로 GROUP BY와 함께 사용되며 GROUP BY가 없다면 WHERE 처럼 동작
- 일반적인 조건과 명시적으로 분리하기 위해 GROUP BY에 관한 조건들은 HAVING으로 빼서 관리
SELECT statement 실행 순서
'Django' 카테고리의 다른 글
Many to one relationships 01 [Database] (1) | 2024.10.11 |
---|---|
SQL 02 [Database] (0) | 2024.10.10 |
Authentication System 02 [Django] (0) | 2024.10.02 |
Authentication System 01 [Django] (0) | 2024.09.30 |
Django Template & URLs [Django] (0) | 2024.09.29 |