블로그 내의 모든 예시와 실습은 VMware workstation16.2.3, Centos7을 활용 합니다.
JOIN
- 두 개 이상의 테이블에서 연관성을 가지고 있는 열을 기반으로 레코드를 결합하는 기능
JOIN 종류
- INNER JOIN(내부 조인) : 교집합
- OUTER JOIN(외부 조인) : 합집합
- LEFT OUTER JOIN(왼쪽 외부 조인)
- RIGHT OUTER JOIN(오른쪽 외부 조인)
- FULL OUTER JOIN(완전 외부 조인)
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
- 테이블 구조
- 데이터 삽입
INNER JOIN(내부 조인)
- 테이블 A 와 테이블 B 모두 조건구문에 일치하는 데이터만 반환
- 명시적 조인 표현
- mariadb> SELECT (컬럼[,…]) FROM (테이블A) INNER JOIN (테이블B) ON (조건 구문);
- 암시적 조인 표현
- SELECT (컬럼[,…]) FROM (테이블A),(테이블B) WHERE (조건구문);
LEFT OUTER JOIN(왼쪽 외부 조인)
- 테이블A 모두 반환
- 테이블B 조건구문에 일치하는 데이터만 반환
- mariadb>SELECT (컬럼[,…]) FROM (테이블A) LEFT JOIN (테이블B) ON (조건구문);
RIGHT OUTER JOIN(오른쪽 외부 조인)
- 테이블B 모두 반환
- 테이블A 조건구문에 일치하는 데이터만 반환
- mariadb>SELECT (컬럼[,…]) FROM (테이블A) RIGHT JOIN (테이블B) ON (조건 구문);
집합 연산자(Set Operator)
- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법
- 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용
- 각 테이블의 조회 결과를 하나의 테이블에 합쳐서 반환 한다.
- 조건
- SELECT 절의 컬럼 수가 동일해야 한다.
- SELECT 절의 동일 위치에 존재하는 컬럼의 데이터 타입이 상호 호환 가능해야 한다.
- MySQL은 자동 형 변환이 일어나기 떄문에 동일하지 않아도 된다.
집합 연산자 종류
- MySQL 은 UNION만 사용 가능
연산자 | 설명 |
---|---|
UNION | 여러SQL문의 결과에 대한 합집합 (모든 중복된 행은 하나의 행으로 표시) |
UNION ALL | 여러 SQL문의 결과에 대한 합집합 (중복된 행도 그대로 결과로 표시) |
INTERSECT | 여러 SQL문의 결과에 대한 교집합 (모든 중복된 행은 하나의 행으로 표시) |
EXCEPT | 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합 (모든 중복된 행은 하나의 행으로 표시) |
UNION
- 테이블 A 결과와 테이블 B 결과를 합쳐서 하나의 테이블로 반환
- mariadb>select (A칼럼[,…]) from (테이블A) UNION SELECT (B칼럼[,…]) from (테이블B)
- 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);
- 테이블 A 결과와 테이블 B 결과를 합쳐서 하나의 테이블로 반환
- mariadb> select (A칼럼[,…]) from (테이블A) union select (B칼럼(,…) from (테이블 B);