Соединение таблиц в Oracle. Типы соединений Inner,left,right,outer join.

  1. -- Типы соединений. Примеры построены на виртиальных таблицах. Для демонстрации физически таблицы создавать не надо.
  2.  
  3. -- #cc66cc;">1. Внутреннее соединение таблиц А inner join B.
  4. -- Запрос вернет строки по которым есть соответствие по ключу в A и B. (возвратит #cc66cc;">4 строки)
  5. WITH A #b1b100;">as (
  6. SELECT #cc66cc;">1 aid from dual union all
  7. SELECT #cc66cc;">2 aid from dual union all
  8. SELECT #cc66cc;">3 aid from dual union all
  9. SELECT #cc66cc;">4 aid from dual
  10. ),
  11. B #b1b100;">AS (
  12. SELECT #cc66cc;">1 bid from dual union all
  13. SELECT #cc66cc;">2 bid from dual union all
  14. SELECT #cc66cc;">3 bid from dual union all
  15. SELECT #cc66cc;">4 bid from dual
  16. )
  17. SELECT AID, BID
  18. FROM A
  19. INNER
  20. JOIN B
  21. ON aid=bid;
  22.  
  23. -- #cc66cc;">2. Внутреннее соединение таблиц А inner join B.
  24. -- Запрос вернет строки по которым есть соответствие по ключу в A и B.
  25. -- Чтобы продемонстрировать разницу, поменяем значение в таблице B с #cc66cc;">4 на #cc66cc;">5 внутреннее соединение (возвратит #cc66cc;">3 строки)
  26. WITH A #b1b100;">AS (
  27. SELECT #cc66cc;">1 aid from dual union all
  28. SELECT #cc66cc;">2 aid from dual union all
  29. SELECT #cc66cc;">3 aid from dual union all
  30. SELECT #cc66cc;">4 aid from dual
  31. ),
  32. B #b1b100;">AS (
  33. SELECT #cc66cc;">1 bid from dual union all
  34. SELECT #cc66cc;">2 bid from dual union all
  35. SELECT #cc66cc;">3 bid from dual union all
  36. SELECT #cc66cc;">5 bid from dual
  37. )
  38. SELECT AID, BID
  39. FROM A
  40. INNER
  41. JOIN B
  42. ON aid=bid;
  43. -- #cc66cc;">3. Левое соединение А left join B Запрос вернет все записи из А и доставит к ним соответствие из В.
  44. -- Если соответствия нет, то в поле для таблицы B проставит NULL.
  45.  
  46. WITH A #b1b100;">AS (
  47. SELECT #cc66cc;">1 aid from dual union all
  48. SELECT #cc66cc;">2 aid from dual union all
  49. SELECT #cc66cc;">3 aid from dual union all
  50. SELECT #cc66cc;">4 aid from dual
  51. ),
  52. B #b1b100;">AS (
  53. SELECT #cc66cc;">1 bid from dual union all
  54. SELECT #cc66cc;">2 bid from dual union all
  55. SELECT #cc66cc;">3 bid from dual union all
  56. SELECT #cc66cc;">5 bid from dual
  57. )
  58. SELECT AID, BID
  59. FROM A
  60. LEFT
  61. JOIN B
  62. ON aid = bid;
  63.  
  64. -- #cc66cc;">4. Полное соединение A full join B on aid = bid. Запрос вернет все записи из A и B.
  65. -- Если соответствия нет, то в полях соответствующей таблицы проставит NULL.
  66. WITH A #b1b100;">AS (
  67. SELECT #cc66cc;">1 aid from dual union all
  68. SELECT #cc66cc;">2 aid from dual union all
  69. SELECT #cc66cc;">3 aid from dual union all
  70. SELECT #cc66cc;">4 aid from dual
  71. ),
  72. B #b1b100;">AS (
  73. SELECT #cc66cc;">1 bid from dual union all
  74. SELECT #cc66cc;">2 bid from dual union all
  75. SELECT #cc66cc;">3 bid from dual union all
  76. SELECT #cc66cc;">5 bid from dual
  77. )
  78. SELECT AID, BID
  79. FROM A
  80. FULL
  81. JOIN B
  82. ON aid = bid;
  83.  
  84. -- #cc66cc;">4. CROSS соединение A cross join B. Это соединение таблиц без условия ON.
  85. -- Запрос вернет результат соединения кадой строки из таблицы A с каждой строкой таблицы B.
  86. -- Кол-во строк в результате равно произведению кол-ва строк из А, умноженное на кол-ва строк из B
  87. WITH A #b1b100;">AS (
  88. SELECT #cc66cc;">1 aid from dual union all
  89. SELECT #cc66cc;">2 aid from dual union all
  90. SELECT #cc66cc;">3 aid from dual union all
  91. SELECT #cc66cc;">4 aid from dual
  92. ),
  93. B #b1b100;">AS (
  94. SELECT #cc66cc;">1 bid from dual union all
  95. SELECT #cc66cc;">2 bid from dual union all
  96. SELECT #cc66cc;">3 bid from dual union all
  97. SELECT #cc66cc;">5 bid from dual
  98. )
  99. SELECT AID, BID
  100. FROM A
  101. CROSS
  102. JOIN B;
  103.  
22:12
2.02K
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.