Django

SQL [Database]

경상도상남자 2024. 10. 10. 11:34

Database

data와 base의 합성어, 체계적인 데이터 모음

 

데이터 

저장이나 처리에 효율적인 형태로 변환된 정보

 

기존의(과거) 데이터 저장 방식

  1. 파일(file)을 이용
    • 어디에서나 쉽게 사용 가능
    • 데이터를 구조적으로 관리하기 어려움
  2. 스프레드 시트(Spreadsheet)를 이용
    • 테이블의 열과 행을 사용해 데이터를 구조적으로 관리 가능
    • 한계
      1. 크기: 일반적으로 약 100만 행까지만 저장가능
      2. 보안: 단순히 파일이나 링크 소유 여부에 따른 단순한 접근 권한 기능 제공
      3. 정확성
        • 만약 데이터가 바뀌면 이 변경으로 인해 테이블 모든 위치의 해당 값을 업데이트 해야함
        • 찾기 및 바꾸기 기능을 사용해 바꿀 수 있지만 만약 데이터가 여러 시트에 분산되어 있다면 변경에 누락이 생기거나 추가적인 문제가 발생할 수 있음

Relational Database (관계형 데이터베이스)

데이터 간의 관계가 있는 데이터 항목들의 모음

 

  • 테이블, 행, 열의 정보를 구조화하는 방식
  • 서로 연관된 데이터 포인터를 저장하고 이에 대한 액세스를 제공

관계

여러 테이블 간의 (논리적)연결

 

관계형 데이터베이스 관련 키워드

  1. Table (aka Relation)
    1. 데이터를 기록하는 곳
  2. Field (Column, Attribute)
    1. 각 필드에서 고유한 데이터 형식(타입)이 지정됨
  3. Recod (Row, Tuple)
    1. 각 레코드에는 구체적인 데이터 값이 저장됨
  4. Database (Schema)
    1. 테이블의 집합
  5. Primary Key (기본키, PK)
    1. 각 레코드의 고유한 값
    2. 관계형 데이터베이스에서 레코드의 식별자로 활용
  6. Foreign Key (외래키, FK)
    1. 테이블의 필드 중 다른 테이블의 레코드를 식별할 수 있는 키
    2. 다른 테이블의 기본 키를 참조
    3. 각 레코드에서 서로 다른 테이블 간의 관계를 만드는데 사용

DBMS (Database Management System)

데이터베이스를 관리하는 소프트웨어 프로그램

  • 데이터 저장 및 관리를 용이하게 하는 시스템
  • 데이터베이스와 사용자 간의 인테페이스 역할
  • 사용자가 데이터 구성, 업데이트, 모니터링, 백업, 복구 등을 할 수 있도록 도움

 

RDBMS (Relational Database Management System)

관계형 데이터베이스를 관맇하는 소프트웨어 프로그램

  • SQLite
  • MySQL
  • PostgreSQL
  • Oracle Database

데이터베이스 정리

  • Table은 데이터가 기록되는 곳
  • Table에는 행에서 고유하게 식별 가능한 기본 키라는 속성이 있으며, 외래 키를 사용하여 각 행에서 서로 다른 테이블 간의 관계를 만들 수 있음
  • 데이터는 기본 키 또는 외래 키를 통해 결합(join) 될 수 있는 여러 테이블에 걸쳐 구조화 됨

SQL (Structure Query Language)

  • 테이블의 형태로 구조화된 관계형 데이터베이스에 요청을 질의(요청)
  • 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
  • 관계형 데이터베이스와의 대화를 위해 사용하는 프로그래밍 언어

SQL Syntax

  1. SQL 키워드는 대소문자를 구분하지 않는다.
    • 하지만 대문자로 작성하는 것을 권장 (명시적 구분)
  2. 각 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