1) CREATE
데이터베이스를 만든 뒤 해당 데이터베이스를 선택하고 테이블을 만들었다.
테이블마다 NO를 정수형으로 선언하고 NAME을 문자로 선언했다.
create database mytest;
use mytest;
create table academy_b (
no int primary key,
name varchar(20));
create table academy_a (
no int primary key,
name varchar(20));
create table academy_c (
no int primary key,
name varchar(20));
2) INSERT
각각 테이블에 형식에 맞는 값을 넣어주었다.
NO와 NAME 두 가지밖에 없으므로 VALUES에 모두(2개) 입력을 하면 어디에 어느 값을 넣을 것인지 INTO 뒤에 작성하지 않아도 된다.
insert into academy_a values(1001, '정소화');
insert into academy_a values(1002, '김용욱');
insert into academy_a values(1003, '고명석');
insert into academy_a values(1004, '김연아');
insert into academy_b values(1003, '고명석');
insert into academy_b values(1004, '김연아');
insert into academy_b values(1005, '김태환');
insert into academy_b values(1006, '이윤아');
insert into academy_c values(2001, '정소화');
insert into academy_c values(2002, '김용욱');
insert into academy_c values(2003, '고명석');
3) JOIN
JOIN을 하게되면 공통인 부분을 출력할 수 있다.
LEFT JOIN을 하면 왼쪽에 있는 데이터는 모두 출력되며 오른쪽에 있는 데이터는 교집합에 해당하는 데이터만 출력된다.
나머지는 NULL 처리.
RIGHT는 반대, INNER는 완전 교집합만 출력된다.
select *
from academy_a t1
left join academy_b t2
on t1.no = t2.no;
select *
from academy_a t1
right join academy_b t2
on t1.no = t2.no;
select *
from academy_a t1
inner join academy_b t2
on t1.no = t2.no;
4) UNION
UNION을 하게되면 두 테이블을 합쳐 출력한다.
UNION : 중복 제거
UNION ALL : 중복 표시
select *
from academy_a
union all
select *
from academy_b;
select *
from academy_a
union
select *
from academy_b;
5) 서브쿼리
첫번째 조건으로 출력하게 되면 T1의 NO와 T2의 NAME이 출력되는데 조건으로 T2.NO와 T1.NO가 같은 NAME만 출력되게 된다.
두 번째 조건은 모두 출력하는 대신 academy_b테이블에서 NO가 1003 또는 1004인 이름을 출력한다.
select t1.no,
(select t2.name
from academy_b t2
where t2.no = t1.no) as name
from academy_a t1;
select *
from academy_a
where name in (
select name
from academy_b
where no = 1003 or no = 1004);