Tuesday, January 30, 2018

ทดลองใช้ www.w3schools.com (Week 3)

จากคำแนะนำของอาจารย์ที่ให้ลองไปศึกษา SQL ที่เว็บไซต์ w3school แล้วสิ่งที่ได้เจอ มี ดังนี้

หน้าเว็บไซต์แรก
เมื่อเปิดเข้าไปแล้วจะเจอหน้าแรกของ w3shcool ในส่วนภาษา SQL (https://www.w3schools.com/sql/default.asp) จากนั้นให้ลองกดไปที่ "Try it yourself"


ซึ่งพอกดเข้าไปแล้วจะพบหน้าเว็บใหม่ ซึ่งหน้าเว็บนี้สามารถใช้งาน SQL ได้ โดยการเขียนโค้ดลงไป แล้วลองรันก็จะแสดงผลลัพธ์ตามที่เขียน


โดยในตัวอย่างนั้นมีส่วนที่เขียน SQL ที่ด้านบน ส่วนด้านล่างเป็นผลลัพธ์ และด้านขวา คือ ส่วนที่แสดงจำนวนแถวในแต่ละ Table ใน Database
จากนั้นตัวอย่างเราทดลอง SQL โดยใช้คำสั่ง "SELECT * FROM Customers;"


โดยโค้ดที่เราเขียนไปนั้นจะแสดงข้อมูลทั้งหมดในตาราง Customers ซึ่งผลลัพธ์ได้ดังนี้
นอกจากนี้ยังมีโค้ด SQL อื่นๆ ที่น่าสนใจซึ่งมีดังนี้

SELECT
- แสดงคอลัมน์ที่ต้องการ

แสดงคอลัมน์ Country


DISTINCT
- ตัดตัวที่ซ้ำออกไป

ไม่เอาตัวซ้ำ


WHERE
- สร้างเงื่อนไขต่างๆ

เอาแถวที่ Country : Mexico


AND, OR

ตัวอย่าง AND ที่เช็ค Country : Mexico และ France


ORDER BY
- เรียงลำดับตามที่เราต้องการ

เรียงตามชื่อประเทศ


INSERT INTO
- เพิ่มข้อมูลลงตาราง


ค่าที่ CustomerID : 92 เพิ่มเข้ามา


UPDATE
- แก้ไขข้อมูล



ค่าที่ CustomerID : 1 มีการเปลี่ยนแปลง


DELETE
- ลบข้อมูล


ค่าที่ CustomerID : 1 หายไป


 LIMIT
- จำกัดจำนวนการแสดงข้อมูล

แสดงเพียง 3 ค่า เท่านั้น


MIN, MAX
- หาค่าสูงสุด, ต่ำสุดในตาราง

เอาค่าที่น้อยที่สุดในตาราง


COUNT, AVG and SUM
- นับจำนวนข้อมูล, หาค่าเฉลี่ยข้อมูล, รวมค่าข้อมูล

นับจำนวนแถวที่มี 77 แถว


LIKE
- ใช้ในการเลือกข้อมูลโดยใช้รูปแบบ

เลือก CustomerName ที่ขึ้นต้นด้วย "a" นำหน้า


IN
- เลือกข้อมูลโดยใช้ข้อมูลหลายตัว

เลือก Country ที่เป็น Germany, France, UK
BETWEEN
- เลืิอกข้อมูลที่อยู่ใน range นั้น

เลือก Price ที่ค่าที่อยู่ระหว่าง 10 กับ 20
ALIAS
- เปลี่ยนชื่อ Table และ Column


JOIN
- นำข้อมูลจาก 2 ตาราง แล้วเลือกในส่วนที่เราต้องการ



INNER JOIN
- เลือก Table ส่วนที่ intersect กัน



LEFT JOIN
- เลือก Table ส่วนที่เป็นตารางแรก



RIGHT JOIN
- เลือก Table ส่วนที่เป็นตารางสอง



FULL JOIN
- เลือกทั้งหมดที่ไม่ซ้ำ



SELF JOIN
- เลือกตัวมันเอง



UNION
- รวม 2 ตาราง



GROUP BY
- จัดกลุ่มข้อมูลแล้วแสดงผล
HAVING
- สร้างเงื่อนไขตามการ COUNT



EXISTS
- เลือกข้อมูลที่มีในอีกตาราง



ANY, ALL




 INSERT INTO SELECT




 COMMENT




ปัญหาที่พบ
ทางเทคนิค
1. รู้สึกว่าบล็อคของเราไม่ค่อยมีอะไรเลย จึงแก้ปัญหาด้วยการใส่โค้ด SQL ที่ลองลงไป

ลิ้งก์ที่เกี่ยวข้อง








เริ่มทำงานกลุ่มกับกลุ่มที่ 4 (Week 3)

จากที่อาจารย์แบ่งกลุ่มและได้อยู่ในกลุ่มที่ 4 แล้ว ก็เริ่มไปคุยงานกับเพื่อน สิ่งแรกที่ทำ คือ ตกลงรูปแบบของ CSV เพื่อที่จะให้ข้อมูลทุกคนสามารถรวมกันได้โดยไม่มีปัญหา ซึ่งจัดรูปแบบได้ ดังนี้

  • student_id
  • year
  • semester
  • course_code
  • grade_char

รูปแบบตารางของ CSV

หลังจากที่ตกลงกันแล้ว ก็ออกแบบรูปแบบ DBMS ผ่าน Chart ได้ตามนี้

Chart ของ Database

จากนั้นก็เริ่มสร้าง Database, สร้าง Table, จัดการ Foreign Key หรืออื่นๆ ซึ่งเราใช้โปรแกรม DB Browser for SQLite

โลโก้ DB Browser for SQLite

หน้าต่างโปรแกรม

จากนั้นให้สร้าง Database และ Table ซึ่งมีดังนี้

ตาราง Student

ตาราง Subject

ตาราง Grade

ตาราง Main

เมื่อสร้าง Table เสร็จกเริ่มเขียนโค้ด ซึ่งมีขั้นตอน ดังนี้
  • สร้าง Github และ branches เพื่อให้เพื่อน Commit (https://github.com/Nithichai/Database_Group4)
  • ออกแบบ Class สำหรับตาราง แจกให้เพื่อนแต่ละคนทำฟังก์ชัน ซึ่งมีดังนี้
    • init (์นิธิชัย)
    • select_all (ชัยสิทธิ์)
    • insert (พันธกานต์)
    • update (ชัยสิทธิ์)
    • delete (จิรวัฒน์)
    • show_all (นิธิชัย)
    • import_csv (นิธิชัย)
Class Diagram

  • เริ่มเขียนโค้ด ซึ่งเป้าหมายหลัก คือ สามารถอิมพอร์ตไฟล์ CSV เข้าสู่ DBMS ได้ แล้วทดสอบผล
ผลการทดสอบจาก Command Line


ผลการทดสอบจากโปรแกรม

เมื่อทดสอบแล้วพบว่า โค้ดเราสามารถอ่านไฟล์ CSV ในโฟลเดอร์ได้ แล้วนำข้อมูลทั้งหมดเข้า Database ได้และยัง Conflict แถวนั้นหากไม่มีข้อมูลในตาราง Foreign เช่น ใส่รหัสวิชาที่ไม่มีในตาราง Subject เป็นต้น

สรุป
1. เริ่มต้นการทำงานด้วยการจัดรูปแบบ CSV ให้ตรงรูปแบบทุกคน แล้วนำมารวบรวมกัน
2. จากนั้นสร้างออกแบบ DBMS ให้เหมาะสมแก่การใช้งาน
3. เราใช้โปรแกรม DB Browser for SQLite มาเป็นตัวช่วยการทำงาน ในการสร้าง Database หรือ สร้าง Table เป็นต้น
4. จากนั้นแบ่งให้เพื่อนแต่ละคนไปเขียนโค้ดส่วน method ตามที่ตกลงกันไว้
5. เมื่อเขียนเสร็จแล้ว ก็นำมารวบรวมแล้ว แล้วทดสอบ ซึ่งผลสรุปได้ว่า เราสามารถ insert ข้อมูลในไฟล์ CSV ที่อยู่โฟลเดอร์ทั้งหมด ลงมาในตาราง Main เพียงแต่ข้อมูลที่เป็น Super Key นั้นต้องมีข้อมูลในตารางที่เชื่อมกับ Foreign Key ด้วย (หากไม่มีจะ insert ไม่ได้)
6. Commit งานที่สมบูรณ์ไปยัง Github ที่เตรียมเอาไว้
7. จัดทำสไลด์เพื่อแสดงหน้าชั้นเรียน

ปัญหาที่พบ
ทางเทคนิค
1. ตอน insert ข้อมูลเข้าไปแล้ว แต่ใส่เข้าไม่ได้เพราะรหัสวิชาไม่ตรงกัน เกิดจากที่ Spreadsheet ลบเลขศูนย์ที่หน้ารหัสวิชาออกไป แล้วพอมาเทียบกับ Foreign Table แล้วมันหาไม่เจอ แก้ปัญหาด้วยการปรับช่องที่ใส่รหัสวิชาเป็น “ข้อความธรรมดา” หรือใส่ “ ‘ ” ไปที่หน้ารหัสวิชา (‘080303903)
2. ใส่ข้อมูลซ้ำได้ แก้ปัญหาโดยตั้งให้ข้อมูลที่ทำเป็น Foreign Key เป็น Primary Key ทั้งหมด
3. ปัญหาเรื่องการติดต่องาน หรือต้องการที่จะดูโค้ดของเพื่อนเพื่อช่วยกันแก้ปัญหา แก้โดยใช้ Google Hangout ที่พูดคุยกัน และแชร์หน้าจอเพื่อดูโค้ดเพื่อนอีกคนได้
google hangout

4ติดงานกิจกรรม Comday ทำให้เวลาทำงานไม่พอ แก้ปัญหาโดยพอหลังจบงาน Comday ก็เริ่มทำงานทันที และในระหว่างงานคอมเดย์ก็มีช่วงเวลาว่าง จึงเริ่มทำการบ้าน

ลิ้งก์ที่เกี่ยวข้อง

Tuesday, January 23, 2018

รู้จักกับ SQLite และการใช้งานเบื้องต้น (Week 2)

รู้จักกับ SQLite และการใช้งานเบื้องต้น
หลังจากที่เรียน Database ในคาบมาแล้ว ผมเลยสนใจที่จะหาข้อมูลว่าคนส่วนใหญ่ใช้ Database อะไรกันบ้าง ซึ่งในที่นี่ผมจะพูดถึง SQLite ครับ
SQLite


เป็น Database ยี่ห้อหนึ่งที่คนส่วนใหญ่ใช้กัน ซึ่งข้อดีของมัน คือ บริหารจัดการง่าย, ใช้ง่าย, บำรุงรักษาง่าย มีขนาดเล็ก ซึ่งเราติดตั้งได้ตามนี้
1. ไปที่ https://www.sqlite.org/download.html
2. ส่วนของ Precompiled Binaries for Windows เลือก sqlite-tools-win32-x86-3220000.zip เพื่อดาวน์โหลด zip ไฟล์ลงเครื่อง


3. หลังจากดาวน์โหลดเสร็จ ให้แตกไฟล์ออกมา แล้วเข้าไปที่โฟลเดอร์ แล้วจะพบกับไฟล์ 3 อย่างนี้


4. จากนั้นไปที่ไดร์ฟ C แล้วสร้างโฟลเดอร์ชื่อ "sqlite"


5. คัดลอกไฟล์ 3 อันจากข้อที่แล้วลงในโฟลเดอร์ sqlite


6. จากนั้นตั้งค่า PATH environment เพื่อเรียกใช้ผ่าน Command Line ได้ตามนี้
พิมพ์ Control Panel แล้วคลิกเข้าไป


คลิก Systems


คลิกที่ Advanced system settings


ไปที่ Enviroment Variables...


ที่ System variables เลือก Path คลิก Edit


กด New แล้วพิมพ์ C:\sqlite จากนั้นกดโอเค


7. ทดสอบการใช้งานผ่าน Command Line

ติดตั้งสำเร็จ

หลังจากที่ติดตั้งเรียบร้อยแล้วก็มาเริ่มใช้งานกันเลย
1. สร้าง Database ออกมาโดยใช้ชื่อ tesedb.db ด้วยคำสั่่ง

"sqlite3 testdb.db"



2. ตรวจสอบ Database ที่เราสร้างทั้งหมดด้วยคำสั่่ง 

".databases"



3. เมื่อไปที่โฟลเดอร์ที่อยู่ปัจจุบันเราจะพบกับไฟล์ testdb.db


4. จากนั้นให้สร้างตารางที่ชื่อ SUBJECT ขึ้นมาด้วย

"CREATE TABLE SUBJECT(
    ID INT PRIMARY KEY NOT NULL,
    NAME TEXT NOT NULL,
    CREDIT REAL,
    GRADE TEXT
);"



5. ทดสอบว่าตารางที่เราสร้าง มีจริงไหม

".tables"


6. ดูโครงสร้างภายในตาราง

".schema SUBJECT"


7. นำข้อมูลใส่ลงตาราง

"INSERT INTO SUBJECT (ID, NAME, CREDIT, GRADE) VALUES (1, 'PHYSICS I', 3, 'A');"


8. จากนั้นก็ query ผลจากตาราง SUBJECT

"SELECT * FROM SUBJECT"




สรุป
1. SQLite เป็น Database ยี่ห้อหนึ่งที่คนส่วนใหญ่ใช้กัน ซึ่งข้อดีของมัน คือ บริหารจัดการง่าย, ใช้ง่าย, บำรุงรักษาง่าย มีขนาดเล็ก
2. เราสามารถใช้งาน SQLite ผ่าน Command Line ได้ แต่ต้องติดตั้ง PATH environment ก่อน

ปัญหาที่พบ
ทางเทคนิค
1. ตอนแรกจะใช้ MySQL แต่ลงไม่ได้เพราะติดตั้ง Server ไม่ได้ เลยแก้ปัญหาโดยการใช้ SQLite ไปก่อน
2. ไม่รู้วิธีลง SQLite แก้ปัญหาโดยการหาข้อมูลใน Google
อื่นๆ
1. เนื่องจากติดกิจกรรม Comday เลยไม่มีเวลาที่จะทำงาน ซึ่งแก้ปัญหาโดยการ พอถึงวันเสาร์-อาทิตย์ก็รีบเร่งทำงานทันที

ลิ้งก์ที่เกี่ยวข้อง
วิธีลง SQLite

SQL injection (Week 16)

SQL Injection ในบางครั้งนักพัฒนาใช้ method ‘+’ (concat) กับ String ที่เป็นคำสั่ง SQL เพื่อ query ข้อมูลที่ user ต้องการ ซึ่งทำให้เกิดช่...