SQL (Structured Query Language) เป็นภาษาทั่วไปที่ฐานข้อมูลเชิงสัมพันธ์ที่สำคัญเกือบทุกตัวบนโลกใช้—ตั้งแต่ PostgreSQL, MySQLและ SQLite ไปจนถึงระบบเชิงพาณิชย์อย่าง SQL Server และ Oracle มันช่วยให้คุณกำหนดโครงสร้างข้อมูล เก็บข้อมูล สืบค้นได้อย่างมีประสิทธิภาพ และบังคับใช้กฎเกี่ยวกับพฤติกรรมของข้อมูลนั้น
ด้านล่างนี้คือการทัวร์ SQL แบบลึกประมาณ 2,500 คำ: มันคืออะไร ทำงานอย่างไร และวิธีใช้งานให้ดีในระบบจริง
SQL เป็นภาษา ประกาศ: คุณอธิบาย อะไร ที่คุณต้องการ และฐานข้อมูลตัดสินใจ อย่างไร ในการได้มันมา บทช่วยสอนเช่น คู่มือ SQL บน W3Schools และ ซีรีส์ W3Schools.in SQL แนะนำ SQL เป็นภาษามาตรฐานสำหรับการจัดเก็บ จัดการ และ ดึงข้อมูลข้ามเครื่องมือฐานข้อมูลหลายตัว
เพราะ SQL ถูกมาตรฐานและรองรับอย่างกว้างขวาง คุณสามารถใช้โมเดลความคิดเดียวกันได้ใน:
ข้อมูลธุรกิจประจำวันส่วนใหญ่—คำสั่งซื้อ ผู้ใช้ การชำระเงิน บันทึก การวิเคราะห์—ในที่สุด ถูกเก็บในตารางที่คุณสามารถสืบค้นด้วย SQL
SQL ถูกมาตรฐานโดยครอบครัวมาตรฐาน ISO/IEC 9075 ซึ่งกำหนดภาษาหลักและส่วนขยายทาง เลือกมากมาย มาตรฐานได้วิวัฒนาการผ่านเวอร์ชันเช่น SQL-86, SQL-92, SQL:1999, SQL:2003 และถึง SQL:2023 บทความเช่นภาพรวม ANSI ของ มาตรฐาน SQL ISO/IEC 9075:2023 อธิบายว่ามาตรฐาน ANSI และ ISO จัดแนวกันอย่างไรเมื่อเวลาผ่านไป
มาตรฐานเองถูกแบ่งเป็นหลายส่วน เช่น:
คุณสามารถดูรายการทั้งหมดได้ที่ หน้าคatalog ISO สำหรับ SQL และในทรัพยากรเช่น การแยกส่วนมาตรฐานของ Modern SQL.
ในทางปฏิบัติ ฐานข้อมูลแต่ละตัวใช้ ภาษาถิ่นของตัวเอง:
แนวคิดหลัก—ตาราง แถว คอลัมน์ การเชื่อมต่อ การรวม—สามารถพกพาได้ แต่ ระบบที่ไม่ธรรมดาใดๆ จะเกี่ยวข้องกับการเรียนรู้ความแปลกและ คุณสมบัติของภาษาถิ่นเฉพาะ
ในหัวใจ SQL ถูกออกแบบรอบ โมเดลเชิงสัมพันธ์: ข้อมูลอยู่ใน ตาราง (relations) โดยแต่ละแถว แสดงข้อเท็จจริงและแต่ละคอลัมน์อธิบายแอตทริบิวต์
องค์ประกอบทั่วไปรวมถึง:
customers, ordersid, name, order_date, total_amountid)orders.customer_id → customers.id)คู่มือการทำให้เป็นมาตรฐาน—เช่น บทช่วยสอน DigitalOcean เกี่ยวกับการทำให้เป็นมาตรฐาน หรือคำอธิบาย freeCodeCamp เกี่ยวกับ 1NF, 2NF, 3NF—กำหนดการออกแบบเชิงสัมพันธ์ที่ดีเป็นการลดความซ้ำซ้อนและป้องกันความผิดปกติในการอัปเดต โดยแยกข้อมูลเป็นตารางที่มีโครงสร้างดีและเชื่อมโยงพวกมัน ด้วยคีย์
เมื่อคุณสืบค้นด้วย SQL คุณกำลังถามฐานข้อมูลโดยพื้นฐาน: "จากตารางเหล่านี้ ภายใต้เงื่อนไขเหล่านี้ แถวและคอลัมน์ใดที่ฉันควรเห็น?"
คำสั่ง SELECT เป็นเครื่องมือหลักของ SQL และอาจเป็น คำสั่งที่ซับซ้อนที่สุด คู่มืออ้างอิง SQLite SELECT เรียกมันว่า "คำสั่งที่ซับซ้อนที่สุดในภาษา SQL" และทั้ง เอกสาร MySQL SELECT และบทช่วยสอนเช่น คู่มือ SELECT ของ SQLite Tutorial เดินผ่านตัวเลือกมากมายของมัน
SELECT id, name
FROM customers;ส่วนสำคัญ:
SELECT รายการคอลัมน์ (หรือ * สำหรับคอลัมน์ทั้งหมด แม้ว่าจะดีกว่าถ้าเจาะจง)FROM เลือกตารางหนึ่งหรือมากกว่าWHERE กรองแถวORDER BY เรียงลำดับผลลัพธ์LIMIT จำกัดจำนวนแถวที่คุณเห็นSELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;บทช่วยสอนเบื้องต้นเช่น บทช่วยสอน SQL ของ W3Schools และ ภาพรวม W3Schools MySQL ของคำสั่งทั่วไป ใช้ SELECT เพื่อแสดงวิธีที่คุณดึงข้อมูลจากตารางใน นิพจน์เดียวที่อ่านได้
SQL โดดเด่นเมื่อคุณรวมการกรองและนิพจน์โดยตรงในคำสั่ง:
SELECT
id,
total_amount,
total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
AND total_amount >= 100
ORDER BY total_amount DESC;อนุประโยค WHERE สามารถใช้ตัวดำเนินการเปรียบเทียบ (=, <>, >, <), ตัวดำเนินการเชิงตรรกะ (AND, OR, NOT), การจับคู่รูปแบบ (LIKE, ILIKE) และอื่นๆ ฐานข้อมูลเช่น MySQL เอกสารชุดที่หลากหลายของ ฟังก์ชันและตัวดำเนินการในตัว สำหรับตัวเลข สตริง วันที่/เวลา JSON และการดำเนินการอื่นๆ
คุณยังสามารถ:
IN เพื่อจับคู่กับรายการ: WHERE status IN ('paid', 'refunded')BETWEEN สำหรับช่วง: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'IS NULL / IS NOT NULL เพื่อจัดการค่าที่หายไปบทช่วยสอนและคู่มือที่ดีเน้นว่านิพจน์ปรากฏในหลาย อนุประโยค—WHERE, ORDER BY, HAVING และ แม้แต่ SELECT เอง เอกสาร MySQL เน้นสิ่งนี้ในส่วนของพวกเขา เกี่ยวกับการประเมินนิพจน์ภายในบทฟังก์ชันและตัวดำเนินการ
ฐานข้อมูลจริงแทบไม่เก็บทุกอย่างในตารางเดียว แต่คุณ ทำให้ข้อมูลเป็นมาตรฐานเป็นหลายตารางและ เชื่อม พวกมันเมื่อคุณ สืบค้น การเชื่อมต่อถูกครอบคลุมอย่างกว้างขวางในทรัพยากรเช่น หน้า W3Schools เกี่ยวกับการเชื่อม SQL, บทช่วยสอนการเชื่อมของ GeeksforGeeks, ภาพรวมการเชื่อมของ TutorialsPointและคู่มือแบบโต้ตอบเช่น บทช่วยสอนการเชื่อม SQL บน SQL Practice Online.
SELECT
o.id,
c.name,
o.order_date,
o.total_amount
FROM orders AS o
JOIN customers AS c
ON c.id = o.customer_id;ประเภทการเชื่อมทั่วไป:
คำอธิบายแบบภาพและโค้ดหนัก เช่น บทความ "SQL joins อธิบาย" ของ DbSchema หรือ ตัวอย่างการเชื่อมของ LearnSQL.comเป็นวิธีที่ดีในการสร้างสัญชาตญาณที่แข็งแกร่งสำหรับวิธีที่การเชื่อมทำงาน
เพื่อสรุปข้อมูล—ผลรวม ค่าเฉลี่ย การนับ—คุณใช้ ฟังก์ชันรวม (COUNT, SUM, AVG, MIN, MAX) กับ GROUP BY:
SELECT
customer_id,
COUNT(*) AS order_count,
SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;อ้างอิงเช่น บทฟังก์ชันและตัวดำเนินการของ MySQL และ เอกสาร PostgreSQL เกี่ยวกับฟังก์ชันรวมและหน้าต่าง แคตตาล็อกฟังก์ชันในตัวที่คุณสามารถใช้ในนิพจน์เหล่านี้
SQL สมัยใหม่ยังรองรับ ฟังก์ชันหน้าต่าง ซึ่งให้คุณ คำนวณการรวมเหนือ "หน้าต่าง" แถวที่เลื่อนได้ในขณะที่ยังส่งคืน แถวแต่ละแถว—เช่น ผลรวมสะสมหรือการจัดอันดับ ฟังก์ชันหน้าต่างเข้าสู่ SQL ผ่านการแก้ไข SQL:1999 ต่อมาถูกรวมเข้ากับ SQL:2003 ตามที่ สรุปในบันทึกเกี่ยวกับ มาตรฐาน SQL:1999 และ SQL:2003.
SELECT
customer_id,
order_date,
total_amount,
SUM(total_amount) OVER (
PARTITION BY customer_id
ORDER BY order_date
) AS running_total
FROM orders;ประเภทคำสั่งนี้มีประสิทธิภาพมากสำหรับการวิเคราะห์โดยตรงใน ฐานข้อมูล
SQL ไม่ได้มีไว้สำหรับการสืบค้นเท่านั้น มันยังกำหนด รูปร่าง ของ ข้อมูลของคุณผ่านคำสั่ง Data Definition Language (DDL)เอกสารอย่างดีในส่วนเช่น คู่มือการกำหนดข้อมูลของ PostgreSQL และ บทคำสั่ง SQL ของ MySQL.
คำสั่ง DDL ทั่วไป:
CREATE DATABASE my_app; – สร้างฐานข้อมูลCREATE TABLE customers (...); – กำหนดตารางALTER TABLE customers ADD COLUMN phone TEXT; – เปลี่ยนโครงสร้าง ตารางDROP TABLE customers; – ลบตารางCREATE TABLE customers (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
active BOOLEAN NOT NULL DEFAULT TRUE
);สิ่งที่ควรทราบ:
PRIMARY KEY, UNIQUE, NOT NULL, นิพจน์ CHECKคู่มือ RDBMS หลักทุกตัว—ส่วน ภาษา SQL ของ PostgreSQL, คู่มืออ้างอิง MySQLและ คู่มืออ้างอิงภาษา SQLite—เน้นการคิดอย่างระมัดระวังเกี่ยวกับ DDL เพราะการตัดสินใจเกี่ยวกับสคีมายาก ที่จะเปลี่ยนในภายหลัง
ฐานข้อมูล SQL มักใช้คุณสมบัติ ACID— Atomicity, Consistency, Isolation, Durability—ผ่าน ธุรกรรม:
BEGIN;
UPDATE accounts
SET balance = balance - 200
WHERE id = 1;
UPDATE accounts
SET balance = balance + 200
WHERE id = 2;
COMMIT;ถ้าอะไรก็ตามล้มเหลวระหว่าง BEGIN และ COMMIT ธุรกรรม สามารถถูกย้อนกลับเพื่อไม่ให้การเปลี่ยนแปลงระดับกลางรั่วไหลเข้าไปใน ฐานข้อมูล
ส่วนของ MySQL เกี่ยวกับ คำสั่งธุรกรรมและการล็อก ครอบคลุม START TRANSACTION, COMMIT, ROLLBACK และ savepoints ในขณะที่บทของ PostgreSQL เกี่ยวกับ การควบคุมการทำงานพร้อมกัน และ การจัดการธุรกรรม อธิบายว่าระดับการแยกและ MVCC ทำงานอย่างไรภายใต้ประทุน
ข้อจำกัด—เช่น foreign keys หรือ check constraints—เป็นวิธีของฐานข้อมูล ในการบังคับใช้กฎธุรกิจ:
ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);เมื่อใช้อย่างดี พวกมันเปลี่ยนฐานข้อมูลของคุณเป็น ผู้พิทักษ์ของค่าคงที่ป้องกันข้อมูลที่ไม่ถูกต้องที่แหล่งที่มาแทนที่จะพึ่งพาเฉพาะตรรกะ แอปพลิเคชัน
การได้สคีมาที่ถูกต้องมักสำคัญกว่าคำสั่งที่ฉลาด การทำให้เป็นมาตรฐา น เป็นกระบวนการจัดโครงสร้างตารางเพื่อ ลดความซ้ำซ้อนและปรับปรุงความสอดคล้อง บทช่วยสอนเช่น:
ความก้าวหน้าที่เป็นแบบฉบับ:
การทำให้เป็นมาตรฐานมากเกินไปสามารถทำร้ายประสิทธิภาพและทำให้คำสั่งซับซ้อน ทีมที่ปฏิบัติจริง มักทำให้เป็นมาตรฐานถึง 3NF แล้วจึง ทำให้ไม่เป็นมาตรฐาน แบบเลือกสรร (เช่น การแคชการรวม) ที่ประสิทธิภาพต้องการ
ดัชนีเป็นเครื่องมือหลักในการทำให้คำสั่ง SQL เร็ว พวกมันเป็นโครงสร้างข้อมูลเสริม ที่ให้ฐานข้อมูลกระโดดตรงไปยังแถวที่เกี่ยวข้องแทน การสแกนตารางทั้งหมด
ทรัพยากรที่ได้รับการยกย่องอย่างลึกซึ้งเกี่ยวกับการทำดัชนีคือ Use The Index, Luke! ของ Markus Winand หนังสือออนไลน์ฟรีที่มุ่งเน้นทั้งหมด เกี่ยวกับประสิทธิภาพ SQL และกลยุทธ์การทำดัชนี หน้าหลักของไซต์ UseTheIndexLuke.comและบทความเช่น "การปรับประสิทธิภาพการทำดัชนี LIKE filters" และ "ดัชนีมากขึ้น INSERT ช้าลง" อธิบายเมื่อดัชนีช่วยและเมื่อพวกมันทำร้าย
แนวคิดสำคัญ:
WHERE email = ..., WHERE created_at >= ...)(customer_id, created_at) ทำงานได้ดีสำหรับ WHERE customer_id = ? AND created_at >= ?SELECT, UPDATE และ DELETE พร้อมตัวกรอง แต่ ทำให้การแทรกช้าลง เพราะการแทรกแต่ละครั้งต้องอัปเดตทั้งหมด ดัชนีที่เกี่ยวข้องคู่มือเช่น บทความ MSSQLTips เกี่ยวกับการออกแบบดัชนี SQL Server สาธิตว่าการเลือกคอลัมน์และลำดับในดัชนีส่งผลต่อคำสั่งจริงอย่างไร
กฎทั่วไปที่ปฏิบัติได้:
EXPLAIN ANALYZE ของฐานข้อมูลเพื่อดูว่าคำสั่งถูกดำเนินการอย่างไรในขณะที่พื้นฐานยังคงมั่นคง SQL สมัยใหม่ได้เติบโต อย่างมาก:
WITH อนุญาตคำสั่งที่อ่านได้และเป็นโมดูลมากขึ้น:WITH recent_orders AS (
SELECT *
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT customer_id, COUNT(*)
FROM recent_orders
GROUP BY customer_id;มาตรฐาน SQL เองได้เพิ่มส่วนสำหรับ XML อาร์เรย์หลายมิติ และคำสั่ง property graph queries ตามที่เอกสารใน แคตตาล็อกมาตรฐาน SQL ISO และในบทความเกี่ยวกับวิวัฒนาการของ SQL เช่น บทความมาตรฐาน SQL ANSI.
SQL สมัยใหม่มีประสิทธิภาพพอที่แอปพลิเคชันหลายตัวสามารถผลักดันตรรกะที่ซับซ้อน —ลำดับชั้น การวิเคราะห์ การประมวลผลเหตุการณ์—ลงไปในชั้นฐานข้อมูล
เพราะ SQL ยังคงเป็นพื้นฐานสำหรับงานข้อมูล มีระบบนิเวศที่หลากหลายของ ทรัพยากรการเรียนรู้:
กลยุทธ์การเรียนรู้ที่ปฏิบัติได้:
WHERE, ORDER BYและ LIMITGROUP BYEXPLAINถ้าคุณสามารถอ่านและเขียน SQL ได้อย่างสบาย คุณสามารถตรวจสอบข้อมูลโดยตรงใน การผลิต สร้างรายงานโดยไม่ต้องส่งออกไปยังสเปรดชีต ดีบัก ตรรกะแอปพลิเคชันโดยดูตารางพื้นฐาน และทำงานร่วมกันได้มากขึ้น อย่างมีประสิทธิภาพกับวิศวกรและนักวิเคราะห์
SQL อยู่ที่จุดตัดที่ไม่เหมือนใคร: มันมีอายุมากกว่า 40 ปี แต่ยังคง เกี่ยวข้องอย่างลึกซึ้งในระบบคลาวด์เนทีฟที่เน้นการวิเคราะห์ในวันนี้ มาตรฐาน ISO/IEC 9075 และหลายส่วนยังคงวิวัฒนาการ ในขณะที่ฐานข้อมูลโอเพนซอร์สเช่น PostgreSQL, MySQLและ SQLite ผลักดันคุณสมบัติที่ปฏิบัติได้และการปรับปรุงประสิทธิภาพ
ถ้าคุณทำงานกับข้อมูล—นักพัฒนา นักวิเคราะห์ นักวิทยาศาสตร์ข้อมูล หรือผู้จัดการผลิตภัณฑ์—SQL เป็นภาษาที่ใช้ร่วมกันที่ให้คุณ ถามคำถามฐานข้อมูลโดยตรง มันคุ้มค่าที่จะเรียนรู้ครั้งเดียว และ มันจ่ายผลตอบแทนสำหรับอาชีพที่เหลือของคุณ
การจัดรูปแบบ SQL คือกระบวนการจัดระเบียบคำสั่ง SQL ด้วยการเยื้อง การขึ้นบรรทัดใหม่ และตัวพิมพ์ของคำสำคัญที่เหมาะสมเพื่อปรับปรุงการอ่านและการบำรุงรักษา
ตัวจัดรูปแบบของเรารองรับหลายภาษาถิ่น SQL รวมถึง MySQL, PostgreSQL, SQL Server, SQLite, Oracle และอื่นๆ อีกมากมาย
ใช่! การจัดรูปแบบ SQL ทั้งหมดเกิดขึ้นในเบราว์เซอร์ของคุณ คำสั่งของคุณไม่เคยออกจากคอมพิวเตอร์ของคุณ ทำให้มั่นใจได้ถึงความเป็นส่วนตัวและความปลอดภัยอย่างสมบูรณ์
ใช่ คุณสามารถจัดรูปแบบหลายคำสั่ง SQL พร้อมกันได้ ตัวจัดรูปแบบจะจัดการแต่ละคำสั่งอย่างเหมาะสมตามภาษาถิ่นที่เลือก
ตัวจัดรูปแบบจะพยายามจัดรูปแบบ SQL ของคุณแม้ว่าจะมีข้อผิดพลาดทางไวยากรณ์ก็ตาม อย่างไรก็ตาม คุณอาจเห็นข้อความแสดงข้อผิดพลาดสำหรับ SQL ที่ไม่ถูกต้องซึ่งไม่สามารถแยกวิเคราะห์ได้ ควรตรวจสอบ SQL ของคุณด้วยระบบฐานข้อมูลของคุณเสมอ