데이터베이스 강의를 듣고 스스로 나만의 언어로 정리한 내용입니다.
1. 데이터베이스의 요청 및 응답과정
유저 → Workbench,DBeaver…(Client) → MariaDB(DBMS) → InnoDB, MyISAM(DB엔진) → Scheme
2. Daemon
- 사용자의 개입,제어없이 백그라운드에서 (알아서 작업하는) 실행되는 프로그램
- 보통 끝에 ‘d’붙는다. e.g.) syslogd
3. Schema 스키마
- 데이터베이스의 구조와 조건을 정의하는 개념
- 스키마의 종류 : 개념적 스키마, 논리적 스키마, 물리적 스키마
개념적 스키마
- 데이터베이스에 필요한 테이블이 무엇인지 대략적으로 정한 것, 테이블 간의 관계를 설정한 것
논리적 스키마
- 테이블에 컬럼을 정의하고 데이터타입이나 PK,FK 등 제약 조건을 정의해놓은 것
물리적 스키마
- 실제 하드디스크에 데이터가 저장되는 것
- 쿼리문을 날려 실제 db가 생성, 저장되는 것
4. 테이블
데이터를 구조적으로 저장하는 방식으로, 행(row, record)에는 데이터 정보를, 열(column, attribute)에는 데이터 속성을 나타낸다.
PK
- 데이터를 식별하기 위한 고유 값으로 유일성을 만족해야 한다.
FK
- 다른 테이블의 기본키를 참조하는 열로 테이블 간의 관계를 나타내는데 사용한다.
5. 인덱스
- 데이터를 효율적으로, 빠르게 조회하기 위해 특정 열에 대해 생성하는 데이터 구조.
- 예를들어, DB에서 “홍길동”에 대한 정보를 찾는다고 할 때, 전체 데이터를 처음부터 일일히 찾는것보다 “ㅎ”부터 찾기 시작하면 훨씬 빠른 검색이 가능하다.
- 사용이유 : 빠른 SELECT(조회)를 위해 (데이터 전체를 탐색하지 않고도 원하는 데이터를 빠르게 찾을 수 있도록 돕는다.)
6. 쿼리 (CRUD)
분류 | 쿼리 | 쿼리 예시 |
---|
삽입 | INSERT | INSERT INTO students (name, birthdate) VALUES ('강동원', '1990-05-20'); |
조회 | SELECT | SELECT * FROM students WHERE student_id = 1; |
업데이트 | UPDATE | UPDATE students SET name = '원빈' WHERE student_id = 1; |
삭제 | DELETE | DELETE FROM students WHERE student_id = 1; |
7. JOIN
분류 | 쿼리 | 쿼리 예시 |
---|
JOIN | INNER JOIN | SELECT s.student_id, s.name, c.course_name FROM students s INNER JOIN courses c ON s.student_id = c.student_id; |
LEFT JOIN | LEFT JOIN | SELECT s.student_id, s.name, c.course_name FROM students s LEFT JOIN courses c ON s.student_id = c.student_id; |
RIGHT JOIN | RIGHT JOIN | SELECT s.student_id, s.name, c.course_name FROM students s RIGHT JOIN courses c ON s.student_id = c.student_id; |
CROSS JOIN | CROSS JOIN | SELECT students.name, courses.course_name FROM students CROSS JOIN courses; |
- 두 개 이상의 테이블을 결합하는 데이터베이스 연산
- 사용 이유 :
- 여러 번 쿼리를 날릴 필요없이 한 번의 쿼리로 여러 테이블의 관련 데이터를 조회할 수 있어 편리하며 성능도 향상된다.
- 유지보수성 : 데이터를 여러 테이블로 나누어 저장하고 필요한 경우 JOIN으로 결합해 조회하기 때문에 데이터를 관리하기 좋다.
JOIN (INNER JOIN)
- 두 테이블 간에 교집합되는 부분(데이터가 존재하는 부분)만 결합하는 연산
LEFT JOIN
- 쿼리문의 왼쪽 테이블을 기준으로 오른쪽에서 일치하는 데이터를 가져와 결합한다.
만약, 왼쪽 테이블의 기준열 데이터가 오른쪽 테이블의 기준열에 없다면, NULL로 표시한다.
- 즉, 왼쪽 테이블의 모든 레코드를 반환, 오른쪽 테이블에서 이와 일치하는 데이터를 가져와 결합한다.
단, 오른쪽에는 없고 왼쪽에만 있는 데이터의 경우 NULL로 처리한다.
RIGHT JOIN
- 쿼리문의 오른쪽 테이블을 기준으로 왼쪽에서 일치하는 데이터를 가져와 결합한다.
만약, 왼쪽테이블의 기준 열 데이터가 오른쪽 테이블의 기준열에 없다면, NULL로 표시한다.
- 즉, 오른쪽 테이블의 모든 레코드를 반환, 왼쪽 테이블에서 이와 일치하는 데이터를 가져와 결합한다.
단, 왼쪽에는 없고 오른쪽에만 있는 데이터의 경우 NULL로 처리한다.
CROSS JOIN
- 두 테이블 간의 곱집합, 즉 모든 경우의 수를 반환한다.