[MySQL] 관계형 쿼리

박준석·2024년 4월 20일

MySQL

목록 보기
5/6
post-thumbnail

관계형 쿼리

예를 들어 테이블이 두개가 있다. User 테이블과 Post 테이블이 있다. User 테이블은 유저의 정보를 가지고 있고 Post 테이블은 작성한 게시물을 가지고 있다.

그럼 작성한 게시물이 누가 작성한지 알아야 하는데 이것을 어떻게 알 수 있을까? 이 문제를 해결해주는 것이 관계형 쿼리이다. 먼저 관계형 쿼리를 알기 전에 Primary keyForeign Key를 알아야 한다.

Primary Key

데이터베이스 테이블 내의 모든 레코드에서 고유한 아이디를 제공하는 역할이다.

특징

  1. 모든 레코드가 서로 다른 값을 가지고 있어 각 레코드를 식별할 수 있다.(즉, 데이터를 구분하는 키이다.)
  2. 중복을 허용하지 않는다.
  3. Null 값을 허용하지 않는다.
  4. 테이블 당 하나만 존재한다.

Foreign key(외래 키)

데이터가 일관될 수 있도록 돕는 역할을 한다. 보통은 두 개의 데이터베이스 테이블을 잇고자 기본 키와 함께 사용된다. 일종의 테이블을 연결하는 가상의 다리 역할을 한다.

특징

  1. 다른 테이블의 PK를 참조

그렇다면 이 Key를 이용해서 어떻게 관계형 쿼리를 사용할 수 있을지 알아보자.

  • User 테이블

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

  • Post 테이블

위 그림은 Post테이블이다. UserIdMUL이라는 Foreign Key를 가지고 있는 것을 볼 수 있다.

그럼 이 두 테이블이 관계를 맺기 위해서는 Join이라는 쿼리문이 필요하다.

Join

Join은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. 크게 3가지로 나뉜다.

  • Inner Join
  • Left Join
  • Right Join

Inner Join

두 테이블을 연결할 때 가장 많이 사용하는 것이 내부 조인이다. 그냥 조인이라고 부르면 내부 조인을 의미한다.

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을 사용하면 두 테이블이 관계를 맺고 하나의 데이터로 조회가 가능하다.

Left 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

Right Join

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

profile
느리지만 탄탄한 개발자 1명 빠른 개발자 10명 안부럽다.

0개의 댓글