แบบฝึกหัด T-SQL (LAB02–LAB11) สำหรับหลักสูตร SQL Query ใช้คู่กับ sample database ชื่อ TSQL ดัดแปลงจาก TSQLV6 sample database ของ Itzik Ben-Gan (ตำรา T-SQL Fundamentals) ให้ตรงกับ บริบทของหลักสูตร: ข้อมูลปี 2024–2026 และใช้ server กลางเครื่องเดียว หลายผู้เรียน
├── README.md ← ไฟล์นี้
├── setup_files/
│ ├── TSQL.sql ← สคริปต์สร้าง + populate database TSQL
│ └── README.md ← วิธีติดตั้งและรายละเอียดข้อมูล
└── lab_files/
├── SQL Query.slnx ← เปิดทุก project พร้อมกันใน SSMS
├── LAB02 Exercises/ LAB02 Solutions/ (โครงสร้างเดียวกันถึง LAB11)
│ ├── Lab Exercise N.sql ← โจทย์/เฉลย
│ ├── Lab Exercise N - Task M Result.txt ← ผลลัพธ์ที่ถูกต้อง (เฉพาะฝั่ง Exercises)
│ └── LABxx Exercises.ssmssqlproj ← project ของ SSMS
└── ...
- SQL Server 2019 ขึ้นไป (หรือ Azure SQL Database) และ SSMS
- รัน
setup_files/TSQL.sqlดูวิธีละเอียดใน setup_files/README.md - เปิด
lab_files/SQL Query.slnxด้วย SSMS — ได้ project ของทุก LAB ในหน้าต่างเดียว - ผู้เรียนเชื่อมต่อไปยัง database TSQL (server / user / password ตามที่อาจารย์แจ้ง)
| LAB | บทที่ | หัวข้อ | หมายเหตุ |
|---|---|---|---|
| LAB02 | 02 | พื้นฐาน SELECT และการใช้ SSMS | ไม่มีไฟล์ผลลัพธ์ (งานเน้นทักษะการใช้เครื่องมือ) |
| LAB03 | 03 | การสืบค้นข้อมูลและ JOIN | |
| LAB04 | 04 | Subqueries (ใช้ view HR.Calendar ที่เตรียมไว้ใน setup) |
|
| LAB05 | 05 | Subqueries ต่อยอด / Table expressions | |
| LAB06 | 06 | ฟังก์ชันวันที่และเวลา, CAST/CONVERT/PARSE | ใช้ view Sales.Somedates ที่เตรียมไว้ใน setup; ตัวอย่างวันที่ปี 2011 ใน task สาธิตการแปลงเป็นของตัวเองโดยตั้งใจ |
| LAB07 | 08 | GROUP BY และฟังก์ชัน aggregate | |
| LAB08 | 09 | การแก้ไขข้อมูล (INSERT / DELETE) | เพิ่มข้อมูลลงตารางร่วม — ต้องรันคำสั่งลบปิดท้ายตามขั้นตอน |
| LAB09 | 10 | Views และ Inline TVF | สร้าง ProductsBeverages_XX, fnGetSalesByCustomer_XX, fnGetTop3ProductsForCustomer_XX |
| LAB10 | 11 | Set operators (UNION / EXCEPT / INTERSECT) | สร้าง fnGetTop3ProductsForCustomer_XX |
| LAB11 | 12 | Window functions (RANK, LAG, LEAD, FIRST_VALUE) |
หมายเหตุ: หมายเลข บทที่ ตรงตาม comment ในไฟล์แบบฝึกหัด (หลักสูตรข้ามบทที่ 07 ของตำรา)
- เปิดไฟล์ใน folder
Exercises— แต่ละไฟล์มีหัวข้องานที่ Nพร้อมคำอธิบายภาษาไทย - เขียนคำสั่ง T-SQL ในช่องว่างใต้โจทย์ แล้วรัน
- เทียบผลลัพธ์กับไฟล์
Lab Exercise N - Task M Result.txt(รูปแบบ: ข้อมูล +(N row(s) affected); ผลลัพธ์ที่มีมากกว่า 20 แถวจะย่อเป็น 4 แถวแรก +...+ 3 แถวท้าย) - ตรวจคำตอบด้วยตัวเองได้จากไฟล์ใน folder
Solutions
ผู้เรียนทุกคนต่อไปยัง database TSQL บน server เครื่องเดียวกัน จึงมีกฎเพื่อไม่ให้กระทบกัน:
- object ที่แบบฝึกหัดสั่งสร้าง (view/function) ใช้ชื่อลงท้าย
_XX→ ให้แทนXXด้วยเลขประจำตัวของคุณก่อนรันทุกครั้ง เช่น_XX→_07(Ctrl+H แทนที่รวดเดียวในไฟล์นั้น) — ครอบคลุม LAB09, LAB10 (LAB04 และ LAB06 ใช้ view ที่หลักสูตรเตรียมไว้ให้HR.Calendar/Sales.Somedatesจึงไม่ต้องสร้าง object เอง) - LAB08 จะเพิ่มแถวข้อมูลเข้า
Sales.Ordersซึ่งเป็นตารางใช้ร่วมกัน → หลังสังเกตผล ต้องรันคำสั่ง DELETE ตามงานที่ 5 ของแบบฝึกหัดที่ 3 ทุกครั้ง - งานอื่น ๆ เป็นการอ่านข้อมูลล้วน ทำพร้อมกันได้ปลอดภัย
- วันที่ใน
Sales.Ordersเลื่อนเป็นช่วง 2024-07-04 ถึง 2026-05-06 (filter วันที่ในแบบฝึกหัดปรับตาม: ปี 2007 → 2025, ปี 2008 → 2026) - คอลัมน์
orderdate/requireddate/shippeddateเป็น DATETIME พร้อมเวลาทำการ 08:00–18:00 (ต้นฉบับเป็น DATE ไม่มีเวลา) - วันเกิดใน
HR.Employeesปรับให้อยู่ในวัยทำงานเหมาะสมกับช่วงข้อมูลใหม่ - ไฟล์
Result.txtทุกไฟล์ generate จาก database ชุดนี้โดยตรง — ตรวจสอบความถูกต้องแล้ว
- Sample database ดัดแปลงจาก TSQLV6 และแบบฝึกหัดอ้างอิงโครงสร้างจากตำรา T-SQL Fundamentals — © Itzik Ben-Gan
- ปรับปรุงสำหรับหลักสูตร SQL Query โดย DataFabric-Academy
เนื้อหาใน repository นี้ (แบบฝึกหัด สคริปต์ setup และเอกสารประกอบ) เผยแพร่ภายใต้ สัญญาอนุญาต MIT — ส่วนที่ดัดแปลงจาก TSQLV6 ยังอ้างอิง credit ของงานต้นฉบับ ตามหัวข้อด้านบน