HSQLDB-조인

단일 쿼리를 사용하여 여러 테이블에서 데이터를 검색해야 할 때마다 RDBMS에서 JOINS를 사용할 수 있습니다. 단일 SQL 쿼리에서 여러 테이블을 사용할 수 있습니다. HSQLDB에서 조인하는 행위는 두 개 이상의 테이블을 단일 테이블로 스매싱하는 것을 의미합니다.

다음 고객 및 주문 테이블을 고려하십시오.

Customer:
+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad |  2000.00 |
| 2  |  Khilan  | 25  |   Delhi   |  1500.00 |
| 3  |  kaushik | 23  |   Kota    |  2000.00 |
| 4  | Chaitali | 25  |   Mumbai  |  6500.00 |
| 5  |  Hardik  | 27  |   Bhopal  |  8500.00 |
| 6  |  Komal   | 22  |    MP     |  4500.00 |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
Orders:
+-----+---------------------+-------------+--------+
|OID  |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      |  3000  |
| 100 | 2009-10-08 00:00:00 |      3      |  1500  |
| 101 | 2009-11-20 00:00:00 |      2      |  1560  |
| 103 | 2008-05-20 00:00:00 |      4      |  2060  |
+-----+---------------------+-------------+--------+

이제 고객 데이터와 각 고객이 주문한 금액을 검색해 보겠습니다. 이는 고객과 주문 테이블 모두에서 레코드 데이터를 검색하고 있음을 의미합니다. HSQLDB에서 JOINS 개념을 사용하여이를 달성 할 수 있습니다. 다음은 동일한 JOIN 쿼리입니다.

SELECT ID, NAME, AGE, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.ID =
ORDERS.CUSTOMER_ID;

위 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.

+----+----------+-----+--------+
| ID |   NAME   | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |  3000  |
|  3 | kaushik  |  23 |  1500  |
|  2 | Khilan   |  25 |  1560  |
|  4 | Chaitali |  25 |  2060  |
+----+----------+-----+--------+

JOIN 유형

HSQLDB에서 사용할 수있는 여러 유형의 조인이 있습니다.

  • INNER JOIN − 두 테이블에 일치하는 항목이 있으면 행을 반환합니다.

  • LEFT JOIN − 오른쪽 테이블에 일치하는 항목이없는 경우에도 왼쪽 테이블의 모든 행을 반환합니다.

  • RIGHT JOIN − 왼쪽 테이블에 일치하는 항목이없는 경우에도 오른쪽 테이블의 모든 행을 반환합니다.

  • FULL JOIN − 테이블 중 하나에 일치하는 항목이 있으면 행을 반환합니다.

  • SELF JOIN − 테이블이 두 개의 테이블 인 것처럼 테이블을 자신에 결합하는 데 사용되며 SQL 문에서 하나 이상의 테이블 이름을 일시적으로 변경합니다.

내부 조인

가장 자주 사용하고 중요한 조인은 INNER JOIN입니다. EQUIJOIN이라고도합니다.

INNER JOIN은 join-predicate를 기반으로 두 테이블 (table1 및 table2)의 열 값을 결합하여 새 결과 테이블을 만듭니다. 쿼리는 table1의 각 행을 table2의 각 행과 비교하여 join-predicate를 충족하는 모든 행 쌍을 찾습니다. join-predicate가 충족되면 일치하는 각 행 A 및 B 쌍의 열 값이 결과 행으로 결합됩니다.

통사론

INNER JOIN의 기본 구문은 다음과 같습니다.

SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

다음 두 테이블을 고려하십시오. 하나는 CUSTOMERS 테이블이고 다른 하나는 다음과 같이 ORDERS 테이블입니다.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  | SALARY   |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad | 2000.00  |
| 2  |  Khilan  | 25  |   Delhi   | 1500.00  |
| 3  |  kaushik | 23  |   Kota    | 2000.00  |
| 4  | Chaitali | 25  |   Mumbai  | 6500.00  |
| 5  |  Hardik  | 27  |   Bhopal  | 8500.00  |
| 6  |  Komal   | 22  |     MP    | 4500.00  |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      | 3000   |
| 100 | 2009-10-08 00:00:00 |      3      | 1500   |
| 101 | 2009-11-20 00:00:00 |      2      | 1560   |
| 103 | 2008-05-20 00:00:00 |      4      | 2060   |
+-----+---------------------+-------------+--------+

이제 다음과 같이 INNER JOIN 쿼리를 사용하여이 두 테이블을 조인하겠습니다.

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

위 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.

+----+----------+--------+---------------------+
| ID |   NAME   | AMOUNT |         DATE        |
+----+----------+--------+---------------------+
| 3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
| 3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
| 2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
| 4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+

왼쪽 조인

HSQLDB LEFT JOIN은 오른쪽 테이블에 일치하는 항목이없는 경우에도 왼쪽 테이블의 모든 행을 반환합니다. 즉, ON 절이 오른쪽 테이블의 0 (영) 레코드와 일치하는 경우 조인은 결과에 여전히 행을 반환하지만 오른쪽 테이블의 각 열에는 NULL이 있습니다.

즉, 왼쪽 조인은 왼쪽 테이블의 모든 값과 오른쪽 테이블의 일치 된 값을 반환하거나 일치하는 조인 조건자가없는 경우 NULL을 반환합니다.

통사론

LEFT JOIN의 기본 구문은 다음과 같습니다.

SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

여기서 주어진 조건은 요구 사항에 따라 주어진 표현식이 될 수 있습니다.

다음 두 테이블을 고려하십시오. 하나는 CUSTOMERS 테이블이고 다른 하나는 다음과 같이 ORDERS 테이블입니다.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  | SALARY   |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad | 2000.00  |
| 2  |  Khilan  | 25  |   Delhi   | 1500.00  |
| 3  |  kaushik | 23  |   Kota    | 2000.00  |
| 4  | Chaitali | 25  |   Mumbai  | 6500.00  |
| 5  |  Hardik  | 27  |   Bhopal  | 8500.00  |
| 6  |  Komal   | 22  |    MP     | 4500.00  |
| 7  |  Muffy   | 24  |  Indore   | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |        DATE         | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |     3       | 3000   |
| 100 | 2009-10-08 00:00:00 |     3       | 1500   |
| 101 | 2009-11-20 00:00:00 |     2       | 1560   |
| 103 | 2008-05-20 00:00:00 |     4       | 2060   |
+-----+---------------------+-------------+--------+

이제 다음과 같이 LEFT JOIN 쿼리를 사용하여이 두 테이블을 조인하겠습니다.

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

위의 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.

+----+----------+--------+---------------------+
| ID |   NAME   | AMOUNT |         DATE        |
+----+----------+--------+---------------------+
|  1 |  Ramesh  |  NULL  |        NULL         |
|  2 |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|  3 |  kaushik |  3000  | 2009-10-08 00:00:00 |
|  3 |  kaushik |  1500  | 2009-10-08 00:00:00 |
|  4 | Chaitali |  2060  | 2008-05-20 00:00:00 |
|  5 |  Hardik  |  NULL  |        NULL         |
|  6 |  Komal   |  NULL  |        NULL         |
|  7 |  Muffy   |  NULL  |        NULL         |
+----+----------+--------+---------------------+

오른쪽 조인

HSQLDB RIGHT JOIN은 왼쪽 테이블에 일치하는 항목이없는 경우에도 오른쪽 테이블의 모든 행을 반환합니다. 즉, ON 절이 왼쪽 테이블의 0 (영) 레코드와 일치하는 경우 조인은 결과에 계속 행을 반환하지만 왼쪽 테이블의 각 열에는 NULL이 포함됩니다.

즉, 오른쪽 조인은 오른쪽 테이블의 모든 값과 왼쪽 테이블의 일치 값을 반환하거나 일치하는 조인 조건자가없는 경우 NULL을 반환합니다.

통사론

기본 구문 RIGHT JOIN 다음과 같습니다-

SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

다음 두 테이블을 고려하십시오. 하나는 CUSTOMERS 테이블이고 다른 하나는 다음과 같이 ORDERS 테이블입니다.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad |  2000.00 |
| 2  |  Khilan  | 25  |   Delhi   |  1500.00 |
| 3  |  kaushik | 23  |   Kota    |  2000.00 |
| 4  | Chaitali | 25  |   Mumbai  |  6500.00 |
| 5  |  Hardik  | 27  |   Bhopal  |  8500.00 |
| 6  |  Komal   | 22  |     MP    |  4500.00 |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |       DATE          | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      |  3000  |
| 100 | 2009-10-08 00:00:00 |      3      |  1500  |
| 101 | 2009-11-20 00:00:00 |      2      |  1560  |
| 103 | 2008-05-20 00:00:00 |      4      |  2060  |
+-----+---------------------+-------------+--------+

이제 다음과 같이 RIGHT JOIN 쿼리를 사용하여이 두 테이블을 조인하겠습니다.

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

위 쿼리를 실행하면 다음과 같은 결과를 받게됩니다.

+------+----------+--------+---------------------+
|  ID  |   NAME   | AMOUNT |        DATE         |
+------+----------+--------+---------------------+
|  3   |  kaushik |  3000  | 2009-10-08 00:00:00 |
|  3   |  kaushik |  1500  | 2009-10-08 00:00:00 |
|  2   |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|  4   | Chaitali |  2060  | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

완전 가입

HSQLDB FULL JOIN은 왼쪽 및 오른쪽 외부 조인의 결과를 결합합니다.

조인 된 테이블은 두 테이블의 모든 레코드를 포함하고 양쪽에서 누락 된 일치 항목에 대해 NULL을 채 웁니다.

통사론

FULL JOIN의 기본 구문은 다음과 같습니다.

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

여기서 주어진 조건은 요구 사항에 따라 주어진 표현식이 될 수 있습니다.

다음 두 테이블을 고려하십시오. 하나는 CUSTOMERS 테이블이고 다른 하나는 다음과 같이 ORDERS 테이블입니다.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  | 32  | Ahmedabad | 2000.00  |
|  2 |  Khilan  | 25  |   Delhi   | 1500.00  |
|  3 |  kaushik | 23  |   Kota    | 2000.00  |
|  4 | Chaitali | 25  |   Mumbai  | 6500.00  |
|  5 |  Hardik  | 27  |   Bhopal  | 8500.00  |
|  6 |  Komal   | 22  |   MP      | 4500.00  |
|  7 |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |    3        | 3000   |
| 100 | 2009-10-08 00:00:00 |    3        | 1500   |
| 101 | 2009-11-20 00:00:00 |    2        | 1560   |
| 103 | 2008-05-20 00:00:00 |    4        | 2060   |
+-----+---------------------+-------------+--------+

이제 다음과 같이 FULL JOIN 쿼리를 사용하여이 두 테이블을 조인하겠습니다.

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

위 쿼리를 실행하면 다음과 같은 결과를 받게됩니다.

+------+----------+--------+---------------------+
|  ID  |    NAME  | AMOUNT |        DATE         |
+------+----------+--------+---------------------+
|   1  |  Ramesh  |  NULL  |        NULL         |
|   2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|   3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
|   3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
|   4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
|   5  |  Hardik  |  NULL  |        NULL         |
|   6  |   Komal  |  NULL  |        NULL         |
|   7  |   Muffy  |  NULL  |        NULL         |
|   3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
|   3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
|   2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|   4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

셀프 조인

SQL SELF JOIN은 테이블이 두 테이블 인 것처럼 테이블을 자신에 조인하는 데 사용되며 SQL 문에서 하나 이상의 테이블 이름을 일시적으로 변경합니다.

통사론

SELF JOIN의 기본 구문은 다음과 같습니다.

SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;

여기서 WHERE 절은 요구 사항에 따라 주어진 표현식이 될 수 있습니다.

다음 두 테이블을 고려하십시오. 하나는 CUSTOMERS 테이블이고 다른 하나는 다음과 같이 ORDERS 테이블입니다.

+----+----------+-----+-----------+----------+
| ID |    NAME  | AGE |   ADDRESS |   SALARY |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad | 2000.00  |
|  2 |  Khilan  |  25 |   Delhi   | 1500.00  |
|  3 |  kaushik |  23 |   Kota    | 2000.00  |
|  4 | Chaitali |  25 |   Mumbai  | 6500.00  |
|  5 |  Hardik  |  27 |   Bhopal  | 8500.00  |
|  6 |  Komal   |  22 |   MP      | 4500.00  |
|  7 |  Muffy   |  24 |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+

이제 다음과 같이 SELF JOIN 쿼리를 사용하여이 테이블을 조인하겠습니다.

SELECT a.ID, b.NAME, a.SALARY FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY > b.SALARY;

위의 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.

+----+----------+---------+
| ID |   NAME   | SALARY  |
+----+----------+---------+
| 2  |  Ramesh  | 1500.00 |
| 2  |  kaushik | 1500.00 |
| 1  | Chaitali | 2000.00 |
| 2  | Chaitali | 1500.00 |
| 3  | Chaitali | 2000.00 |
| 6  | Chaitali | 4500.00 |
| 1  |  Hardik  | 2000.00 |
| 2  |  Hardik  | 1500.00 |
| 3  |  Hardik  | 2000.00 |
| 4  |  Hardik  | 6500.00 |
| 6  |  Hardik  | 4500.00 |
| 1  |  Komal   | 2000.00 |
| 2  |  Komal   | 1500.00 |
| 3  |  Komal   | 2000.00 |
| 1  |  Muffy   | 2000.00 |
| 2  |  Muffy   | 1500.00 |
| 3  |  Muffy   | 2000.00 |
| 4  |  Muffy   | 6500.00 |
| 5  |  Muffy   | 8500.00 |
| 6  |  Muffy   | 4500.00 |
+----+----------+---------+