-
[SQLite] 내부 조인(Inner Join)Software/SQLite 2018. 1. 13. 20:34반응형
이번에 알아 볼 내용은 조인 연산이다. 테이블 조인 연산은 말 그대로 2개 이상의 테이블을 하나로 연결해서 조회하는 방법으로 이를 통해 각 테이블에서 필요한 컬럼들을 가져와 하나의 결과셋을 얻을 수 있다.
이 때 어떻게 테이블을 연결시켜 주느냐에 따라 조인 연산의 종류가 달라지는데 주로 사용되는 조인 연산은 아래와 같다.
내부 조인(Inner Join),
자연 조인 (Natural Join),
외부 조인 (Outer Join),
자체 조인 (Self Join),
크로스 조인 (Cross Join)
그럼 지금 부터 예제를 통해 각 조인 연산에 대해서 알아보도록 하자.
- 내부 조인 (Inner Join)
내부 조인은 두 테이블을 연결하는 특정 조건을 만족하는 결과만 반화는 조인을 일컫는다.
내부 조인의 형식은 아래와 같다
SELECT [Table name].[Column name], ...
FROM [Table name] INNER JOIN [Table name]
ON [Join condition]
- FROM 절에 연결할 테이블 이름 작성
- INNER JOIN 키워드 이후 또 다른 테이블의 이름 작성
- ON 키워드 이후 조인 조건 지정
- SELECT 문의 조회 컬럼은 해당 컬럼의 테이블 이름이 명시적으로 보여질 수 있도록 완전한 형태로 작성 (이는 필수는 아니나 테이블 간 컬럼의 쉬운 구분을 위해 추천)
- 둘 이상의 테이블을 JOIN하고 싶은 경우 위 형식을 유지하면서 필요한 만큼 추가 지정하여 사용 가능
위의 방식을 통해 실제로 INNER JOIN을 실행해보도록 하겠다.
carBrand 테이블의 brand_id의 값과 cars 테이블의 brand_id의 값이 일치하는 Data의 name, price 그리고 brandName을 가져와 보도록 하겠다. 사실상 cars 테이블의 name, price 필드의 경우 carBrand 테이블에는 없는 필드 이므로 명시적으로 테이블의 이름을 붙일 필요는 없으나 조금 더 직관적이고 명확한 표현을 위해 모든 필드 값 앞에 해당 필드의 테이블 이름을 붙여 주었다.
sqlite> SELECT cars.name, cars.price, carBrand.brandName
...> FROM cars INNER JOIN carBrand
...> ON cars.brand_id = carBrand.brand_id;
name|price|brandName
Sonata|1500000|Hyundai
K5|1500000|Kia
K3|1200000|Kia
K7|2200000|Kia
만약 위의 쿼리 결과에 추가적으로 조건절을 추가하고 싶다면 Where절을 마지막에 추가해 주면 된다.
sqlite> SELECT cars.name, cars.price, carBrand.brandName
...> FROM cars INNER JOIN carBrand
...> ON cars.brand_id = carBrand.brand_id
...> WHERE carBrand.brandName = "Kia";
name|price|brandName
K5|1500000|Kia
K3|1200000|Kia
K7|2200000|Kia
사실 우리는 이러한 결과값을 INNER JOIN 키워드 없이도 단순 WHERE 조건절을 가지는 SELECT 문 형태로도 동일하게 얻어 낼 수 있다. FROM절에 INNER JOIN 키워드 대신 조회할 모든 테이블을 작성하고 WHERE절에 조인 조건을 작성하는 것이다.
sqlite> SELECT cars.name, cars.price, carBrand.brandName
...> FROM cars, carBrand
...> WHERE cars.brand_id = carBrand.brand_id;
name|price|brandName
Sonata|1500000|Hyundai
K5|1500000|Kia
K3|1200000|Kia
K7|2200000|Kia
그리고 이전과 동일하게 특정 조건절을 추가하고 싶다면 조인 조건과 더불어 AND 연산을 사용하여 조건을 추가하면 된다.
sqlite> SELECT cars.name, cars.price, carBrand.brandName
...> FROM cars, carBrand
...> WHERE cars.brand_id = carBrand.brand_id
...> AND carBrand.brandName = "Kia";
name|price|brandName
K5|1500000|Kia
K3|1200000|Kia
K7|2200000|Kia
반응형'Software > SQLite' 카테고리의 다른 글
[SQLite] 자연 조인(NATURAL JOIN) (0) 2018.01.20 [SQLite] 자체 조인 (SELF JOIN) (0) 2018.01.14 [SQLite] 중첩 질의 (Nested query) (0) 2017.11.27 [SQLite] 외래키 (Foreign Key) (0) 2017.10.15 [SQLite] 기본키 (Primary Key) (0) 2017.09.16 댓글