My SQL (4) - TCP SCHOOL

bin1225·2022년 1월 3일
0

DATABASE

목록 보기
6/19

JOIN

JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여, 하나의 테이블로 표현해준다. 주로 SELECT 문과 함께 사용된다.

INNER JOIN


INNER JOIN 은 첫 번째 테이블과 두 번째 테이블의 공통되는 데이터들을 모두 가져온다. 즉, 조건을 만족한는 레코드를 전부 가져온다.

1. 첫번째테이블이름

INNER JOIN 두번째테이블이름

ON 조건

2. 첫번째테이블이름

JOIN 두번째테이블이름

ON 조건
  • 예시
SELECT * FROM Reservation
INNER JOIN Customer
ON Reservation.Name= Customer.Name;
// 기본 sql 문법

SELECT * FROM Reservation,Customer
WHERE Reservation.Name = Customer.Name;
// MySQL 문법

SELECT * FROM Reservation AS r, Customer AS c
WHERE r.Name = c.Name;
// 별칭 사용 간략화

LEFT JOIN

LEFT JOIN은 첫 번째 테이블을 기준으로 두 번째 테이블을 조합한다.
즉 첫 번째 테이블은 모두 가져오고, 두 번째 테이블은 조건에 맞는 필드값만 가져오며 나머지는 NULL로 표시된다.

사용방법은 INNER JOIN과 동일하다.

  • 실행화면

RIGHT JOIN

LEFT JOIN의 반대, 두 번째 테이블이 기준이 된다.

UNION

UNION은 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용한다.

이때 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 한다.

SELECT 필드이름

FROM 테이블이름

UNION

SELECT 필드이름

FROM 테이블이름

UNION은 자동으로 중복되는 데이터를 제외하는데, 이를 방지하고 싶다면 UNION ALL을 대신 사용한다.

서브쿼리

서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다.

EX)

SELECT ID, ReserveDate, RoomNum

   FROM Reservation

② WHERE Name IN (SELECT Name

                  FROM Customer

                  WHERE Address = '서울')

이렇게 WHERE 문이나 FROM 문 안에 서브쿼리를 삽입해서 조건을 설정할 수 있다.

  • 서브쿼리의 특징

    - 쿼리를 구조화시키므로, 쿼리가 명확해진다.
    - JOIN이나 UNION보다 읽기가 쉽다.

FROM 절의 서브쿼리

SELECT ...

FROM (서브쿼리) [AS] 이름

...

SELECT 문의 FROM 절에서 사용되는 모든 테이블에는 이름이 필요합니다.

따라서 FROM 절에서 사용되는 서브쿼리는 위의 문법처럼 반드시 이름을 정의해야 합니다.

EX)

 SELECT Name, ReservedRoom

 FROM (SELECT Name, ReserveDate, (RoomNum + 1) AS ReservedRoom

         FROM Reservation

       WHERE RoomNum > 1001) AS ReservationInfo;

설명

먼저 FROM 문 안에 있는 서브쿼리가 먼저 실행된다.
RoomNum+1 이라는 값에 ReservedRoom이라는 별칭을 부여한다.
Reservation에서 RoomNum>1001을 만족하는 값들을 가져와서 Name, ReserveDate, ReservedRoom 값을 추출한다.
이렇게 추출된 데이터의 집합에 ReservationInfo라는 별칭을 부여하고,
ReservationInfo로부터 Name과 ReservedRoom 데이터를 출력한다.

0개의 댓글