ข้ามไปยังเนื้อหา

เครื่องมือจัดรูปแบบและตรวจสอบ SQL - จัดรูปแบบคิวรี SQL ออนไลน์ฟรี

เครื่องมือจัดรูปแบบและตรวจสอบ SQL ฟรี จัดรูปแบบ SQL โดยอัตโนมัติด้วยการเยื้องและตัวพิมพ์ใหญ่ที่ถูกต้อง ตรวจสอบข้อผิดพลาดทางไวยากรณ์ได้ทันที ใช้งานได้กับ MySQL, PostgreSQL, SQL Server, Oracle

เครื่องมือจัดรูปแบบและตรวจสอบ SQL

จัดรูปแบบและตรวจสอบคิวรี SQL ด้วยการเยื้องอัตโนมัติ การเขียนตัวอักษรคำสำคัญตัวพิมพ์ใหญ่ และการตรวจจับข้อผิดพลาดทางไวยากรณ์

ป้อนคิวรี SQL เพื่อดูผลลัพธ์ที่จัดรูปแบบ
เครื่องคำนวณโหลด...
📚

เอกสารประกอบการใช้งาน

ทำไมการจัดรูปแบบ SQL จึงสำคัญ

เคยรับมรดกโครงการฐานข้อมูลที่โค้ด SQL ดูราวกับว่ามีคนพิมพ์ขณะใส่ผ้าปิดตาหรือไม่? คุณไม่ได้อยู่คนเดียว การจัดรูปแบบ SQL ที่ไม่ดีเป็นหนึ่งในแหล่งที่มาทั่วไปของบั๊กและเวลาที่สูญเปล่าในการพัฒนาฐานข้อมูล

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

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

วิธีใช้เครื่องมือจัดรูปแบบ SQL

อินเทอร์เฟซถูกออกแบบให้เรียบง่าย—เพียงวาง และไป:

  1. วาง SQL ของคุณลงในช่องป้อนข้อมูล (หรือพิมพ์โดยตรงหากคุณกำลังเขียนตั้งแต่ต้น)
  2. ดูการจัดรูปแบบอัตโนมัติขณะที่คุณพิมพ์—ไม่มีปุ่มให้คลิก ไม่มีการตั้งค่า
  3. ตรวจสอบข้อผิดพลาดการตรวจสอบหากมีปรากฏด้านล่างผลลัพธ์ที่จัดรูปแบบ
  4. คัดลอก SQL ที่จัดรูปแบบด้วยการคลิกเพียงครั้งเดียวเพื่อใช้ใน IDE ของคุณ เอกสาร หรือเครื่องมือฐานข้อมูล

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

สิ่งที่ตัวจัดรูปแบบ SQL ทำ

การทำให้คำสงวนตัวพิมพ์ใหญ่

คำสงวน SQL จะถูกทำให้เป็นตัวพิมพ์ใหญ่โดยอัตโนมัติ—SELECT, FROM, WHERE, JOIN และอื่นๆ นี่เป็นไปตามข้อตกลงที่ใช้โดยทีมฐานข้อมูลส่วนใหญ่และทำให้คำสงวนแตกต่างจากชื่อตารางและคอลัมน์ของคุณ เมื่อคุณกำลังสแกนผ่านคิวรีที่ซับซ้อน การแยกทางสายตานี้จะช่วยให้คุณระบุโครงสร้างคิวรีได้ทันที

การเยื้องอย่างชาญฉลาด

ตัวจัดรูปแบบจะจัดโครงสร้าง SQL ของคุณตามลำดับชั้นทางตรรกะ ไม่ใช่แค่เพิ่มการขึ้นบรรทัดแบบสุ่ม คลอเซลหลักเช่น SELECT และ FROM จะเริ่มที่ขอบซ้าย คลอเซล JOIN จะเยื้องใต้ FROM เพื่อแสดงว่าเป็นส่วนหนึ่งของการเลือกตาราง คิวรีย่อยจะได้ระดับการเยื้องเพิ่มเติม ทำให้ตรรกะที่ซ้อนกันชัดเจน

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

การขึ้นบรรทัดตามตรรกะ

การขึ้นบรรทัดจะปรากฏที่ช่วยความสามารถในการอ่าน ไม่ใช่แค่ทุกที่ คลอเซลหลักแต่ละอันจะได้รับบรรทัดของตนเอง รายการที่คั่นด้วยจุลภาค (เช่น ชื่อคอลัมน์ใน SELECT) แต่ละรายการจะได้รับบรรทัดของตนเองพร้อมการเยื้องที่เหมาะสม คิวรีย่อยจะถูกแยกทางสายตา คำสั่ง CASE จะขึ้นบรรทัดที่ WHEN, THEN และ ELSE เพื่อความชัดเจน

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

การตรวจสอบ SQL: สิ่งที่ถูกตรวจสอบ

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

ข้อผิดพลาดทางโครงสร้าง

วงเล็บที่ไม่สมดุล เป็นปัญหาที่พบบ่อยในคิวรีที่ซับซ้อนที่มีอนุประโยคซ้อนใน เครื่องมือตรวจสอบจะนับวงเล็บเปิดและปิดเพื่อแสดงความไม่ตรงกัน ฉันเคยเห็นเหตุการณ์ในระบบผลิตที่เกิดจากวงเล็บที่หายไปเพียงอันเดียวในคิวรีที่มี 200 บรรทัด—เครื่องมือนี้จะช่วยจับได้เร็ว

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

ปัญหาการเรียงลำดับของคลอส จะถูกแฟล็กเมื่อคลอสปรากฏไม่เป็นลำดับ ตัวอย่างเช่น หากคุณวาง HAVING ก่อน GROUP BY หรือ WHERE หลัง GROUP BY เครื่องมือตรวจสอบจะแจ้งเตือนคุณ ซึ่งเป็นไปตามกฎไวยากรณ์มาตรฐาน SQL ที่กำหนดใน มาตรฐาน ISO/IEC 9075 SQL

ข้อผิดพลาดทางตรรกะ

คลอส JOIN โดยไม่มีเงื่อนไข ON จะสร้าง cross join โดยไม่ตั้งใจ ส่งคืนแถวมากกว่าที่ต้องการ สถานการณ์ทั่วไป: คุณกำลังเพิ่มตารางที่สามหรือสี่ในคิวรีและลืมคลอส ON โดยไม่มีการตรวจสอบนี้ คุณอาจไม่สังเกตเห็นจนกระทั่งเห็นแถวซ้ำหลายพันแถวในผลลัพธ์

HAVING โดยไม่มี GROUP BY เป็น SQL ที่ไม่ถูกต้องในฐานข้อมูลส่วนใหญ่ คลอส HAVING กรองผลลัพธ์ที่จัดกลุ่ม ดังนั้นจำเป็นต้องมี GROUP BY เพื่อทำงาน เครื่องมือตรวจสอบจะจับความไม่ตรงกันทางตรรกะนี้

เงื่อนไข WHERE ที่ไม่สมบูรณ์ เกิดขึ้นเมื่อคุณเริ่มพิมพ์เงื่อนไขแต่ไม่เสร็จ—เช่น WHERE status = โดยไม่มีค่า เหล่านี้เป็นสิ่งที่ง่ายต่อการมองข้ามเมื่อแก้ไขคิวรี

สิ่งที่เครื่องมือนี้จะไม่จับ

เครื่องมือตรวจสอบนี้มุ่งเน้นที่ไวยากรณ์และโครงสร้าง ไม่ใช่สคีมาของฐานข้อมูล มันจะไม่รู้ว่า:

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

คิดว่ามันเป็นการตรวจสอบรอบแรกก่อนที่คุณจะส่งคิวรีไปยังฐานข้อมูลจริง

กฎการจัดรูปแบบที่เครื่องมือนี้ใช้

เครื่องมือจัดรูปแบบใช้กฎที่สอดคล้องกันตามแนวทาง SQL Style Guide ที่ทีมฐานข้อมูลส่วนใหญ่ปฏิบัติตาม

คำสำคัญจะถูกทำให้เป็นตัวพิมพ์ใหญ่

คำสำคัญ SQL ทุกคำจะกลายเป็นตัวพิมพ์ใหญ่: SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP นี่รวมถึงคลอสูล (FROM, WHERE, GROUP BY, HAVING, ORDER BY) ประเภทการเชื่อมต่อ (JOIN, INNER JOIN, LEFT JOIN) ตัวดำเนินการ (AND, OR, NOT, IN, BETWEEN, LIKE) และฟังก์ชันทั่วไป (COUNT, SUM, AVG, CASE, WHEN)

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

การเยื้อง 2 ช่องว่างต่อระดับ

คลอสูลหลักเช่น SELECT และ FROM เริ่มที่ขอบซ้าย คลอสูล JOIN จะเยื้อง 2 ช่องว่างภายใต้ FROM เพื่อแสดงว่าเป็นส่วนหนึ่งของการเลือกตาราง คิวรีย่อยจะเยื้อง 2 ช่องว่างเพิ่มขึ้นสำหรับแต่ละระดับการซ้อน สิ่งนี้สร้างลำดับชั้นทางสายตาที่ตรงกับโครงสร้างทางตรรกะ

รายการที่คั่นด้วยจุลภาค (ชื่อคอลัมน์ใน SELECT เป็นตัวอย่าง) จะอยู่บรรทัดละรายการด้วยการเยื้องที่สอดคล้องกัน เมื่อคุณมี 15 คอลัมน์ใน SELECT list การทำเช่นนี้ช่วยให้สแกนและค้นหาคอลัมน์เฉพาะได้ง่าย

เงื่อนไขใน WHERE จะจัดแนวกันในแนวตั้ง เมื่อคุณมีเงื่อนไข AND หรือ OR หลายเงื่อนไข การจัดแนวจะทำให้โครงสร้างตรรกะเห็นได้ชัดทันที

ก่อนและหลัง: ดูความแตกต่าง

ก่อนการจัดรูปแบบ:

1select u.id, u.name, o.order_date from users u join orders o on u.id = o.user_id where o.status = "completed" group by u.id order by u.name;
2

หลังการจัดรูปแบบ:

1SELECT
2  u.id,
3  u.name,
4  o.order_date
5FROM users u
6  JOIN orders o ON u.id = o.user_id
7WHERE
8  o.status = "completed"
9GROUP BY
10  u.id
11ORDER BY
12  u.name;
13

กฎการตรวจสอบ: อะไรที่ถูกตรวจจับ

ตัวตรวจสอบจะตรวจสอบความสมบูรณ์ของโครงสร้างและความสอดคล้องทางตรรกะพื้นฐาน นี่คือสิ่งที่มันมองหา:

การตรวจสอบโครงสร้าง

วงเล็บที่สมดุล: วงเล็บเปิดและปิดต้องตรงกัน การสืบค้นย่อยที่ซ้อนกันมักมีหลายระดับของวงเล็บ และการนับผิดพลาดเป็นหนึ่งในข้อผิดพลาด SQL ที่พบบ่อยที่สุด ตัวตรวจสอบจะนับให้คุณ

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

ลำดับของคลอเสียที่ถูกต้อง: SQL มีข้อกำหนดการเรียงลำดับเฉพาะ SELECT มาก่อน FROM ซึ่งมาก่อน WHERE ซึ่งมาก่อน GROUP BY ซึ่งมาก่อน HAVING ซึ่งมาก่อน ORDER BY การวางลำดับที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาดทางไวยากรณ์ทันที ตัวตรวจสอบจะตรวจสอบลำดับนี้ตามมาตรฐาน SQL

การตรวจสอบความสอดคล้องทางตรรกะ

JOIN กับเงื่อนไข ON: ทุก JOIN ต้องมีคลอเสีย ON หรือ USING เพื่อระบุความสัมพันธ์ของตาราง หากไม่มี คุณจะได้ cross join—แถวทุกแถวจากตารางหนึ่งจับคู่กับแถวทุกแถวจากอีกตาราง นั่นไม่ใช่สิ่งที่คุณต้องการส่วนใหญ่และมักบ่งบอกถึงคลอเสีย ON ที่หายไป

เงื่อนไข WHERE ที่สมบูรณ์: คลอเสีย WHERE ต้องมีเงื่อนไขที่สมบูรณ์ WHERE status = โดยไม่มีค่าเป็นสิ่งที่ไม่สมบูรณ์และไม่ถูกต้อง ตัวตรวจสอบจะตรวจจับเงื่อนไขบางส่วนเหล่านี้

HAVING ต้องมี GROUP BY: คลอเสีย HAVING กรองผลลัพธ์ที่จัดกลุ่ม ดังนั้นจึงมีความหมายเฉพาะเมื่อคุณมี GROUP BY การใช้ HAVING โดยไม่มี GROUP BY เป็นข้อผิดพลาดทางตรรกะที่ฐานข้อมูลส่วนใหญ่ปฏิเสธ

กฎการรวมกลุ่ม GROUP BY: เมื่อคุณใช้ฟังก์ชันการรวม เช่น COUNT() หรือ SUM() คอลัมน์ที่ไม่ได้รวมใน SELECT ต้องปรากฏใน GROUP BY นี่เป็นข้อกำหนด SQL พื้นฐานที่ตัวตรวจสอบตรวจสอบ

ตัวอย่างข้อผิดพลาดทั่วไปที่ถูกตรวจพบ

นี่คือ SQL ที่มีปัญหาหลายประการซึ่งตัวตรวจสอบจะตรวจจับ:

1SELECT user_id, COUNT(*) FROM orders
2JOIN users
3WHERE status =
4GROUP BY
5HAVING count > 10;
6

ปัญหาที่ตรวจพบ:

  1. JOIN users ขาดเงื่อนไข ON (จะสร้าง cross join)
  2. WHERE status = ไม่สมบูรณ์ (ไม่มีค่าเปรียบเทียบ)
  3. คลอเสีย GROUP BY ว่าง (ไม่มีคอลัมน์ระบุ)
  4. HAVING count > 10 อ้างอิงคอลัมน์ที่ไม่ได้กำหนด

เมื่อไรควรใช้ตัวจัดรูปแบบ SQL นี้

ระหว่างการตรวจสอบโค้ด

เคยลองตรวจสอบคิวรี SQL ยาว 50 บรรทัดที่เขียนอยู่บนบรรทัดเดียวหรือไม่? มันทรมาน ก่อนส่งคิวรีเพื่อตรวจสอบ ให้รันผ่านตัวจัดรูปแบบก่อน ผู้ตรวจสอบจะขอบคุณคุณ และพวกเขาจะสามารถมุ่งเน้นไปที่ตรรกะแทนที่จะถอดรหัสโครงสร้าง

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

การแก้ไขปัญหาในการผลิต

เมื่อคุณแก้ไขปัญหาคิวรีที่ล้มเหลวในการผลิต การจัดรูปแบบอย่างเหมาะสมช่วยให้คุณเห็นโครงสร้างได้อย่างชัดเจน ฉันได้แก้ไขคิวรีนับไม่ถ้วนที่ปัญหากลายเป็นเรื่องชัดเจนเมื่อ SQL ได้รับการจัดรูปแบบอย่างถูกต้อง - เงื่อนไขการเชื่อมต่อที่หายไป เงื่อนไข WHERE ที่จัดกลุ่มไม่ถูกต้อง หรือคิวรีย่อยในตำแหน่งที่ไม่ถูกต้อง

คัดลอกคิวรีจากบันทึกของคุณ วางที่นี่ และคุณจะเห็นทันทีว่ามีปัญหาโครงสร้างหรือไม่

การทำงานกับ SQL ที่สร้างขึ้น

ORM (Object-Relational Mappers) เช่น Hibernate, Entity Framework หรือ SQLAlchemy สร้าง SQL โดยอัตโนมัติ บางครั้งคุณต้องการเห็นว่าคิวรีที่พวกเขาสร้างขึ้นคืออะไร SQL ที่สร้างขึ้นมักจะเป็นบรรทัดเดียวยาวๆ โดยไม่มีการจัดรูปแบบ เครื่องมือนี้ทำให้คิวรีที่สร้างโดย ORM อ่านง่ายเพื่อให้คุณสามารถเข้าใจและปรับให้เหมาะสม

การสอนและเรียนรู้ SQL

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

การย้ายระหว่างระบบฐานข้อมูล

ฐานข้อมูลที่แตกต่างกัน (PostgreSQL, MySQL, SQL Server) มี SQL ไดอะเล็กต์เล็กน้อยที่แตกต่างกัน เมื่อย้ายคิวรีระหว่างระบบ การจัดรูปแบบที่ถูกต้องช่วยให้คุณพบไวยากรณ์เฉพาะของไดอะเล็กต์ที่อาจต้องปรับ ตัวจัดรูปแบบนี้ปฏิบัติตามข้อตกลง SQL มาตรฐานที่ใช้งานได้กับฐานข้อมูลหลักส่วนใหญ่

ทางเลือกอื่นสำหรับตัวจัดรูปแบบ SQL

IDE เฉพาะฐานข้อมูล

เครื่องมือต่างๆ เช่น DataGrip, SQL Server Management Studio หรือ MySQL Workbench มีตัวจัดรูปแบบในตัว พวกเขามีประสิทธิภาพและเชื่อมต่อโดยตรงกับการเชื่อมต่อฐานข้อมูลของคุณ

ข้อแลกเปลี่ยน: พวกเขาต้องการการติดตั้งและตั้งค่า DataGrip มีราคา 199 ดอลลาร์ต่อปีสำหรับรายบุคคล SSMS ฟรีแต่ใช้งานได้เฉพาะบน Windows หากคุณต้องการจัดรูปแบบอย่างรวดเร็วโดยไม่ต้องติดตั้งอะไร หรือทำงานข้ามระบบฐานข้อมูลหลายระบบ เครื่องมือบนเบราว์เซอร์จะเป็นทางเลือกที่เหมาะสมกว่า

ส่วนขยายของเอดิเตอร์

หากคุณเขียน SQL ใน VS Code หรือ Sublime Text ส่วนขยายเช่น SQL Beautify หรือ SqlBeautifier จะนำการจัดรูปแบบเข้าสู่เอดิเตอร์ของคุณ นี่ใช้งานได้ดีเมื่อคุณกำลังเขียนคิวรี่และต้องการการจัดรูปแบบทันที

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

ตัวจัดรูปแบบบรรทัดคำสั่ง

เครื่องมือเช่น sqlformat (Python) หรือ sql-formatter-cli (Node.js) สามารถรวมเข้ากับ CI/CD pipelines เพื่อจัดรูปแบบ SQL ในการควบคุมเวอร์ชันโดยอัตโนมัติ นี่ทำให้เกิดความสอดคล้องในทีม

เหมาะสำหรับเวิร์กโฟลว์อัตโนมัติมากกว่าการจัดรูปแบบเฉพาะกิจ หากคุณกำลังทำความสะอาดคิวรี่ไม่กี่รายการหรือเรียนรู้ SQL เครื่องมือบรรทัดคำสั่งจะเพิ่มความซับซ้อนที่ไม่จำเป็น

วิธีที่การจัดรูปแบบ SQL กลายเป็นแนวปฏิบัติมาตรฐาน

SQL ถูกพัฒนาขึ้นที่ IBM ในช่วงทศวรรษ 1970 แต่ข้อตกลงการจัดรูปแบบเกิดขึ้นช้ามาก SQL ในยุคแรกใช้งานได้แต่ไม่สม่ำเสมอ—นักพัฒนาแต่ละคนจัดรูปแบบคิวรีแตกต่างกัน

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

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

เครื่องมือจัดรูปแบบ SQL ออนไลน์ปรากฏขึ้นในช่วง 2010 เมื่อการพัฒนาเว็บเติบโตขึ้น แทนที่จะติดตั้งเครื่องมือหรือตั้งค่าปลั๊กอิน IDE นักพัฒนาสามารถจัดรูปแบบ SQL ในเบราว์เซอร์ นี่ทำให้การเข้าถึงการจัดรูปแบบที่เหมาะสมเป็นไปได้สำหรับทุกคน ตั้งแต่ผู้เริ่มเรียน SQL ไปจนถึงนักพัฒนาที่มีประสบการณ์ที่กำลังทำความสะอาดคิวรีด่วน

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

ตัวอย่างโค้ด

ตัวอย่างที่ 1: คิวรี SELECT พื้นฐาน

ไม่จัดรูปแบบ:

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

จัดรูปแบบ:

1SELECT
2  id,
3  first_name,
4  last_name,
5  email
6FROM
7  customers
8WHERE
9  status = 'active'
10ORDER BY
11  last_name,
12  first_name;
13

ตัวอย่างที่ 2: คิวรี JOIN

ไม่จัดรูปแบบ:

1select c.id, c.name, o.order_date, o.total_amount from customers c left join orders o on c.id = o.customer_id where o.order_date >= '2023-01-01' and o.status != 'cancelled' order by o.order_date desc;
2

จัดรูปแบบ:

1SELECT
2  c.id,
3  c.name,
4  o.order_date,
5  o.total_amount
6FROM
7  customers c
8  LEFT JOIN orders o ON c.id = o.customer_id
9WHERE
10  o.order_date >= '2023-01-01'
11  AND o.status != 'cancelled'
12ORDER BY
13  o.order_date DESC;
14

ตัวอย่างที่ 3: คิวรีซับคิวรีที่ซับซ้อน

ไม่จัดรูปแบบ:

1select d.department_name, (select count(*) from employees e where e.department_id = d.id) as employee_count, (select avg(salary) from employees e where e.department_id = d.id) as avg_salary from departments d where d.active = true having employee_count > 0 order by avg_salary desc;
2

จัดรูปแบบ:

1SELECT
2  d.department_name,
3  (
4    SELECT
5      COUNT(*)
6    FROM
7      employees e
8    WHERE
9      e.department_id = d.id
10  ) AS employee_count,
11  (
12    SELECT
13      AVG(salary)
14    FROM
15      employees e
16    WHERE
17      e.department_id = d.id
18  ) AS avg_salary
19FROM
20  departments d
21WHERE
22  d.active = TRUE
23HAVING
24  employee_count > 0
25ORDER BY
26  avg_salary DESC;
27

การจัดรูปแบบ SQL แบบโปรแกรมมาติก

นี่คือตัวอย่างวิธีการใช้การจัดรูปแบบ SQL ในภาษาโปรแกรมต่าง ๆ:

1// ตัวอย่างการจัดรูปแบบ SQL ใน JavaScript โดยใช้ไลบรารี sql-formatter
2const sqlFormatter = require('sql-formatter');
3
4function formatSQL(sql) {
5  return sqlFormatter.format(sql, {
6    language: 'sql',
7    uppercase: true,
8    linesBetweenQueries: 2,
9    indentStyle: 'standard'
10  });
11}
12
13const rawSQL = "select id, name from users where status='active'";
14const formattedSQL = formatSQL(rawSQL);
15console.log(formattedSQL);
16

คำถามที่พบบ่อย

ตัวจัดรูปแบบ SQL นี้ทำงานกับ PostgreSQL, MySQL และ SQL Server ได้หรือไม่?

ใช่ สามารถจัดการไวยากรณ์ SQL มาตรฐานที่เป็นสากลสำหรับฐานข้อมูลหลัก—PostgreSQL, MySQL, SQL Server (T-SQL), Oracle, SQLite และ MariaDB ตัวจัดรูปแบบมุ่งเน้นที่ SQL หลักที่ใช้งานได้ทุกที่: SELECT, JOIN, WHERE, GROUP BY และอื่นๆ

คุณลักษณะเฉพาะของฐานข้อมูลอาจไม่ได้รับการจัดรูปแบบอย่างสมบูรณ์ ตัวอย่างเช่น ไวยากรณ์อาร์เรย์ของ PostgreSQL หรือฟังก์ชันเฉพาะของ SQL Server อาจไม่ได้รับการจัดรูปแบบพิเศษ แต่จะไม่ทำให้ตัวจัดรูปแบบเสีย คิวรีจะยังคงอ่านง่ายกว่าเดิม

รหัส SQL ของฉันถูกส่งไปยังเซิร์ฟเวอร์หรือไม่?

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

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

ตัวตรวจสอบสามารถจับข้อผิดพลาด SQL ทั้งหมดได้หรือไม่?

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

มันจะไม่รู้ว่าชื่อตารางของคุณผิด ประเภทข้อมูลของคุณเข้ากันไม่ได้ หรือคิวรีของคุณจะใช้เวลา 10 นาทีในการรัน สำหรับเรื่องนั้น คุณต้องใช้ฐานข้อมูลจริงของคุณ คิดว่าตัวตรวจสอบนี้เป็นการตรวจสอบการสะกดคำสำหรับ SQL ไม่ใช่เครื่องมือวิเคราะห์คิวรีแบบเต็ม

ทำไมต้องจัดรูปแบบ SQL เมื่อฐานข้อมูลรันมันอยู่ดี?

ฐานข้อมูลไม่สนใจการจัดรูปแบบ—พวกมันแยกวิเคราะห์คิวรีไม่ว่าอย่างไร แต่มนุษย์สนใจ เมื่อคุณต้องแก้ไขคิวรีที่ล้มเหลว แก้ไขคิวรีที่มีอยู่ หรือตรวจสอบ SQL ของผู้อื่น การจัดรูปแบบที่เหมาะสมทำให้คุณเข้าใจได้ใน 30 วินาทีแทน 30 นาที

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

ฉันสามารถปรับแต่งการเยื้องหรือสไตล์คำสำคัญได้หรือไม่?

ยังไม่สามารถทำได้ในขณะนี้ ตัวจัดรูปแบบใช้ข้อตกลงมาตรฐาน: คำสำคัญตัวพิมพ์ใหญ่ การเยื้อง 2 ช่องว่าง คลอสอยู่บนบรรทัดแยกกัน เหล่านี้ปฏิบัติตาม SQL Style Guide ที่ทีมส่วนใหญ่ใช้

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

จะทำงานกับขั้นตอนการจัดเก็บที่มี 1000 บรรทัดได้หรือไม่?

จะจัดรูปแบบคิวรีขนาดใหญ่ แม้ว่าขั้นตอนการจัดเก็บที่ซับซ้อนมาก (1000+ บรรทัด) อาจใช้เวลาสักครู่ในการประมวลผล ตัวจัดรูปแบบจัดการ SQL ที่คุณวาง ไม่ว่าจะยาวเท่าใด

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

การจัดรูปแบบเปลี่ยนวิธีการรันคิวรีของฉันหรือไม่?

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

ข้อยกเว้นเดียว: หากตัวตรวจสอบพบข้อผิดพลาดทางไวยากรณ์จริงๆ (วงเล็บหายไป ฯลฯ) การแก้ไขเหล่านั้นจะเปลี่ยนพฤติกรรม—แต่เพียงจาก "ไม่รัน" เป็น "รันอย่างถูกต้อง"

มาตรฐาน SQL แบบใดที่ตัวจัดรูปแบบนี้ใช้?

ตัวจัดรูปแบบปฏิบัติตามข้อตกลง SQL-92 พร้อมส่วนขยายสำหรับคุณลักษณะทั่วไปใน SQL:1999 และมาตรฐานที่ใหม่กว่า ครอบคลุม SQL ที่นักพัฒนาส่วนใหญ่เขียนประจำ—คิวรี SELECT การเชื่อมต่อ subqueries คำสั่ง CASE ฟังก์ชันหน้าต่าง

คุณลักษณะ SQL ที่ใหม่มากจาก SQL:2016 หรือ SQL:2019 อาจไม่ได้รับการรู้จัก แต่จะไม่ทำให้ตัวจัดรูปแบบเสีย คุณจะได้รับการจัดรูปแบบพื้นฐานแทนการจัดการเฉพาะ

ฉันสามารถใช้นี่สำหรับ Oracle PL/SQL หรือ SQL Server T-SQL ได้หรือไม่?

สำหรับคิวรีพื้นฐาน ใช่ สำหรับรหัสขั้นตอน (บล็อก PL/SQL ขั้นตอนการจัดเก็บ T-SQL กับการไหลของการควบคุม) การจัดรูปแบบจะจำกัด เครื่องมือนี้มุ่งเน้นที่คำสั่ง SELECT, INSERT, UPDATE, DELETE และคลอสของพวกมัน

หากคุณทำงานอย่างหนักกับรหัสขั้นตอนเฉพาะของฐานข้อมูล IDE ดั้งเดิมของฐานข้อมูลของคุณ (SQL Developer สำหรับ Oracle, SSMS สำหรับ SQL Server) จะให้การจัดรูปแบบที่ดีกว่าที่เข้าใจไวยากรณ์เต็มรูปแบบ

การอ้างอิงและการอ่านเพิ่มเติม

เริ่มจัดรูปแบบ SQL ของคุณ

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