[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)
  • 태그

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

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

티스토리툴바