SQL (Structured Query Language) เป็นภาษาโปรแกรมมิ่งเฉพาะทางที่มาตรฐาน化เพื่อใช้จัดการฐานข้อมูลเชิงสัมพันธ์และดำเนินการต่างๆ บนข้อมูล มีการใช้งาน SQL หลายอย่าง รวมถึงการแก้ไขโครงสร้างตารางและดัชนีของฐานข้อมูล เพิ่ม อัปเดต และลบแถวของข้อมูล และดึง subset ต่างๆ ของข้อมูลจากฐานข้อมูลสำหรับการประมวลผลธุรกรรมและแอปพลิเคชันวิเคราะห์ มีคิวรีและการดำเนินการเฉพาะที่ทำงานในรูปแบบคำสั่งและรู้จักกันทั่วไปว่า SQL statements เช่น select, add, insert, update, delete, create, alter และ truncate
SQL กลายเป็นภาษาโปรแกรมมิ่งมาตรฐานสำหรับฐานข้อมูลเชิงสัมพันธ์หลังจากที่พวกเขา nổiขึ้นในช่วงปลายทศวรรษ 1970 และต้น 1980s รู้จักกันทั่วไปว่า SQL databases ระบบเชิงสัมพันธ์ประกอบด้วยชุดตารางที่มีข้อมูลในรูปแถวและคอลัมน์ โดยแต่ละคอลัมน์ในตารางสอดคล้องกับหมวดหมู่ข้อมูล เช่น ชื่อลูกค้าหรือที่อยู่ & แต่ละแถวมีค่าข้อมูลสำหรับคอลัมน์ที่ตัดกัน
SQL ยังเป็นภาษาเฉพาะโดเมน (domain-specific language) ที่ใช้สำหรับโปรแกรมมิ่งและออกแบบข้อมูลที่จัดเก็บในระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) มันมีประโยชน์โดยเฉพาะในการจัดการข้อมูลที่มีโครงสร้าง (structured data) ที่มีความสัมพันธ์ระหว่างเอนทิตี/ตัวแปรต่างๆ ของข้อมูล
SQL ต้นทางมาจาก relational algebra และ tuple relational calculus SQL ประกอบด้วยหลายประเภทของ statements รู้จักกันทั่วไปว่า data query language (DQL), data definition language (DDL), data control language (DCL), และ data manipulation language (DML) ขอบเขตของ SQL รวมถึง data query, data manipulation (insert, update, delete), data definition (schema creation and modification), และ data access control นอกจากนี้ SQL ถูกอธิบายว่าเป็น declarative language (4GL) เพราะมันยังรวมองค์ประกอบ procedural
การประยุกต์ใช้ของ SQL
มีการประยุกต์ใช้ SQL หลายอย่าง -
- 1. Data Integration Scripts - การประยุกต์ใช้หลักของ SQL คือการเขียน data integration scripts โดยผู้ดูแลฐานข้อมูลและนักพัฒนา
- 2. Analytical Queries - นักวิเคราะห์ข้อมูลใช้ structured query language สำหรับตั้งค่าและรัน analytical queries อย่างสม่ำเสมอ
- 3. Retrieve Information - การประยุกต์ใช้อีกอย่างที่นิยมคือการดึง subset ของข้อมูลภายในฐานข้อมูลสำหรับแอปพลิเคชันวิเคราะห์และการประมวลผลธุรกรรม องค์ประกอบ SQL ที่ใช้บ่อยที่สุดคือ select, insert, update, add, delete, create, truncate และ alter
- 4. การประยุกต์ใช้สำคัญอื่นๆ - SQL ใช้สำหรับการแก้ไขโครงสร้างดัชนีและตารางฐานข้อมูล เพิ่มเติม ผู้ใช้สามารถเพิ่ม อัปเดต และลบแถวของข้อมูลโดยใช้ภาษานี้
มาตรฐาน SQL และส่วนขยายเฉพาะผู้จัดจำหน่าย
มาตรฐาน SQL อย่างเป็นทางการถูกนำมาใช้โดย American National Standards Institute (ANSI) ในปี 1986 และโดย International Organization for Standardization (ISO) ในปี 1987 SQL ถูกใช้อย่างสม่ำเสมอโดยผู้ดูแลฐานข้อมูล รวมถึงนักพัฒนาที่เขียน data integration scripts และนักวิเคราะห์ข้อมูลที่มองหาการตั้งค่าและรัน analytical queries
ทั้ง RDBMS เฉพาะผู้จัดจำหน่ายและโอเพนซอร์สที่สร้างรอบ SQL พร้อมใช้งานสำหรับองค์กร พวกเขารวมถึง Microsoft SQL Server, Oracle Database, IBM DB2, SAP HANA, SAP Adaptive Server, MySQL (ตอนนี้เป็นของ Oracle) และ PostgreSQL
อย่างไรก็ตาม ผลิตภัณฑ์ฐานข้อมูลหลายอย่างรองรับ SQL ด้วยส่วนขยายเฉพาะผู้จัดจำหน่ายไปยังภาษามาตรฐานสำหรับการเขียนโปรแกรม procedural และฟังก์ชันอื่นๆ ตัวเช่น Microsoft ให้ชุดส่วนขยายที่เรียกว่า Transact-SQL (T-SQL) ในขณะที่เวอร์ชันขยายของ Oracle คือ PL/SQL ผลลัพธ์คือ รูปแบบ SQL ที่แตกต่างกันที่เสนอโดยผู้จัดจำหน่าย ไม่เข้ากันได้เต็มที่
คำสั่งและไวยากรณ์ SQL
คำสั่ง SQL แบ่งออกเป็นหลายประเภท เช่น data manipulation language (DML) และ data definition language (DDL) statements, transaction controls, และ security measures
- DML ใช้สำหรับดึงและจัดการข้อมูล
- DDL statements สำหรับกำหนดและแก้ไขโครงสร้างฐานข้อมูล
- Transaction controls ช่วยจัดการการประมวลผลธุรกรรม ให้แน่ใจว่า transactions เสร็จสมบูรณ์หรือ roll back หากเกิดข้อผิดพลาด
- Security statements ใช้ควบคุมการเข้าถึงฐานข้อมูลและสร้าง user roles และ permissions
ภาษา SQL แบ่งย่อยเป็นหลายองค์ประกอบภาษา รวมถึง -
- Clauses, ซึ่งเป็นองค์ประกอบประกอบของ statements และ queries
- Expressions, ซึ่งสามารถมีค่า scalar หรือตารางที่ประกอบด้วยคอลัมน์และแถวของข้อมูล
- Predicates ใช้ระบุเงื่อนไขที่สามารถประเมินได้เป็น SQL three-valued logic (3VL) (true/false/unknown) หรือ Boolean truth values (true/false) และใช้จำกัดผลของ statements และ queries หรือเปลี่ยน program flow
- Queries ใช้ดึงข้อมูลตามเกณฑ์เฉพาะ
- Statements, ซึ่งอาจมีผลต่อ schema และข้อมูลอย่างถาวร หรืออาจควบคุม transactions, program flow, connections, sessions, หรือ diagnostics
- SQL statements ยังรวม semicolon (";") statement terminator
- Insignificant whitespace โดยทั่วไปถูกละเลยใน SQL statements และ queries ทำให้จัดรูปแบบ SQL code เพื่อ readability ได้ง่าย
ความสามารถในการทำงานร่วมกันและมาตรฐาน化
SQL implementations ไม่เข้ากันได้ระหว่างผู้จัดจำหน่าย และไม่ปฏิบัติตามมาตรฐานทั้งหมด โดยเฉพาะ syntax วันที่และเวลา, string concatenation, NULLs, และ case sensitivity ในการเปรียบเทียบ แตกต่างจากผู้จัดจำหน่ายไปยังผู้จัดจำหน่าย ผลลัพธ์คือ SQL code ยากที่จะ port ระหว่างระบบฐานข้อมูลโดยไม่ต้องแก้ไข
มีหลายเหตุผลสำหรับปัญหา portability ระหว่างระบบฐานข้อมูล -
- ความซับซ้อนและขนาดของมาตรฐาน SQL ทำให้ผู้นำไปใช้ส่วนใหญ่ไม่รองรับมาตรฐานทั้งหมด
- มาตรฐานไม่ระบุพฤติกรรมฐานข้อมูลในหลายพื้นที่สำคัญ (เช่น indexes, file storage...) ทำให้การนำไปใช้ตัดสินใจเองว่าจะพฤติกรรมอย่างไร
- มาตรฐาน SQL ระบุ syntax อย่างแม่นยำที่ระบบฐานข้อมูลที่ปฏิบัติตามต้องนำไปใช้ แต่ specification ของ semantics ของ language constructs นิยามไม่ชัดเจนพอ นำไปสู่ความคลุมเครือ
- ผู้จัดจำหน่ายฐานข้อมูลหลายรายมีฐานลูกค้าที่มีอยู่มากนาน ซึ่งเวอร์ชันใหม่ของมาตรฐาน SQL ขัดแย้งกับพฤติกรรมก่อนหน้าของฐานข้อมูลของผู้จัดจำหน่าย ผู้จัดจำหน่ายอาจไม่ยินดีทำลาย backward compatibility
- มีแรงจูงใจทางการค้าน้อยสำหรับผู้จัดจำหน่ายที่จะทำให้ผู้ใช้เปลี่ยนผู้จัดจำหน่ายฐานข้อมูลได้ง่าย (ดู vendor lock-in)
- ผู้ใช้ที่ประเมินซอฟต์แวร์ฐานข้อมูลมักวางปัจจัยอื่นๆ เช่น performance ให้สำคัญกว่า standards conformance
ข้อดีของ SQL
- SQL Queries ใช้ดึงจำนวนเรคอร์ดมากจากฐานข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพ
- SQL ใช้ดูข้อมูลโดยไม่ต้องจัดเก็บข้อมูลในอ็อบเจ็กต์
- SQL รวมตารางสองหรือมากกว่าและแสดงเป็นอ็อบเจ็กต์เดียวให้ผู้ใช้
- SQL databases ใช้มาตรฐานที่สืบเนื่องมายาวนาน ซึ่งถูกนำมาใช้โดย ANSI & ISO ฐานข้อมูล Non-SQL ไม่ปฏิบัติตามมาตรฐานที่ชัดเจน
- ใช้ standard SQL จัดการระบบฐานข้อมูลได้ง่ายโดยไม่ต้องเขียนโค้ดมาก
- SQL จำกัดการเข้าถึงตาราง เพื่อไม่ให้ใคร insert แถวลงในตารางได้
- ก่อนหน้านี้ SQL databases เป็นคำพ้องกับ relational database ด้วยการ nổiขึ้นของ ObjectOriented DBMS ความสามารถในการจัดเก็บอ็อบเจ็กต์ถูกขยายไปยังฐานข้อมูลเชิงสัมพันธ์
ข้อเสียของ SQL
- การเชื่อมต่อ SQL database ซับซ้อนกว่าการเพิ่มโค้ดเพียงไม่กี่บรรทัด
- เมื่อตารางถูกลบ view จะกลายเป็น inactive ขึ้นอยู่กับ table objects
- แม้ SQL databases จะปฏิบัติตามมาตรฐาน ANSI & ISO บางฐานข้อมูลใช้ส่วนขยายเฉพาะผู้จัดจำหน่ายเพื่อให้แน่ใจว่า vendor lock-in
- เป็นอ็อบเจ็กต์ จึงใช้พื้นที่