예를 들어 테이블이 두개가 있다. User 테이블과 Post 테이블이 있다. User 테이블은 유저의 정보를 가지고 있고 Post 테이블은 작성한 게시물을 가지고 있다.
그럼 작성한 게시물이 누가 작성한지 알아야 하는데 이것을 어떻게 알 수 있을까? 이 문제를 해결해주는 것이 관계형 쿼리이다. 먼저 관계형 쿼리를 알기 전에 Primary key와 Foreign Key를 알아야 한다.
Primary Key
데이터베이스 테이블 내의 모든 레코드에서 고유한 아이디를 제공하는 역할이다.
특징
- 모든 레코드가 서로 다른 값을 가지고 있어 각 레코드를 식별할 수 있다.(즉, 데이터를 구분하는 키이다.)
- 중복을 허용하지 않는다.
Null값을 허용하지 않는다.- 테이블 당 하나만 존재한다.
Foreign key(외래 키)
데이터가 일관될 수 있도록 돕는 역할을 한다. 보통은 두 개의 데이터베이스 테이블을 잇고자 기본 키와 함께 사용된다. 일종의 테이블을 연결하는 가상의 다리 역할을 한다.
특징
- 다른 테이블의 PK를 참조
그렇다면 이 Key를 이용해서 어떻게 관계형 쿼리를 사용할 수 있을지 알아보자.

위 그림은 User 테이블에 DBeaver를 사용해 테이블안에 데이터를 넣은 것이다. id컬럼이 Primary Key를 가지고 있는 것을 볼 수 있다.

위 그림은 Post테이블이다. UserId에 MUL이라는 Foreign Key를 가지고 있는 것을 볼 수 있다.
그럼 이 두 테이블이 관계를 맺기 위해서는 Join이라는 쿼리문이 필요하다.
Join은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. 크게 3가지로 나뉜다.
두 테이블을 연결할 때 가장 많이 사용하는 것이 내부 조인이다. 그냥 조인이라고 부르면 내부 조인을 의미한다.

SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인 조건>
[WHERE 검색 조건]
SELECT u.id, u.name,
p.id as postId, p.title, p.content
From User AS u
Join Post AS p
on u.id = p.userid

위와 같이 Join을 사용하면 두 테이블이 관계를 맺고 하나의 데이터로 조회가 가능하다.
Join한 테이블에 왼쪽에 있는 데이터를 다 불러 오는 것이다. 즉, 쿼리와 관련이 없이 왼쪽에 있는 데이터를 다 불러온다는 것이다.
SELECT u.id, u.name,
p.id as postId, p.title, p.content
From User AS u
Left Join Post AS p
on u.id = p.userid

Join한 테이블에 오른쪽에 있는 데이터를 다 불러 오는 것이다. 즉, 쿼리와 관련이 없이 오른쪽에 있는 데이터를 다 불러온다는 것이다.
SELECT u.id, u.name,
p.id as postId, p.title, p.content
From User AS u
Right Join Post AS p
on u.id = p.userid
