Всякий раз, когда требуется извлечь данные из нескольких таблиц, используя один запрос, вы можете использовать JOINS из RDBMS. Вы можете использовать несколько таблиц в одном запросе 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 | +-----+---------------------+-------------+--------+
Теперь давайте попробуем получить данные о клиентах и сумму заказа, которую разместил соответствующий клиент. Это означает, что мы извлекаем данные записей из таблицы клиентов и заказов. Мы можем достичь этого, используя концепцию JOINS в HSQLDB. Ниже приведен запрос 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 — возвращает строки, если в обеих таблицах есть совпадения.
LEFT JOIN — возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.
RIGHT JOIN — возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.
FULL JOIN — возвращает строки, если в одной из таблиц есть совпадение.
SELF JOIN — используется для присоединения таблицы к себе, как если бы эта таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в операторе SQL.
Внутреннее соединение
Наиболее часто используемым и важным соединением является ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Это также упоминается как EQUIJOIN.
INNER JOIN создает новую таблицу результатов, комбинируя значения столбцов двух таблиц (table1 и table2) на основе предиката соединения. Запрос сравнивает каждую строку таблицы table1 с каждой строкой таблицы table2, чтобы найти все пары строк, которые удовлетворяют предикату соединения. Когда предикат соединения удовлетворяется, значения столбцов для каждой соответствующей пары строк 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 объединяет результаты как левого, так и правого внешних объединений.
Объединенная таблица будет содержать все записи из обеих таблиц и заполнять пустые значения для пропущенных совпадений с обеих сторон.
Синтаксис
Основной синтаксис 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;
После выполнения вышеуказанного запроса вы получите следующий вывод: