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 |
+----+----------+---------+