Basic SQL Part 2 - หาข้อมูลที่ต้องการด้วย WHERE และเรียงด้วย ORDER BY

หาข้อมูลที่ต้องการด้วย WHERE และเรียงด้วย ORDER BY

ผมเขียนเกี่ยวกับ SQL ไว้ 6 ตอน คุณสามารถกด Link ด้านล่างเพื่ออ่านที่เกี่ยวกับ SQL ตอนต่างๆได้เลย

ตอนที่แล้วเราลองเล่นคำสั่ง SQL แบบ Basic มากๆไปแล้ว ตอนนี้เรามาลองเล่น SQL ภาษา SQL เพิ่มในส่วนของ WHERE และ ORDER กัน ซึ่งถ้าสามารถเขียนตรง WHERE กับ ORDER ได้นี่ก็จะเขียน SQL ได้เกิน 50 % ละ ดังนั้นเรามาเริ่มกันเลยดีกว่า

WHERE

WHERE คือ Keyword ที่ใช้บอกว่าจะเอา Row ไหนบ้างด้วยเงื่อนไขอะไร ตัวอย่างเช่น อยากรู้ว่าประธานาธิบดีคนไหนอยู่พรรค Republican บ้าง เราก็แค่เขียนคำสั่ง SQL ดังนี้ ซึ่งจะได้ผลลัพธ์ดังภาพ

1
2
3
SELECT *
FROM PRESIDENT
WHERE PARTY = 'Republican'

จะเห็นว่าผลลัพธ์ตรง Column PARTY ของทุก Row นั้นเป็น Republican ทั้งหมดเลย วิธีการทำงานของ WHERE นั้นขอให้คิดง่ายๆว่า มันจะไล่ดูทีละ Row ว่าตรงเงื่อนไขที่ให้มาไหม ถ้าใช่จะเก็บ Row นั้นไว้ ถ้าไม่ใช่ทิ้งทันที ถ้าจากตัวอย่างเราตั้งเงื่อนไขว่า จะเอาเฉพาะ Row ที่ Column : PARTY มีค่า Republican ออกมาเท่านั้น

( นอกเรื่องไม่อ่านก็ได้ การทำงานจริงๆของ DB อาจจะไม่ได้ไล่อ่านทีละ ROW ก็ได้นะครับ จริงๆมันอาจหาข้อมูลด้วยการใช้ Index ซึ่งจะเร็วกว่าการ SCAN หลายเท่า)

เชื่อมเงื่อนไขด้วย AND และ OR

โอเคเราสามารถ WHERE หาข้อมูลได้แล้ว แต่ถ้าสมมุติอยากรู้ว่า มีประธานาธิบดีคนไหนบ้างที่ไม่ได้อยู่พรรค Republican และไม่ได้อยู่พรรค Democratic (ตอนเด็กได้ยินแต่สองพรรคนี้เลยอยากรู้ว่ามีพรรคอื่นไหม) ซึ่งจากคำถามนี้เราสามารถเขียนคำสั่ง SQL ได้ดังนี้

1
2
3
SELECT *
FROM PRESIDENT
WHERE PARTY != 'Republican' AND PARTY != 'Democratic'

เมื่อกี้ลอง AND แล้วคราวนี้มาลอง OR บ้าง ถ้าสมมุติมีคำถามว่า อยากรู้ว่ามีประธานาธิบดีคนไหนเกิดที่รัฐ New York หรือ รัฐ New Jersey บ้าง คำถามนี้สามารถเขียนเป็นภาษา SQL ได้ดังนี้

1
2
3
SELECT * 
FROM PRESIDENT
WHERE STATE_BORN = 'New York' OR STATE_BORN = 'New Jersey'

ถ้าคราวนี้เราอยากรู้ว่ามี ประธานาธิบดีคนไหน ไม่ได้อยู่พรรค Republican และไม่ได้อยู่พรรค Democratic และ เกิดที่รัฐ New York หรือ รัฐ New Jersey เราจะเขียนยังไง คำตอบคือง่ายมากครับก็คอมโบต่อกันเลย

1
2
3
SELECT *
FROM PRESIDENT
WHERE ( PARTY != 'Republican' AND PARTY != 'Democratic' ) AND ( STATE_BORN = 'New York' OR STATE_BORN = 'New Jersey' )

WHERE มี Operation อะไรให้ใช้บ้าง

Operation ที่ SQL มีให้ใช้ก็มีไม่เยอะเท่าไหร่ครับก็มี

  • = , !=

    อันนี้ก็ง่ายๆเลยใช้เทียบว่าค่า = หรือ != ค่าที่อยากหารึเปล่า

  • >= , <= > , <

    อันนี้เหมือนในคณิตศาสตร์เลยครับหาค่ามากกว่าน้อยกว่า มากกว่าเท่ากับ น้อยกว่าเท่ากับ ตามเครื่องหมายเลย

  • IN , NOT IN

    อันนี้อาจจะเป็นของใหม่ แต่จริงๆมันไม่ใหม่หรอกมันแค่ส่งเสริมความขี้เกียจคือ บางทีเราอยากได้ค่าเท่ากับหลายๆค่า เช่น จากตัวอย่างที่เราพึ่งทำไป อยากรู้ว่ามีประธานาธิบดีคนไหนเกิดที่รัฐ New York หรือ รัฐ New Jersey บ้าง แทนที่จะเขียนแบบเดิม เราสามารถเขียนโดยการใช้ IN แทนได้ดังข้างล่าง

    1
    2
    3
    SELECT * 
    FROM PRESIDENT
    WHERE STATE_BORN IN ('New York','New Jersey')

    IN ก็คือ อยากให้ค่าที่หาตรงกับค่าใดได้บ้างก็ใช้ IN

    ในทำนองเดียวกันกับตัวอย่างเรื่องพรรค เราก็สามารถเปลี่ยนมาใช้ NOT IN ได้

    1
    2
    3
    SELECT *
    FROM PRESIDENT
    WHERE PARTY NOT IN ('Republican', 'Democratic')
  • LIKE อันนี้เป็น KEY WORD ใหม่อีกอัน อันนี้มีใช้ทำงานกับพวกข้อมูลที่เป็น String (อะไรที่เป็นชุดของตัวอักษร) เช่น ถ้าอยากรู้ว่าประธานาธิบดีคนไหนบ้างที่ชื่อ ขึ้นต้นด้วยตัว N ด้วยความต้องการแบบนี้เลยเกิด LIKE ขึ้นมา โดยเราสามารถเขียนคำสั่ง SQL ได้ดังนี้

    1
    2
    3
    SELECT * 
    FROM PRESIDENT
    WHERE PRES_NAME LIKE 'T%'

    ตรงค่า ‘T%’ นั้น % หมายความว่าอะไรก็ได้ ดังนั้น T% จึงแปลว่าค้นหา String ที่ขึ้นต้นด้วย T แล้วตามด้วยอะไรก็ได้

    ถ้าสมมุติเราอยากรู้ว่าประธานาธิบดีคนไหนมีตัวอักษร x อยู่ในชื่อบ้าง เราก็สามารถเขียน SQL ได้เป็น

    1
    2
    3
    SELECT * 
    FROM PRESIDENT
    WHERE PRES_NAME like '%x%'

    ‘%x%’ แปลว่า String อะไรก็ได้ที่ขึ้นต้นด้วยอะไรก็ได้ แล้วมี x แล้วลงท้ายอะไรก็ได้ ว่าง่ายมี x อยู่ใน String นั้น

  • IS
    อันนี้เหมือน = เลย แต่เราจะใช้ IS กับค่าที่เป็น NULL โดย NULL แปลว่าไม่ได้กำหนด ส่วนใหญ่เราจะใช้ NULL กับค่าที่ไม่ได้กำหนด ไม่รู้ว่าคืออะไร NULL นั้นไม่ใช่ค่าว่าง ‘’ นะครับ ค่าว่างคือรู้ค่าว่าคือค่าว่าง แต่ NULL คือไม่รู้ค่าเลยว่าเป็นอะไรเลยให้เป็น NULL ตัวอย่างการใช้ NULL ก็คือ อยากรู้ว่าประธานาธิบดีคนไหนยังไม่ตาย ซึ่งการยังไม่ตายนั้นแปลว่าไม่มีค่า DEATH_AGE ซึ่งก็แปลว่า DEATH_AGE นั้นมีค่าเป็น NULL เราจึงสามารถเขียนคำสั่ง SQL ได้ดังนี้

    1
    2
    3
    SELECT * 
    FROM PRESIDENT
    WHERE DEATH_AGE IS NULL

ORDER BY

ORDER BY เป็น keyword ที่มีไว้สำหรับการเรียง ซึ่งเกิดมาจากในงานจริงเราอยากดูข้อมูลที่เรียงด้วยอะไรบางอย่างอยู่บ่อยๆ ถ้าอย่างเรื่องเรียนก็อยากดูข้อมูลโดยเรียงลำดับคนที่ได้คะแนนมากไปหาน้อย หรือ อยากดูข้อมูลนักเรียนเรียงตามเลขที่ อยากดูบริษัทที่มียอดสั่งซื้อสูงสุดเรียงไปหาต่ำสุด คราวนี้ถ้าอยากแสดงข้อมูลประธานาธิบดีที่อยู่พรรค Republican โดยเรียงตามปีเกิด เราจะเขียนคำสั่ง SQL ได้ดังนี้

1
2
3
4
SELECT *
FROM PRESIDENT
WHERE PARTY = 'Republican'
ORDER BY BIRTH_YR

แต่ถ้าอยากเรียงจากปีเกิดที่มากไปน้อยล่ะจะทำไง ก็ไม่อยากเลยครับเติม Key word DESC ตามหลังชื่อฟิลล์ที่อยากให้เรียงเท่านั้นเอง

1
2
3
4
SELECT *
FROM PRESIDENT
WHERE PARTY = 'Republican'
ORDER BY BIRTH_YR DESC

อันนี้จะต้องมีคำถามแน่ๆว่า “เรียงหลาย field ได้ไหม” ซึ่งก็ตอบเลยว่าได้ ไม่ยากด้วยก็แค่ใส่ชื่อ field ที่อยากเรียงตามต่อไป เช่น แสดงข้อมูลประธานาธิบดีที่อยู่พรรค Republican โดยตาม จำนวนปีที่ดำรงตำแหน่งจากมากไปหาน้อย จากนั้นเรียงด้วยชื่อจากน้อยไปหามาก ด้วยคำถามนี้เราสามารถเขียน SQL แบบนี้

1
2
3
4
SELECT *
FROM PRESIDENT
WHERE PARTY = 'Republican'
ORDER BY YRS_SERV DESC, PRES_NAME

จบตอนนี้แล้ว

สำหรับตอนนี้เราได้รู้เกี่ยวกับการ WHERE ด้วยเงื่อนไขต่างๆการใช้ AND OR เชื่อมเงื่อนไข และการใช้ ORDER BY ในการเรียงข้อมูล ซึ่งในจากเรื่องที่เรียนตอนนี้ผมว่าหลายๆคนคงจะเริ่มเข้าใจการทำงานของ SQL มากขึ้นแล้ว สำหรับตอนต่อไปเราจะมีพูดถึงเรื่องการใช้ GROUP BY , Build in function และ HAVING กันว่ามันคืออะไร ทำงานอย่างไร คำถามแบบไหนที่เจอแล้วเข้าข่ายว่าจะใช้ Key word พวกนี้ สำหรับตอนนี้ขอตัดจบก่อนครับ

เพลงประกอบการเขียน Blog

เพลงเหนื่อยของวง SUDDENLY ฟังแล้วอารมณ์คล้ายๆกับเพลง เหนื่อยใจ เลย พอฟังเพลงแนวนี้ทีไรนึกถึงตอนเรียนวิชา Digital ที่พูดถึงเรื่อง AND gate ที่ถ้าขานึงมันเป็น FALSE แล้ว มันจะได้ FALSE เสมอ ไม่ว่าจะพยายามใส่ค่าที่ขาอีกข้างหนึ่งเป็นอะไรมันไร้ประโยชน์