[SQL] SQL 기본 ( Join )

2025. 1. 26. 11:12·TIL/SQL

Join이란?

  • Join이란 테이블 간의 관계성에 따라서 복수의 테이블을 결합하여 하나의 테이블로 결과를 만드는 것
  • A 테이블과 B테이블을 Join하여 C테이블이 결과로 나오게 된다

Join의 종류

  • Join의 기본이 되는 OUTER JOIN과 INNTER JOIN부터 알아보자
  • OUTER JOIN
    • 기준이 되는 컬럼에 조건에 부합하는 결과가 없어도 데이터를 가져와서 NULL로 표시한다
    • 결과 테이블에 두 테이블의 모든 컬럼이 들어간다
    • LEFT JOIN과 RIGHT JOIN이 있다
  • LEFT JOIN
    • 결과 테이블에 두 테이블의 모든 컬럼이 들어간다
    • JOIN문 기준으로 왼쪽에 있는 테이블의 기준 컬럼을 모두 돌며 오른쪽에 있는 테이블의 기준 컬럼에서 일치하는 내용이 있다면 찾아서 붙인다
    • 왼쪽 테이블의 내용 전부 + 오른쪽 테이블의 내용 중 기준에 부합하는 내용 추가
  • RIGHT JOIN
    • JOIN문 기준으로 오른쪽에 있는 테이블의 기준 컬럼을 모두 돌며 왼쪽에 있는 테이블의 기준 컬럼에서 일치하는 내용이 있다면 찾아서 붙인다
    • 오른쪽 테이블의 내용 전부 + 왼쪽 테이블의 내용 중 기준에 부합하는 내용 추가
  • INNTER JOIN
    • 두 개의 테이블에서 선정된 기준 컬럼을 모두 돌며 두 컬럼 모두 기준에 부합하는 값이 있는 데이터만 결과로 가져온다
    • 오른쪽 테이블과 왼쪽 테이블 내용이 모두 기준에 부합하는 데이터만 추가

집합으로 이해하는 JOIN

  • 새로운 2개의 테이블
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL,
  `name` char(4) NOT NULL,
  `sex` enum('남자','여자') NOT NULL,
  `location_id` tinyint(4) NOT NULL,
  `birthday` datetime NOT NULL,
  PRIMARY KEY (`id`)
) 
 
DROP TABLE IF EXISTS `location`;
CREATE TABLE `location` (
`id`  tinyint UNSIGNED NOT NULL AUTO_INCREMENT ,
`name`  varchar(20) NOT NULL ,
`distance`  tinyint UNSIGNED NOT NULL ,
PRIMARY KEY (`id`)
)

 

  • 실제 SQL
  • 실행 과정 이해
    • 두 테이블의 모든 컬럼을 갖는 결과 테이블을 생성한다 
    • student 테이블의 모든 내용을 결과 테이블에 붙인다
    • s.location_id 컬럼을 순회한다
      • s.location_id = l.id 를 만족하는 값이 있다면 location 테이블에서 해당 데이터를 가져와서 결과 테이블을 채운다
      • s.location_id = l.id 를 만족하는 값이 없다면 NULL로 값을 채운다
      • ( INNER JOIN 에서는 아래 과정을 진행하지 않는 것 )
SELECT s.id, s.name, l.address, l.distance FROM `student` as s
INNER JOIN `location` as l
ON s.location_id = l.id ;

'TIL > SQL' 카테고리의 다른 글

[SQL] SQL 기본 ( 인덱스 )  (0) 2025.01.26
[SQL] SQL 기본 ( 데이터 CRUD )  (0) 2025.01.26
[SQL] SQL 기본 ( 데이터베이스와 테이블 생성, 삭제 )  (0) 2025.01.25
[SQL] 데이터베이스란?  (0) 2025.01.25
'TIL/SQL' 카테고리의 다른 글
  • [SQL] SQL 기본 ( 인덱스 )
  • [SQL] SQL 기본 ( 데이터 CRUD )
  • [SQL] SQL 기본 ( 데이터베이스와 테이블 생성, 삭제 )
  • [SQL] 데이터베이스란?
Charlie.han
Charlie.han
백엔드 개발자가 되기 위해 공부한 것들(Java, Spring, SQL, 네트워크, AWS 등)을 기록하고 공유하는 블로그입니다.
  • Charlie.han
    Chalie's Devlog
    Charlie.han
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • TIL (32)
        • Java (20)
        • Spring (2)
        • SQL (5)
        • 알고리즘 (4)
        • 트러블슈팅 (1)
      • WIL (0)
        • 카카오테크 부트캠프 (0)
  • 태그

    프로그래머스 베스트앨범
    불변객체
    묵시적형변환
    제네릭 클래스
    sql limit
    참조공유
    자바
    데이터베이스
    static 필드
    string
    인텔리제이한글
    타입안전열거형
    super()
    프로그래머스 베스트앨범 자바
    object
    static메서드
    프로그래머스 소수찾기
    컬렉션프레임워크
    sql where
    unsupported characters for the charset 'iso-8859-1'
    인텔리제이 한글 깨짐
    SQL
    프로그래머스
    인터페이스
    다형성
    default메서드
    인스턴스
    프로그래머스 소수찾기 자바
    jdk란?
    Java
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Charlie.han
[SQL] SQL 기본 ( Join )
상단으로

티스토리툴바