SELECT A.name, B.toy
FROM my_table A
LEFT OUTER JOIN toys B
ON A.id = B.id;
// 왼쪽 외부 조인
// 왼쪽 테이블의 모든 행을 가지고 오른쪽 테이블 행과 비교
// 조건에 맞는 값이 오른쪽에 없으면 NULL값이 셀에 출력된다.
SELECT A.name, B.toy
FROM my_table A
RIGHT OUTER JOIN toys B
ON A.id = B.id;
// 오른쪽 외부 조인
SELECT A.name name, B.name boss
FROM clown_info1 A
INNER JOIN clown_info2 B
ON A.boss_id = B.id;
// 두 테이블의 데이터는 완벽히 같다, 즉 동일한 테이블 -> 셀프 조인
// 아래와 같다
SELECT A.name, B.name boss
FROM clown_info A
INNER JOIN clown_info B
ON A.boss_id = B.id;
// 이런식으로 하나의 테이블을 여러 별명으로 사용하여 구성 가능하다.
// 셀프 조인
두 개 이상의 테이블을 묶는 방법 유니온
SELECT name FROM my_table1
UNION
SELECT name FROM my_table2
UNION
SELECT name FROM my_table3;
// 모든 결과를 name열에 출력함.
// 모든 결과를 합치는 동작.
// 중복 데이터는 없다.
// 열의 개수는 같아야 한다.
// 위에서 한 개 이면 밑에도 동일해야 한다.
SELECT name FROM my_table1
UNION
SELECT name FROM my_table2
UNION
SELECT name FROM my_table3
ORDER BY name;
// 정렬은 마지막에 한번만 가능하다.
// 그 이유는 유니온이 모드 결과를 합치기 때문
SELECT name FROM my_table1
UNION ALL
SELECT name FROMy_table2
UNION ALL
SELECT name FROM my_table3;
// UNION ALL을 사용하면 중복된 값들도 전부 출력한다.
CREATE TABLE test_table
AS
SELECT profession FROM my_table
UNION
SELECT profession FROM pro_table;
// UNION을 이용하여 새 테이블 생성
SELECT name FROM my_table
INTERSECT
SELECT name FROM sub_table;
// 중복 부분만 반환
SELECT name FROM my_table
EXCEPT
SELECT name FROM sub_table;
// 두 번째 테이블에 없는 열을 반환
서브 쿼리와 조인의 변환 예제
SELECT B.last_name, B.first_name, A.profession
FROM my_table A
NATURAL JOIN sub_table B
WHERE A.profession IN ( SELECT profession FROM pro_table);
// A와 B테이블을 자연 조인하고
// A의 profession열과 pro_table의 항목이 일치하는 부분을 출력한다.
// 아래로 변경이 가능하다.
SELECT B.last_name, B.first_name, A.profession
FROM my_table A
NATURAL JOIN sub_table B
INNER JOIN pro_table C
ON A.profession = C.profession;
SELECT A.name AS name, B.name AS boss
FROM my_table A
INNER JOIN my_table B
ON A.boss_id = B.id;
//아래로 변경 가능
SELECT A.name name,
(SELECT name FROM my_table WHERE A.boss_id = id) AS boss
FROM my_table A;