본문 바로가기
Everyday Study

2024.08.02 (금) { WHERE절 ON절, 1대 다 관계, NoSQL, 트랜잭션(Transaction) }

by xogns93 2024. 8. 2.

WHERE 절과 ON 

 

WHERE 

  • 목적: 결과 집합에서 특정 조건을 만족하는 행만 필터링하기 위해 사용됩니다.
  • 사용 위치: SELECT, UPDATE, DELETE 문에서 사용됩니다.
  • 적용 범위: 테이블이나 뷰에서 데이터를 필터링합니다.

ON 

  • 목적: JOIN 구문에서 두 테이블 간의 관계를 지정하기 위해 사용됩니다.
  • 사용 위치: JOIN 구문에서 사용됩니다.
  • 적용 범위: 테이블을 조인할 때, 조인 조건을 지정합니다.

 

where는 대부분 값이오는데 ex) WHERE First_Name = 'Jane';

on은 비교 ex) ON e.Employee_ID = p.Employee_ID;

 


1대 다 관계를 사용하는 예제

 

1대 다 관계를 사용하는 예제는 게시판(게시물)과 댓글을 관리하는 시스템에서 매우 유용합니다. 아래는 게시물과 댓글을 각각 다른 테이블에 저장하고, 특정 게시물의 댓글을 조회하는 방법을 설명합니다.

 

테이블 구조

  1. Posts 테이블 (게시물 테이블):
    • Post_ID: 게시물의 고유 ID (Primary Key)
    • Title: 게시물 제목
    • Content: 게시물 내용
    • Author: 작성자
    • Created_At: 작성일
  2. Comments 테이블 (댓글 테이블):
    • Comment_ID: 댓글의 고유 ID (Primary Key)
    • Post_ID: 해당 댓글이 달린 게시물의 ID (Foreign Key)
    • Content: 댓글 내용
    • Author: 댓글 작성자
    • Created_At: 댓글 작성일
-- 게시물 테이블 생성
CREATE TABLE Posts (
    Post_ID INT AUTO_INCREMENT PRIMARY KEY,
    Title VARCHAR(255) NOT NULL,
    Content TEXT NOT NULL,
    Author VARCHAR(100) NOT NULL,
    Created_At TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 댓글 테이블 생성
CREATE TABLE Comments (
    Comment_ID INT AUTO_INCREMENT PRIMARY KEY,
    Post_ID INT,
    Content TEXT NOT NULL,
    Author VARCHAR(100) NOT NULL,
    Created_At TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (Post_ID) REFERENCES Posts(Post_ID)
);

 

예제 데이터 삽입

게시물과 댓글을 몇 개 삽입해 보겠습니다.

-- 게시물 데이터 삽입
INSERT INTO Posts (Title, Content, Author)
VALUES 
    ('First Post', 'This is the content of the first post', 'Alice'),
    ('Second Post', 'This is the content of the second post', 'Bob');

-- 댓글 데이터 삽입
INSERT INTO Comments (Post_ID, Content, Author)
VALUES 
    (1, 'This is a comment on the first post', 'Charlie'),
    (1, 'Another comment on the first post', 'David'),
    (2, 'This is a comment on the second post', 'Eve');

 

특정 게시물의 댓글 조회

특정 게시물에 달린 모든 댓글을 조회하려면 INNER JOIN을 사용합니다. 예를 들어, Post_ID = 1인 게시물의 댓글을 조회하는 SQL은 다음과 같습니다. 

SELECT 
    p.Title,
    p.Content AS Post_Content,
    p.Author AS Post_Author,
    p.Created_At AS Post_Created_At,
    c.Comment_ID,
    c.Content AS Comment_Content,
    c.Author AS Comment_Author,
    c.Created_At AS Comment_Created_At
FROM 
    Posts p
INNER JOIN 
    Comments c ON p.Post_ID = c.Post_ID
WHERE 
    p.Post_ID = 1;

 

설명

  • SELECT : 필요한 컬럼들을 선택합니다. 여기서는 게시물 제목(Title), 게시물 내용(Post_Content), 게시물 작성자(Post_Author), 게시물 작성일(Post_Created_At), 댓글 ID(Comment_ID), 댓글 내용(Comment_Content), 댓글 작성자(Comment_Author), 댓글 작성일(Comment_Created_At)을 조회합니다.
  • FROM Posts p: Posts 테이블을 기준으로 시작합니다.
  • INNER JOIN Comments c ON p.Post_ID = c.Post_ID: Posts 테이블과 Comments 테이블을 Post_ID로 조인합니다.
  • WHERE p.Post_ID = 1: 특정 게시물(Post_ID = 1)의 댓글만 조회합니다.

결과 예제

이 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Title Post_Content Post_Author Post_Created_At Comment_ID Comment_Content Comment_Author Comment_Created_At
First Post This is the content of the first post Alice 2023-08-05 12:00:00 1 This is a comment on the first post Charlie 2023-08-05 12:01:00
First Post This is the content of the first post Alice 2023-08-05 12:00:00 2 Another comment on the first post David 2023-08-05 12:02:00

요약

  • 테이블 설계: Posts와 Comments 테이블을 생성하여 1대 다 관계를 설정합니다.
  • 데이터 삽입: 예제 데이터를 각 테이블에 삽입합니다.
  • 조인 쿼리 작성: INNER JOIN을 사용하여 특정 게시물의 모든 댓글을 조회합니다.

 

NoSQL

 

NoSQL은 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)과 달리 고정된 스키마가 없거나 유연한 스키마를 사용하고, 테이블 간의 관계를 명시적으로 정의하지 않으며, 수평 확장이 용이한 데이터베이스 시스템을 말합니다. NoSQL 데이터베이스는 대규모 분산 데이터 저장소를 지원하며, 다양한 데이터 모델을 지원합니다. 대표적인 NoSQL 데이터베이스에는 MongoDB, Cassandra, Redis, CouchDB 등이 있습니다.

아니란뜻의 no가 아님 not only 란 뜻 !!

 

NoSQL 데이터베이스의 주요 특징:

  1. 스키마리스 구조: 데이터베이스의 스키마를 사전에 정의할 필요가 없으며, 유연한 데이터 모델을 사용할 수 있습니다.
  2. 수평 확장성: 데이터를 여러 서버에 분산 저장하여 확장성을 높일 수 있습니다.
  3. 다양한 데이터 모델: 키-값 저장소, 도큐먼트 저장소, 컬럼 패밀리 저장소, 그래프 데이터베이스 등 다양한 데이터 모델을 지원합니다.
  4. 고성능: 대규모 데이터를 빠르게 읽고 쓸 수 있습니다.

 


트랜잭션(Transaction)

 

트랜잭션(Transaction)은 데이터베이스 관리 시스템(DBMS)에서 하나의 작업 단위를 의미하며, 여러 데이터 조작 연산들을 하나로 묶어 처리합니다. 트랜잭션은 ACID 특성을 지녀야 하며, 이는 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)을 의미합니다.

 

트랜잭션 : 내가 송금 -> 친구가 받음 

내가 송금한다는것과 친구가 받는다는 것이 합쳐서 하나로 보는것

그래서 송금하다 뻑이나면 친구가 받지않았기때문에 롤백


트랜잭션은 하나 이상의 SQL 문으로 구성된 논리적 작업 단위입니다. 트랜잭션은 데이터 일관성이나 데이터 동시성에 문제가 있는지 여부에 따라 커밋(commit) 또는 롤백(rollback)으로 끝납니다. 커밋 문은 트랜잭션의 SQL 문에 의한 변경을 영구적으로 적용하며, 롤백 문은 트랜잭션의 SQL 문에 의한 모든 변경을 취소합니다.