English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL CROSS JOIN 문

이 튜토리얼에서는 SQL 교차 연결을 사용하여 두 테이블에서 데이터를 가져오는 방법을 배웁니다.

교차 연결 사용

두 테이블을 연결할 때 연결 조건을 지정하지 않으면, 데이터베이스 시스템은 첫 번째 테이블의 각 행을 두 번째 테이블의 각 행과 결합합니다. 이 연결은 교차 연결이나 카르테시안 곱으로 불립니다. 아래의 비엔(Venn)도는 교차 연결의 작동 방식을 설명합니다.

이를 쉽게 이해하기 위해 아래를 보도록 하겠습니다.employeesdepartments표.

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+
테이블: employees
테이블: departments

교차 연결의 행 수는 각 테이블의 행 수의 곱입니다. 이는 교차 연결 작업의 간단한 예제입니다。

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 CROSS JOIN departments AS t2;

힌트:교차 연결은 카르테시안 곱을 생성하거나 하나의 테이블의 모든 행을 다른 테이블의 모든 행과 곱합니다. 따라서 예를 들어, 하나의 테이블이5행이 있으며, 다른 테이블은10행이 있으면, 교차 연결 질의는50 행, 즉5과10의 곱입니다。

명령어를 실행한 후, 다음과 같은 결과 집합을 얻게 됩니다:

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|      1 | Ethan Hunt   | 2001-05-01 | Administration   |
|      2 | Tony Montana | 2002-07-15 | Administration   |
|      3 | Sarah Connor | 2005-10-18 | Administration   |
|      4 | Rick Deckard | 2007-01-03 | Administration   |
|      5 | Martin Blank | 2008-06-24 | Administration   |
|      1 | Ethan Hunt   | 2001-05-01 | Customer Service |
|      2 | Tony Montana | 2002-07-15 | Customer Service |
|      3 | Sarah Connor | 2005-10-18 | Customer Service |
|      4 | Rick Deckard | 2007-01-03 | Customer Service |
|      5 | Martin Blank | 2008-06-24 | Customer Service |
|      1 | Ethan Hunt   | 2001-05-01 | Finance          |
|      2 | Tony Montana | 2002-07-15 | Finance          |
|      3 | Sarah Connor | 2005-10-18 | Finance          |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      5 | Martin Blank | 2008-06-24 | Finance          |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      2 | Tony Montana | 2002-07-15 | Human Resources  |
|      3 | Sarah Connor | 2005-10-18 | Human Resources  |
|      4 | Rick Deckard | 2007-01-03 | Human Resources  |
|      5 | Martin Blank | 2008-06-24 | Human Resources  |
|      1 | Ethan Hunt   | 2001-05-01 | Sales            |
|      2 | Tony Montana | 2002-07-15 | Sales            |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      4 | Rick Deckard | 2007-01-03 | Sales            |
|      5 | Martin Blank | 2008-06-24 | Sales            |
+--------+--------------+------------+------------------+

정말 볼 수 있듯이, 십자 연결의 역할은 전장의 설명보다 덜합니다. 연결 조건이 쿼리에 지정되지 않았기 때문에, employees 테이블의 각 행이 departments 테이블의 각 행과 결합됩니다. 따라서笛卡尔 곱을 사용하려고 확신하지 않는 한 십자 연결을 사용하지 마세요.