SQL 조인과 서브쿼리, 데이터 조작어(DML) 정리
1. 조인
- 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법.
- 서로 다른 테이블에 저장된 관련된 데이터를 함께 가져와 하나의 결과로 표시.
- 조인을 사용하면 여러 테이블을 마치 하나의 테이블처럼 사용할 수 있다.
ANSI SQL 조인 방식
- ANSI SQL 조인 방식에서는 FROM 절에 있는 두 테이블명 사이에 CROSS, INNER, OUTER와 함께 JOIN 키워드를 사용한다.
- 조인 조건은 ON 절에 작성하고, 나머지 조건은 WHERE 절에 작성한다.
- CROSS, INNER, OUTER 키워드는 생략 가능
#### Non-ANSI SQL 조인 방식
- Non-ANSI SQL 조인 방식에서는 테이블을 쉼표(,)로 구분하여 FROM 절에 작성
- 조인 조건과 기타 조건을 모두 WHERE 절에 작성
2. ERD(Entity Relationship Diagram)
- ERD는 테이블 간의 관계를 설명해주는 다이어그램으로, 데이터베이스의 구조를 한눈에 파악할 수 있게 해준다.
- ERD를 통해 테이블들 간의 관계 및 그들 간의 대응수가 1:1인지, 1인지 등을 확인할 수 있다.
3. 조인의 종류
- 조인의 종류에는 크로스 조인(Cross Join), 내부 조인(Inner Join), 외부 조인(Outer Join), **셀프 조인(Self Join)**이 있다.
크로스 조인(Cross Join)
- 크로스 조인은 한쪽 테이블의 각 행마다 다른 쪽 테이블의 모든 행이 한 번씩 각각 매칭되는 조인을 의미,
- **카티션 곱(Cartesian Product)**이라고도 부른다.
내부 조인(Inner Join)
-내부 조인은 각 테이블에서 조인 조건에 일치하는 데이터만 가져오는 조인.
- 이퀴 조인(Equi Join)과 비이퀴 조인(Non-Equi Join)이 있다.
외부 조인(Outer Join)
- 외부 조인은 조인 조건에 맞지 않는 행도 함께 출력할 수 있다.
- MySQL에서는 외부 조인을 LEFT JOIN이나 RIGHT JOIN으로 표현한다.
셀프 조인(Self Join)
- 셀프 조인은 동일한 테이블 내에서 한 컬럼이 다른 컬럼을 참조하는 조인이다.
4. 서브쿼리(SubQuery)
- 서브쿼리는 SQL문 내부에서 사용되는 SELECT 문으로, 복잡한 데이터 추출 및 조작 작업에 유용하다.
- 서브쿼리는 일반적으로 괄호 () 안에 기술하며, WHERE 절, SELECT 절, FROM 절, HAVING 절 등에서 사용된다.
서브쿼리의 사용 목적
- 데이터 필터링: 특정 조건에 맞는 데이터를 선택
- 집계 및 계산: 데이터 집계나 계산을 위해 사용
- 비교 및 검증: 다른 데이터와의 비교를 통해 검증
- 중첩된 데이터 추출: 중첩된 데이터를 추출
- EXISTS 절: 서브쿼리의 존재 여부를 확인
서브쿼리와 조인의 차이점
- 서브쿼리: 한 문장 안에 1개의 메인 쿼리와 1개 이상의 서브쿼리가 있는 구조
- 작은 데이터셋이나 간단한 필터링 작업에 적합
- 조인: 1개의 쿼리 문 안에 2개 이상의 테이블을 연결하여 필요한 컬럼을 조회하는 방식
- 큰 테이블을 다룰 때나 복잡한 관계를 처리할 때 유용
단일 행 서브쿼리(Single-Row SubQuery)
- 서브쿼리의 결과로 단일 행을 반환하며, =, <, <=, >, >=, <> 등의 단일 행 비교 연산자를 사용
복수 행 서브쿼리(Multi-Row SubQuery)
- 서브쿼리의 결과가 여러 행이 나올 때, IN, ALL, ANY, SOME, EXISTS 같은 복수 행 비교 연산자를 사용
인라인 뷰(Inline View)
- FROM 절에서도 서브쿼리를 사용할 수 있는데, 이를 인라인 뷰라고 함
- 인라인 뷰에는 반드시 별명을 지정해야 한다.
스칼라 서브쿼리(Scalar SubQuery)
- 스칼라 서브쿼리는 SELECT 절 내에서 하나의 값을 생성하는 서브쿼리
- 서브쿼리의 결과가 메인 쿼리에서 사용
CTE(Common Table Expression)
- CTE는 쿼리로 만든 임시 데이터셋을 WITH 절에서 정의하여 사용
- 인라인 뷰와 유사하지만, 가독성과 재사용성이 좋다.
상관 서브쿼리(Correlated SubQuery)
- 상관 서브쿼리는 메인 쿼리와 서브쿼리 간의 상관관계를 포함하는 형태의 쿼리로, 메인 쿼리를 한 행씩 처리하며 서브쿼리를 실행
다중 컬럼 서브쿼리(Multi-Column SubQuery)
- 서브쿼리에서 여러 개의 컬럼을 사용하여 다중 비교를 수행하는 쿼리
5. 데이터 조작어(Data Manipulation Language, DML)
- **데이터 조작어(DML)**는 데이터를 관리하는 데 사용하는 언어로, 데이터를 추가(INSERT), 변경(UPDATE), 삭제(DELETE)할 때 사용된다.
INSERT
- INSERT는 테이블에 새로운 행을 삽입하는 경우에 사용
- 삽입할 컬럼명이 생략된 경우 삽입할 값이 테이블의 컬럼 수와 같아야 하며, 순서도 동일해야 한다.
UPDATE
- UPDATE는 기존 행에 있는 데이터 값을 변경할 때 사용
- UPDATE 문에 WHERE 절이 없으면 모든 행의 값이 변경되므로 주의해야 한다.
DELETE
- DELETE는 기존에 있는 행을 삭제할 때 사용합니다. DELETE 문에 WHERE 절이 없으면 모든 행이 삭제되므로 주의해야 한다.
INSERT ON DUPLICATE KEY UPDATE
- INSERT ON DUPLICATE KEY UPDATE는 레코드가 없다면 새롭게 추가하고, 이미 있다면 데이터를 변경하는 경우에 사용한다.
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 28일차_MYSQL5 (0) | 2024.08.12 |
---|---|
#파이썬 27일차_MYSQL4 (0) | 2024.08.09 |
#파이썬 27일차_MYSQL3 (0) | 2024.08.07 |
#파이썬 26일차_MYSQL2 (0) | 2024.08.06 |
#파이썬 24일차_Django_개발환경/동작원리/실습2/Todo list웹 서비스 만들기 (0) | 2024.08.01 |