블로그 내의 모든 예시와 실습은 VMware workstation16.2.3, Centos7을 활용 합니다.

JOIN

  • 두 개 이상의 테이블에서 연관성을 가지고 있는 열을 기반으로 레코드를 결합하는 기능

JOIN 종류

  • INNER JOIN(내부 조인) : 교집합
  • OUTER JOIN(외부 조인) : 합집합
    • LEFT OUTER JOIN(왼쪽 외부 조인)
    • RIGHT OUTER JOIN(오른쪽 외부 조인)
    • FULL OUTER JOIN(완전 외부 조인)

조인1

create database bns;
use bns;
create table sword(
s_name varchar(52) primary key,
s_level int unsigned not null,
s_attack int unsigned not null);
create table market(
m_no int auto_increment primary key,
m_category varchar(32) not null,
m_name varchar(52) not null,
m_seller varchar(32) not null);
insert into sword values(‘곤륜검’,50 , 540);
insert into sword values(‘풍뢰검’,45 ,263 );
insert into sword values(‘염화검’,36, 147 );
insert into sword values(‘요마검’,20, 64);
insert into market values(NULL, ‘지팡이’ , ‘촉마지팡이 ‘ , ‘merry’);
insert into market values(NULL, ‘검’ , ‘곤륜검 ‘ , ‘evernick’);
insert into market values(NULL, ‘기공패’ , ‘곤륜기공패 ‘ , ‘jamienick’);
insert into market values(NULL, ‘검’ , ‘풍뢰검’ , ‘ruina’);

테스트 테이블 생성

  • DB명 : bns
  • 테이블 구조

조인2

  • 데이터 삽입

조인3

INNER JOIN(내부 조인)

  • 테이블 A 와 테이블 B 모두 조건구문에 일치하는 데이터만 반환
  • 명시적 조인 표현
    • mariadb> SELECT (컬럼[,…]) FROM (테이블A) INNER JOIN (테이블B) ON (조건 구문);

조인4

  • 암시적 조인 표현
    • SELECT (컬럼[,…]) FROM (테이블A),(테이블B) WHERE (조건구문);

조인5

LEFT OUTER JOIN(왼쪽 외부 조인)

  • 테이블A 모두 반환
  • 테이블B 조건구문에 일치하는 데이터만 반환
  • mariadb>SELECT (컬럼[,…]) FROM (테이블A) LEFT JOIN (테이블B) ON (조건구문);

조인6

RIGHT OUTER JOIN(오른쪽 외부 조인)

  • 테이블B 모두 반환
  • 테이블A 조건구문에 일치하는 데이터만 반환
  • mariadb>SELECT (컬럼[,…]) FROM (테이블A) RIGHT JOIN (테이블B) ON (조건 구문);

조인7

집합 연산자(Set Operator)

  • 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법
  • 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용
  • 각 테이블의 조회 결과를 하나의 테이블에 합쳐서 반환 한다.
  • 조건
    • SELECT 절의 컬럼 수가 동일해야 한다.
    • SELECT 절의 동일 위치에 존재하는 컬럼의 데이터 타입이 상호 호환 가능해야 한다.
      • MySQL은 자동 형 변환이 일어나기 떄문에 동일하지 않아도 된다.

집합 연산자 종류

  • MySQL 은 UNION만 사용 가능
연산자 설명
UNION 여러SQL문의 결과에 대한 합집합 (모든 중복된 행은 하나의 행으로 표시)
UNION ALL 여러 SQL문의 결과에 대한 합집합 (중복된 행도 그대로 결과로 표시)
INTERSECT 여러 SQL문의 결과에 대한 교집합 (모든 중복된 행은 하나의 행으로 표시)
EXCEPT 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합 (모든 중복된 행은 하나의 행으로 표시)

조인8

UNION

  • 테이블 A 결과와 테이블 B 결과를 합쳐서 하나의 테이블로 반환
  • mariadb>select (A칼럼[,…]) from (테이블A) UNION SELECT (B칼럼[,…]) from (테이블B)

조인9


  • staff 테이블 추가
  • sword 테이블과 staff 테이블 데이터 조회

MariaDB [none]> use bns;
MariaDB [bns]> create table staff(f_name varchar(52) primary key,f_level int not null,f_attack int not null);
MariaDB [bns]> insert into staff values(‘촉마지팡이’,50,311);
MariaDB [bns]> insert into staff values(‘유성지팡이’,50,400);

조인10

  • 테이블 A 결과와 테이블 B 결과를 합쳐서 하나의 테이블로 반환
  • mariadb> select (A칼럼[,…]) from (테이블A) union select (B칼럼(,…) from (테이블 B);

조인11