ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. JOIN _ CROSS JOIN, SELF JOIN, EQUI JOIN
    SQL/sql 문법(mysql, mariaDB) 2024. 5. 4. 09:12

    ▤ 목차

       

       한 개 이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는 방법이다.

       JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이라고 할 수 있다.

       일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다.

       

      2개의 테이블이 존재할 때, 공통된 열을 통해 2개의 테이블을 합치는 것을 말한다.

         JOIN의 종류

      • CROSS JOIN
      • SELF JOIN
      • EQUI JOIN
      • INNER JOIN
      • OUTER JOIN

      ✔ cross join

      두 개의 테이블 사이에 모든 가능한 조합을 만들어낸다.

      💻 코드로 보기

      SELECT jikwon_name, buser_name FROM jikwon,buser;
      
      SELECT jikwon_name, buser_name FROM jikwon cross join buser;

      👏 정리

      위의 쿼리와 아래쪽 쿼리가 같은 쿼리문이다.

      아래는 명시적으로 적어준 것이다.

      카테시안 곱이 발생한다.

       

      A 테이블의 행이 10개이고 B 테이블의 행이 10개라면

      A 테이블 cross join B 테이블의 결과는 100개의 행이 나올 것이다.

       

      많은 데이터를 생성하기 때문에 다른 조인 유형을 선호한다.

      ✔self join

      스스로 JOIN이 될 수 있다. SELF JOIN은 CROSS JOIN 중 하나이다.

      JOIN을 말할때 한 개 이상의 테이블이 존재하면 JOIN이 가능하다고 했다.

      같은 테이블이 조인될 수 있기 때문이다.

      셀프 조인은 테이블의 이름을 꼭 지정해줘야 한다. (별칭을 사용할 수 있다.)

      똑같은 데이터가 있는 테이블이 2개이기에 SQL은 어떤 데이터를 가져와야 하는지 인식하지 못하기 때문이다.

      💻 코드로 보기

      SELECT a.jikwon_name, b.jikwon_name FROM jikwon a INNER JOIN jikwon b;

      🔸똑같은 테이블 조인?

      데이터를 가지고 있는데 왜 자신의 테이블을 JOIN하는 것일까?

      그 이유는 원본 테이블이 있고 그 테이블의 데이터를 복사해서 생성할 수 있기 때문이다.

      자신과 같은 테이블의 일정 부분을 가공해서 원래 테이블에 합쳐 구성을 할 수 있기 때문이다.

       


      ✔ EQUI join

      join 조건식에 ' = ' 연산자를 사용한다.

      💻 코드로 보기

      SELECT jikwon_name, buser_name FROM jikwon, buser WHERE jikwon.buser_num = buser.buser_no;

      👏 

      ✔ Non-Equi join

      Join은 JOIN조건을 = 연산자 이외의 비교(관계) 연산자를 사용하는 것을 말한다.

       

      해당 연산을 보기 위해서는 테이블을 하나 더 생성해야 한다.

      CREATE TABLE paygrade(grade INt PRIMARY KEY, lpay INT, hpay INT);
      INSERT INTO paygrade VALUES (1, 0,1999);
      INSERT INTO paygrade VALUES (2, 2000,2999);
      INSERT INTO paygrade VALUES (3, 3000,3999);
      INSERT INTO paygrade VALUES (4, 4000,4999);
      INSERT INTO paygrade VALUES (5, 5000,9999);
      SELECT * FROM paygrade;

       

      💻 사용하기

      SELECT jiktab.jikwon_name,jiktab.jikwon_pay,paytab.grade
      FROM jikwon as jiktab, paygrade as paytab
      WHERE jiktab.jikwon_pay >= paytab.lpay AND
      jiktab.jikwon_pay<= paytab.hpay;

       

      👏 정리

      = 이외의 비교 연산자 (Between, >, >=, <, <= 등)를 사용한다.

      😊정리

      SELF JOIN의 사용은 한 행에 있는 값을 같은 행에 있는 다른 값과 비교해야 할 때 사용한다.[SQL을 굉장히 잘 정리해 놓은 블로그이다. 참고하기 좋다.]

      https://kimsyoung.tistory.com/entry/SELF-JOIN-%E4%B8%8B-%EC%85%80%ED%94%84-%EC%A1%B0%EC%9D%B8%EC%9D%98-%EC%9A%A9%EB%A1%80?category=822739

       

      SELF JOIN (下) : 셀프 조인의 용례

      이전 글인 SELF JOIN (上) : 같은 테이블을 조인하기 에서는 셀프 조인의 기본적인 개념에 관해 살펴보았습니다. 셀프 조인은 같은 테이블 내의 데이터를 조인합니다. 즉, 하나의 테이블이 자기 자

      kimsyoung.tistory.com

       

       

      두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에는 EQUI JOIN을 사용할 수 없다.

      EQUI JOIN보다 더 많이 사용하는 INNER JOIN이 있다.

      왜 EQUI JOIN보다 더 많이 사용하는가?

      INNER JOIN으로 이루어진 코드는 EQUI JOIN보다  가독성이 더 높으며

      OUTER JOIN으로 수정이 가능하다.

       

      다음에는 INNER JOINOUTER JOIN를 정리해 보겠다.

    Designed by Tistory.