Category Database

SELECT ซ้อน SELECT

Microsoft SQL Server

หลายครั้งที่เราได้โจทย์ หรือปัญหามาแก้โดยใช้วิธีการ Query จากฐานข้อมูลมา ซึ่งมีรูปแบบการ Query หลายแบบ ได้แก่ การเขียน JOIN ตาราง, UNION หรือ ทำเป็น Sub Query เป็นต้น ในวันนี้ผมขอนำเสนอวิธีการเขียน SELECT IN SELECT ซึ่งเป็นวิธีการเขียน Query แบบหนึ่งที่ช่วยแก้ปัญหาได้มากมาย และลดการเขียน Coding ที่ไม่จำเป็นได้อีก ตัวอย่างปัญหา เราต้องการดูข้อมูลการจ่ายดอกเบี้ยทั้งหมด เพื่อนำมาออกรายงาน โดยมีเงื่อนไขดังนี้ ข้อมูลที่ใช้กับตัวอย่างนี้ ขั้นตอนการแก้ปัญหา (ถ้ามีการเขียน SQL ผมขอใช้ SYNTAX ของ SQL Server นะครับ)…

SQL JOINS

ตอนแรกทำงานไป ทำงานมา ก็เกิดสงสัยว่า JOIN นี่มีกี่แบบ โดยมีคำถามหลายข้อเลย โดยผมขอสรุปเป็นข้อๆ ดังนี้คำถาม: LEFT JOIN กับ LEFT OUTER JOIN ต่างกันอย่างไรคำตอบ: ไม่ต่างกันเลย การทำงานเหมือนกัน คำถาม: INNER JOIN กับ OUTER JOIN ต่างๆกันอย่างไรคำตอบ: INNER JOIN  เอาข้อมูลมาที่เหมือนกันท้ังสองฝั่งมาเทรวมกัน(Intersect) กัน แต่ OUTER JOIN เป็นการเทข้อมูลทั้งฝั่งใดฝั่งหนึ่ง หรือทั้งสองฝั่งมารวมกัน(Union) คำถาม: แล้วมีการ JOIN แบบอื่นๆ หรือไม่คำตอบ: มี โดยผมขอเกริ่นสรุปรูปแบบการ JOIN ของ TABLE ก่อน เพื่อเป็นการท้าวความหลังก่อนนะครับ…

Disable auto commit ในโปรแกรม TOAD for DB2

หลังจากทำงานมา 1 ปี ผมก็ได้มีโอกาศอยู่ Standby รอรับปัญหาจาก User วันแรก ซึ่งวันแรกเนี่ยแหละ ผมเขียน Query ผิด ลืม Where และเข้าใจว่าโปรแกรมที่ใช้ Toad for DB2 ตัวใหม่ ซึ่งลองเอามาใช้แทนตัว WinSQL ที่มันเก่ามากแล้ว มัน Default Auto Commit = off แล้ว แต่มันปรากฏว่าไม่ใช้ ดังนั้นผมจึงขอนำเสนอวิธีการปิด Auto Commit สามารถดูตามรูปภาพที่แนบมาได้เลยครับ ปล. วิธีการนี้สามารถประยุกต์ใช้กับโปรแกรม Toad for SQL Server,…

[SQL] การบอกลำดับของ Record จากการ Select ข้อมูล

วันนี้มีเพื่อนที่ทำงานถามว่าจะเพิ่มคอลัมน์ เพื่อบอกลำดับของข้อมูลอย่างไร เพราะใน DB ก็ไม่ได้เก็บอยู่แล้ว จะเขียนใน Query หรือ มา Loop และ Count เองใน Code ดี ข้อมูลใน DB (Input) Firstname   | Lastname   | Salary กอไก่       | ไข่เจียวหมูสับ | 50,000 ขอไก่       | เกิดก่อนไก่  …

[SQL SERVER] วิธีแก้ Error: 15138 – The database principal owns a schema in the database, and cannot be dropped

Microsoft SQL Server

เมื่อวันก่อนได้งานจากหัวหน้าให้เขียน Script เพื่อจัดการ User กับสิทธิื หลังการ Restore ฐานข้อมูล เมื่อลองเขียนคำสั่งเพื่อ Drop User พบ Error Message ดังนี้ The database principal owns a schema in the database, and cannot be dropped. (Microsoft SQL Server, Error: 15138) จาก Error Message ด้านบน สามารถสรุปสาเหตุของปัญหานั้น เกิดจาก User…

[SQL Server] การสร้าง Function ใช้เองใน Database ของเรา ตอนที่ 2(Scalar-valued Function )

Microsoft SQL Server

จากบทความที่แล้วที่ผมได้แนะนำเรื่องการสร้างฟังก์ชั่นใช้เองใน Database (User-Defined Function)ของเรา วันนี้ผมมาแนะนำการสร้างฟังก์ชั่นรูปแบบแรก Scalar-valued Function กันนะครับ Scalar-valued Function คือ อะไร Scalar-valued Function คือ ฟังก์ชั่นที่คืนค่าเป็นข้อมูลชนิดพื้นฐานเพียงตัวเดียว เช่น datetime, int ยกเว้นชนิดข้อมูลแบบ text, ntext, image หรือ timestamp ที่ไม่สามารถสั่งให้คืนค่าได้ โดยการเรียกใช้สามารถเรียกใช้แบบเดียวกันกับฟังก์ที่เคยใช้งานมา โดยส่วนชื่อคอลัมน์ที่ต้องการเข้าไป เช่น SUM, Max เป็นต้น การสร้าง Scalar-valued Function ใน MS SQL Server เริ่มสร้าง Function ซึ่งเราสามารถสร้าง Scalar-valued…

[SQL Server] การสร้าง Function ใช้เองใน Database ของเรา ตอนที่ 1(แนะนำ)

Microsoft SQL Server

ปกติแล้ว DBMS จะมีฟังค์ชั่นพื้นฐานในด้านต่างๆมาให้ในระดับนึงได้ อาทิ เช่น ฟังก์ชั่นด้านตัวเลข ได้แก่ SUM, AVG เป็นค้น ฟังก์ชั่นด้านตัวอักษร ได้แก่ Trim(), Replace เป็นต้น แต่บางครั้งงานบางชนิด ฟังก์ชั่นเหล่านี้ไม่สามารถตอบโจทย์ หรือ Business Rule ที่เราต้องการได้ ซึ่งตัว SQL Server หรือ DBMS ตัวอื่น ได้อนุญาตให้เราสร้างฟังก์ชั่นใช้เองได้ หรือ เรียกว่า User-Defined Function (ผมเน้นไปในตัว SQL Server) โดยสามารถสร้างฟังก์ชั่นได้ 3 ลักษณะ ดังนี้ Scalar-valued Function…

[MSSQL] SQL บวก ลบวันที่ โดยใช้ DATEADD

Microsoft SQL Server

วันนี้ผมได้งานจากที่่ทำงานมาให้เขียน Query เพื่อแจ้งเตือนสินค้าที่หมดอายุล่วงหน้าตามวันที่กำหนดไว้ ระหว่างวันที่กำหนดจนถึงจำนวนวันที่แจ้งเตือนล่วงหน้า โดยเอาผลลัพธ์ที่ได้มาจัดโปรโมชั่นลดแลกแจกแถมกัน (สมมติว่าเป็น 7 วัน) เลยเป็นที่มาของ Blog “[MSSQL] SQL บวก ลบวันที่ โดยใช้ DATEADD” โดยผมค่อยๆแนะนำไปทีละขั้นตอน ดังนี้ เตรียมข้อมูล

[SQL Server] SELECT เมื่อพบข้อมูลวันที่เป็น 1990-01-01 ให้แสดงเป็น String ว่าง

Microsoft SQL Server

ปัญหาที่ได้เจอวันนี้ คือ SELECT ข้อมูลวันที่ ที่บาง Record เก็บข้อมูลไม่ได้มีการเก็บข้อมูลวันที่ แต่ผลลัพธ์ที่ได้กลับเป็น 01-Jan-1990 (SQL Server ใจดีใส่ให้) ถ้าหาก User มาเห็นคงตกใจ คิดว่าระบบงานของเราเกิด Defect ชิ้นใหญ่แน่นอน เลยได้เป็นที่มาของ Blog SELECT เมื่อพบข้อมูลวันที่เป็น 1990-01-01 ให้แสดงเป็น String ว่าง เตรียมข้อมูล ความต้องการ