JOIN 이란
- 한 데이터베이스 내의 여러 테이블을 조합하여 하나의 열로 표현한 것이다.
JOIN의 필요성
- 관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고 각 테이블끼리는 관계(Relationship)을 갖게 된다.
- 이와 같은 특징으로 관계형 데이터베이스는 저장 공간의 효율성과 확장성이 향상되게 된다.
- 다른 한편으로는 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하다.
JOIN의 종류
employee 테이블 department 테이블
내부조인(INNER JOIN)
- 여러 애플리케이션에서 사용되는 가장 흔한 결합 방식이며 기본 조인 형식으로 간주된다.
- 내부 조인은 조인 구문에 기반한 2개의 테이블(A, B)의 컬럼 값을 결합함으로써 새로운 결과 테이블을 생성한다.
- 명시적 조인 표현(explicit)과 암시적 조인 표현(implicit) 2개의 다른 조인식 구문이 있다.
명시적 조인 표현
- 테이블에 조인을 하나는 것을 지정하기 위해 JOIN 키워드를 사용하며 그리고 나서 다음의 예제와 같이 ON 키워드를 조인에 대한 구문을 지정하는데 사용한다.
- SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID;
암시적 조인 표현
- SELECT 구문의 FROM 절에서 그것들을 분리하는 컴마를 사용해서 단순히 조인을 위한 여러 테이블을 나열하기만 한다.
- SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID;
결과
교차 조인(CROSS JOIN)
- 조인되는 두 테이블에서 곱집합을 반환한다.
- 즉, 두 번째 테이블로부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결합된 열을 만들 것이다.
- 예를 들어 m행을 가진 테이블과 n행을 가진 테이블이 교차 조인되면 m*n 개의 행을 생성한다.
- 명시적 조인 표현
- SELECT * FROM employee CROSS JOIN department;
- 암시적 조인 표현
- SELECT * FROM employee, department;
결과
외부 조인(OUTER JOIN)
- 조인 대상 테이블에서 특정 테이블의 데이터가 모두 필요한 상황에서 외부 조인을 활용하여 효과적으로 결과 집합을 생성할 수 있다.
왼쪽 외부 조인(LEFT OUTER JOIN)
- 우츨 테이블에 조인할 컬럼의 값이 없는 경우 사용한다.
- 즉, 좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성한다.
- SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
오른쪽 외부 조인(RIGHT OUTER JOIN)
- 좌측 테이블에 조인할 컬럼의 값이 없는 경우 사용한다.
- 즉, 우측 테이블의 모든 데이터를 포함하는 결과 집합을 생성한다.
- SELECT * FROM employee RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID
완전 외부 조인(FULL OUTER JOIN)
- 양쪽 테이블 모두 OUTER JOIN이 필요할 때 사용한다.
- SELECT * FROM employee FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
https://velog.io/@ragnarok_code/DataBase-%EC%A1%B0%EC%9D%B8Join%EC%9D%B4%EB%9E%80
JOIN에서 ON과 WHERE의 차이를 설명해주세요.
- ON : JOIN 을 하기 전 필터링을 한다 (=ON 조건으로 필터링이 된 레코들간 JOIN이 이뤄진다)
- WHERE : JOIN 을 한 후 필터링을 한다 (=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)
https://developyo.tistory.com/121
주의사항
SQL 문장의 의미를 제대로 파악
- SQL을 어떻게 작성하느냐에 따라 성능이 크게 좌우된다. 어떤 질의를 수행할 것인지를 명확하게 정의한 후, 비효율을 제거하여 최적의 SQL을 작성해야 한다.
명확한 조인 조건 제공
- 조인 조건을 명확하게 제공하지 않을 경우, 의도치 않게 CROSS JOIN이 수행될 수 있다.
쿼리 수행 순서
- 1. FROM : SELECT 문에 필요한 테이블 선택
- 2. WHERE : WHERE 조건절을 이용하여 행(row) 데이터 필터링
- 3. GROUP BY : GROUP BY 절을 이용하여 특정 컬럼의 그룹화를 수행
- 4. HAVING : HAVING 절을 이용하여 그룹화된 결과에 대한 조건 필터링
- 5. SELECT : SELECT 절에서 사용할 컬럼 선택
- 6. ORDER BY : ORDER BY 절을 이용하여 결과 데이터 정렬
- 7. LIMIT : LIMIT 절을 이용하여 출력할 데이터의 개수 제한
https://adjh54.tistory.com/160
HAVING과 WHERE의 차이를 설명해주세요.
- Having절은 WHERE절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다
- 반면 WHERE절은 개별 행에 적용이 된다.
- having은 SQL select문이 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정하는 SQL절이다.
- where은 단일 테이블에서 데이터를 가져 오거나 여러 테이블과 결합하여 조건을 지정하는데 사용되는 SQL절이다.
- having절은 그룹을 필터링하는 데 사용된다.
- where절을 행을 필터링 하는데 사용된다.
- 집계 함수는 having 절과 함께 사용할 수 있다.
- where절을 have절에 포함된 하위 쿼리에 있지않으면 집계함수와 함께 사용할 수 없다.
- (집계함수란, COUNT, MIN, MAX, SUM, AVG등등이 있다.)
- having 절은 Group By 절 뒤에 사용합니다.
- Where 절은 Group By 절 앞에 사용합니다.
- 간단 요약
- Having은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용된다.
- Where은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다.
https://velog.io/@ljs7463/SQL-having-%EA%B3%BC-where-%EC%B0%A8%EC%9D%B4
group by의 역할에 대해 설명해주세요.
- 데이터를 ‘그룹화’하는 데 사용되는 절입니다. 이 절은 특정 열(Colum)의 값을 기준으로 행(Row)을 그룹화하거나 각 그룹에 대한 집계 함수로 계산을 합니다.
DELETE, TRUNCATE, DROP의 차이를 설명해주세요.
- 모두 삭제하는 명령어이지만 중요한 차이점이 있다.
- DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어 들지 않는다. 원하는 데이터만 지울 수 있다. 삭제 후 잘못 삭제한 것을 되돌릴 수 있다.
- TRUNCATE 명령어는 용량이 줄어 들고, 인덱스 등도 모두 삭제 된다. 테이블은 삭제하지는 않고, 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제 후 절대 되돌릴 수 없다.
- DROP 명령어는 데이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.
INSERT
- INSERT INTO [테이블명] ([칼럼1], [칼럼2], [칼럼3] ...)
- VALUES ([값1], [값2], [값3] ...)
- 모든 칼럼을 입력할 경우 입력할 칼럼 생략 가능
- VALUES 여러개 써서 동시에 여러 행 INSERT 가능
UPDATE
- UPDATE [테이블명]
- SET [컬럼1] = [값1]
- , [컬럼2] = [값2]
- WHERE [조건]
DELETE
- DELETE
- FROM [테이블명]
- WHERE [조건]
- FROM 생략 가능
LIKE
- A로 시작하는 문자를 찾기
- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A%'
- A를 포함하는 문자 찾기
- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A%'
- A로 시작하는 두글자 문자 찾기
- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A_'
null
- NULL 값은 아직 정의되지 않은 값!
- NULL 은 0 또는 공백이 아니다! (0은 숫자이고, 공백은 하나의 문자이다.)
- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을 포함할 수 있다.
- NULL 값을 포함하는 연산의 경우 결과 값도 NULL 값이다.
평균
- SELECT AVG(컬럼)
- FROM 테이블명
- WHERE 조건
합계
- SELECT SUM(컬럼)
- FROM 테이블명
- WHERE 조건
최고
- SELECT MAX(컬럼)
- FROM 테이블명
- WHERE 조건
최저
- SELECT MIN(컬럼)
- FROM 테이블명
- WHERE 조건
테이블 정보
- SHOW 테이블명
- SHOW 테이블명 FROM DB명
중복 제거
- SELECT DISTINCT 컬럼, 컬럼
- FROM 테이블명
- WHERE 조건
IN, NOT IN 설명
- SELECT *
- FROM 테이블명
- WHERE 컬럼 IN ('A' , 'B')
- 'A'와 'B' 가 포함되는 데이터만 추출
- SELECT *
- FROM 테이블명
- WHERE 컬럼 NOT IN ('A' , 'B')
- 'A'와 'B' 가 포함되는 않는 데이터만 추출
숫자에서 문자로
- TO_CHAR : 숫자나 날짜를 문자열로 변환
문자에서 숫자로
- TO_NUMBER : 문자를 숫자로 변환
문자에서 날짜로
- TO_DATE : 문자를 날짜로 변환
'DB' 카테고리의 다른 글
[DB] ORM, 장단점, 종류 질문, 답변 (0) | 2023.05.10 |
---|---|
[DB] 트랜잭션, Lock, ACID, 격리 수준 질문, 답변 (0) | 2023.05.10 |
[DB] 키, 인덱스 질문, 답변 (0) | 2023.05.10 |
[DB] 특징, DDL, DML, DCL, RDBMS, NoSQL 질문, 답변 (0) | 2023.05.10 |
DB 부하분산(간단 정리) (0) | 2023.04.27 |
댓글