본문 바로가기
DB

[DB] JOIN, 종류, ON, HAVING, 쿼리수행순서 질문, 답변

by 오렌지마끼야또 2023. 5. 10.
728x90
반응형

 

 

 

 

 

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 명령어는 데이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.

 

https://wikidocs.net/4021





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 : 문자를 날짜로 변환

 

728x90
반응형

댓글