Querying
การสืบค้น
SQL บอกว่าต้องการข้อมูลอะไรและเงื่อนไขไหน เริ่มจากเลือกตารางแล้วค่อยกรอง
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
- SQL
- ภาษาประมวลข้อมูลในฐานข้อมูล เช่นเลือก กรอง join และเปลี่ยนข้อมูล
SELECT คิดเป็นขั้นเลือกชุดข้อมูล
อ่าน query จากความหมายของแหล่งข้อมูลและเงื่อนไข แม้ จะเขียน SELECT ก่อน FROM แบบจำลองเชิงตรรกะเริ่มจากแหล่งแถว แล้วคัดตามเงื่อนไข ก่อนเลือกคอลัมน์และจัดผล แผนประมวลผลจริงของฐานข้อมูลอาจปรับลำดับเพื่อให้เร็วขึ้นโดยรักษาความหมาย
- FROM
ระบุชุดข้อมูล เช่น login_events มี user_id status และ event_time
- WHERE
คัดแถว เช่น status = 'failed' เปรียบเทียบค่าตามชนิดและกฎของฐานข้อมูล
- AND / OR / NOT
AND ต้องผ่านทั้งสอง OR อย่างน้อยหนึ่ง ใส่วงเล็บให้เจตนาชัดเมื่อผสมหลายเงื่อนไข
- SELECT
เลือกคอลัมน์ที่ต้องใช้ ไม่ดึงทุกข้อมูลโดยไม่มีเหตุผล
- ORDER BY
กำหนดลำดับผล ถ้าไม่มี clause นี้ไม่ถือว่าลำดับแถวรับรองได้
| id | user | status | ผ่าน WHERE |
|---|---|---|---|
| 1 | Ann | success | ไม่ |
| 2 | Ben | failed | ใช่ |
| 3 | Ann | failed | ใช่ |
| 4 | Cara | success | ไม่ |
เลือก 2 จาก 4 แถว
ข้อมูลสังเคราะห์เพื่ออธิบายเงื่อนไข SQL แสดงแถวที่ไม่ถูกเลือกจางลงแทนการซ่อน เพื่อให้เห็นเหตุที่ AND กับ OR ให้ผลต่างกัน
WHERE amount > 10 ต่างจากการค้นข้อความที่มีเลข 10 เวลาและ timezone ต้องตรงความหมายของข้อมูล LIKE ใช้ pattern ตาม dialect ไม่ใช่ regex ทุกแบบ การเทียบ NULL ต้องใช้ IS NULL หรือ IS NOT NULL ตามที่รองรับ เพราะ NULL = NULL ไม่ให้ผลเป็นจริงแบบค่าปกติ
เลือกข้อมูลและตารางSELECT and FROM · 12.2.1
SELECT เลือกคอลัมน์ FROM ระบุตาราง เช่น SELECT name FROM users
SELECT เลือกคอลัมน์ FROM ระบุตารางที่จะอ่าน ผลลัพธ์เป็นชุดแถวที่อาจถูกกรอง จัดกลุ่ม หรือเรียงเพิ่มเติม การเลือกเฉพาะคอลัมน์ที่ต้องใช้ลดข้อมูลเกินจำเป็นและทำให้รู้ว่าผลคืออะไร
คอลัมน์ที่ต้องการ
แหล่งข้อมูล
ชุดแถวที่ query ส่งคืน
SELECT hostname, last_seen FROM devices; อ่านสองคอลัมน์ ไม่มีการเรียงรับรองจนใช้ ORDER BY ถ้าต้องการชื่อซ้ำเพียงครั้งเดียวใช้ DISTINCT ตามความหมายงาน ไม่ใช้เพื่อกลบปัญหา join ที่ผิด
SELECT hostname, last_seen
FROM devices
ORDER BY hostname;FROM ระบุ devices SELECT ระบุคอลัมน์ที่จะคืน ORDER BY เรียงผลตาม hostname สมมติฐานคือตารางและคอลัมน์มีชื่อนี้จริง ไม่ใช่ query ที่ใช้ได้กับฐานข้อมูลทุกชุด
SELECT username, login_time FROM logins WHERE success = false; เลือกสองคอลัมน์จากแถวที่ login ไม่สำเร็จ ชื่อตาราง field และชนิดค่าต้องตรง schema ที่ใช้อยู่ ตัวอย่างเป็นข้อมูลสมมติเพื่ออ่านส่วนของ query
Query ที่รันไม่ error ยังอาจตอบคำถามผิดถ้าเงื่อนไขหรือช่วงเวลาไม่ตรง ตรวจจำนวนแถว ค่า NULL และตัวอย่างผลก่อนนำไปสรุปเหตุ
ที่มาของหัวข้อนี้ · 1 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- Tools of the Trade: Linux and SQL · Module 4: Databases and SQLVideo: Basic queriesCY4.M4.V5
เงื่อนไขและการเปรียบเทียบWHERE and Comparison · 12.2.2
WHERE เลือกแถวที่เข้าเงื่อนไข เช่น status = 'active'
WHERE กรองแต่ละแถวด้วยเงื่อนไข เช่น =, <, > หรือ IN ใช้ชนิดข้อมูลให้ตรง ค่า string มักครอบ single quote การเทียบ NULL ต้องใช้ IS NULL หรือ IS NOT NULL แทน = NULL
รายการก่อนกรอง
เงื่อนไขที่ตรวจต่อแถว
รายการที่ผ่านเงื่อนไข
WHERE status = 'active' AND last_seen < '2026-09-01' เลือกเครื่อง active ที่เก่ากว่าวันกำหนด ก่อนใช้กับการแก้ข้อมูลควร SELECT เงื่อนไขเดียวกันดู scope ให้ชัด
SELECT hostname FROM devices
WHERE status = 'active'
AND owner_id IS NULL;เลือกเฉพาะเครื่อง active ที่ไม่มีค่าผู้รับผิดชอบ NULL ใช้ IS NULL หากใช้ = NULL ผลจะไม่เป็น true แบบที่คาด ตัวอย่างเป็นการอ่านข้อมูล
ที่มาของหัวข้อนี้ · 1 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- Tools of the Trade: Linux and SQL · Module 4: Databases and SQLReading: The WHERE clause and basic operatorsCY4.M4.R5
กรองข้อความ ตัวเลข และวันที่Text, Number and Date Filters · 12.2.3
ข้อความ ตัวเลข และวันที่ต้องใช้การเปรียบเทียบที่เหมาะกับชนิดข้อมูล
Text filtering ใช้ LIKE ตาม pattern เช่น % แทนหลายอักขระและ _ แทนอักขระหนึ่งตัวใน มาตรฐาน การเทียบตัวใหญ่เล็กขึ้นกับ DB และ collation วันที่และเวลาต้องรู้ timezone และชนิดคอลัมน์
ค้นตามรูปแบบข้อความ
เทียบจำนวนตามชนิด
ขอบช่วงและเขตเวลา
ช่วงหนึ่งวันควรใช้ตั้งแต่ต้นวันแบบ inclusive ถึงต้นวันถัดไปแบบ exclusive หากคอลัมน์มีเวลา WHERE at >= start AND at < next_start ช่วยไม่ตกหล่นข้อมูลเศษวินาทีปลายวัน
ที่มาของหัวข้อนี้ · 2 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- Tools of the Trade: Linux and SQL · Module 4: Databases and SQLVideo: Filter dates and numbersCY4.M4.V7
- Tools of the Trade: Linux and SQL · Module 4: Databases and SQLReading: Operators for filtering dates and numbersCY4.M4.R7
รวมเงื่อนไขAND, OR and NOT · 12.2.4
AND ต้องจริงทุกส่วน OR จริงอย่างน้อยส่วนหนึ่ง NOT กลับค่าความจริง ต้องระวังวงเล็บ
AND ต้องจริงทั้งสองเงื่อนไข OR ให้จริงอย่างน้อยหนึ่ง NOT กลับผลเงื่อนไข แต่ มีค่า unknown จาก NULL จึงไม่ใช่ตรรกะสองค่าทุกกรณี ใช้วงเล็บแสดงกลุ่มเงื่อนไขให้ตรงความต้องการ
ต้องผ่านร่วมกัน
ผ่านอย่างน้อยหนึ่ง
กลับเงื่อนไขโดยระวังค่า unknown
status = 'active' AND (team = 'IT' OR team = 'Security') ต่างจากไม่มีวงเล็บที่อาจเลือก Security ทั้งหมด ตรวจผลของตัวอย่างที่ควรเข้าและควรไม่เข้าโดยอ่านเงื่อนไขทีละกลุ่ม
NULL and Three-valued Logic (ค่าว่างเชิงข้อมูลกับตรรกะสามค่า)
ใช้ NULL เพื่อแทนการไม่มีค่าตามแบบข้อมูล การเทียบ age > 18 เมื่อ age เป็น NULL ไม่ให้ TRUE หรือ FALSE แบบจำนวนทั่วไป แต่ให้ UNKNOWN WHERE เก็บแถวที่ predicate เป็น TRUE เท่านั้น จึงต้องระบุ IS NULL หากต้องการรายการที่ไม่มีข้อมูล แทน age = NULL
AND OR และ NOT ต้องอ่านร่วม UNKNOWN และวงเล็บเช่น A AND (B OR C) ต่างจาก (A AND B) OR C การรู้ว่าต้องการคนที่ไม่ผ่านเงื่อนไขกับคนที่ยังไม่มีข้อมูลเป็นสองกลุ่มช่วยไม่ทำรายงานคนหรือเหตุหายโดยไม่ตั้งใจ
| Expression เมื่อ x เป็น NULL | ผล |
|---|---|
| x = 5 | UNKNOWN |
| x IS NULL | TRUE |
| NOT (x = 5) | UNKNOWN |
| WHERE x = 5 | แถวไม่ถูกเก็บ |
| WHERE x IS NULL | แถวถูกเก็บ |
WHERE status = 'active'
AND (team = 'IT' OR team = 'Security')ผลต้องเป็น active และอยู่ในหนึ่งในสองทีม หากเอาวงเล็บออก precedence ปกติของ AND/OR ทำให้เงื่อนไขต่างออกไป จึงเขียนกลุ่มให้สื่อความตั้งใจ
ที่มาของหัวข้อนี้ · 1 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- Tools of the Trade: Linux and SQL · Module 4: Databases and SQLVideo: Filters with AND, OR, and NOTCY4.M4.V8
นำศัพท์มาเชื่อมกับงาน
ค้นการล็อกอินที่ล้มเหลวในช่วงเวลาหนึ่ง โดยระบุทั้งสถานะและช่วงวันที่
สิ่งที่บทนี้เชื่อมไว้
SQL บอกว่าต้องการข้อมูลอะไรและเงื่อนไขไหน เริ่มจากเลือกตารางแล้วค่อยกรอง
ใช้ภาพกับตัวอย่างด้านบนเชื่อมหน้าที่ของแต่ละส่วน แล้วตรวจความเข้าใจด้วยการอธิบายเหตุผลของผลที่เห็น ก่อนเปิดบทถัดไป
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน
transcript ที่เคยใช้ตรวจแนวคิดพื้นฐานและตัวอย่างบางส่วน: T0268 · Tools of the Trade Linux and SQL คำอธิบายเป็นการเขียนใหม่ ไม่ใช่การแปลครบทุกประโยค ภาพและตัวอย่างเป็นการเรียบเรียงเพื่อเชื่อมความเข้าใจ
คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้