ภาพโดยผู้เขียน
วิทยาศาสตร์ข้อมูลเป็นสาขาสหวิทยาการที่ต้องอาศัยการดึงข้อมูลเชิงลึกและการตัดสินใจโดยใช้ข้อมูลจำนวนมหาศาลจากข้อมูลจำนวนมหาศาล เครื่องมือพื้นฐานอย่างหนึ่งในกล่องเครื่องมือของนักวิทยาศาสตร์ข้อมูลคือ SQL (Structured Query Language) ซึ่งเป็นภาษาการเขียนโปรแกรมที่ออกแบบมาเพื่อการจัดการและจัดการฐานข้อมูลเชิงสัมพันธ์
ในบทความนี้ ฉันจะเน้นไปที่หนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ SQL: การรวม
SQL Joins ช่วยให้คุณสามารถรวมข้อมูลจากตารางฐานข้อมูลหลายตารางโดยยึดตามคอลัมน์ทั่วไป ด้วยวิธีนี้ คุณสามารถผสานข้อมูลเข้าด้วยกันและสร้างการเชื่อมต่อที่สำคัญระหว่างชุดข้อมูลที่เกี่ยวข้องได้
มีหลายคำ ประเภทของการรวม SQL:
- การเข้าร่วมภายใน
- การรวมภายนอกด้านซ้าย
- การรวมภายนอกด้านขวา
- การรวมภายนอกแบบเต็ม
- เข้าร่วมข้าม
มาอธิบายแต่ละประเภทกันดีกว่า
การรวมภายในจะส่งกลับเฉพาะแถวที่มีการจับคู่ในทั้งสองตารางที่ถูกรวมเข้าด้วยกัน โดยจะรวมแถวจากสองตารางตามคีย์หรือคอลัมน์ที่ใช้ร่วมกัน โดยละทิ้งแถวที่ไม่ตรงกัน
เราเห็นภาพนี้ในลักษณะดังต่อไปนี้
ภาพโดยผู้เขียน
ใน SQL การรวมประเภทนี้ดำเนินการโดยใช้คำสำคัญ JOIN หรือ INNER JOIN
การรวมภายนอกด้านซ้ายจะส่งกลับแถวทั้งหมดจากตารางด้านซ้าย (หรือตารางแรก) และแถวที่ตรงกันจากตารางด้านขวา (หรือตารางที่สอง) หากไม่มีค่าที่ตรงกัน ระบบจะส่งกลับค่า NULL สำหรับคอลัมน์จากตารางด้านขวา
เราสามารถเห็นภาพมันได้แบบนี้
ภาพโดยผู้เขียน
เมื่อต้องการใช้การรวมนี้ใน SQL คุณสามารถทำได้โดยใช้คีย์เวิร์ด LEFT OUTER JOIN หรือ LEFT JOIN นี่คือบทความที่พูดถึง การรวมด้านซ้ายเทียบกับการรวมภายนอกด้านซ้าย.
การรวมทางขวาเป็นสิ่งที่ตรงกันข้ามกับการรวมทางซ้าย โดยจะส่งกลับแถวทั้งหมดจากตารางด้านขวาและแถวที่ตรงกันจากตารางด้านซ้าย หากไม่มีค่าที่ตรงกัน ระบบจะส่งกลับค่า NULL สำหรับคอลัมน์จากตารางด้านซ้าย
ภาพโดยผู้เขียน
ใน SQL การรวมประเภทนี้จะดำเนินการโดยใช้คำสำคัญ RIGHT OUTER JOIN หรือ RIGHT JOIN
การรวมภายนอกแบบเต็มจะส่งกลับแถวทั้งหมดจากทั้งสองตาราง โดยจับคู่แถวหากเป็นไปได้ และกรอกค่า NULL สำหรับแถวที่ไม่ตรงกัน
ภาพโดยผู้เขียน
คำสำคัญใน SQL สำหรับการรวมนี้คือ FULL OUTER JOIN หรือ FULL JOIN
การรวมประเภทนี้จะรวมแถวทั้งหมดจากตารางหนึ่งเข้ากับแถวทั้งหมดจากตารางที่สอง กล่าวอีกนัยหนึ่ง มันจะส่งคืนผลคูณคาร์ทีเซียน กล่าวคือ ชุดค่าผสมที่เป็นไปได้ทั้งหมดของแถวของตารางทั้งสอง
นี่คือการแสดงภาพที่จะทำให้เข้าใจได้ง่ายขึ้น
ภาพโดยผู้เขียน
เมื่อเข้าร่วมแบบข้ามใน SQL คำสำคัญคือ CROSS JOIN
ในการดำเนินการรวมใน SQL คุณต้องระบุตารางที่เราต้องการรวม คอลัมน์ที่ใช้สำหรับการจับคู่ และประเภทของการรวมที่เราต้องการดำเนินการ ไวยากรณ์พื้นฐานสำหรับการเข้าร่วมตารางใน SQL มีดังนี้:
SELECT columns
FROM table1
JOIN table2
ON table1.column = table2.column;
ตัวอย่างนี้แสดงวิธีการใช้ JOIN
คุณอ้างอิงตารางแรก (หรือซ้าย) ในส่วนคำสั่ง FROM จากนั้นคุณติดตามด้วย JOIN และอ้างอิงตารางที่สอง (หรือขวา)
จากนั้นเงื่อนไขการเข้าร่วมในส่วนคำสั่ง ON ก็มาถึง นี่คือที่ที่คุณระบุคอลัมน์ที่คุณจะใช้เพื่อรวมทั้งสองตาราง โดยปกติแล้ว คอลัมน์ที่ใช้ร่วมกันจะเป็นคีย์หลักในตารางหนึ่งและเป็นคีย์นอกในตารางที่สอง
หมายเหตุ: คีย์หลักคือตัวระบุที่ไม่ซ้ำกันสำหรับแต่ละระเบียนในตาราง Foreign Key จะสร้างการเชื่อมโยงระหว่างสองตาราง กล่าวคือ เป็นคอลัมน์ในตารางที่สองที่อ้างอิงถึงตารางแรก เราจะแสดงให้คุณเห็นในตัวอย่างว่านั่นหมายความว่าอย่างไร
หากคุณต้องการใช้ LEFT JOIN, RIGHT JOIN หรือ FULL JOIN คุณเพียงใช้คำหลักเหล่านี้แทน JOIN ส่วนอื่นๆ ในโค้ดจะเหมือนกันทุกประการ!
สิ่งต่าง ๆ เล็กน้อยกับ CROSS JOIN โดยธรรมชาติแล้วคือการรวมแถวทั้งหมดจากทั้งสองตารางเข้าด้วยกัน นั่นเป็นสาเหตุที่ไม่จำเป็นต้องใช้คำสั่งย่อย ON และไวยากรณ์มีลักษณะเช่นนี้
SELECT columns
FROM table1
CROSS JOIN table2;
กล่าวอีกนัยหนึ่ง คุณเพียงอ้างอิงตารางหนึ่งใน FROM และตารางที่สองใน CROSS JOIN
หรือคุณสามารถอ้างอิงทั้งสองตารางใน FROM และคั่นด้วยเครื่องหมายจุลภาค ซึ่งเป็นการจดชวเลขสำหรับ CROSS JOIN
SELECT columns
FROM table1, table2;
นอกจากนี้ยังมีวิธีหนึ่งในการเข้าร่วมตารางโดยเฉพาะ นั่นก็คือการเข้าร่วมตารางด้วยตัวมันเอง สิ่งนี้เรียกว่าการเข้าร่วมโต๊ะด้วยตนเอง
การเข้าร่วมไม่ใช่ประเภทที่ชัดเจนอย่างแน่นอน เนื่องจากประเภทการเข้าร่วมใดๆ ที่กล่าวถึงข้างต้นสามารถนำมาใช้สำหรับการเข้าร่วมด้วยตนเองได้
ไวยากรณ์สำหรับการเข้าร่วมด้วยตนเองนั้นคล้ายกับสิ่งที่ฉันแสดงให้คุณเห็นก่อนหน้านี้ ข้อแตกต่างที่สำคัญคือตารางเดียวกันมีการอ้างอิงใน FROM และ JOIN
SELECT columns
FROM table1 t1
JOIN table1 t2
ON t1.column = t2.column;
นอกจากนี้ คุณต้องให้นามแฝงสองรายการแก่ตารางเพื่อแยกความแตกต่างระหว่างกัน สิ่งที่คุณกำลังทำคือการเข้าร่วมโต๊ะด้วยตัวมันเองและถือว่ามันเป็นสองตาราง
ฉันแค่อยากจะพูดถึงเรื่องนี้ที่นี่ แต่ฉันจะไม่ลงรายละเอียดเพิ่มเติม หากคุณสนใจที่จะเข้าร่วมด้วยตนเอง โปรดดูคำแนะนำที่มีภาพประกอบนี้ที่ เข้าร่วมด้วยตนเองใน SQL.
ถึงเวลาที่จะแสดงให้คุณเห็นว่าทุกสิ่งที่ฉันกล่าวถึงนั้นใช้งานได้จริงอย่างไร ฉันจะใช้ คำถามสัมภาษณ์ SQL JOIN จาก StrataScratch เพื่อแสดงการรวมแต่ละประเภทที่แตกต่างกันใน SQL
1. เข้าร่วมตัวอย่าง
คำถามนี้โดย Microsoft ต้องการให้คุณแสดงรายการแต่ละโครงการและคำนวณงบประมาณของโครงการโดยพนักงาน
โครงการราคาแพง
“เมื่อพิจารณาจากรายชื่อโครงการและพนักงานที่เชื่อมโยงกับแต่ละโครงการ ให้คำนวณตามจำนวนงบประมาณโครงการที่จัดสรรให้กับพนักงานแต่ละคน ผลลัพธ์ควรรวมชื่อโครงการและงบประมาณโครงการปัดเศษให้เป็นจำนวนเต็มที่ใกล้เคียงที่สุด เรียงลำดับรายการของคุณตามโครงการที่มีงบประมาณสูงสุดต่อพนักงานก่อน”
ข้อมูล
คำถามให้สองตาราง
ms_projects
ID: | int |
ชื่อเรื่อง: | วาร์ชาร์ |
งบประมาณ: | int |
ms_emp_projects
emp_id: | int |
โครงการ_id: | int |
ตอนนี้รหัสคอลัมน์ในตาราง ms_projects คือคีย์หลักของตาราง คอลัมน์เดียวกันนี้สามารถพบได้ในตาราง ms_emp_projectsแม้ว่าจะมีชื่ออื่น: project_id นี่คือคีย์นอกของตาราง โดยอ้างอิงถึงตารางแรก
ฉันจะใช้สองคอลัมน์นี้เพื่อรวมตารางในโซลูชันของฉัน
รหัส
SELECT title AS project, ROUND((budget/COUNT(emp_id)::FLOAT)::NUMERIC, 0) AS budget_emp_ratio
FROM ms_projects a
JOIN ms_emp_projects b ON a.id = b.project_id
GROUP BY title, budget
ORDER BY budget_emp_ratio DESC;
ฉันเข้าร่วมทั้งสองตารางโดยใช้ JOIN โต๊ะ ms_projects มีการอ้างอิงใน FROM ในขณะที่ ms_emp_projects มีการอ้างอิงหลังจาก JOIN ฉันตั้งชื่อแทนให้กับทั้งสองตาราง ทำให้ฉันไม่สามารถใช้ชื่อยาวของตารางได้ในภายหลัง
ตอนนี้ ฉันต้องระบุคอลัมน์ที่ฉันต้องการรวมตาราง ฉันได้บอกไปแล้วว่าคอลัมน์ใดเป็นคีย์หลักในตารางหนึ่งและเป็นคีย์ต่างประเทศในอีกตารางหนึ่ง ดังนั้นฉันจะใช้คอลัมน์เหล่านี้ที่นี่
ฉันเท่ากับสองคอลัมน์นี้เพราะฉันต้องการรับข้อมูลทั้งหมดที่รหัสโครงการเหมือนกัน ฉันยังใช้นามแฝงของตารางที่หน้าแต่ละคอลัมน์ด้วย
ตอนนี้ฉันสามารถเข้าถึงข้อมูลในทั้งสองตารางแล้ว ฉันสามารถแสดงรายการคอลัมน์ใน SELECT ได้ คอลัมน์แรกคือชื่อโครงการ และคอลัมน์ที่สองถูกคำนวณ
การคำนวณนี้ใช้ฟังก์ชัน COUNT() เพื่อนับจำนวนพนักงานตามแต่ละโครงการ จากนั้นฉันก็แบ่งงบประมาณของแต่ละโครงการด้วยจำนวนพนักงาน ฉันยังแปลงผลลัพธ์เป็นค่าทศนิยมและปัดเศษให้เป็นทศนิยมศูนย์
เอาท์พุต
นี่คือสิ่งที่แบบสอบถามส่งคืน
2. ตัวอย่างการเข้าร่วมด้านซ้าย
มาฝึกเข้าร่วมนี้กัน คำถามสัมภาษณ์ Airbnb. ต้องการให้คุณค้นหาจำนวนคำสั่งซื้อ จำนวนลูกค้า และต้นทุนรวมของคำสั่งซื้อสำหรับแต่ละเมือง
คำสั่งซื้อและรายละเอียดของลูกค้า
“ค้นหาจำนวนคำสั่งซื้อ จำนวนลูกค้า และต้นทุนรวมของคำสั่งซื้อสำหรับแต่ละเมือง รวมเฉพาะเมืองที่ทำการสั่งซื้ออย่างน้อย 5 รายการ และนับลูกค้าทั้งหมดในแต่ละเมือง แม้ว่าพวกเขาจะไม่ได้ทำการสั่งซื้อก็ตาม
ส่งออกการคำนวณแต่ละครั้งพร้อมกับชื่อเมืองที่เกี่ยวข้อง”
ข้อมูล
คุณได้รับตาราง ลูกค้า และ คำสั่งซื้อ.
ลูกค้า
ID: | int |
ชื่อจริง: | วาร์ชาร์ |
นามสกุล: | วาร์ชาร์ |
เมือง: | วาร์ชาร์ |
ที่อยู่: | วาร์ชาร์ |
หมายเลขโทรศัพท์: | วาร์ชาร์ |
คำสั่งซื้อ
ID: | int |
cust_id: | int |
วันสั่ง: | วันเวลา |
สั่งซื้อ_รายละเอียด: | วาร์ชาร์ |
ยอดรวม_การสั่งซื้อ_ต้นทุน: | int |
คอลัมน์ที่ใช้ร่วมกันเป็นรหัสจากตาราง ลูกค้า และ cust_id จากตาราง คำสั่งซื้อ. ฉันจะใช้คอลัมน์เหล่านี้เพื่อรวมตาราง
รหัส
ต่อไปนี้เป็นวิธีการแก้ปัญหานี้โดยใช้ LEFT JOIN
SELECT c.city, COUNT(DISTINCT o.id) AS orders_per_city, COUNT(DISTINCT c.id) AS customers_per_city, SUM(o.total_order_cost) AS orders_cost_per_city
FROM customers c
LEFT JOIN orders o ON c.id = o.cust_id
GROUP BY c.city
HAVING COUNT(o.id) >=5;
ฉันอ้างอิงตาราง ลูกค้า ใน FROM (นี่คือตารางด้านซ้ายของเรา) และ LEFT JOIN ด้วย คำสั่งซื้อ ในคอลัมน์รหัสลูกค้า
ตอนนี้ฉันสามารถเลือกเมือง ใช้ COUNT() เพื่อรับจำนวนคำสั่งซื้อและลูกค้าตามเมือง และใช้ SUM() เพื่อคำนวณต้นทุนรวมของคำสั่งซื้อตามเมือง
หากต้องการคำนวณตามเมือง ฉันจะจัดกลุ่มผลลัพธ์ตามเมือง
มีคำขอพิเศษอย่างหนึ่งในคำถาม: “รวมเฉพาะเมืองที่มีคำสั่งซื้ออย่างน้อย 5 รายการ…” ฉันใช้ HAVING เพื่อแสดงเฉพาะเมืองที่มีคำสั่งซื้อตั้งแต่ XNUMX รายการขึ้นไปเพื่อให้บรรลุเป้าหมายนั้น
คำถามคือทำไมฉันถึงใช้ LEFT JOIN และไม่ สมัคร? เบาะแสอยู่ในคำถาม:”...และนับลูกค้าทั้งหมดในแต่ละเมือง แม้ว่าพวกเขาจะไม่ได้สั่งซื้อก็ตาม” อาจเป็นไปได้ว่าลูกค้าบางรายไม่ได้ทำการสั่งซื้อ ซึ่งหมายความว่าฉันต้องการแสดงลูกค้าทั้งหมดจากโต๊ะ ลูกค้าซึ่งเหมาะกับคำจำกัดความของ LEFT JOIN อย่างสมบูรณ์แบบ
หากฉันใช้ JOIN ผลลัพธ์คงจะผิด เพราะฉันจะพลาดลูกค้าที่ไม่ได้ส่งคำสั่งซื้อใดๆ
หมายเหตุ: ความซับซ้อนของการเข้าร่วมใน SQL ไม่ได้สะท้อนให้เห็นในรูปแบบไวยากรณ์ แต่ในความหมาย! อย่างที่คุณเห็น การรวมแต่ละรายการจะเขียนในลักษณะเดียวกัน มีเพียงคำสำคัญเท่านั้นที่เปลี่ยนแปลง อย่างไรก็ตาม การรวมแต่ละรายการทำงานแตกต่างกัน ดังนั้นจึงสามารถแสดงผลลัพธ์ที่แตกต่างกันได้ขึ้นอยู่กับข้อมูล ด้วยเหตุนี้ จึงจำเป็นอย่างยิ่งที่คุณจะต้องเข้าใจอย่างถ่องแท้ว่าการเข้าร่วมแต่ละครั้งทำอะไร และเลือกอันที่จะคืนสิ่งที่คุณต้องการอย่างแน่นอน!
เอาท์พุต
ตอนนี้เรามาดูผลลัพธ์กันดีกว่า
3. ตัวอย่างการเข้าร่วมที่ถูกต้อง
RIGHT JOIN คือภาพสะท้อนของ LEFT JOIN นั่นเป็นเหตุผลที่ฉันสามารถแก้ไขปัญหาก่อนหน้านี้ได้อย่างง่ายดายโดยใช้ RIGHT JOIN ฉันขอแสดงวิธีการทำ
ข้อมูล
โต๊ะยังคงเหมือนเดิม ฉันจะใช้การเข้าร่วมประเภทอื่น
รหัส
SELECT c.city, COUNT(DISTINCT o.id) AS orders_per_city, COUNT(DISTINCT c.id) AS customers_per_city, SUM(o.total_order_cost) AS orders_cost_per_city
FROM orders o
RIGHT JOIN customers c ON o.cust_id = c.id GROUP BY c.city
HAVING COUNT(o.id) >=5;
นี่คือสิ่งที่เปลี่ยนแปลงไป ขณะที่ฉันใช้ RIGHT JOIN ฉันจึงเปลี่ยนลำดับของตาราง ตอนนี้โต๊ะ คำสั่งซื้อ กลายเป็นคนซ้ายและโต๊ะ ลูกค้า คนที่ใช่. เงื่อนไขการเข้าร่วมยังคงเหมือนเดิม ฉันเพิ่งเปลี่ยนลำดับของคอลัมน์เพื่อแสดงลำดับของตาราง แต่ก็ไม่จำเป็นต้องทำ
ด้วยการสลับลำดับของตารางและใช้ RIGHT JOIN ฉันจะส่งออกลูกค้าทั้งหมดอีกครั้ง แม้ว่าพวกเขาจะไม่ได้ส่งคำสั่งซื้อใดๆ ก็ตาม
แบบสอบถามที่เหลือจะเหมือนกับในตัวอย่างก่อนหน้า เช่นเดียวกับผลลัพธ์
หมายเหตุ: ในทางปฏิบัติ ขวาเข้าร่วม ค่อนข้างไม่ค่อยได้ใช้ LEFT JOIN ดูเป็นธรรมชาติมากกว่าสำหรับผู้ใช้ SQL ดังนั้นพวกเขาจึงใช้บ่อยกว่ามาก อะไรก็ตามที่สามารถทำได้ด้วย RIGHT JOIN ก็สามารถทำได้ด้วย LEFT JOIN เช่นกัน ด้วยเหตุนี้ จึงไม่มีสถานการณ์เฉพาะที่อาจต้องการ RIGHT JOIN
เอาท์พุต
4. ตัวอย่างการเข้าร่วมแบบเต็ม
คำถามโดย Salesforce และ Tesla ต้องการให้คุณนับผลต่างสุทธิระหว่างจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปี 2020 กับจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปีที่แล้ว
สินค้าใหม่
“คุณจะได้รับตารางการเปิดตัวผลิตภัณฑ์แยกตามบริษัทในแต่ละปี เขียนแบบสอบถามเพื่อนับผลต่างสุทธิระหว่างจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปี 2020 กับจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปีที่แล้ว แสดงชื่อบริษัทและผลต่างสุทธิของผลิตภัณฑ์สุทธิที่ออกในปี 2020 เมื่อเทียบกับปีที่แล้ว”
ข้อมูล
คำถามให้หนึ่งตารางที่มีคอลัมน์ต่อไปนี้
รถ_เปิดตัว
ปี: | int |
ชื่อ บริษัท: | วาร์ชาร์ |
ชื่อผลิตภัณฑ์: | วาร์ชาร์ |
ฉันจะเข้าร่วมโต๊ะได้ยังไงในเมื่อมีเพียงโต๊ะเดียว? อืม มาดูกันด้วย!
รหัส
คำถามนี้ซับซ้อนกว่าเล็กน้อย ดังนั้นฉันจะค่อยๆ เปิดเผย
SELECT company_name, product_name AS brand_2020
FROM car_launches
WHERE YEAR = 2020;
คำสั่ง SELECT แรกจะค้นหาบริษัทและชื่อผลิตภัณฑ์ในปี 2020 คำค้นหานี้จะถูกเปลี่ยนเป็นแบบสอบถามย่อยในภายหลัง
คำถามต้องการให้คุณค้นหาความแตกต่างระหว่างปี 2020 และ 2019 เรามาเขียนคำถามเดียวกันแต่สำหรับปี 2019 กันดีกว่า
SELECT company_name, product_name AS brand_2019
FROM car_launches
WHERE YEAR = 2019;
ตอนนี้ฉันจะสร้างแบบสอบถามเหล่านี้เป็นแบบสอบถามย่อยและเข้าร่วมโดยใช้ FULL OUTER JOIN
SELECT *
FROM (SELECT company_name, product_name AS brand_2020 FROM car_launches WHERE YEAR = 2020) a
FULL OUTER JOIN (SELECT company_name, product_name AS brand_2019 FROM car_launches WHERE YEAR = 2019) b ON a.company_name = b.company_name;
แบบสอบถามย่อยสามารถถือเป็นตารางและสามารถรวมเข้าด้วยกันได้ ฉันตั้งชื่อแทนให้กับแบบสอบถามย่อยแรก และวางไว้ในส่วนคำสั่ง FROM จากนั้นฉันใช้ FULL OUTER JOIN เพื่อรวมเข้ากับแบบสอบถามย่อยที่สองในคอลัมน์ชื่อบริษัท
เมื่อใช้การรวม SQL ประเภทนี้ ฉันจะทำให้บริษัทและผลิตภัณฑ์ทั้งหมดในปี 2020 รวมเข้ากับบริษัทและผลิตภัณฑ์ทั้งหมดในปี 2019
ตอนนี้ฉันสามารถสรุปคำถามของฉันได้แล้ว มาเลือกชื่อบริษัทกัน นอกจากนี้ ฉันจะใช้ฟังก์ชัน COUNT() เพื่อค้นหาจำนวนผลิตภัณฑ์ที่เปิดตัวในแต่ละปี แล้วลบออกเพื่อให้ได้ความแตกต่าง สุดท้ายนี้ ฉันจะจัดกลุ่มผลลัพธ์ตามบริษัทและจัดเรียงตามบริษัทตามตัวอักษรด้วย
นี่คือคำถามทั้งหมด
SELECT a.company_name, (COUNT(DISTINCT a.brand_2020)-COUNT(DISTINCT b.brand_2019)) AS net_products
FROM (SELECT company_name, product_name AS brand_2020 FROM car_launches WHERE YEAR = 2020) a
FULL OUTER JOIN (SELECT company_name, product_name AS brand_2019 FROM car_launches WHERE YEAR = 2019) b ON a.company_name = b.company_name
GROUP BY a.company_name
ORDER BY company_name;
เอาท์พุต
นี่คือรายชื่อบริษัทและผลิตภัณฑ์ที่เปิดตัวที่แตกต่างกันระหว่างปี 2020 และ 2019
5. ตัวอย่าง CROSS JOIN
คำถามนี้โดย Deloitte เหมาะอย่างยิ่งสำหรับการแสดงให้เห็นว่า CROSS JOIN ทำงานอย่างไร
สูงสุดสองตัวเลข
“เมื่อพิจารณาจากตัวเลขคอลัมน์เดียว ให้พิจารณาการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของตัวเลขสองตัว โดยสมมติว่าคู่ของตัวเลข (x,y) และ (y,x) เป็นการเรียงสับเปลี่ยนที่แตกต่างกันสองค่า จากนั้นในการเรียงสับเปลี่ยนแต่ละครั้ง ให้หาค่าสูงสุดของตัวเลขทั้งสองตัว
เอาต์พุตสามคอลัมน์: ตัวเลขแรก ตัวเลขที่สอง และค่าสูงสุดของทั้งสอง”
คำถามต้องการให้คุณค้นหาการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของตัวเลขสองตัว โดยสมมติว่าคู่ของตัวเลข (x,y) และ (y,x) เป็นการเรียงสับเปลี่ยนที่แตกต่างกันสองจำนวน จากนั้นเราจำเป็นต้องค้นหาจำนวนสูงสุดสำหรับการเรียงสับเปลี่ยนแต่ละครั้ง
ข้อมูล
คำถามให้ตารางหนึ่งตารางกับหนึ่งคอลัมน์
deloitte_numbers
จำนวน: | int |
รหัส
รหัสนี้เป็นตัวอย่างของ CROSS JOIN แต่ยังเป็นการเข้าร่วมด้วยตนเองด้วย
SELECT dn1.number AS number1, dn2.number AS number2, CASE WHEN dn1.number > dn2.number THEN dn1.number ELSE dn2.number END AS max_number
FROM deloitte_numbers AS dn1
CROSS JOIN deloitte_numbers AS dn2;
ฉันอ้างอิงตารางใน FROM และตั้งชื่อหนึ่งนามแฝงให้กับมัน จากนั้นฉันก็ CROSS JOIN ด้วยตัวมันเองโดยอ้างอิงหลังจาก CROSS JOIN และให้นามแฝงอื่นแก่ตาราง
ตอนนี้คุณสามารถใช้ตารางเดียวเนื่องจากเป็นสองตารางได้ ฉันเลือกหมายเลขคอลัมน์จากแต่ละตาราง จากนั้นฉันใช้คำสั่ง CASE เพื่อกำหนดเงื่อนไขที่จะแสดงจำนวนสูงสุดของตัวเลขทั้งสอง
เหตุใด CROSS JOIN จึงใช้ที่นี่ โปรดจำไว้ว่า เป็นการรวม SQL ประเภทหนึ่งที่จะแสดงชุดค่าผสมทั้งหมดของแถวทั้งหมดจากตารางทั้งหมด นั่นคือสิ่งที่คำถามถาม!
เอาท์พุต
นี่คือภาพรวมของชุดค่าผสมทั้งหมดและจำนวนที่สูงกว่าของทั้งสองชุด
เมื่อคุณทราบวิธีใช้การรวม SQL แล้ว คำถามก็คือ จะนำความรู้นั้นไปใช้ในด้านวิทยาศาสตร์ข้อมูลได้อย่างไร
SQL Joins มีบทบาทสำคัญในงานวิทยาศาสตร์ข้อมูล เช่น การสำรวจข้อมูล การล้างข้อมูล และวิศวกรรมฟีเจอร์
ต่อไปนี้คือตัวอย่างเล็กๆ น้อยๆ ของวิธีการใช้ประโยชน์จากการรวม SQL:
- การรวมข้อมูล: การรวมตารางทำให้คุณสามารถรวบรวมแหล่งข้อมูลต่างๆ เข้าด้วยกัน ทำให้คุณสามารถวิเคราะห์ความสัมพันธ์และความสัมพันธ์ระหว่างชุดข้อมูลหลายชุดได้ ตัวอย่างเช่น การรวมตารางลูกค้าเข้ากับตารางธุรกรรมสามารถให้ข้อมูลเชิงลึกเกี่ยวกับพฤติกรรมของลูกค้าและรูปแบบการซื้อได้
- การตรวจสอบข้อมูล: การรวมสามารถใช้เพื่อตรวจสอบคุณภาพและความสมบูรณ์ของข้อมูล ด้วยการเปรียบเทียบข้อมูลจากตารางต่างๆ คุณสามารถระบุความไม่สอดคล้องกัน ค่าที่หายไป หรือค่าผิดปกติได้ สิ่งนี้ช่วยคุณในการล้างข้อมูลและรับรองว่าข้อมูลที่ใช้สำหรับการวิเคราะห์นั้นถูกต้องและเชื่อถือได้
- วิศวกรรมคุณลักษณะ: การรวมสามารถเป็นเครื่องมือในการสร้างคุณสมบัติใหม่สำหรับโมเดลการเรียนรู้ของเครื่อง ด้วยการรวมตารางที่เกี่ยวข้อง คุณสามารถแยกข้อมูลที่มีความหมายและสร้างคุณลักษณะที่รวบรวมความสัมพันธ์ที่สำคัญภายในข้อมูลได้ ซึ่งสามารถเพิ่มพลังการทำนายให้กับโมเดลของคุณได้
- การรวมกลุ่มและการวิเคราะห์: การรวมทำให้คุณสามารถดำเนินการรวมและวิเคราะห์ที่ซับซ้อนในหลายตารางได้ ด้วยการรวมข้อมูลจากแหล่งต่างๆ คุณจะได้รับมุมมองข้อมูลที่ครอบคลุมและรับข้อมูลเชิงลึกอันมีค่า ตัวอย่างเช่น การเข้าร่วมตารางการขายกับตารางผลิตภัณฑ์สามารถช่วยคุณวิเคราะห์ประสิทธิภาพการขายตามประเภทผลิตภัณฑ์หรือภูมิภาคได้
ดังที่ฉันได้กล่าวไปแล้ว ความซับซ้อนของการรวมไม่แสดงในรูปแบบไวยากรณ์ คุณเห็นว่าไวยากรณ์นั้นค่อนข้างตรงไปตรงมา
แนวทางปฏิบัติที่ดีที่สุดสำหรับการเข้าร่วมยังสะท้อนให้เห็นเช่นกัน เนื่องจากไม่ได้เกี่ยวข้องกับการเขียนโค้ด แต่สนใจว่าการรวมทำอะไรและทำงานอย่างไร
เมื่อต้องการใช้ประโยชน์สูงสุดจากการรวมใน SQL ให้พิจารณาแนวทางปฏิบัติที่ดีที่สุดต่อไปนี้
- ทำความเข้าใจข้อมูลของคุณ: ทำความคุ้นเคยกับโครงสร้างและความสัมพันธ์ภายในข้อมูลของคุณ ซึ่งจะช่วยให้คุณเลือกประเภทการรวมที่เหมาะสมและเลือกคอลัมน์ที่เหมาะสมสำหรับการจับคู่
- ใช้ดัชนี: หากตารางของคุณมีขนาดใหญ่หรือเชื่อมต่อกันบ่อยครั้ง ให้พิจารณาเพิ่มดัชนีในคอลัมน์ที่ใช้ในการรวม ดัชนีสามารถปรับปรุงประสิทธิภาพการค้นหาได้อย่างมาก
- คำนึงถึงประสิทธิภาพ: การเข้าร่วมตารางขนาดใหญ่หรือหลายตารางอาจมีค่าใช้จ่ายสูงในการคำนวณ เพิ่มประสิทธิภาพการสืบค้นของคุณโดยการกรองข้อมูล การใช้ประเภทการรวมที่เหมาะสม และพิจารณาการใช้ตารางชั่วคราวหรือแบบสอบถามย่อย
- ทดสอบและตรวจสอบ: ตรวจสอบผลลัพธ์การเข้าร่วมของคุณเสมอเพื่อให้แน่ใจว่าถูกต้อง ดำเนินการตรวจสอบความถูกต้องและตรวจสอบว่าข้อมูลที่เข้าร่วมนั้นสอดคล้องกับความคาดหวังและตรรกะทางธุรกิจของคุณ
SQL Joins เป็นแนวคิดพื้นฐานที่ช่วยให้คุณในฐานะนักวิทยาศาสตร์ข้อมูลสามารถผสานและวิเคราะห์ข้อมูลจากหลายแหล่งได้ ด้วยการทำความเข้าใจ SQL join ประเภทต่างๆ เชี่ยวชาญไวยากรณ์ และใช้ประโยชน์จากมันอย่างมีประสิทธิภาพ นักวิทยาศาสตร์ด้านข้อมูลสามารถปลดล็อกข้อมูลเชิงลึกอันมีค่า ตรวจสอบคุณภาพข้อมูล และขับเคลื่อนการตัดสินใจที่ขับเคลื่อนด้วยข้อมูล
ฉันแสดงให้คุณเห็นวิธีการทำในห้าตัวอย่าง ตอนนี้ก็ขึ้นอยู่กับคุณแล้วที่จะควบคุมพลังของ SQL และเข้าร่วมโครงการวิทยาศาสตร์ข้อมูลของคุณและบรรลุผลลัพธ์ที่ดีขึ้น
เนท โรซิดิ เป็นนักวิทยาศาสตร์ข้อมูลและในกลยุทธ์ผลิตภัณฑ์ เขายังเป็นผู้ช่วยศาสตราจารย์สอนการวิเคราะห์และเป็นผู้ก่อตั้ง StrataScratchซึ่งเป็นแพลตฟอร์มที่ช่วยให้นักวิทยาศาสตร์ด้านข้อมูลเตรียมพร้อมสำหรับการสัมภาษณ์ด้วยคำถามสัมภาษณ์จริงจากบริษัทชั้นนำ เชื่อมต่อกับเขาที่ ทวิตเตอร์: StrataScratch or LinkedIn.
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- PlatoData.Network Vertical Generative Ai เพิ่มพลังให้กับตัวเอง เข้าถึงได้ที่นี่.
- เพลโตไอสตรีม. Web3 อัจฉริยะ ขยายความรู้ เข้าถึงได้ที่นี่.
- เพลโตESG. ยานยนต์ / EVs, คาร์บอน, คลีนเทค, พลังงาน, สิ่งแวดล้อม แสงอาทิตย์, การจัดการของเสีย. เข้าถึงได้ที่นี่.
- BlockOffsets การปรับปรุงการเป็นเจ้าของออฟเซ็ตด้านสิ่งแวดล้อมให้ทันสมัย เข้าถึงได้ที่นี่.
- ที่มา: https://www.kdnuggets.com/2023/08/sql-data-science-understanding-leveraging-joins.html?utm_source=rss&utm_medium=rss&utm_campaign=sql-for-data-science-understanding-and-leveraging-joins
- :เป็น
- :ไม่
- :ที่ไหน
- $ ขึ้น
- 1
- 11
- 12
- 13
- 2019
- 2020
- 7
- 8
- a
- เกี่ยวกับเรา
- เข้า
- การเข้าถึงข้อมูล
- ถูกต้อง
- บรรลุ
- ข้าม
- เพิ่ม
- ผู้ช่วย
- หลังจาก
- อีกครั้ง
- การรวมตัว
- จัดแนว
- ทั้งหมด
- จัดสรร
- อนุญาต
- การอนุญาต
- ช่วยให้
- ตาม
- แล้ว
- ด้วย
- เสมอ
- จำนวน
- จำนวน
- an
- การวิเคราะห์
- การวิเคราะห์
- วิเคราะห์
- และ
- อื่น
- ใด
- สิ่งใด
- เหมาะสม
- เป็น
- บทความ
- AS
- At
- b
- ตาม
- ขั้นพื้นฐาน
- BE
- เพราะ
- จะกลายเป็น
- รับ
- กำลัง
- ที่ดีที่สุด
- ปฏิบัติที่ดีที่สุด
- ดีกว่า
- ระหว่าง
- ทั้งสอง
- นำมาซึ่ง
- งบ
- ธุรกิจ
- แต่
- by
- คำนวณ
- คำนวณ
- ที่เรียกว่า
- CAN
- จับ
- กรณี
- หมวดหมู่
- การเปลี่ยนแปลง
- การเปลี่ยนแปลง
- การตรวจสอบ
- Choose
- เมือง
- เมือง
- การทำความสะอาด
- รหัส
- การเข้ารหัส
- คอลัมน์
- คอลัมน์
- COM
- รวม
- รวมกัน
- รวม
- การรวมกัน
- มา
- ร่วมกัน
- บริษัท
- บริษัท
- เมื่อเทียบกับ
- เปรียบเทียบ
- ซับซ้อน
- ความซับซ้อน
- ซับซ้อน
- ครอบคลุม
- แนวคิด
- เกี่ยวข้อง
- สภาพ
- เชื่อมต่อ
- การเชื่อมต่อ
- พิจารณา
- พิจารณา
- แปลง
- ตรงกัน
- ราคา
- สร้าง
- การสร้าง
- ข้าม
- สำคัญมาก
- ลูกค้า
- พฤติกรรมของลูกค้า
- ลูกค้า
- ข้อมูล
- คุณภาพของข้อมูล
- วิทยาศาสตร์ข้อมูล
- นักวิทยาศาสตร์ข้อมูล
- ที่ขับเคลื่อนด้วยข้อมูล
- ฐานข้อมูล
- ฐานข้อมูล
- ชุดข้อมูล
- การตัดสินใจ
- การตัดสินใจ
- คำนิยาม
- ทั้งนี้ขึ้นอยู่กับ
- ได้รับการออกแบบ
- รายละเอียด
- DID
- ความแตกต่าง
- ต่าง
- แตกต่าง
- เห็นความแตกต่าง
- do
- ทำ
- ไม่
- การทำ
- ทำ
- ขับรถ
- e
- แต่ละ
- ก่อน
- ง่ายดาย
- อย่างง่ายดาย
- มีประสิทธิภาพ
- อื่น
- ลูกจ้าง
- พนักงาน
- ให้อำนาจ
- ทำให้สามารถ
- การเปิดใช้งาน
- ปลาย
- ชั้นเยี่ยม
- เสริม
- ทำให้มั่นใจ
- เพื่อให้แน่ใจ
- เท่ากัน
- ก่อตั้ง
- แม้
- ทุกอย่าง
- เผง
- ตัวอย่าง
- ตัวอย่าง
- ความคาดหวัง
- แพง
- อธิบาย
- การสำรวจ
- พิเศษ
- สารสกัด
- ลักษณะ
- คุณสมบัติ
- สองสาม
- สนาม
- การกรอก
- กรอง
- จบ
- ในที่สุด
- หา
- พบ
- ชื่อจริง
- ห้า
- ลอย
- โฟกัส
- ปฏิบัติตาม
- ดังต่อไปนี้
- ดังต่อไปนี้
- สำหรับ
- ต่างประเทศ
- พบ
- ผู้สร้าง
- มัก
- ราคาเริ่มต้นที่
- ด้านหน้า
- เต็ม
- อย่างเต็มที่
- ฟังก์ชัน
- พื้นฐาน
- ต่อไป
- ได้รับ
- สร้าง
- ได้รับ
- ให้
- กำหนด
- จะช่วยให้
- ให้
- ไป
- ไป
- ค่อยๆ
- ยิ่งใหญ่
- บัญชีกลุ่ม
- ให้คำแนะนำ
- เทียม
- มี
- มี
- he
- หนัก
- ช่วย
- การช่วยเหลือ
- จะช่วยให้
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- สูงกว่า
- ที่สูงที่สุด
- พระองค์
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- อย่างไรก็ตาม
- HTTPS
- i
- ฉันเป็น
- ID
- ระบุ
- แยกแยะ
- if
- ภาพ
- สำคัญ
- ปรับปรุง
- in
- ในอื่น ๆ
- ประกอบด้วย
- ดัชนี
- ข้อมูล
- แจ้ง
- ข้อมูลเชิงลึก
- แทน
- เป็นเครื่องมือ
- ความสมบูรณ์
- สนใจ
- สัมภาษณ์
- คำถามในการสัมภาษณ์
- บทสัมภาษณ์
- เข้าไป
- IT
- ITS
- ตัวเอง
- ร่วม
- เข้าร่วม
- การร่วม
- ร่วม
- jpg
- เพียงแค่
- KD นักเก็ต
- คีย์
- คำหลัก
- ทราบ
- ความรู้
- ภาษา
- ใหญ่
- ต่อมา
- เปิดตัว
- การเปิดตัว
- การเรียนรู้
- น้อยที่สุด
- ซ้าย
- การใช้ประโยชน์
- กดไลก์
- LINK
- รายการ
- น้อย
- ตรรกะ
- นาน
- ดู
- LOOKS
- เครื่อง
- เรียนรู้เครื่อง
- ทำ
- หลัก
- ทำ
- การทำ
- การจัดการ
- การจัดการกับ
- Mastering
- การจับคู่
- จับคู่
- การจับคู่
- สูงสุด
- me
- มีความหมาย
- วิธี
- กล่าวถึง
- ผสาน
- การผสม
- อาจ
- กระจก
- ภาพสะท้อน
- พลาด
- หายไป
- โมเดล
- ข้อมูลเพิ่มเติม
- มากที่สุด
- มาก
- หลาย
- my
- ชื่อ
- ชื่อ
- โดยธรรมชาติ
- ธรรมชาติ
- จำเป็น
- จำเป็นต้อง
- จำเป็น
- สุทธิ
- ใหม่
- คุณสมบัติใหม่
- ไม่
- ตอนนี้
- จำนวน
- ตัวเลข
- of
- มักจะ
- on
- ONE
- เพียง
- ตรงข้าม
- เพิ่มประสิทธิภาพ
- or
- ใบสั่ง
- คำสั่งซื้อ
- อื่นๆ
- ของเรา
- ออก
- เอาท์พุต
- คู่
- รูปแบบ
- ต่อ
- ดำเนินการ
- การปฏิบัติ
- ดำเนินการ
- ดำเนินการ
- สถานที่
- สถานที่
- เวที
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- เล่น
- กรุณา
- เป็นไปได้
- อำนาจ
- ที่มีประสิทธิภาพ
- การปฏิบัติ
- การปฏิบัติ
- ที่ต้องการ
- เตรียมการ
- ก่อน
- ประถม
- ปัญหา
- ผลิตภัณฑ์
- ผลิตภัณฑ์
- ศาสตราจารย์
- การเขียนโปรแกรม
- โครงการ
- โครงการ
- ให้
- ให้
- การจัดซื้อ
- คุณภาพ
- คำสั่ง
- คำถาม
- คำถาม
- ไม่ค่อยมี
- จริง
- ระเบียน
- การอ้างอิง
- อ้างอิง
- สะท้อน
- สะท้อนให้เห็นถึง
- ภูมิภาค
- ที่เกี่ยวข้อง
- ความสัมพันธ์
- สัมพัทธ์
- การเผยแพร่
- ตรงประเด็น
- น่าเชื่อถือ
- จำ
- ขอ
- REST
- ผล
- ผลสอบ
- กลับ
- รับคืน
- เปิดเผย
- ขวา
- บทบาท
- ปัดเศษ
- s
- ขาย
- Salesforce
- เดียวกัน
- เห็น
- วิทยาศาสตร์
- นักวิทยาศาสตร์
- นักวิทยาศาสตร์
- ที่สอง
- เห็น
- ดูเหมือนว่า
- ตนเอง
- แยก
- ชุด
- หลาย
- ที่ใช้ร่วมกัน
- ชวเลข
- น่า
- โชว์
- แสดง
- แสดงให้เห็นว่า
- การแสดง
- แสดงให้เห็นว่า
- อย่างมีความหมาย
- คล้ายคลึงกัน
- ง่ายดาย
- เดียว
- สถานการณ์
- ภาพย่อ
- So
- ทางออก
- แก้
- แหล่งที่มา
- โดยเฉพาะ
- SQL
- คำแถลง
- เข้าพัก
- ซื่อตรง
- กลยุทธ์
- โครงสร้าง
- โครงสร้าง
- อย่างเช่น
- เปลี่ยน
- วากยสัมพันธ์
- T1
- ตาราง
- พูดคุย
- งาน
- การเรียนการสอน
- ชั่วคราว
- ทดสอบ
- ที่
- พื้นที่
- ของพวกเขา
- พวกเขา
- แล้วก็
- ที่นั่น
- ดังนั้น
- ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน
- พวกเขา
- นี้
- สาม
- เวลา
- ชื่อหนังสือ
- ไปยัง
- ร่วมกัน
- กล่องเครื่องมือ
- เครื่องมือ
- ด้านบน
- รวม
- การทำธุกรรม
- ได้รับการรักษา
- การรักษาเยียวยา
- หัน
- สอง
- ชนิด
- ชนิด
- เข้าใจ
- ความเข้าใจ
- เป็นเอกลักษณ์
- ปลดล็อก
- us
- ใช้
- มือสอง
- ผู้ใช้
- ใช้
- การใช้
- มักจะ
- นำไปใช้
- ตรวจสอบความถูกต้อง
- การตรวจสอบ
- มีคุณค่า
- ความคุ้มค่า
- ต่างๆ
- กว้างใหญ่
- ตรวจสอบ
- รายละเอียด
- การสร้างภาพ
- vs
- ต้องการ
- อยาก
- บกพร่อง
- ต้องการ
- ทาง..
- we
- อะไร
- เมื่อ
- ที่
- ในขณะที่
- ทั้งหมด
- ทำไม
- จะ
- กับ
- ภายใน
- คำ
- โรงงาน
- เขียน
- เขียน
- ผิด
- X
- ปี
- เธอ
- ของคุณ
- ด้วยตัวคุณเอง
- ลมทะเล
- เป็นศูนย์