Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL
MySQL
  1. เปรียบเทียบ DateTime และหาความต่างวันระหว่างคอลัมน์ใน MySQL ด้วย DATEDIFF

    การเปรียบเทียบ DateTime และคำนวณความต่างวันระหว่าง 2 คอลัมน์ ใช้ DATEDIFF(date1, date2) หาความต่างวัน (date1 - date2) ร่วมกับการหารเพื่อแปลงเป็นปี Syntax years_threshold; ตัวอย่าง: หาคนอายุเกิน 23 ปี (DOB vs CurrentDate) สร้างตาราง DOB และ CurrentDate: INSERT INTO DemoTable VALUES (1995-01-

  2. MySQL FLOAT ไม่รับค่าบางตัว? ใช้ DECIMAL แทนเพื่อความแม่นยำ

    ปัญหาความแม่นยำของ FLOAT/DOUBLE และวิธีแก้ด้วย DECIMAL FLOAT และ DOUBLE เป็น **Floating Point (IEEE 754)** เก็บค่าประมาณการ (Approximate) อาจเกิด Rounding Error เช่น 0.1 + 0.2 ≠ 0.3 แก้ไข: ใช้ DECIMAL (Exact Numeric) DECIMAL(M, D) หรือ NUMERIC(M, D) เก็บค่า **แม่นยำ (Exact)** เหมาะสำหรับเงิน, การวั

  3. ใช้ INSERT ... ON DUPLICATE KEY UPDATE ใน MySQL (Upsert)

    คำสั่ง INSERT ... ON DUPLICATE KEY UPDATE (Upsert) ทำงานแบบ: **ลอง Insert ก่อน → หากเจอ Duplicate Key (PK/Unique) ให้ Update แทน** เหมาะสำหรับ Sync Data, Counter, Cache Syntax INSERT INTO table (col1, col2, ...) VALUES (val1, val2, ...) ON DUPLICATE KEY UPDATE col2 = new_val, col3 = new_val, ...;

  4. รวมแถว (Merge Rows) ใน MySQL ด้วย GROUP_CONCAT()

    การรวมหลายแถวที่มีค่าเหมือนกันให้เป็นแถวเดียวด้วย GROUP_CONCAT ใช้ GROUP_CONCAT() ร่วมกับ GROUP BY เพื่อรวมค่าจากหลายแถวเป็น String เดียว คั่นด้วย Separator ที่กำหนด Syntax SELECT group_column, GROUP_CONCAT(DISTINCT other_column SEPARATOR ,) FROM table_name GROUP BY group_column; ตัวอย่าง: รวม I

  5. สุ่มเลือกแถวข้อมูลจากตาราง MySQL ด้วย ORDER BY RAND() LIMIT 1

    การสุ่มเลือก 1 แถว (Random Row) จากตาราง MySQL ใช้ ORDER BY RAND() จับคู่แถวกับค่าสุ่ม แล้ว LIMIT 1 เอาแค่แถวแรก Syntax SELECT * FROM table_name ORDER BY RAND() LIMIT 1; ตัวอย่างการใช้งาน สร้างตารางและเพิ่มข้อมูล: INSERT INTO DemoTable735 VALUES (984474734), (489393323), (23432333), (8949933); Qu

  6. ใช้ REGEXP จับคู่ End-of-line ทางเลือกหลังแต่ละเรคคอร์ดใน MySQL

    Regex Pattern สำหรับจับคู่ EMPLOYEE:100 ตามด้วย Non-digit หรือ End-of-string ใช้ REGEXP พร้อม Pattern EMPLOYEE:100([^0-9]|$) เพื่อจับคู่ข้อความที่ขึ้นต้นด้วย EMPLOYEE:100 และตามด้วย **ไม่ใช่ตัวเลข** หรือ **จบสตริง** Pattern Breakdown EMPLOYEE:100 - Literal String ([^0-9]|$) - กลุ่ม Capture: [^0-9]

  7. อัปเดตทุกแถวยกเว้นค่าเฉพาะในคอลัมน์ด้วย IF() ใน MySQL

    การ UPDATE ทุกแถวแต่ข้ามค่าเฉพาะด้วย IF() ใช้ IF(condition, true_val, false_val) ใน SET clause เพื่อตั้งค่าต่างกันตามเงื่อนไข: แถวที่ตรงเงื่อนไขคงค่าเดิม แถวอื่นอัปเดต Syntax UPDATE table_name SET column = IF(exclude_condition, current_value, new_value); ตัวอย่าง: อัปเดต isMarried = 1 ทุกคน ยกเว้

  8. ใช้ DEFAULT CURRENT_TIMESTAMP และ ON UPDATE CURRENT_TIMESTAMP ใน MySQL

    การตั้งค่า Timestamp อัตโนมัติ: สร้างและอัปเดตอัตโนมัติ คอลัมน์ TIMESTAMP (หรือ DATETIME ใน MySQL 5.6.5+) สามารถตั้งค่าให้: DEFAULT CURRENT_TIMESTAMP - ตั้งค่าเริ่มต้นเป็นเวลาปัจจุบันเมื่อ INSERT ON UPDATE CURRENT_TIMESTAMP - อัปเดตเป็นเวลาปัจจุบันเมื่อ UPDATE แถวนั้น Syntax ALTER TABLE table_na

  9. สร้าง VIEW ว่างเปล่า (Empty View) ใน MySQL ด้วย WHERE FALSE

    การสร้าง View ที่ไม่มีข้อมูล (Empty View) ใน MySQL ใช้ CREATE OR REPLACE VIEW ร่วมกับ SELECT ... FROM DUAL WHERE FALSE เพื่อสร้าง View ที่มีโครงสร้าง (Columns) แต่ไม่มีแถวข้อมูล Syntax CREATE OR REPLACE VIEW view_name AS SELECT value1 AS col1, value2 AS col2, ... FROM DUAL WHERE FALSE; ตัวอย่าง:

  10. ใช้ REGEXP ค้นหาสตริงที่มีตัวอักษรเล็ก พิมพ์ใหญ่ และตัวเลขครบทุกอย่างใน MySQL

    การค้นหาสตริงที่ประกอบด้วย a-z, A-Z และ 0-9 ครบถ้วนด้วย REGEXP BINARY ใช้ REGEXP BINARY (Case Sensitive) ร่วมกับ AND เพื่อตรวจสอบแต่ละกลุ่มตัวอักษรแยกกัน Syntax SELECT * FROM table_name WHERE column REGEXP BINARY [a-z] AND column REGEXP BINARY [A-Z] AND column REGEXP BINARY [0-9]; ตัวอย่างก

  11. ดึงค่าที่มี Upvote มากที่สุดใน MySQL ด้วย Subquery MAX()

    การค้นหาแถวที่มีค่าสูงสุดในคอลัมน์เฉพาะ (Top 1 by Value) ใช้ Subquery หา MAX(upvote_column) แล้วกรองแถวที่ตรงค่านั้น Syntax SELECT column_to_return FROM table_name WHERE value_column = (SELECT MAX(value_column) FROM table_name); ตัวอย่าง: หารูปภาพที่ได้ Upvote มากที่สุด สร้างตารางเก็บรูปและ Upvo

  12. หาผลรวมค่าในคอลัมน์เดียวกันหลายแถวด้วย SUM() ใน MySQL

    การหาผลรวม (Summation) ค่าตัวเลขในคอลัมน์ด้วย SUM() ฟังก์ชัน SUM() เป็น Aggregate Function รวมค่าของคอลัมน์ที่ระบุ (ข้าม NULL อัตโนมัติ) Syntax SELECT SUM(column_name) AS alias_name FROM table_name [WHERE condition]; ตัวอย่างการใช้งาน สร้างตารางราคาสินค้า: INSERT INTO DemoTable739 VALUES (100), (

  13. คำนวณยกกำลัง (Power) ใน MySQL ด้วยฟังก์ชัน POWER()

    การคำนวณเลขยกกำลังด้วย POWER() ฟังก์ชัน POWER(base, exponent) หรือ POW(base, exponent) คำนวณ baseexponent คืนค่า DOUBLE Syntax POWER(base, exponent) -- หรือ POW(base, exponent) ตัวอย่างการใช้งาน สร้างตารางและเพิ่มข้อมูล: INSERT INTO DemoTable VALUES (64), (144), (400); Query OK, 3 rows affected

  14. จัดเรียง VARCHAR ที่เป็นตัวเลข ให้ถูกต้องตามค่าตัวเลข (ASC/DESC) ใน MySQL

    ปัญหาการจัดเรียง VARCHAR ตัวเลข: 10 < 100 < 2 (Lexicographical) คอลัมน์ VARCHAR เก็บตัวเลข จะจัดเรียงแบบ String ทำให้ 10 < 100 < 110 < 2000 < 9 (ผิด) วิธีแก้: CAST เป็น DECIMAL/UNSIGNED ก่อน ORDER BY ORDER BY CAST(column_name AS DECIMAL(20,2)) -- หรือ UNSIGNED, SIGNED ตัวอย่างการใช้งาน สร้างตาราง

  15. เลือกค่าตามลำดับที่กำหนดเองจากคอลัมน์อื่นด้วย IN() ใน MySQL

    การดึงค่าตามลำดับที่กำหนดเอง (Custom Order) ด้วย IN() ใช้ WHERE column IN (val1, val2, val3...) ร่วมกับ ORDER BY FIELD(column, val1, val2, val3...) เพื่อ **ค้นหา** และ **จัดเรียง** ตามลำดับที่ต้องการพร้อมกัน ตัวอย่างการใช้งาน สร้างตารางและเพิ่มข้อมูล: INSERT INTO DemoTable727 VALUES (Chris, 4

  16. แปลงวันที่รูปแบบ UK (DD/MM/YYYY) เป็น DATE ของ MySQL ด้วย STR_TO_DATE

    การแปลงวันที่รูปแบบ UK (Day/Month/Year) ให้เป็น DATE มาตรฐาน MySQL รูปแบบ UK Date: DD/MM/YYYY (เช่น 10/11/2019 = 10 พฤศจิกายน 2019) ใช้ STR_TO_DATE() ด้วย Format %d/%m/%Y Syntax SELECT STR_TO_DATE(your_column, %d/%m/%Y) FROM your_table; ตัวอย่างการใช้งาน สร้างตารางและเพิ่มข้อมูล UK Date: INSERT I

  17. MySQL: แสดงคะแนนนักเรียนในคอลัมน์เดียวตามวิชา ด้วย UNION ALL

    ใช้ UNION ALL เพื่อรวมคะแนนหลายวิชาเป็นคอลัมน์เดียว (Unpivot) ตารางต้นทาง (DemoTable729) (Chris,94,67,75), (Robert,45,99,54), (David,57,89,43); ข้อมูลดิบ (Wide Format) +-----------+-------------+------------+--------+-----------+ | StudentId | StudentName | MySQLMarks | CMarks | JavaMarks | +---

  18. กำหนดค่าผลลัพธ์ SQL ให้ตัวแปรจาก Prepared Statement ใน MySQL ด้วย Stored Procedure

    การใช้ Prepared Statement ใน Stored Procedure เพื่อกำหนดค่าตัวแปร ใช้ PREPARE, EXECUTE, DEALLOCATE PREPARE ภายใน Stored Procedure เพื่อสร้าง Dynamic SQL และเก็บผลลัพธ์ใน User Variable (@var) ตัวอย่าง Stored Procedure แบบ Dynamic DELIMITER ; การเรียกใช้และตรวจสอบผลลัพธ์ สร้างตารางและข้อมูลทดสอบ:

  19. คำนวณจำนวนวันระหว่างวันที่เริ่มและสิ้นสุดด้วย DATEDIFF() ใน MySQL

    การหาจำนวนวันระหว่างสองวันที่ด้วย DATEDIFF() ฟังก์ชัน DATEDIFF(date1, date2) คืนค่าความต่างเป็น **จำนวนวัน (Integer)** date1 - date2 ใช้ ABS() เพื่อให้ได้ค่าบวกเสมอ Syntax SELECT ABS(DATEDIFF(start_date, end_date)) AS days_diff FROM table_name; ตัวอย่างการใช้งาน สร้างตารางช่วงวันที่: INSERT INTO

  20. แปลง VARCHAR เป็น DOUBLE ใน MySQL ด้วยการบวก 0.0 (Type Casting)

    การแปลงชนิดข้อมูล String (VARCHAR) ให้เป็นตัวเลข (DOUBLE) วิธีง่ายที่สุดใน MySQL: **บวก 0.0** เข้าไป (col + 0.0) MySQL จะแปลง String เป็น Number อัตโนมัติ (Implicit Cast) Syntax SELECT column_name + 0.0 AS numeric_alias FROM table_name; ตัวอย่างการใช้งาน สร้างตารางเก็บตัวเลขเป็น VARCHAR: INSERT I

Total 4564 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:84/229  20-คอมพิวเตอร์/Page Goto:1 78 79 80 81 82 83 84 85 86 87 88 89 90