ข้อแตกต่างระหว่าง JOIN และ UNION คืออะไร


252

ความแตกต่างระหว่างJOINและUNIONคืออะไร? ฉันขอตัวอย่างได้ไหม


DBS สมัยใหม่เช่นMariaDBใช้คำสั่ง UNION JOIN นี่คือคำสั่ง SQL & nbsp; 3แต่ไม่เป็นที่รู้จักหรือใช้กัน อย่าเรียนรู้เพิ่มเติมเกี่ยวกับยูเนี่ยนเข้าร่วม
Auston

คำตอบ:


301

UNIONวางบรรทัดจากข้อความค้นหาซึ่งกันและกันขณะที่JOINสร้างผลิตภัณฑ์แบบคาร์ทีเซียนและส่วนย่อยซึ่งเป็นการดำเนินการที่แตกต่างกันโดยสิ้นเชิง ตัวอย่างเล็กน้อยจากUNION:

mysql> SELECT 23 AS bah
    -> UNION
    -> SELECT 45 AS bah;
+-----+
| bah |
+-----+
|  23 | 
|  45 | 
+-----+
2 rows in set (0.00 sec)

ตัวอย่างเล็ก ๆ น้อย ๆ ที่คล้ายJOINกันของ:

mysql> SELECT * FROM 
    -> (SELECT 23 AS bah) AS foo 
    -> JOIN 
    -> (SELECT 45 AS bah) AS bar
    -> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
|  23 |  45 | 
+-----+-----+
1 row in set (0.01 sec)

6
คุณช่วยบอกฉันหน่อยได้ไหมว่าอะไรคืออะไรUNION-JOINและฉันจะทำให้สำเร็จใน SQL มาตรฐานได้อย่างไร Maria DB มีคำสั่งunion joinแต่ฐานข้อมูลอื่นไม่มี ขอบคุณ
Erran Morad

72

Joins and Unions สามารถใช้เพื่อรวมข้อมูลจากหนึ่งตารางขึ้นไป ความแตกต่างอยู่ที่การรวมข้อมูล

ในแง่ง่ายร่วมรวมข้อมูลลงในคอลัมน์ใหม่ หากมีการรวมตารางสองตารางเข้าด้วยกันข้อมูลจากตารางแรกจะแสดงในชุดคอลัมน์หนึ่งชุดพร้อมกับคอลัมน์ของตารางที่สองในแถวเดียวกัน

สหภาพรวมข้อมูลลงในแถวใหม่ หากสองตารางนั้น“ รวมกัน” แล้วข้อมูลจากตารางแรกจะอยู่ในชุดของแถวหนึ่งและข้อมูลจากตารางที่สองในอีกชุดหนึ่ง แถวอยู่ในผลลัพธ์เดียวกัน

นี่คือภาพที่เห็นได้ของการเข้าร่วม คอลัมน์ของตาราง A และ B จะรวมกันเป็นผลลัพธ์เดียว

ป้อนคำอธิบายรูปภาพที่นี่

แต่ละแถวในผลลัพธ์มีคอลัมน์จากทั้งสองตาราง A และ B. แถวถูกสร้างขึ้นเมื่อคอลัมน์จากหนึ่งตารางจับคู่คอลัมน์จากอีกแถวหนึ่ง นัดนี้เรียกว่าเงื่อนไขการเข้าร่วม

สิ่งนี้ทำให้การรวมที่ยอดเยี่ยมสำหรับการค้นหาค่าและรวมไว้ในผลลัพธ์ นี่คือผลของการ den ปกติizing (กลับรายการ normalization) และเกี่ยวข้องกับการใช้คีย์ต่างประเทศในตารางหนึ่งเพื่อค้นหาค่าคอลัมน์โดยใช้คีย์หลักในอีก

ตอนนี้เปรียบเทียบภาพด้านบนกับสหภาพ ในการรวมกันแต่ละแถวภายในผลลัพธ์มาจากตารางหนึ่งหรืออีกแถว ในการรวมกันคอลัมน์จะไม่รวมกันเพื่อสร้างผลลัพธ์แถวถูกรวมเข้าด้วยกัน

ป้อนคำอธิบายรูปภาพที่นี่

ทั้งการรวมและสหภาพสามารถใช้เพื่อรวมข้อมูลจากหนึ่งตารางขึ้นไปเป็นผลลัพธ์เดียว พวกเขาทั้งสองไปเกี่ยวกับเรื่องนี้แตกต่างกัน ในขณะที่การรวมใช้เพื่อรวมคอลัมน์จากตารางต่าง ๆ การรวมกันจะใช้เพื่อรวมแถว

แหล่ง


4
นี่เป็นภาพตัวอย่างที่ยอดเยี่ยม ฉันค่อนข้างแน่ใจว่าฉันเข้าใจหลังจากคำตอบอื่น ๆ แต่นี่ก็เคลียร์ทั้งหมด
seadoggie01

สำหรับตัวอย่างการรวมเทคนิคการพูดไม่ควรมีผลคอลัมน์ 10 คอลัมน์ใช่ไหม
Bharath Ram

60

UNIONรวมผลลัพธ์ของแบบสอบถามสองรายการขึ้นไปเป็นชุดผลลัพธ์เดียวซึ่งรวมแถวทั้งหมดที่เป็นของแบบสอบถามทั้งหมดในสหภาพ

โดยใช้JOINคุณสามารถดึงข้อมูลจากสองตารางขึ้นไปโดยอ้างอิงจากความสัมพันธ์เชิงตรรกะระหว่างตาราง ตัวเชื่อมระบุว่า SQL ควรใช้ข้อมูลจากตารางหนึ่งเพื่อเลือกแถวในตารางอื่นอย่างไร

การดำเนินการ UNION นั้นแตกต่างจากการใช้ JOIN ที่รวมคอลัมน์จากสองตาราง

ตัวอย่างยูเนี่ยน:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]

เอาท์พุท:

Column1    Column2
-------------------
1          2
3          4

เข้าร่วมตัวอย่าง:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId

สิ่งนี้จะเอาท์พุทแถวทั้งหมดจากทั้งสองตารางซึ่งเงื่อนไขa.Id = b.AFKIdเป็นจริง


เข้าร่วมสามารถดึงข้อมูลจากหนึ่งตารางขึ้นไป ไม่จำเป็นต้องมีสอง
Kennet Celeste

51

คุณอาจเห็นคำอธิบายแผนผังเดียวกันสำหรับทั้งคู่ แต่สิ่งเหล่านี้สับสนอย่างสิ้นเชิง

สำหรับยูเนี่ยน:

ป้อนคำอธิบายภาพที่นี่

สำหรับเข้าร่วม:

ป้อนคำอธิบายภาพที่นี่


9
ภาพเหล่านี้บอกเป็นนัยFULL OUTER JOINเดียวกับUNIONที่มีความแตกต่าง
icc97

1
คำตอบนี้ชี้ให้เห็นว่าภาพเหล่านั้นทำให้เกิดความสับสน (ซึ่งเป็น IMO) แต่ก็ไม่สามารถอธิบายได้ว่าทำไมหรือให้คำอธิบายที่ชัดเจนสำหรับคำถามต้นฉบับ
Josh D.

1
แต่ละภาพที่มีไดอะแกรมอธิบายสถานการณ์ได้อย่างสมบูรณ์แบบ ไม่มีภาพเดียวเกินกว่าจะรวมไดอะแกรมทั้งหมด นั่นจะทำให้สับสนมากขึ้น
Java Main

41

เข้าร่วม:

การเข้าร่วมจะใช้สำหรับการแสดงคอลัมน์ที่มีชื่อเหมือนหรือต่างจากตารางที่ต่าง ผลลัพธ์ที่แสดงจะมีคอลัมน์ทั้งหมดที่แสดงเป็นรายบุคคล นั่นคือคอลัมน์จะจัดชิดติดกัน

ยูเนี่ยน:

ตัวดำเนินการชุด UNION ใช้สำหรับการรวมข้อมูลจากสองตารางที่มีคอลัมน์ที่มีประเภทข้อมูลเดียวกัน เมื่อดำเนินการ UNION ข้อมูลจากทั้งสองตารางจะถูกรวบรวมในคอลัมน์เดียวที่มีประเภทข้อมูลเดียวกัน

ตัวอย่างเช่น:

ดูตารางสองตารางที่แสดงด้านล่าง:

Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG

ตอนนี้สำหรับดำเนินการชนิด JOIN แบบสอบถามจะแสดงด้านล่าง

SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);

articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG

นั่นคือการเข้าร่วม

ยูเนี่ยนหมายความว่าคุณต้องใช้กับตารางหรือชุดผลลัพธ์ที่มีจำนวนและประเภทของคอลัมน์เท่ากันและคุณเพิ่มส่วนนี้ลงในตาราง / ชุดผลลัพธ์ด้วยกัน ดูตัวอย่างนี้:

Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4

SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007

articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4

21

พวกมันต่างกันอย่างสิ้นเชิง

เข้าร่วมช่วยให้คุณสามารถที่จะเกี่ยวข้องกับข้อมูลที่คล้ายกันในตารางที่แตกต่างกัน

สหภาพส่งกลับผลลัพธ์ของแบบสอบถามที่แตกต่างกันสองรายการเป็นชุดระเบียนเดียว


9

ยูเนี่ยนทำให้แบบสอบถามสองคำดูเหมือนกัน ตัวเชื่อมใช้สำหรับตรวจสอบตารางสองตารางขึ้นไปในข้อความสั่งแบบสอบถามเดียว


3

สามารถใช้การรวมและสหภาพเพื่อรวมข้อมูลจากหนึ่งตารางขึ้นไป ความแตกต่างอยู่ที่การรวมข้อมูล

กล่าวอย่างง่าย ๆ รวมข้อมูลเข้าด้วยกันในคอลัมน์ใหม่ หากมีการรวมตารางสองตารางเข้าด้วยกันข้อมูลจากตารางแรกจะแสดงในชุดคอลัมน์หนึ่งชุดพร้อมกับคอลัมน์ของตารางที่สองในแถวเดียวกัน

สหภาพรวมข้อมูลลงในแถวใหม่ หากสองตารางนั้น“ รวมกัน” แล้วข้อมูลจากตารางแรกจะอยู่ในชุดของแถวหนึ่งและข้อมูลจากตารางที่สองในอีกชุดหนึ่ง แถวอยู่ในผลลัพธ์เดียวกัน


1

โปรดจำไว้ว่าการรวมกันจะรวมผลลัพธ์ ( SQL Serverเพื่อให้แน่ใจ) (คุณสมบัติหรือข้อบกพร่อง?)

select 1 as id, 3 as value
union
select 1 as id, 3 as value

id, ค่า

1,3

select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id

id, คุ้มค่า, id, ค่า

1,3,1,3


6
นี้เป็นไปตามมาตรฐาน ANSI, ยูเนี่ยนทั้งหมดไม่รวมผลลัพธ์
vzczc

1
ดูUNIONvs vs UNION ALL stackoverflow.com/questions/49925/…
Jaider

0

1. ส่วนคำสั่ง SQL Joins ใช้เพื่อรวมระเบียนจากสองตารางขึ้นไปในฐานข้อมูล เข้าร่วมเป็นวิธีการสำหรับการรวมเขตข้อมูลจากสองตารางโดยใช้ค่าที่พบบ่อยในแต่ละ

2. ตัวดำเนินการ SQL UNION รวมผลลัพธ์ของคำสั่ง SELECT ตั้งแต่สองประโยคขึ้นไป แต่ละคำสั่ง SELECT ภายใน UNION จะต้องมีจำนวนคอลัมน์เท่ากัน คอลัมน์จะต้องมีประเภทข้อมูลที่คล้ายกัน นอกจากนี้คอลัมน์ในแต่ละคำสั่ง SELECT ต้องอยู่ในลำดับเดียวกัน

ตัวอย่างเช่น: ตารางที่ 1 ลูกค้า / คำสั่งซื้อตารางที่ 2

เข้าร่วมภายใน:

SELECT ID, NAME, AMOUNT, DATE

จากลูกค้า


เข้าร่วมคำสั่งซื้อ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

ยูเนี่ยน:

SELECT ID, NAME, AMOUNT, DATE


จากลูกค้า


ซ้ายเข้าร่วมคำสั่งซื้อ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

ยูเนี่ยน

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS


คำสั่งซื้อที่ถูกต้อง


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

การใช้ยูเนี่ยน

UNION จะรวมผลลัพธ์ของแบบสอบถามสองรายการขึ้นไปเป็นชุดผลลัพธ์เดียวซึ่งรวมแถวทั้งหมดที่เป็นของแบบสอบถามทั้งหมดในสหภาพ

ตัวอย่างยูเนี่ยน:
เลือก 121 AS [คอลัมน์ 1], 221 AS [คอลัมน์ 2]
ยูเนี่ยน
เลือก 321 เป็น [คอลัมน์ 1], 422 เป็น [คอลัมน์ 2]
เอาท์พุท:

คอลัมน์ 1 คอลัมน์ 2
-------------------
121 221
321 422

กำลังใช้ JOIN

เข้าร่วมคุณสามารถดึงข้อมูลจากสองตารางขึ้นไปตามความสัมพันธ์เชิงตรรกะระหว่างตาราง

เข้าร่วมตัวอย่าง:
เลือก a.Column1, b.Column2 จาก TblA a เข้าร่วม TblB b บน a.Id = b.id


-1

ในนามธรรมพวกเขามีความคล้ายคลึงกันในชุดที่สองตารางหรือชุดผลลัพธ์จะถูกรวมกัน แต่ยูเนี่ยนเป็นจริงสำหรับการรวมชุดผลลัพธ์ที่มีจำนวนเดียวกันของคอลัมน์กับคอลัมน์ที่มีประเภทข้อมูลที่คล้ายกัน โครงสร้างเหมือนกันมีการเพิ่มแถวใหม่เท่านั้น

ในการรวมคุณสามารถรวมชุดตาราง / ผลลัพธ์กับโครงสร้างที่เป็นไปได้รวมถึงการเข้าร่วมคาร์ทีเซียนที่ไม่มีคอลัมน์ที่แชร์ / คล้ายกัน


-1

ตัวดำเนินการ UNION ใช้สำหรับรวมคำสั่ง SELECT ตั้งแต่สองประโยคขึ้นไป

ในขณะที่เข้าร่วมสำหรับการเลือกแถวจากแต่ละตารางทั้งโดยวิธีการด้านในด้านนอกด้านซ้ายหรือขวา

โปรดดูที่นี่และที่นี่ มีคำอธิบายที่ดีกว่าด้วยตัวอย่าง


-1

การดำเนินการยูเนี่ยนรวมกันเป็นผลมาจากการรวมแนวตั้งของแถวการดำเนินการยูเนี่ยนรวมกันเป็นผลมาจากการรวมแนวนอนของคอลัมน์


-3

ฉันชอบคิดถึงความแตกต่างโดยทั่วไปว่าเป็น:

  • เข้าร่วมตาราง
  • UNION (และทั้งหมด) รวมข้อความค้นหา

1
สิ่งนี้จะทำให้คำถาม - การเข้าร่วมถูกกล่าวถึงในแง่ของ "เข้าร่วม" & สหภาพที่กล่าวถึงในแง่ของการรวม "ไม่ได้อธิบาย" คุณคิดว่าคุณจะเพิ่มอะไรได้นอกเหนือจากคำตอบที่ได้รับคะแนนสูง 10 ปีที่ทำให้ "มีประโยชน์" นี้ (วาทศิลป์) ดูข้อความการวางเมาส์ลูกศรลงคะแนน
philipxy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.