CROSS JOIN vs INNER JOIN у SQL


150

У чому різниця між CROSS JOINі INNER JOIN?

КРОВИЙ ПРИЄДНАЙТЕСЬ:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status], 
FROM   
    Customers 
CROSS JOIN 
    Movies

ВНУТРІШНЄ З'ЄДНАННЯ:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status]
FROM   
    Customers 
INNER JOIN 
    Movies ON Customers.CustomerID = Movies.CustomerID

Який з них кращий і для чого я використовую будь-який?


15
CROSS JOINприведе до всіх можливих комбінацій таблиць. наприклад Таблиця1 зі 100 рядками та Таблиця2 зі 100 рядками призведе до 10000 записів.
буммі

x CROSS JOIN yєx INNER JOIN y ON 1=1
філіпсі

Відповіді:


119

Перехресне з'єднання не поєднує рядки, якщо у вас в кожній таблиці 100 рядків з 1 на 1 відповідність, ви отримуєте 10 000 результатів, Innerjoin поверне лише 100 рядків у тій же ситуації.

Ці 2 приклади повернуть той самий результат:

Хрест з'єднати

select * from table1 cross join table2 where table1.id = table2.fk_id

Внутрішнє з'єднання

select * from table1 join table2 on table1.id = table2.fk_id

Використовуйте останній метод


7
І я вважаю, що ви можете писати select * from table1 cross join table2 where table1.id = table2.fk_idяк select * from table1, table2 where table1.id = table2.fk_id(замінюючи cross joinа ,)
modulitos

5
@Lucas - це старий синтаксис для приєднання, але він буде працювати. Рекомендую, хоча версія Клаузена набагато читабельніша.
iliketocode

1
що означає 1 - 1 матч? Що ви маєте на увазі "та сама ситуація"
Jwan622

1
@iliketocode "старий синтаксис для приєднання" незрозумілий, вам краще поговорити про стандарти SQL-89 та SQL-92
Ivanzinho

Ваш ВНУТРІШНІЙ ПРИЄДНАЙТЕСЬ "100" - це особливий випадок, який Ви не пояснили, і Ви не пояснили загальну справу.
Філіпсі

186

Ось найкращий приклад Cross Cross та Inner Join.

Розглянемо наступні таблиці

ТАБЛИЦЯ: Teacher

x------------------------x
| TchrId   | TeacherName | 
x----------|-------------x
|    T1    |    Mary     |
|    T2    |    Jim      |
x------------------------x

ТАБЛИЦЯ: Student

x--------------------------------------x
|  StudId  |    TchrId   | StudentName | 
x----------|-------------|-------------x            
|    S1    |     T1      |    Vineeth  |
|    S2    |     T1      |    Unni     |
x--------------------------------------x

1. ВНУТРІШНЕ ПРИЄДНАННЯ

Внутрішнє з'єднання вибирає рядки, які задовольняють обидві таблиці .

Подумайте, що нам потрібно знайти викладачів, які є класними керівниками, та їх відповідних учнів. У такому стані нам потрібно подати заяву JOINчи INNER JOINбудемо

введіть тут опис зображення

Запит

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId

Результат

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

2. КРОВИЙ ПРИЄДНАЙТЕСЬ

Перехресне з'єднання вибирає всі рядки з першої таблиці та всі рядки з другої таблиці і показує як декартовий продукт, тобто, з усіма можливостями.

Подумайте, що нам потрібно знайти усіх вчителів у школі та учнів, незалежно від класних керівників, нам потрібно подати заявку CROSS JOIN.

введіть тут опис зображення

Запит

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 

Результат

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T2    |     Jim     |    Vineeth  |
|    T2    |     Jim     |    Unni     |
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

1
Ключ малюнка 2 є складним: він обводить (колір не має значення) елементів аргументу CROSS JOIN & число (значення не має значення) - це його рядок, а рядок (колір не має значення) - це результат рядка. Для таблиць як мішків це не діаграма Венна: для рядків як значень це неправильно ; для рядків як елементів їх не можна поділити. Для таблиць як наборів вам не потрібна діаграма Venn. Фігура 1 - це звичайна жахлива спроба пояснити ПРИЄДНАЙТЕСЬ. Його ключ також складний: це лише для таблиць як наборів & тільки equijoin & лише одне значення; він також представляє вхід інакше, ніж вихід. Напишіть це для приєднання взагалі.
філіппі

Малюнок 1 є корисним і правильним , як перші з 4 -х розмальовок пересічних кіл Венна діаграмою для: (внутрішнього) РЕЄСТРУЙСЯ проти вліво, вправо і Full (зовнішній) приєднатися , але НЕ проти CROSS JOIN. Ряди перетину знаходяться в JOIN, ліві / праві рядки - це додаткові (з нульовим розширенням) рядки вліво / вліво. Він включає CROSS JOIN як особливий випадок (INNER) JOIN, де в непересічці немає рядків.
філіпсі

1
Дякуємо за вашу пропозицію. Так чи інакше, ОП попросила різницю між цими двома приєднаннями. Я відповів на це питання таким чином, що будь-який новачок може легко зрозуміти різницю між ними. Як ви сказали, я не давав ключі, як у виробничому середовищі. Це просто приклад, щоб зрозуміти його легко. А бо Cross Join, чи вважаєте ви, що він не повертає всіх рядків, якщо не вказано Whereзастереження? З ваших коментарів є більше шансів, щоб новачок заплутався !!! @philipxy
Сарат Аванаву

1
У моїх коментарях зазначається, що діаграми важко інтерпретувати, навіть якщо хтось знає, що вони намагаються сказати, і невідповідні цій темі. Під "ключем" (на малюнку 2 або 1) я мав на увазі "пояснення того, що означають частини діаграми". Під "напиши" я маю на увазі спробувати для себе написати дуже чітко, що означають частини діаграми. Ви побачите, що діаграми складні і не демонструють перехресного з'єднання проти внутрішнього з'єднання! Тобто вони не належать до вашої відповіді. Реляційні ключі PS-таблиці не грають ніякої ролі в поясненні того, що роблять приєднання. PPS Єдина відмінність між об'єднаннями - INNER JOIN має ON.
Філіпсі

Подивіться у W3Schools w3schools.com/sql/sql_join_inner.asp, де вони дали подібний тип діаграми для INNER JOIN. Переконайтеся, що ви праві, перш ніж коментувати @philipxy
Сарат Аванаву

69

CROSS JOIN = (INNER) JOIN = кома (",")

TL; DR Єдина відмінність між SQL CROSS JOIN, (INNER) JOIN і комою (",") (окрім коми, що мають нижчий пріоритет для порядку оцінювання), полягає в тому, що (INNER) JOIN має значення ON, а CROSS JOIN та кома -.


Повторні проміжні продукти

Усі три виробляють проміжний концептуальний реляційний продукт «декартовий» у стилі SQL, який також називають перехресним з'єднанням, усіх можливих комбінацій рядків із кожної таблиці. Саме ON та / або де зменшується кількість рядків. SQL Fiddle

Стандарт SQL визначає <comma> через продукт (7.5 1.b.ii), <перехресне з'єднання> через <comma> (7.7 1.a) та ПРИЄДНУЙТЕСЬ ВКЛ <умова пошуку> через <comma> плюс WHERE (7.7 1.b ).

Як говорить Вікіпедія:

Хрест з'єднати

CROSS JOIN повертає декартовий добуток рядків із таблиць у з'єднанні. Іншими словами, він створить рядки, які поєднують кожен рядок з першої таблиці з кожним рядком з другої таблиці.

Внутрішнє з'єднання

[...] Результат з'єднання можна визначити як результат першого внесення декартового продукту (або перехресного з'єднання) всіх записів у таблицях (поєднання кожного запису в таблиці А з кожним записом у таблиці В), а потім повернення всі записи, які задовольняють присудок приєднання.

"Неявна нотація приєднання" просто перераховує таблиці для приєднання, у пункті FROM оператора SELECT, використовуючи коми для їх розділення. Таким чином, він визначає перехресне з'єднання

Re OUTER JOIN і і використання ON проти WHERE в них бачать умови в LEFT JOIN (OUTER JOIN) проти INNER JOIN .

Навіщо порівнювати стовпці між таблицями?

Коли немає повторюваних рядків:

Кожна таблиця містить рядки, які складають справжню заяву з певного шаблону оператора заповнення [ім'я]. (Це робить справжнє Пропозиція із-- задовольняє --a певного (характерний) предикат .)

  • Базова таблиця містить рядки, які складають справжнє твердження з деякого шаблону операторів, заданих DBA:

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • Проміжний продукт приєднання містить рядки, які складають справжнє твердження з І шаблонів його операндів:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    */
    FROM Customers C CROSS JOIN Movies M
  • УВІДКЛЮЧАЙ ТА КОЛИ, де передбачено умови для подання подальшого шаблону. Значення знову - це рядки, що задовольняють шаблону:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    AND C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    AND C.Age = 18
    */
    FROM Customers C INNER JOIN Movies M
    ON C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    WHERE C.Age = 18

Зокрема, порівняння стовпців для (SQL) рівності між таблицями означає, що рядки, збережені у продукту з частин шаблону об'єднаних таблиць, мають однакове (не-NULL) значення для цих стовпців. Це просто збіг випадків, коли багато рядків зазвичай видаляються порівнянням рівності між таблицями - що необхідно і достатньо, щоб охарактеризувати потрібні рядки.

Просто напишіть SQL для шаблону для потрібних рядків!

Про значення запитів (та таблиць проти умов) див .:
Як отримати відповідні дані з іншої таблиці SQL для двох різних стовпців: Внутрішнє приєднання та / або Союз?
Чи є якесь правило для побудови SQL-запиту з людського читаного опису?

Перевантаження "перехресне з'єднання"

На жаль, термін "перехресне з'єднання" використовується для:

  • Проміжний продукт.
  • КРОВИЙ ПРИЄДНАЙТЕСЬ.
  • (INNER) ПРИЄДНАЙТЕСЬ із ON або WHERE, які не порівнюють жодних стовпців з однієї таблиці з жодними стовпцями іншої. (Оскільки це, як правило, повертає стільки рядів проміжних продуктів.)

Ці різні значення збиваються з пантелику. (Наприклад, в інших відповідях та коментарях тут.)

Використання CROSS JOIN vs (INNER) JOIN проти коми

Загальна конвенція:

  • Використовуйте CROSS JOIN тоді і лише тоді, коли ви не порівнюєте стовпці між таблицями. Тобто показати, що відсутність порівнянь була навмисною.
  • Використовуйте (INNER) ПРИЄДНАЙТЕСЬ з УВІМКНЕНО, коли і тільки при порівнянні стовпців між таблицями. (Плюс можливо інші умови.)
  • Не використовуйте коми.

Зазвичай умови, які не містяться на парах таблиць, зберігаються для WHERE. Але їх, можливо, доведеться поставити в (n INNER) ПРИЄДНУЙТЕСЬ УВІМКНЕНО, щоб отримати відповідні рядки для аргументу ПРИЄДНАЙТЕСЯ ВПРАВО, ВЛІВО або ПОВНО (ВІД).

Повторно "Не використовувати кому" Змішування кома з явним JOIN може ввести в оману, оскільки кома має нижчий пріоритет. Але, враховуючи роль проміжного продукту в значенні CROSS JOIN, (INNER) JOIN та кома, аргументи для вищезгаданої конвенції про те, що він взагалі не використовує, є хиткими. КРІШЕ ПРИЄДНАННЯ або кома подібно до (ВНУТРІШНЬОГО ПРИЄДНАННЯ). Проміжний продукт ON і WHERE всі вводять AND у відповідному предикаті. Однак інше INNER JOIN ON можна думати - скажімо, генеруючи вихідний рядок лише при знаходженні пари вхідних рядків, що задовольняє умові ON - вона, тим не менш, повертає міжрядкові рядки, що задовольняють умові. Єдиною причиною ON довелося доповнювати кому в SQL - писати OUTERПРИЄДНАЄТЬСЯ Звичайно, вираз повинен дати зрозуміти його значення; але те, що зрозуміло, залежить від того, що означають речі.

Діаграми Re Venn Діаграма Венна з двома пересічними колами може ілюструвати різницю між вихідними рядками для ВНУТРІШНЬОГО, ЛІВОГО, ПРАВА та ПОВНОГО ПРИЄДНАННЯ для одного входу. А коли ON безумовно ПРАВИЛЬНИЙ, результат ВНУТРІШНЬОГО ПРИЄДНАННЯ такий же, як CROSS JOIN. Крім того, він може ілюструвати вхідні та вихідні рядки для INTERSECT, UNION & EXCEPT. І коли обидва входи мають однакові стовпці, результат INTERSECT такий же, як і для стандартного SQL NATURAL JOIN, а результат EXCEPT такий же, як для певних ідіом, що включають лівий та правий з'єднання. Але це не ілюструє, як (INNER) JOIN працює в цілому. Це просто здається правдоподібним на перший погляд . Він може ідентифікувати частини вводу та / або виходу дляособливі випадки ON, PK (первинні ключі), FK (зовнішні ключі) та / або SELECT. Все, що вам потрібно зробити, - це визначити, які саме елементи є множинами, представленими колами . (Які заплутані презентації ніколи не стають зрозумілими.) (Пам'ятайте, що загалом для об'єднання вихідні рядки мають різні заголовки від вхідних рядків . А таблиці SQL - мішки, а не набори рядків з NULL .)


6
+1 Найкраще мені подобається ця відповідь - начебто інші натякають на те, що результати будуть відрізнятися, але якщо пункт "ВКЛ." Замінити на "ДЕ", результати будуть однаковими
Ронні

4
+1 Дякуємо, що уточнили, що пропущення пункту ON у ВНУТРІШНІЙ
ПРИЄДНАННІ

"проміжний концептуальний декартовий крос-продукт у стилі SQL" - це інший спосіб сказати, "це насправді не набір упорядкованих пар, але я не можу уникнути того, щоб сказати" декартовий продукт ""? :) Як я не математик, єдиний контекст, в якому я коли-небудь стикався з терміном "декартовий продукт", - це коли хтось пояснює SQL CROSS JOIN. Мені цікаво, як часто хтось відвідує SQL, уже знайомий з декартовим продуктом, але не в змозі розібратися CROSS JOIN.
одного дня, коли

1
@onedaywhen Оператор декартового продукту повертає набір упорядкованих кортежів, заданих деякими наборами. Результат декартовій твір. Реляційні та SQL культури, на жаль, неправильно використовують / перевантажують "декартовий продукт" для операторів, які викликають, але не є декартовим продуктом. Наприклад Вікіпедія! Я проти цього - це просто вводить в оману / плутає. Але тут, на жаль, я лише нечітко описую, як працює перехресне з'єднання SQL, моїми власними словами, і відкладаюсь до Вікіпедії. Я маркую результат "проміжний концептуальний декартовий продукт на стилі SQL". Так, "декартовий" - це для тих, хто на жаль уже пошкоджений, хто його використовує / очікує.
філіпсі

1
Це правильна відповідь, на відміну від відповідей вищого рейтингу. Для SQL типово, що поверхневі, розумно звучачі, добре відформатовані пояснення із зображеннями переважають у навчальному змісті, незважаючи на те, що вони не розуміють і не визначають навіть ази мови.
Чарльз Родді

23

Внутрішнє з'єднання

Об'єднання, що відображає лише ті рядки, які відповідають збігу в обох об'єднаних таблицях, називається внутрішнім з'єднанням. Це за замовчуванням приєднайтесь до запиту та перегляньте конструктор.

Синтаксис для внутрішнього приєднання

SELECT t1.column_name,t2.column_name
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.column_name=t2.column_name

Хрестовий приєднання

Перехресне з'єднання, яке виробляє декартовий добуток таблиць, які беруть участь у з'єднанні. Розмір декартового продукту - це кількість рядків у першій таблиці, помножене на кількість рядків у другій таблиці.

Синтаксис для перехресного приєднання

SELECT * FROM table_name1
CROSS JOIN table_name2

Або ми можемо записати це і іншим способом

SELECT * FROM table_name1,table_name2

Тепер перевірте поданий нижче запит на перехресне з'єднання

Приклад

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

Або

SELECT * FROM UserDetails, OrderDetails


8

КРОВИЙ ПРИЄДНАЙТЕСЬ

Як я пояснив у цій статті , CROSS JOIN призначений для створення декартового продукту.

Декартовий продукт має два набори A і B і генерує всі можливі перестановки парних записів із двох заданих наборів даних.

Наприклад, якщо у вас є такі таблиці ranksта suitsбази даних:

Таблиці рангів і костюмів

І ranksмає наступні рядки:

| name  | symbol | rank_value |
|-------|--------|------------|
| Ace   | A      | 14         |
| King  | K      | 13         |
| Queen | Q      | 12         |
| Jack  | J      | 11         |
| Ten   | 10     | 10         |
| Nine  | 9      |  9         |

Поки suitsтаблиця містить такі записи:

| name    | symbol |
|---------|--------|
| Club    |       |
| Diamond |       |
| Heart   |       |
| Spade   |       |

Оскільки запит CROSS JOIN, як наступний:

SELECT
   r.symbol AS card_rank,
   s.symbol AS card_suit
FROM
   ranks r
CROSS JOIN
   suits s

створить усі можливі перестановки ranksта suitesпари:

| card_rank | card_suit |
|-----------|-----------|
| A         |          |
| A         |          |
| A         |          |
| A         |          |
| K         |          |
| K         |          |
| K         |          |
| K         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| J         |          |
| J         |          |
| J         |          |
| J         |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 9         |          |
| 9         |          |
| 9         |          |
| 9         |          |

ВНУТРІШНЄ З'ЄДНАННЯ

З іншого боку, INNER JOIN не повертає декартовий продукт двох наборів даних, що з'єднуються.

Натомість "ВНУТРІШНЯ ПРИЄДНАННЯ" приймає всі елементи з таблиці ліворуч і порівнює їх із записами в правій таблиці, щоб:

  • якщо в таблиці праворуч не знайдено жодного запису, лівий рядок відфільтровується з набору результатів
  • для будь-якого відповідного запису в таблиці праворуч лівий рядок повторюється так, як ніби між цим записом та всіма пов'язаними з ним дочірніми записами в правій таблиці зберігався декартовий продукт.

Наприклад, якщо ми припустимо, що між батьківським та дочірнім таблицями є взаємозв'язок таблиць один на багато, який виглядає так:postpost_comment

Столові відносини «один до багатьох»

Тепер, якщо postтаблиця має такі записи:

| id | title     |
|----|-----------|
| 1  | Java      |
| 2  | Hibernate |
| 3  | JPA       |

а post_commentsтаблиця має такі рядки:

| id | review    | post_id |
|----|-----------|---------|
| 1  | Good      | 1       |
| 2  | Excellent | 1       |
| 3  | Awesome   | 2       |

INNER JOIN запит, як наступний:

SELECT
   p.id AS post_id,
   p.title AS post_title,
   pc.review  AS review
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id

включає всі postзаписи разом з усіма пов'язаними з ними post_comments:

| post_id | post_title | review    |
|---------|------------|-----------|
| 1       | Java       | Good      |
| 1       | Java       | Excellent |
| 2       | Hibernate  | Awesome   |

В основному, ви можете вважати ВНУТРІШНЕ ПРИЄДНАННЯ як відфільтрований CROSS JOIN, де в кінцевому наборі результатів зберігаються лише відповідні записи.

Для отримання більш детальної інформації про те, як працює INNER JOIN, ознайомтеся і з цією статтею .


"ВНУТРІШНЯ ПРИЄДНАННЯ не повертає декартовий продукт двох наборів даних, що з'єднуються" - це дещо, коли x INNER JOIN y на 1 = 1 повертає його. Так це "Натомість", коли те, що ти продовжуєш намагатися сказати, насправді (звичайно) повертає його за умови 1 = 1. За винятком того, що мова в куль не чітко описує результат внутрішнього з'єднання. Що це описує, це те, що це перехресне з'єднання менше рядків, які не відповідають умові. Так само не зрозуміла ваша перехресна мова з використанням "комбінацій".
Філіпсі

7

SQL Server також приймає простіші позначення:

SELECT A.F, 
       B.G, 
       C.H 
  FROM TABLE_A A, 
       TABLE_B B, 
       TABLE_C C
 WHERE A.X = B.X 
   AND B.Y = C.Y

Використовуючи це більш просте позначення, не потрібно турбуватися про різницю між внутрішніми та хрестовими з'єднаннями. Замість двох пропозицій "ON" існує один пункт "WHERE", який виконує цю роботу. Якщо у вас виникли труднощі у визначенні того, які пункти "ПРИЄДНАЙТЕ" "ВКЛ.", Куди поділися, відмовтесь від позначення "ПРИЄДНАЙТЕ" та скористайтеся простішим вище.

Це не обман.


2

Під час написання запитів за допомогою внутрішніх приєднань записи отримуватимуть з обох таблиць, якщо умова задоволена в обох таблицях, тобто точне відповідність загального стовпця в обох таблицях.

Під час написання запиту за допомогою перехресного з'єднання результат є подібним до декартового продукту без записів в обох таблицях. Наприклад, якщо table1 містить 2 записи, а table2 містить 3 записи, то результат запиту 2 * 3 = 6 записів.

Тому не йдіть на перехресне приєднання, поки вам цього не потрібно.


2
Тільки якщо пункт WHERE відсутній!
епітка

2

Перехресне з’єднання та внутрішнє з'єднання - це одне і те ж з тією лише різницею, що при внутрішньому з'єднанні ми буле фільтруємо деякі результати декартового продукту

table1
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    option1  |
|    A     |      B1     |    option2  |
x--------------------------------------x

table2
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    optionB1 |
|    A1    |      B1     |    optionB2 |
x--------------------------------------x

 cross join
  A,B,option1,A,B,optionB1
  A,B,option1,A1,B1,optionB2
  A,B1,option2,A,B,optionB1
  A,B1,option2,A1,B1,optionB2

 inner join on field1 (only with the value is the same in both tables)
  A,B,option1,A,B,optionB1
  A,B1,option2,A,B,optionB1

 inner join on field1
  A,B,option1,A,B,optionB1

Саме на проектуванні наших даних ми вирішуємо, що існує лише один випадок поля, який ми використовуємо для об'єднання. Приєднуйтесь лише перехресно, приєднуйтесь до обох таблиць і отримуйте лише рядки, що виконують спеціальний булевий вираз.

Зауважте, що якщо поля, на яких ми виконуємо наше приєднання, були б недійсними в обох таблицях, ми би передали фільтр. Нам або виробнику бази даних додати додаткові правила, щоб уникнути або дозволити нулі. Дотримуючись основ, це просто з'єднання хреста, за яким слід фільтр.


0

Внутрішнє з'єднання дасть результат збігу записів між двома таблицями, де як перехресне з'єднання дає можливі комбінації між двома таблицями.


0

A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}

cross join діяти як декартовий продукт A ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9} і повернув цей довгий набір результатів ..

при обробці inner joinйого зроблено за допомогою декартового продукту та вибирайте відповідні пари. Якщо ви вважаєте, що це впорядковані пари є двома первинними ключами таблиці, а в пункті пошуку A = B inner joinвиберіть {5,5}, {4,4}, {6,6} , {9,9} і повернув запитаний стовпець у пункті вибору, пов'язаному з цими ідентифікаторами.

якщо cross joinна a = b, це результат такий самий результат, як і inner join. в цьому випадку також використовувати inner join.


-1

Це залежить від очікуваного результату.

Перехресне з'єднання відповідає всім рядкам в одній таблиці всім рядкам в іншій таблиці. Внутрішня приєднана сітка на полі чи поля. Якщо у вас одна таблиця з 10 рядками та інша з 10 рядками, то два об'єднання будуть вести себе по-різному.

Перехресне з'єднання поверне 100 рядків, і вони не будуть пов'язані між собою, лише те, що називається декартовим продуктом. Внутрішнє з'єднання буде відповідати записам один одному. Припустимо, що в одного є первинний ключ, а в іншому - це іноземний ключ, ви отримаєте 10 рядків.

Перехресне з'єднання має обмежену загальну корисність, але існує для повноти і описує результат з'єднання таблиць без відношень, доданих до запиту. Ви можете використовувати перехресне з'єднання, щоб скласти списки комбінацій слів або щось подібне. Внутрішнє з'єднання, з іншого боку, є найбільш поширеним.


Не плутати всіх. Я спробував скоротити відповідь. Це найкраща можлива коротка відповідь.
Шрікант
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.