CROSS JOIN против INNER JOIN в SQL

150

В чем разница между CROSS JOINи INNER JOIN?

CROSS 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

Какой из них лучше, и почему я должен использовать любой из них?

PriceCheaperton
источник
15
CROSS JOINприведет ко всем возможным комбинациям таблиц. например, Table1 со 100 строками и Table2 со 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

Используйте последний метод

t-clausen.dk
источник
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» - это особый случай, который вы не объяснили, и вы не объяснили общий случай.
Philipxy
186

Вот лучший пример Cross Join и 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

Перекрестное объединение выбирает все строки из первой таблицы и все строки из второй таблицы и отображается как декартово произведение, т. Е. Со всеми возможностями.

Рассмотрим, что нам нужно найти всех учителей в школе и учеников независимо от классных учителей, нам нужно подать заявку 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, а число (значение не имеет значения) является его строкой, а строка (цвет не имеет значения) является строкой результата. Для таблиц в виде сумок это не диаграмма Венна: для строк в качестве значений это неправильно ; для строк как элементов они не могут быть общими. Для таблиц в виде наборов вам не нужна диаграмма Венна. Рисунок 1 - обычная ужасная попытка объяснить JOIN. Его ключ также сложен: он предназначен только для таблиц в виде наборов и только для сравнения и только для одного значения; он также представляет входные данные иначе, чем выходные данные. Напишите это для JOIN в целом.
Филипп
Рисунок 1 полезен и корректен в качестве первого из 4 раскрасок пересекающихся круговых диаграмм Венна для: (ВНУТРЕННЕГО) СОЕДИНЕНИЯ против ВЛЕВОГО, ВПРАВО И ПОЛНОГО (ВНЕШНЕГО) СОЕДИНЕНИЯ, но не против СОЕДИНЕНИЯ КРЕСТА Строки пересечения находятся в JOIN, левые / правые строки являются дополнительными (расширенными нулями) строками в LEFT / RIGHT JOIN. Он включает в себя CROSS JOIN в качестве особого случая (INNER) JOIN, где в непересекающемся месте нет строк.
Philipxy
1
Спасибо за ваше предложение. Во всяком случае, ОП попросил различие между этими двумя объединениями. Я ответил на этот вопрос так, что любой новичок может легко понять разницу между ними. Как вы сказали, я не дал ключей, как в производственной среде. Это просто пример, чтобы понять легко. И Cross Join, как вы думаете, он не возвращает все строки, если Whereне дано предложение? Из ваших комментариев, у новичка больше шансов запутаться !!! @philipxy
Сарат Аванаву
1
Мои комментарии указывают на то, что диаграммы трудно интерпретировать, даже если кто-то знает, что они пытаются сказать, и не подходит для этой темы. Под «ключом» (на рисунке 2 или 1) я имел в виду «объяснение того, что означают части диаграммы». Под «напиши это» я имею в виду, попытайся самому написать очень четко, что означают части диаграммы. Вы обнаружите, что диаграммы сложны и не демонстрируют перекрестное соединение против внутреннего соединения! Т.е. они не принадлежат в вашем ответе. PS Реляционные ключи таблиц не играют никакой роли в объяснении того, что делают JOIN. PPS Единственная разница между объединениями состоит в том, что INNER JOIN имеет ON.
Филипп
Посмотрите в W3Schools w3schools.com/sql/sql_join_inner.asp, где они дали аналогичный тип диаграммы для INNER JOIN. Прежде чем комментировать, убедитесь, что вы правы @philipxy
Сарат Аванаву
69

CROSS JOIN = (ВНУТРЕННИЙ) JOIN = запятая (",")

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


Повторные промежуточные продукты

Все три производят промежуточный концептуальный реляционный «декартовский» продукт в стиле SQL, то есть перекрестное соединение, всех возможных комбинаций строки из каждой таблицы. Это включено и / или ГДЕ, что уменьшает количество строк. SQL Fiddle

Стандарт SQL определяет <запятую> через продукт (7.5 1.b.ii), <перекрестное соединение> через <запятую> (7.7 1.a) и JOIN ON <условие поиска> через <запятую> плюс WHERE (7.7 1.b ).

Как говорит Википедия:

Перекрестное соединение

CROSS JOIN возвращает декартово произведение строк из таблиц в соединении. Другими словами, он будет производить строки, которые объединяют каждую строку из первой таблицы с каждой строкой из второй таблицы.

Внутреннее соединение

[...] Результат объединения может быть определен как результат первого взятия декартова произведения (или перекрестного объединения) всех записей в таблицах (объединение каждой записи в таблице A с каждой записью в таблице B) и затем возврата все записи, которые удовлетворяют предикату соединения.

В «неявной нотации объединения» просто перечисляются таблицы для объединения в предложении FROM оператора SELECT с использованием запятых для их разделения. Таким образом, он определяет перекрестное соединение

Re OUTER JOINs и использование ON против ГДЕ в них см. Условия в LEFT JOIN (ВНЕШНЕЕ СОЕДИНЕНИЕ) против INNER JOIN .

Зачем сравнивать столбцы между таблицами?

Когда нет повторяющихся строк:

Каждая таблица содержит строки, которые составляют истинный оператор из определенного шаблона оператора заполнения-заполненных-именованных-бланков. (Это делает истинное предложение из - удовлетворяет - определенный (характерный) предикат .)

  • Базовая таблица содержит строки, которые делают истинный оператор из некоторого заданного DBA шаблона оператора:

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

    /* 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
  • ON & WHERE условия AND, чтобы дать дополнительный шаблон. Значение снова строки, которые удовлетворяют этому шаблону:

    /* 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 для двух разных столбцов: Inner Join и / или Union?
Есть ли эмпирическое правило для построения SQL-запроса из понятного человеку описания?

Перегрузка "перекрестное соединение"

К сожалению, термин «перекрестное соединение» используется для:

  • Промежуточный продукт.
  • CROSS JOIN
  • (ВНУТРЕННИЙ) СОЕДИНИТЕ с ON или WHERE, который не сравнивает столбцы из одной таблицы с столбцами из другой. (Так как это имеет тенденцию возвращать так много промежуточных строк продукта.)

Эти различные значения смешиваются. (Например, как в других ответах и ​​комментариях здесь.)

Использование CROSS JOIN против (INNER) JOIN против запятой

Общее соглашение:

  • Используйте CROSS JOIN тогда и только тогда, когда вы не сравниваете столбцы между таблицами. Это означает, что отсутствие сравнений было преднамеренным.
  • Используйте (INNER) JOIN с ON тогда и только тогда, когда вы сравниваете столбцы между таблицами. (Плюс, возможно, другие условия.)
  • Не используйте запятую.

Как правило, условия не для пар таблиц сохраняются для WHERE. Но их, возможно, придется поместить в (n INNER) JOIN ON, чтобы получить соответствующие строки для аргумента RIGHT, LEFT или FULL (OUTER) JOIN.

Re "Не используйте запятую" Смешивание запятой с явным JOIN может ввести в заблуждение, потому что запятая имеет меньший приоритет. Но учитывая роль промежуточного продукта в значении CROSS JOIN, (INNER) JOIN и запятой, аргументы для соглашения выше о том, что он вообще не используется, шатки. Перекрестное соединение или запятая - это как (ВНУТРЕННЕЕ) соединение, находящееся в состоянии ИСТИНА. Промежуточный продукт, ON и WHERE, все вводят AND в соответствующем предикате. Тем не менее, можно думать о INNER JOIN ON - скажем, о создании выходной строки только при поиске пары входных строк, удовлетворяющих условию ON - тем не менее он возвращает строки перекрестного соединения, которые удовлетворяют условию. Единственная причина, по которой ON должен был дополнить запятую в SQL, это написать OUTERСоединения. Конечно, выражение должно прояснить его значение; но то, что ясно, зависит от того, что вещи означают.

Диаграммы Венна Диаграмма Венна с двумя пересекающимися кругами может иллюстрировать разницу между выходными строками для INNER, LEFT, RIGHT & FULL JOIN для одного и того же входа. И когда ВКЛЮЧЕНО, безусловно, ИСТИНА, результат ВНУТРЕННЕГО СОЕДИНЕНИЯ такой же, как ВРЕМЕННОЕ СОЕДИНЕНИЕ. Также он может иллюстрировать строки ввода и вывода для INTERSECT, UNION и EXCEPT. И когда оба входа имеют одинаковые столбцы, результат INTERSECT такой же, как для стандартного SQL NATURAL JOIN, а результат EXCEPT такой же, как для некоторых идиом, включающих LEFT & RIGHT JOIN. Но это не иллюстрирует, как (INNER) JOIN работает в целом. На первый взгляд это кажется правдоподобным . Он может определить детали ввода и / или вывода дляособые случаиON, PK (первичные ключи), FK (внешние ключи) и / или SELECT. Все, что вам нужно сделать, чтобы увидеть это, это определить, какие именно элементы наборов представлены кружками . (Какие запутанные представления никогда не проясняются.) (Помните, что обычно для выходных строк объединений заголовки отличаются от входных строк . А таблицы SQL - это пакеты, а не наборы строк с NULL .)

philipxy
источник
6
+1 Мне больше нравится этот ответ - другие, похоже, подразумевают, что результаты будут отличаться, но если заменить предложение «ON» на «WHERE», результаты будут такими же
Ronnie
4
+1 Спасибо за разъяснение, что опущение предложения ON в INNER JOIN даст те же результаты, что и при использовании CROSS JOIN
Cerno
«промежуточный концептуальный декартово перекрестный продукт в стиле 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
Кавита Редди
источник
11

Помните, что если добавлено предложение WHERE, перекрестное соединение ведет себя как внутреннее соединение. Например, следующие запросы Transact-SQL дают одинаковый набор результатов. Пожалуйста, обратитесь к http://technet.microsoft.com/en-us/library/ms190690(v=sql.105).aspx

user3095896
источник
9

CROSS JOIN

Как я объяснил в этой статье , 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 не возвращает декартово произведение двух объединяемых наборов данных.

Вместо этого INNER JOIN берет все элементы из левой таблицы и сопоставляет их с записями в правой таблице так, чтобы:

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

Например, предположим, что у нас есть отношение таблицы «один ко многим» между родительской postи дочерней post_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       |

ВНУТРЕННИЙ запрос 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   |

По сути, вы можете думать о INNER JOIN как о фильтрованном CROSS JOIN, где в конечном наборе результатов хранятся только совпадающие записи.

Подробнее о том, как работает INNER JOIN, читайте в этой статье .

Влад Михалча
источник
«INNER JOIN не возвращает декартово произведение двух соединяющихся наборов данных» - это немного, когда x INNER JOIN y при 1 = 1 возвращает его. Так же как и «Вместо», когда то, что вы пытаетесь сказать, на самом деле (конечно) возвращает его для условия 1 = 1. За исключением того, что язык в пулях не четко описывает результат внутреннего соединения. То, что описывает это, - то, что это - перекрестное соединение меньше строк, которые не отвечают условию. Точно так же ваш язык кросс-соединения с использованием «комбинаций» неясен.
Philipxy
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», которое выполняет эту работу. Если у вас возникнут трудности с определением, куда и куда идут предложения «JOIN», «ON», оставьте нотацию «JOIN» и используйте более простую приведенную выше.

Это не обман.

Дэвид Ф Майер
источник
2

При написании запросов с использованием внутренних объединений записи будут извлекаться из обеих таблиц, если выполняется условие для обеих таблиц, т.е. точное совпадение общего столбца в обеих таблицах.

При написании запроса с использованием кросс-соединения результат выглядит как декартово произведение числа записей в обеих таблицах. Например, если table1 содержит 2 записи, а table2 содержит 3 записи, результат запроса будет 2 * 3 = 6 записей.

Так что не переходите на перекрестное соединение, пока вам это не понадобится.

Jagadeesh G
источник
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} и вернул запрашиваемый столбец в предложении select, относящемся к этим идентификаторам.

если cross joinна a = b, то это результат того же набора результатов, что и inner join. в этом случае также используйте inner join.

Хеваратна Ашен Иранга
источник
-1

Это зависит от ожидаемого результата.

Перекрестное соединение сопоставляет все строки в одной таблице со всеми строками в другой таблице. Внутреннее соединение соответствует полю или полям. Если у вас одна таблица с 10 строками, а другая с 10 строками, то эти два соединения будут вести себя по-разному.

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

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

Шрикант Джадхав
источник
Не смущать всех. Я попытался сократить ответ. Это самый лучший короткий ответ.
Шрикант Джадхав