JOIN
JOIN은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.
- INNER JOIN(내부 조인)
- 교집합에 해당하는 개념으로 두 테이블을 연결할 때 가장 많이 사용한다. 그래서 흔히 조인이라고 부르면 내부 조인을 의미하는 경우가 많다.
- 두 테이블을 조인할 때 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
-
SELECT <열 목록> FROM <첫 번째 테이블> INNER JOIN <두 번째 테이블> ON <조인 조건> [WHERE 검색 조건] #INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식합니다.
- OUTER JOIN(외부 조인)
- 내부 조인은 두 테이블 모두 데이터가 있어야 결과가 나오지만 외부 조인은 두 테이블을 조인할 때 1개의 테이블에만 데이터가 있어도 결과가 나온다.
-
SELECT <열 목록> FROM <첫 번째 테이블(LEFT 테이블)> <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> ON <조인 조건> [WHERE 검색 조건] - LEFT OUTER JOIN
- 다양한 JOIN 중에서 일반적으로 가장 많이 사용된다.
- 좌측 테이블 데이터에 추가로 우측 정보를 조인하는 문법이다. 모든 좌측 테이블을 가져오고 조인 가능한 것은 붙이고, 조인 불가능한 것은 NULL로 채운다.
- RIGHT OUTER JOIN
- 오른쪽 테이블의 모든 값이 출력되는 조인
- LEFT OUTER JOIN과 같은 개념이다.
- FULL OUTER JOIN
- 왼쪽 외부 조인과 오른쪽 외부 조인이 합쳐진 모든 데이터 조회를 위한 합집합 JOIN
- 모든 테이블을 확인해 데이터가 있는 것은 모두 결과로 만들고 데이터가 없는 것은 모두 NULL이 된다.
- INNER JOIN vs LEFT JOIN

INNER 조인은 양측 테이블 모두 존재하는 것만 결과로 만든다.
반면 LEFT 조인은 좌측 테이블 중 조인 불가능한 것들도 NULL로 채워 결과로 만들어진다.

- CROSS JOIN(상호 조인)
- 카티션 곱(CARTESIAN PRODUCT) 라고도 한다.
- 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.
- 조인의 결과로 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수 만큼 된다.
-
SELECT * FROM <첫 번째 테이블> CROSS JOIN <두 번째 테이블>

- SELF JOIN(자체 조인)
- 자신이 자기 자신과 조인한다는 의미로 1개의 테이블을 사용한다.
-
SELECT <열 목록> FROM <테이블> 별칭A INNER JOIN <테이블> 별칭B [WHERE 검색 조건]
데이터베이스 인덱스
Index 기능은 찾고자하는 부분을 빠르게 찾아서 전달해주는 역할을 한다. 그리고 DB에서도 인덱스라는 기능은 성능을 최적화시켜줄 수 있는 유용한 도구로 많이 사용된다.
DB에서 조회를 할 때 조회 구문을 사용하게 되면 값의 마지막 위치가 어디인지 모르기 때문에 데이터 전체를 탐색함으로써 결과를 반환해준다. 만약 데이터가 수십만 개 이상의 데이터가 있을 때 조회 기능이 자주 실행된다면 계속해서 데이터베이스를 처음부터 끝까지 조회하고 값을 반환하기 때문에 성능이 저하될 수밖에 없다.
그래서 데이터베이스에서도 이러한 문제점을 방지하고자 Index를 활용해 자주 조회되는 column에 대한 Index Table을 따로 만들어 SELECT 문이 들어왔을 때 Index Table에 있는 값들로 결과 값을 조회해서 더 빠르게 원하는 값을 찾을 수 있다.
인덱스가 동작하는 과정은 테이블 생성 시 column에 대한 인덱스를 주면 column 에 대한 Index Table이 생성이 된다. 그리고 나중에 테이블에 column 에 대한 WHERE 문이 포함된 쿼리가 나갈 때 Index Table에 저장된 key-value 값을 참조해서 테이블에서 결과 값을 반환해온다.
그리고 DBMS는 Index를 다양한 알고리즘으로 관리를 하고 있는데 일반적으로 사용되는 알고리즘은 B+ Tree 알고리즘이다.
B - Tree

B-Tree는 다음과 같은 조건을 만족해야 한다.
- node의 key의 수가 k개라면, 자식 node의 수는 k+1개이다.
- node의 key는 반드시 정렬된 상태여야 한다.
- 자식 node들의 key는 현재 node의 key를 기준으로 크기 순으로 나뉘게 된다.
- root node는 항상 2개 이상의 자식 node를 갖는다. (root node가 leaf node인 경우 제외)
- M차 트리일 때, root node와 leaf node를 제외한 모든 node는 최소 ⌈M2⌉, 최대 M개의 서브 트리를 갖는다.
- 모든 leaf node들은 같은 level에 있어야 한다.
B-Tree는 어느 한 데이터의 검색은 효율적이지만, 모든 데이터를 한 번 순회하는 데에는 트리의 모든 노드를 방문해야 하므로 비효율적이다. 이러한 B-Tree의 단점을 개선시킨 자료구조가 B+Tree이다.
B+ Tree

B+Tree는 오직 leaf node에만 데이터를 저장하고 leaf node가 아닌 node에서는 자식 포인터만 저장한다.
그리고 leaf node끼리는 Linked list로 연결되어있다.
또, B+Tree에서는 반드시 leaf node에만 데이터가 저장되기 때문에 중간 node에서 key를 올바르게 찾아가기 위해서 key가 중복될 수 있다.
B+ Tree를 사용한 장점으로는
1. leaf node를 제외하고 데이터를 저장하지 않기 때문에 메모리를 더 확보할 수 있다. 따라서 하나의 node에 더 많은 포인터를 가질 수 있기 때문에 트리의 높이가 더 낮아지므로 검색 속도를 높일 수 있다.
2. Full scan을 하는 경우 B+Tree는 leaf node에만 데이터가 저장되어 있고, leaf node끼리 linked list로 연결되어 있기 때문에 선형 시간이 소모된다. 반면 B-Tree는 모든 node를 확인해야 한다.
반면, B-Tree의 경우 최상의 경우 특정 key를 root node에서 찾을 수 있지만, B+Tree의 경우 반드시 특정 key에 접근하기 위해서 leaf node까지 가야 하는 단점이 있다.
인덱스에서 B-Tree 대신 주로 B+Tree를 사용하는 이유 인덱스 컬럼은 부등호를 이용한 순차 검색 연산이 자주 발생할 수 있기 때문이다. 따라서 B+Tree의 Linked list를 이용하면 순차 검색을 효율적으로 할 수 있게 된다.
B+Tree의 검색 과정은 B-Tree와 동일하다. 반면 B+Tree의 삽입과 삭제 과정은 약간의 차이가 있다. 기본적으로 B+Tree의 삽입과 삭제는 항상 leaf node에서 일어난다.
DML의 사용법
- SELECT : 테이블에서 데이터를 검색하는데 사용한다.
- 모든 열의 데이터를 선택하는 경우
- 테이블의 모든 열을 가져오는 것을 말한다
SELECT * FROM 테이블;- 테이블이 있다면 '*' 는 테이블의 모든 열을 가져오는 것을 말한다
- 특정 열의 데이터만 선택하는 경우
- SELECT하려는 열을 작성하고 원하는(FROM) 테이블을 작성하면 테이블에서 원하는 열 값을 가져올 수 있다.
SELECT 열, 열 FROM 테이블;
- 조건에 따라 데이터를 선택하는 경우
-
SELECT 열 FROM 테이블 WHERE 조건; - 테이블에서 원하는 조건에 해당하는 열만 가져오겠다는 의미이다.
-
- 여러 테이블을 조인하여 데이터를 선택하는 경우
-
SELECT A테이블.A열, A테이블.B열, B테이블.A열 FROM A테이블 JOIN B테이블 ON A테이블.C열 = B테이블.B열; - 순수 SELECT만 있는 것이 아닌 JOIN 개념이 같이 들어갔으므로 같이 숙지하거나, 향후 본인 포스팅에서 확인하면 좋을 것 같다.
- 주문 테이블(Orders)과 고객 테이블(Customer)을 조인하여 각 주문의 ID, 주문한 고객의 이름, 주문 일자를 선택할 때. 활용된다
-
- 데이터를 그룹화하고 집계 함수를 활용할 때 적용하는 경우
-
SELECT 열, 함수 FROM 테이블 GROUP BY 그룹화할 열; - 'Customers' 테이블에서 'Country' 열을 기준으로 그룹화하며, 각 그룹에 속하는 행들의 수를 Count 함수를 통하여 세어낸 뒤 그 결과를 반환한다.
-
- 정렬된 데이터를 선택하는 경우
-
SELECT 열, 열 FROM 테이블 ORDER BY 정렬하려는 기준 열 DESC; - 테이블에서 값을 선택한 후. 정렬하기 원하는 기준 열에 대해서 정렬하는 문법이다. SELECT 옆 열은 하나 이상만 오면 된다.
-
- 모든 열의 데이터를 선택하는 경우
- INSERT : 테이블에 새로운 데이터를 추가하는 데 사용된다.
- INSERT 문에 디폴트 값을 사용하는 경우
-
INSERT INTO 테이블 (열, 열, 열) VALUES (값, DEFAULT, 값), (값, 값, DEFAULT);
-
- 여러 개의 데이터를 동시에 삽입하는 경우
-
INSERT INTO 테이블 (열, 열, 열) VALUES (값, 값, 값), (값, 값, 값), (값, 값, 값);
-
- 특정 데이터를 조건에 따라 선택적으로 삽입하는 경우
-
INSERT INTO 테이블 (열, 열, 열) SELECT 열, 열, 열 FROM 테이블 WHERE 조건을 넣을 기준 열 >= 값;
-
- 삽입할 데이터를 서브쿼리를 통해 가져오는 경우
-
INSERT INTO 테이블 (열, 열, 열) SELECT 열, 열, 열 FROM 테이블 WHERE 열 = '조건';
-
- INSERT 문에 디폴트 값을 사용하는 경우
- UPDATE : 테이블의 기존 데이터를 수정하는 데 사용된다.
- 조건에 따라 특정 행의 데이터를 업데이트하는 경우
-
UPDATE 테이블 SET 변경 열 = 변경 값 WHERE 조건 열 = 조건 값;
-
- 여러 열의 데이터를 한 번에 업데이트하는 경우
-
UPDATE 테이블 SET 변경 열 = 변경 조건, 변경 열 = 변경 조건 WHERE 조건 = 조건 값;
-
- 업데이트할 값을 다른 열의 값으로 설정하는 경우
-
UPDATE 테이블 SET A.행 = A.행 + 값;
-
- 서브쿼리를 사용하여 업데이트할 값을 가져오는 경우
-
UPDATE 테이블 SET 열 = (SELECT 함수(열) FROM 테이블);
-
- 다른 테이블과 조인하여 업데이트할 값을 가져오는 경우
-
UPDATE A.테이블 JOIN B.테이블 ON A테이블.A열 = B테이블.A열 SET A테이블.B열 = 조건 WHERE B테이블.B열 = 조건;
-
- 조건에 따라 특정 행의 데이터를 업데이트하는 경우
- DELETE : 테이블에서 조건의 데이터를 삭제하는 데 사용된다.
- 조건에 따라 특정 행을 삭제하는 경우
-
DELETE FROM 테이블 WHERE 열 = 조건;
-
- 모든 행을 삭제하는 경우
-
DELETE FROM 테이블;
-
- 여러 조건을 결합하여 행을 삭제하는 경우
-
DELETE FROM 테이블 WHERE 조건 열 >= 23 AND 조건 열 = '아무개';
-
- 서브 쿼리를 사용하여 특정 조건을 충족하는 행을 삭제하는 경우
-
DELETE FROM 테이블 WHERE 열 IN (SELECT 열 FROM 테이블 WHERE 조건 열 = 값);
-
- 다른 테이블과 조인하여 특정 조건을 충족하는 행을 삭제하는 경우
-
DELETE 테이블 FROM 테이블 JOIN 조인할 테이블 ON 테이블.ID = 조인할 테이블.StudentID WHERE 조인할 테이블.CourseID = 1;
-
- 조건에 따라 특정 행을 삭제하는 경우
NoSQL vs 관계형
참고
SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)
조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부
hongong.hanbit.co.kr
[DB] 11. 인덱스(Index) - (1) 개념, 장단점, B+Tree 등
[목차] 1. 인덱스(Index)란? 2. 인덱스(Index)의 장단점 3. 인덱스를 사용하면 좋은 경우 4. 인덱스의 자료 구조 1. 인덱스(Index)란? 인덱스(Index)는 데이터베이스의 테이블에 대한 검색 속도를 향상시켜
rebro.kr
https://okeybox.tistory.com/187
[Database] DML(Data Manipulation Language)이란? (Lightly)
안녕하세요 성조입니다. 잘못된 지식 전달 사항이 있다면 언제든지 댓글로 피드백 주시면 감사드리겠습니다! 이 포스팅은 MySQL을 기준으로 작성되었습니다. DML(Data Manipulation Language)이란? 데이터
okeybox.tistory.com
'CS 지식 > CS 기술 면접 대비' 카테고리의 다른 글
| 네트워크 etc. 추가정리 - 1. IP 주소 (0) | 2024.12.10 |
|---|---|
| 네트워크 etc. 추가정리 - 네트워크란 (3) | 2024.12.10 |
| 자료구조 etc. 추가정리 (1) | 2024.11.29 |
| 운영체제 etc. 추가 정리 (0) | 2024.11.22 |
| 데이터베이스 6. NoSQL (2) | 2024.11.08 |
















