Запутался во вложенных таблицах в Oracle SQL

#sql #oracle #nested-table

#sql #Oracle #вложенная таблица

Вопрос:

Я прикрепил изображение с SQL-запросами, которые упоминаются в документации Oracle по вложенным таблицам и как получить доступ к записям из таблиц. Но я не могу понять используемые там операторы SELECT. Может кто-нибудь объяснить мне фактическое значение используемого там запроса SELECT?Скриншот документации Oracle SQL по вложенным таблицам

Создайте таблицу с ВЛОЖЕННЫМ столбцом ТАБЛИЦЫ,

 CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
/
CREATE TABLE nested_table (id NUMBER, col1 my_tab_t)
NESTED TABLE col1 STORE AS col1_tab;
  

Вставка данных в таблицу,

 INSERT INTO nested_table VALUES (1, my_tab_t('A'));
INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C'));
INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F'));
COMMIT;
  

SQL-запрос, который я не смог получить,

 SELECT id, COLUMN_VALUE FROM nested_table t1, TABLE(t1.col1) t2;
  

Результат отображается как,

     ID COLUMN_VALUE
  

      1 A
     2 B
     2 C
     3 D
     3 E
     3 F
  

Выделено 6 строк.

Ответ №1:

Синтаксис FROM nested_table t1, TABLE(t1.col1) t2 — это старый синтаксис Oracle для ПЕРЕКРЕСТНОГО СОЕДИНЕНИЯ, вы не должны использовать его в настоящее время. Лучше написать

 FROM nested_table t1 
   CROSS JOIN TABLE(t1.col1) t2
  

ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ означает, что вы объединяете каждую строку from t1 с каждой строкой from t2 . Вы должны найти много объяснений в Интернете.