คำสั่ง SQL Commands (MySQL)

Sirichai Teerapattarasakul

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)