คำสั่ง SQL Commands (MySQL)
Sirichai Teerapattarasakul / September 22, 2021
2 min read
รวมคำสั่ง SQL (Structured Query Language) สำหรับจัดการฐานข้อมูลเชิงสัมพันธ์ Relational Database Management System (RDBMS) เน้นไปเฉพาะฐานข้อมูล MySQL ตามรายการดังนี้
ค้นหาแบบระบุตำแหน่งข้อมูล
จะการใช้ Like และใส่เครื่องหมาย _ เพื่อขั้ามไประบุเจาะจงตำแหน่งข้อมูลในฟิลด์ ตัวอย่าง
หาค่า B ในตำแหน่งที่ 2
SELECT * FROM <table_name> WHERE <field_name> like '_B%'
หาค่า B ในตำแหน่งที่ 3
SELECT * FROM <table_name> WHERE <field_name> like '__B%'
หาค่า A ตำแหน่งที่หนึ่งและ B ในตำแหน่งที่ 5
SELECT * FROM <table_name> WHERE <field_name> like 'A___B%'
ค้นหาตำแหน่งในฟิลด์
ค้นหาข้อมูลแบบกำหนดตำแหน่งในฟิลด์และระบุจำนวนตัวอักษรที่ต้องการ โดยใช้ MID(string, start, length)
MID นั้นจะดึงข้อมูลตามหลักที่เรากำหนด ตัวอย่าง
ให้แสดงข้อมูลตั้งแต่หลักที่ 8 จากทางซ้าย มา 5 ตัวอักษร
SELECT MID("Useful MySQL Commands",8, 5) # จะแสดง MySQL
ให้แสดงข้อมูลตั้งแต่หลักที่ 8 จากทางขวา มา 3 ตัวอักษร
SELECT MID("Useful MySQL Commands",-8, 3) # จะแสดง Com
ให้ตรวจสอบว่ามี MySQL หรือไม่ โดยเลือกข้อมูลตั้งแต่หลักที่ 8 จากทางซ้าย มา 5 ตัวอักษ
SELECT MID("Useful MySQL Commands",8, 5) = 'MySQL'
# ถ้ามีจะแสดง 1, ไม่มีจะแสดงเป็น 0
กำหนดเงื่อนไขเลือกจากช่วงเวลา คำนวณวันสิ้นสุดอัตโนมัติ
ยกตัวอย่าง ต้องการดึงข่าว โดยมีเงื่อนไขให้เลือกจากช่วงเวลา และคำนวณวันสิ้นสุดอัตโนมัติ เช่น มีอายุการแสดงได้แค่ 3 เดือน โดยคำนวณวันสิ้นสุดจากฟิลด์ add_date
SELECT * FROM news WHERE (NOW( ) >= add_date AND NOW( ) < DATE_ADD(add_date, INTERVAL 3 MONTH ))
อธิบายเพิ่มเติม : วันปัจจุบัน NOW()
ต้องมากกว่าหรือเท่ากับ add_date
และวันปัจจุบัน NOW()
ต้องน้อยกว่า add_date
บวกเพิ่มอีก 3 เดือน”
คัดลอกข้อมูลระหว่างตาราง
บางครั้งเราจะมีการคัดลอกข้อมูลจากตารางนึงไปใช้กับอีกตารางนึง เช่น ดึงตาราง customers
ไปเก็บในตาราง customer_tmp
และเลือกเฉพาะฟิลด์ที่ต้องการพร้อมกับเก็บวันที่บันทึกลงไปด้วย โดยให้เงื่อนไขว่าเงินเดือนต้องมากกว่า 20,000 บาท ก็จะได้คำสั่งตามด้านล่างนี้
INSERT INTO customer_tmp (full_name,salary,add_date) SELECT full_name,salary,NOW() FROM customer WHERE salary > 20000
แทนที่ข้อมูลด้วยคำสั่ง Replace
แสดงข้อมูล
SELECT REPLACE( <field_name> ,'คำที่ค้นหา','คำที่เอามาแทน' ) AS show_data FROM <table_name>
อัพเดทข้อมูล
UPDATE <table_name> SET <field_name> = REPLACE( <field_name> ,'คำที่ค้นหา','คำที่เอามาแทน' )
คัดลอกข้อมูลระหว่างฟิลด์ในตารางเดียวกัน
UPDATE <table_name> SET <field_name1> = <field_name2>
แสดงข้อมูล 30 วันย้อนหลัง
SELECT * FROM <table_name> WHERE <field_name> < DATE_ADD(NOW(), INTERVAL +1 MONTH)
แยกหรือตัดข้อมูลในฟิลด์
มีข้อมูลชื่อและนามสกุลอยู่ในฟิลด์เดียว แต่ต้องการดึงชื่อและนามสกุลแยกออกมาเป็นคนล่ะฟิลด์ หรือดึงมาเฉพาะชื่อเท่านั้น ซึ่งสิ่งที่จะแยกคือช่องว่างระหว่างชื่อและนามสกุลนั่นเอง โดยใช้ SUBSTRING_INDEX(ชื่อฟิลด์,ตัวแบ่งเขตข้อมูล,จำนวน)
แสดงเฉพาะชื่อ
SELECT SUBSTRING_INDEX(full_name,' ',1) AS fname FROM members
แยกชื่อและนามสกุล
SELECT SUBSTRING_INDEX(full_name,' ',1) AS fname , SUBSTRING_INDEX(full_name,' ',-1) AS lname FROM members
เรียงข้อมูลตามค่าที่กำหนด
เช่น แสดงค่าของตาราง members
โดยให้เรียกตามรหัส group_id 1,2,3,4,5 เป็นต้น
SELECT * FROM members ORDER BY FIELD(group_id,1,2,3,4,5)