JOIN을 사용하여 두 개 이상의 Table을 서로 묶어 하나의 테이블을 만드는 방법에 대해 알아보자.


INNER JOIN

  • 두 테이블에서 일치하는 데이터만 결과 출력
SELECT <열목록>
FROM <첫 번째 테이블>
		INNER JOIN <두 번째 테이블>
		ON <조인될 조건>

INNER JOIN 예제

  1. JOIN 할 테이블 만들기 - articles, users
-- articles 테이블 만들기
CREATE TABLE articles (
    title TEXT NOT NULL,
    content TEXT NOT NULL,
    userid INTEGER NOT NULL
);

INSERT INTO articles
VALUES
    ('대부', '대부내용이다', 1),
    ('행복', '행복내용이다', 2),
    ('극한직업', '극한직업내용이다', 3),
    ('타이타닉', '디카프리오', 7),
    ('엄복동', '자전차왕의 일대기', 2);

-- users 테이블 만들기
CREATE TABLE users (
    name TEXT NOT NULL,
    roleid TEXT NOT NULL
);

INSERT INTO users
VALUES
    ('kevin', 1),
    ('aiden', 3),
    ('jorny', 3),
    ('bob', 2),
    ('kate', 1);
  • articles 테이블
  • users 테이블
  1. userid를 기준으로 INNER JOIN 하기
  • articles.userid와 users.rowid를 연결할 수 없는 항목은 누락됨
    • 누락되지 않으려면? LEFT JOIN 사용
SELECT * FROM articles INNER JOIN users ON userid=users.rowid;

-- 아래 방법도 가능하지만 권장하지는 않음
SELECT * FROM articles, users 
WHERE articles.userid=users.rowid;


LEFT JOIN

  • 왼쪽 테이블의 데이터를 기준으로 오른쪽 데이터 결합
  • 일치하는 항목 없을 경우 해당 항목 NULL 값으로 채움
SELECT <열목록>
FROM <첫 번째 테이블(LEFT 테이블)>
		LEFT <두 번쨰 테이블(RIGHT 테이블)>
		ON <조인될 조건>
[WHERE 검색 조건 추가];

LEFT JOIN 예제

  • 누락되는 데이터 없이 join 완성 가능
    • JOIN 불가능할경우 해당 항목 NULL 값으로 채움
SELECT * FROM articles LEFT JOIN users ON userid=users.rowid;


RIGHT JOIN

  • LEFT JOIN과 반대
  • sqlite에서는 지원하지 않음
SELECT * FROM articles RIGHT JOIN users ON userId=users.rowId;

CROSS JOIN

  1. JOIN할 테이블 만들고 데이터 삽입하기 - products, colors
-- products 테이블 만들기
CREATE TABLE products (
    name TEXT NOT NULL,
    p_id INTEGER NOT NULL
);

INSERT INTO products
VALUES
    ('책상', 1),
    ('의자', 2),
    ('컴퓨터', 3);

-- colors 테이블 만들기
CREATE TABLE colors (
    name TEXT NOT NULL,
    c_id INTEGER NOT NULL
);

INSERT INTO colors
VALUES
    ('red', 1),
    ('blue', 2),
    ('white', 3);
  1. CROSS JOIN - 모든 조합 출력하기
SELECT * FROM products CROSS JOIN colors;


📍 요약

-- INNER JOIN
-- 두 테이블에서 일치하는 데이터만 결과 출력
SELECT * FROM articles INNER JOIN users ON userid=users.rowid;
-- 아래 방법도 가능하지만 권장하지는 않음
SELECT * FROM articles, users 
WHERE articles.userid=users.rowid;

-- LEFT JOIN
-- 왼쪽 테이블의 데이터를 기준으로 오른쪽 데이터 결합
-- 일치하는 항목 없을 경우 해당 항목 NULL 값으로 채움 
SELECT * FROM articles LEFT JOIN users ON userid=users.rowid;

-- RIGHT JOIN
-- LEFT의 반대, SQLite 에서는 지원하지 않음
SELECT * FROM articles RIGHT JOIN users ON userId=users.rowId;

-- CROSS JOIN
-- 모든 조합 출력
SELECT * FROM products CROSS JOIN colors;
profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글

Powered by GraphCDN, the GraphQL CDN