it-swarm.dev

CROSS JOIN vs INNER JOIN في SQL Server 2008

ما الفرق بين 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

أيهما أفضل ولماذا أستخدم أي منهما؟

122
PriceCheaperton

لا يجمع "الربط المتداخل" بين الصفوف ، إذا كان لديك 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

استخدم الطريقة الأخيرة

105
t-clausen.dk

إليك أفضل مثال على 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 والإرادة

enter image description here

استعلام

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 cross جميع الصفوف من الجدول الأول وجميع الصفوف من الجدول الثاني ويظهر كمنتج Cartesian أي ، مع كل الاحتمالات

خذ بعين الاعتبار أننا بحاجة إلى العثور على جميع المعلمين في المدرسة والطلاب بغض النظر عن معلمي الفصل ، نحتاج إلى تطبيق CROSS JOIN.

enter image description here

استعلام

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
166
Sarath Avanavu

صلة داخلية

يُعرف الصلة التي تعرض فقط الصفوف التي لها تطابق في كلا الجدولين المتصلين باسم الصلة الداخلية. هذا هو الصلة الافتراضية في الاستعلام وعرض المصمم.

بناء الجملة للانضمام الداخلية

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

عبور الانضمام

رابط متقاطع ينتج منتج ديكارت للجداول التي تشارك في الصلة. حجم المنتج الديكارتي هو عدد الصفوف في الجدول الأول مضروبًا في عدد الصفوف في الجدول الثاني.

بناء جملة Cross Join

SELECT * FROM table_name1
CROSS JOIN table_name2

أو يمكننا كتابتها بطريقة أخرى أيضًا

SELECT * FROM table_name1,table_name2

الآن تحقق من الاستعلام أدناه لربط الصليب

مثال

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

أو

SELECT * FROM UserDetails, OrderDetails
23
kavitha Reddy

يرجى تذكر أنه في حالة إضافة جملة WHERE ، فإن الوصلة العرضية تتصرف كنقطة وصل داخلية. على سبيل المثال ، تنتج استعلامات Transact-SQL التالية مجموعة النتائج نفسها. يرجى الرجوع إلى http://technet.Microsoft.com/en-us/library/ms190690(v=sql.105).aspx

10
user3095896

يقبل 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" واستخدموا البساطة أعلاه.

انها ليست الغش.

6
David F Mayer

الوصلة المتقاطعة والربط الداخلي هي نفسها مع الفارق الوحيد الذي في الوصلة الداخلية نقوم بتصفية بعض نتائج المنتج الديكارتي بشكل منطقي

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

إنه على تصميم بياناتنا حيث نقرر أن هناك حالة واحدة فقط من الحقل الذي نستخدمه للوصلة. انضم فقط عبر انضم إلى كلا الجدولين واحصل فقط على الخطوط التي تحقق التعبير المنطقي الخاص.

لاحظ أنه إذا كانت الحقول التي نقوم بها "انضمامنا" ستكون خالية في كلا الجدولين ، فسنمرر الفلتر. الأمر متروك لنا أو الشركة المصنعة لقاعدة البيانات لإضافة قواعد إضافية لتجنب أو السماح بالقيم الخالية. التمسك بالأساسيات هو مجرد رابط متقاطع يليه مرشح.

2
Javier Bañez

أثناء كتابة الاستعلامات باستخدام وصلات داخلية ، ستحضر السجلات من كلا الجدولين إذا كان الشرط مستوفياً في كلا الجدولين ، أي المطابقة التامة للعمود المشترك في كلا الجدولين.

أثناء كتابة استعلام باستخدام cross cross ، فإن النتيجة تشبه المنتج الديكارتي لعدد السجلات في كلا الجدولين. مثال إذا كان الجدول 1 يحتوي على 2 سجلات وكان الجدول 2 يحتوي على 3 سجلات ، تكون نتيجة الاستعلام 2 * 3 = 6 سجلات.

لذلك لا تذهب للالتقاط عبر حتى تحتاج إلى ذلك.

2
Jagadeesh G

سيعطي الوصل الداخلي نتيجة السجلات المتطابقة بين جدولين حيث يعطيك الوصل التبادلي التوليفات الممكنة بين جدولين.

0
sindhu