คำถามสัมภาษณ์ SQL Data Science ขั้นสูง 10 อันดับแรกที่คุณต้องรู้วิธีตอบ

คำถามสัมภาษณ์ SQL Data Science ขั้นสูง 10 อันดับแรกที่คุณต้องรู้วิธีตอบ

โหนดต้นทาง: 1924451

คำถามสัมภาษณ์ SQL Data Science ขั้นสูง 10 อันดับแรกที่คุณต้องรู้วิธีตอบ
ภาพโดยผู้เขียน 

SQL (Structured Query Language) เป็นภาษาโปรแกรมมาตรฐานที่ใช้สำหรับจัดการและจัดการฐานข้อมูล เป็นทักษะที่จำเป็นสำหรับผู้เชี่ยวชาญด้านข้อมูล เนื่องจากช่วยให้สามารถดึงและวิเคราะห์ข้อมูลที่จัดเก็บไว้ในฐานข้อมูลได้อย่างมีประสิทธิภาพ ด้วยเหตุนี้ SQL จึงเป็นหัวข้อทั่วไปในการสัมภาษณ์ทางเทคนิคสำหรับตำแหน่งที่เกี่ยวข้องกับการทำงานกับข้อมูล คล้ายกับนักวิเคราะห์ข้อมูล วิศวกรข้อมูล และผู้ดูแลระบบฐานข้อมูล 

แบบสอบถาม SQL เพื่อค้นหาเงินเดือน / การชำระเงินสูงสุดอันดับ n หรือเงินเดือน / การชำระเงินสูงสุดอันดับ 3

หากต้องการค้นหาเงินเดือนสูงสุดอันดับที่ n คุณสามารถใช้ข้อความค้นหาย่อยที่มีฟังก์ชัน DENSE_RANK() เพื่อคำนวณอันดับหนาแน่นของเงินเดือนแต่ละรายการ จากนั้นกรองผลลัพธ์เพื่อรวมเฉพาะแถวที่มีอันดับเท่ากับ n

SELECT * FROM ( SELECT name, salary, DENSE_RANK() OVER ( ORDER BY salary DESC ) as salary_rank FROM employees ) subquery WHERE salary_rank = n;

 

คุณยังสามารถใช้ส่วนคำสั่ง LIMIT และ OFFSET เพื่อหาเงินเดือนสูงสุดลำดับที่ n ได้ดังต่อไปนี้:

SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET (n - 1);

 

ตัวอย่างเช่น หากต้องการค้นหาเงินเดือนสูงสุดอันดับ 3 คุณจะต้องใช้ข้อความค้นหาต่อไปนี้:

SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET 2;

 

คุณจะปรับการสืบค้น SQL ให้เหมาะสมเพื่อประสิทธิภาพได้อย่างไร

มีหลายวิธีในการเพิ่มประสิทธิภาพการสืบค้น SQL เพื่อประสิทธิภาพที่ดีขึ้น ได้แก่

การจัดทำดัชนี 

การสร้างดัชนีในคอลัมน์หรือกลุ่มของคอลัมน์สามารถปรับปรุงความเร็วของแบบสอบถามที่กรองคอลัมน์เหล่านั้นได้อย่างมาก 

การแยก 

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

normalization 

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

การใช้ประเภทข้อมูลที่เหมาะสม 

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

การใช้ประเภท JOIN ที่เหมาะสม 

การใช้ประเภท JOIN ที่ถูกต้อง (เช่น INNER JOIN, OUTER JOIN, CROSS JOIN) สามารถปรับปรุงประสิทธิภาพของคิวรีที่รวมหลายตารางได้

การใช้ฟังก์ชันรวมที่เหมาะสม 

การใช้ฟังก์ชันการรวมที่เหมาะสม (เช่น SUM, AVG, MIN, MAX) สามารถปรับปรุงประสิทธิภาพของการค้นหาที่ทำการคำนวณชุดข้อมูลขนาดใหญ่ ฟังก์ชันรวมบางฟังก์ชันที่คล้ายกับ COUNT มีประสิทธิภาพมากกว่าฟังก์ชันอื่นๆ ดังนั้นการเลือกฟังก์ชันที่เกี่ยวข้องสำหรับการค้นหาของคุณจึงเป็นเรื่องสำคัญ

คุณใช้ฟังก์ชัน LAG และ LEAD ใน SQL อย่างไร คุณสามารถยกตัวอย่างการใช้งานได้หรือไม่?

ฟังก์ชัน LAG() และ LEAD() เป็นฟังก์ชันหน้าต่างใน SQL ที่ให้คุณเปรียบเทียบค่าในแถวกับค่าในแถวก่อนหน้าหรือแถวถัดไปตามลำดับ ซึ่งมีประโยชน์สำหรับการคำนวณผลรวมที่กำลังทำงานอยู่ หรือสำหรับการเปรียบเทียบค่าในตารางกับค่าในแถวก่อนหน้าหรือแถวถัดไป

พื้นที่ ฟังก์ชัน LAG() รับสองอาร์กิวเมนต์: คอลัมน์ที่จะส่งคืนและจำนวนแถวที่จะย้อนกลับ ตัวอย่างเช่น

SELECT name, salary, LAG(salary, 1) OVER ( ORDER BY salary DESC ) as prev_salary FROM employees;

 

พื้นที่ ฟังก์ชัน LEAD() ทำงานในลักษณะเดียวกัน แต่เดินหน้ามากกว่าถอยหลัง ตัวอย่างเช่น

SELECT name, salary, LEAD(salary, 1) OVER ( ORDER BY salary DESC ) as next_salary FROM employees

อธิบายแนวคิด ETL และ ELT ใน SQL

ETL ( Extract, Transform, Load) เป็นกระบวนการที่ใช้ใน SQL เพื่อดึงข้อมูลจากแหล่งข้อมูลตั้งแต่หนึ่งแหล่งขึ้นไป แปลงข้อมูลเป็นรูปแบบที่เหมาะสมสำหรับการวิเคราะห์หรือการใช้งานอื่น ๆ จากนั้นโหลดข้อมูลลงในระบบเป้าหมาย เช่น ข้อมูล คลังสินค้าหรือ Data Lake

ELT (แยก, โหลด, แปลง) คล้ายกับ ETL แต่ขั้นตอนการแปลงจะดำเนินการหลังจากที่ข้อมูลถูกโหลดเข้าสู่ระบบเป้าหมาย แทนที่จะเป็นก่อนหน้านี้ ซึ่งช่วยให้ระบบเป้าหมายดำเนินการแปลง ซึ่งมีประสิทธิภาพและปรับขนาดได้มากกว่าดำเนินการแปลงในเครื่องมือ ETL ELT มักใช้ในโครงสร้างพื้นฐานข้อมูลสมัยใหม่ ซึ่งใช้เครื่องมือประมวลผลข้อมูลที่มีประสิทธิภาพ (เช่น Apache Spark หรือ Apache Flink) เพื่อดำเนินการขั้นตอนการแปลง

คุณช่วยอธิบายความแตกต่างระหว่างส่วนคำสั่ง WHERE และ HAVING ใน SQL ได้ไหม 

ส่วนคำสั่ง WHERE และ HAVING ใช้เพื่อกรองแถวจากคำสั่ง SELECT ข้อแตกต่างหลักระหว่างสองข้อนี้คือส่วนคำสั่ง WHERE ใช้เพื่อกรองแถวก่อนจัดกลุ่มตามการดำเนินการ ในขณะที่ส่วนคำสั่ง HAVING ใช้เพื่อกรองแถวหลังกลุ่มตามการดำเนินการ

SELECT department, SUM(salary) FROM employees GROUP BY department HAVING SUM(salary) > 100000;

 

ในตัวอย่างนี้ HAVING clause ใช้เพื่อกรองแผนกใดๆ ที่ผลรวมของเงินเดือนสำหรับพนักงานในแผนกนั้นน้อยกว่า 100000 ซึ่งจะทำหลังจากจัดกลุ่มตามการดำเนินการ ดังนั้นจะมีผลเฉพาะกับแถวที่แสดงถึงแต่ละแผนกเท่านั้น

SELECT * FROM employees WHERE salary > 50000;

 

ในตัวอย่างนี้ ส่วนคำสั่ง WHERE ใช้เพื่อกรองพนักงานใดๆ ที่มีเงินเดือนน้อยกว่า 50000 ออก ซึ่งจะทำก่อนกลุ่มใดๆ ตามการดำเนินการ ดังนั้นจึงมีผลกับแถวทั้งหมดในตารางพนักงาน

อธิบายความแตกต่างระหว่างการดำเนินการ TRUNCATE, DROP และ DELETE ใน SQL

ตัด

การดำเนินการ TRUNCATE จะลบแถวทั้งหมดออกจากตาราง แต่ไม่มีผลกับโครงสร้างของตาราง เร็วกว่า DELETE เนื่องจากไม่สร้างการเลิกทำหรือทำซ้ำบันทึกใดๆ และไม่เรียกใช้ทริกเกอร์การลบใดๆ

นี่คือตัวอย่างการใช้คำสั่ง TRUNCATE

TRUNCATE TABLE employees;

 

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

DROP

การดำเนินการ DROP จะลบตารางออกจากฐานข้อมูลและลบข้อมูลทั้งหมดในตาราง นอกจากนี้ยังลบดัชนี ทริกเกอร์ และข้อจำกัดใดๆ ที่เกี่ยวข้องกับตาราง

นี่คือตัวอย่างการใช้คำสั่ง DROP

DROP TABLE employees;

 

คำสั่งนี้จะลบตารางพนักงานออกจากฐานข้อมูล และข้อมูลทั้งหมดในตารางจะถูกลบอย่างถาวร โครงสร้างตารางจะถูกลบออกด้วย

ลบ

การดำเนินการ DELETE จะลบแถวอย่างน้อยหนึ่งแถวออกจากตาราง อนุญาตให้คุณระบุ WHERE clause เพื่อเลือกแถวที่จะลบ นอกจากนี้ยังสร้างการเลิกทำและทำซ้ำบันทึก และเรียกใช้ทริกเกอร์การยกเลิก

นี่คือตัวอย่างการใช้คำสั่ง DELETE

DELETE FROM employees WHERE salary & lt;
50000;

 

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

การเข้าร่วมหรือการสืบค้นย่อยใดมีประสิทธิภาพมากกว่ากัน

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

ตัวอย่างเช่น พิจารณาข้อความค้นหาสองรายการต่อไปนี้ที่ส่งกลับผลลัพธ์เดียวกัน:

SELECT * FROM orders o WHERE o.customer_id IN ( SELECT customer_id FROM customers WHERE country = 'US' );

 

SELECT * FROM orders o WHERE o.customer_id IN ( SELECT customer_id FROM customers WHERE country = 'US' );

 

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

คุณใช้ฟังก์ชั่นหน้าต่างใน SQL อย่างไร

ใน SQL ฟังก์ชันหน้าต่างคือฟังก์ชันที่ทำงานบนชุดของแถว หรือ "หน้าต่าง" ซึ่งกำหนดโดยข้อกำหนดเฉพาะของหน้าต่าง ฟังก์ชันหน้าต่างจะใช้ในการคำนวณข้ามแถว และสามารถใช้ในคำสั่ง SELECT, UPDATE และ DELETE รวมถึงในส่วนคำสั่ง WHERE และ HAVING ของคำสั่ง SELECT

ต่อไปนี้คือตัวอย่างการใช้ฟังก์ชันหน้าต่างในคำสั่ง SELECT:

SELECT name, salary, AVG(salary) OVER (PARTITION BY department_id) as avg_salary_by_department FROM employees

 

คำสั่งนี้ส่งคืนชุดผลลัพธ์ที่มีสามคอลัมน์: ชื่อ เงินเดือน และ avg_salary_by_department คอลัมน์ avg_salary_by_department คำนวณโดยใช้ฟังก์ชันหน้าต่าง AVG ซึ่งจะคำนวณเงินเดือนเฉลี่ยสำหรับแต่ละแผนก ส่วนคำสั่ง PARTITION BY ระบุว่าหน้าต่างถูกแบ่งพาร์ติชันโดย department_id ซึ่งหมายความว่าเงินเดือนเฉลี่ยจะถูกคำนวณแยกกันสำหรับแต่ละแผนก

อธิบายการทำให้เป็นมาตรฐาน

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

รูปแบบปกติแรก (1NF)         

  • แต่ละเซลล์ในตารางมีค่าเดียว ไม่ใช่รายการของค่า
  • แต่ละคอลัมน์ในตารางมีชื่อเฉพาะ
  • ตารางไม่มีกลุ่มคอลัมน์ที่ซ้ำกัน

รูปแบบปกติที่สอง (2NF)

  • อยู่ในรูปแบบปกติครั้งแรก
  • ไม่มีการพึ่งพาบางส่วน (นั่นคือ แอตทริบิวต์ที่ไม่ใช่ไพรม์ขึ้นอยู่กับส่วนหนึ่งของคีย์หลักแบบผสม)

รูปแบบปกติที่สาม (3NF)

  • อยู่ในรูปปกติที่สอง
  • ไม่มีการขึ้นต่อกันของสกรรมกริยา (นั่นคือ แอตทริบิวต์ที่ไม่ใช่ไพรม์ขึ้นอยู่กับแอตทริบิวต์ที่ไม่ใช่ไพรม์อื่น)

Boyce-Codd แบบฟอร์มปกติ (BCNF)

  • อยู่ในรูปแบบปกติที่สาม
  • ดีเทอร์มิแนนต์ทุกตัว (แอตทริบิวต์ที่กำหนดค่าของแอตทริบิวต์อื่น) เป็นคีย์ตัวเลือก (คอลัมน์หรือชุดของคอลัมน์ที่สามารถใช้เป็นคีย์หลักได้)

อธิบาย Exclusive Lock และ Update Lock ใน SQL

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

การล็อกการอัปเดตคือการล็อกที่อนุญาตให้ธุรกรรมอื่นๆ อ่านแถวที่ล็อก แต่จะป้องกันไม่ให้อัปเดตหรือเขียนลงในแถวที่ล็อก โดยทั่วไปแล้ว การล็อกประเภทนี้จะใช้เมื่อธุรกรรมจำเป็นต้องอ่านข้อมูลในตาราง แต่ต้องการให้แน่ใจว่าข้อมูลจะไม่ถูกแก้ไขโดยธุรกรรมอื่นๆ จนกว่าธุรกรรมปัจจุบันจะเสร็จสิ้น
 
 
ซอนย่า จามิล ปัจจุบันทำงานเป็นนักวิเคราะห์ฐานข้อมูลที่หนึ่งในบริษัทโทรคมนาคมที่ใหญ่ที่สุดของปากีสถาน นอกจากงานประจำแล้ว เธอยังทำงานเป็นฟรีแลนซ์อีกด้วย ภูมิหลังของเธอรวมถึงความเชี่ยวชาญในการบริหารฐานข้อมูลและประสบการณ์กับสภาพแวดล้อม SQL Server ทั้งในสถานที่และบนคลาวด์ เธอมีความเชี่ยวชาญในเทคโนโลยี SQL Server ล่าสุด และมีความสนใจอย่างมากในการจัดการข้อมูลและการวิเคราะห์ข้อมูล
 

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต