วันเสาร์ที่ 14 พฤษภาคม พ.ศ. 2559

[A2 part 3 of 3] SQL Injection

This is my group presentation about "SQL Injection".
And This is "Assignment 2 part 3 of 3".


[Week 18]

[A2 part 2 of 3] Database Log file & Recovery

This is my group presentation about "Database Log file & Recovery".
And This is "Assignment 2 part 2 of 3". 


[week 16]

[A2 part 1 of 3] Security of Database

This is my group presentation about "Security of Database". 
And This is "Assignment 2 part 1 of 3". 



[Week 15]

What's PostgreSQL? and Introduces

This is my group presentation about "PostgreSQL".


and This's a Link to "What's PostgreSQL? and Introduces" published by my partner group.

http://db5620072.blogspot.com/2016/04/postgresql.html

ps. I am Group 7 right now (From Group 5) and then I will use new database (University Enterprise Database).

วันอังคารที่ 29 มีนาคม พ.ศ. 2559

วันอังคารที่ 9 กุมภาพันธ์ พ.ศ. 2559

Relational Algebra Operation

Relational Algebra Operation สานสัมพันธ์ Algebra

วันนี้เราจะมาพูดถึงความสัมพันธ์ของ "อาเจ๊(บ้า)" กันดีกว่า 

ขอกล่าวก่อนว่า "อาเจ๊" ที่ผมจะใช้ในบทความอันนี้ ขอแทนคำว่า Algebra เพื่อความ Cool นะครับ อิ้อิ้

Cover Content เนื้อหาภายใน Content นี้

  • Part 1: TR - The Relations ความ3000 (สามพัน)
  • Part 2: TQ - The Questions ถามมา-ตอบไป

Part 1: TR - The Relations ความ3000 (สามพัน)

ซึ่งความสัมพันธ์จะมีอยู่ทั้งหมด 6 รูปแบบ ที่จะมาแนะนำกันให้รับทราบในวันนี้นะครับ
  1. Select (σ) *
  2. Project (∏) *
  3. Rename (ρ) *
  4. Cartesian Product (X) **
  5. Union (U) **
  6. Difference (-) **
หมายเหตุ: * แทนการใช้งานโดยมี Operator 1 ตัว, ** แทนการใช้งานโดยมี Operator 2 ตัว

1. Select (σ) เป็น unary relational operation หรือกล่าวได้ว่า ใช้ Operator 1 ตัวนั้นเอง และ Syntax ของมันก็คือ σ (t) โดยที่ p เป็น Condition และ t เป็น table โดยหลักการของ select แล้ว เราจะใช้สำหรับการ "เลือก" ข้อมูลจากในตาราง ซึ่งในการเลือกเราก็มีเงื่อนไขกำหนดไว้ด้วย 

ตัวอย่างการใช้งาน 
σSTD_NAME = “James” (STUDENT) 

จากข้างต้นจะเป็นการเลือกข้อมูลที่มีเงื่อนไข STD_NAME ตรงกับ "James" จากในตาราง STUDENT ซึ่งผลลัพธ์ที่ได้ก็จะเป็นดั่งรูป


σdept_id = 20 AND salary>=10000 (EMPLOYEE)

จากข้างต้นจะเป็นการ Query 2 เงื่อนไข โดยเงื่อนไขแรกคือค่า dept_id จะต้องเท่ากับ 20 และ ค่า salary จะต้องมากกว่าหรือเท่ากับ 10000 ซึ่งทั้งหมดนี้เราจะเลือกออกมาจากตาราง EMPLOYEE ทั้งหมด ผลลัพธ์จะได้ว่า



2. Project (∏) เป็น unary relational operation หรือกล่าวได้ว่า ใช้ Operator 1 ตัวเช่นเดียวกัน และ Syntax ของมันก็คือ a1, a2, a3 (t) ซึ่ง a1, a2, a3 เป็น Column ในตาราง และ t เป็นชื่อของตาราง หลักการใช้ Project นั้นคือจะเป็นการเลือก Column บางส่วน(หรือทั้งหมด)จากตาราง แล้วนำมาแสดง (ทำหน้าที่เหมือน SELECT ใน SQL)

ตัวอย่างการใช้งาน 
std_name, address, course (STUDENT)

จากข้างต้น เราจะทำการเลือก Column std_name, address, course จาก table STUDENT และผลลัพธ์ที่ได้ก็จะแสดงแค่ส่วนที่เลือก ซึ่งจะไม่แสดงส่วนอื่นๆเลย ดังรูป 



3. Rename (ρ) เป็น unary relational operation หรือกล่าวได้ว่า ใช้ Operator 1 ตัวเช่นเดียวกัน และ Syntax ของมันก็คือ ρ R(E) ซึ่ง R เป็นชื่อเดิมของ Table ที่ต้องการจะเปลี่ยนชื่อ และ E เป็นชื่อใหม่ของ Table ที่ต้องการ หลักการใช้ Rename นั้นคือการเปลี่ยนชื่อ ตามคำแปลในพจนานุกรมเลยครับ มาดูตัวอย่างการใช้เลยครับ

ตัวอย่างการใช้งาน 
ρ STUDENT (STD_TABLE)

กล่าวคือจะเป็นการเปลี่ยนชื่อ STUDENT table เป็นชื่อ STD_TABLE แทน ดังรูป


ซึ่งเราสามารถเปลี่ยนชื่อ Column ได้ด้วยนะ หากแต่ต้องเป็น Syntax แบบนี้ ρ STD_ID, STD_NAME, STD_ADDRESS(STUDENT) โดยที่ STD_ID บลาๆ เป็นชื่อ Column ไล่ตามลำดับในตาราง และ STUDENT ก็คือตารางที่เราต้องการจะเปลี่ยนนั่นเอง

4. Cartesian product (X) เป็น binary relational operation หรือกล่าวได้ว่า ใช้ Operator 2 ตัว และ Syntax ของมันก็คือ R X S โดยที่ R และ S เป็นตารางซึ่งผลที่ได้ก็จะได้ผลลัพธ์แบบ ผลคูณ Cartesian ในอาเจ๊เช่นเดียวกัน 

ตัวอย่างการใช้งาน 
EMPLOYEE X DEPT

โดยคำอธิบายก็คือ นำเอา Table ที่ชื่อ EMPLOYEE และ DEPT มาหาผลคูณ Cartesian กันได้ผลลัพธ์ดังรูป


5. Union (U) เป็น binary relational operation หรือกล่าวได้ว่า ใช้ Operator 2 ตัว และ Syntax ของมันก็คือ R U S โดยที่ R และ S เป็นตารางซึ่งผลที่ได้ก็จะได้ผลลัพธ์แบบการ Union กันในอาเจ๊เช่นเดียวกัน 

ตัวอย่างการใช้งาน 
DESIGN_EMPLOYEE U TESTING_EMPLOYEE

โดยคำอธิบายก็คือ นำเอา Table ที่ชื่อ DESIGN_EMPLOYEE และ TESTING_EMPLOYEE มาทำการ Union กันได้ผลลัพธ์ดังรูป

6. Difference (-) เป็น binary relational operation หรือกล่าวได้ว่า ใช้ Operator 2 ตัว และ Syntax ของมันก็คือ R – S โดยที่ R และ S เป็นตารางซึ่งผลที่ได้ก็จะได้ผลลัพธ์แบบการ Difference กันในอาเจ๊เช่นเดียวกัน

ตัวอย่างการใช้งาน 
DESIGN_EMPLOYEE −TESTING_EMPLOYEE

โดยคำอธิบายก็คือ นำเอา Table ที่ชื่อ DESIGN_EMPLOYEE และ TESTING_EMPLOYEE มาทำการ Difference กันได้ผลลัพธ์ดังรูป

แถมมมมม
หากใครยังพอมีบุญเก่าเรื่อง Intersection ยังพอจำกันได้ ในที่นี้ก็มีเหมือนกันนะครับ แต่ว่าไม่ได้เป็น Primary สักเท่าไหร่เพราะเราสามารถแตก R ∩ S --> R-(R-S) ได้นั่นเองครับ


Part 2: TQ - The Questions ถามมา-ตอบไป

Q: What is an inner join? outer join?
A: อยากให้มอง Inner Join เป็นในลักษณะของ Intersection ข้อมูลกันระหว่างตาราง A และ ตาราง B ส่วน Outer Join จะแบ่งออกได้เป็น 3 รูปแบบ คือ Left Outer Join (A - B), Right Outer Join (B - A), Full Outer Join (A U B) โดยที่ A และ B เป็น Set ตารางของข้อมูลนะครับ และที่สำคัญของคำว่า Join เลยก็คือ การเอาส่วนของ Column ของตารางทั้งหมดมารวมกัน เป็นตารางเดียวกันครับ

ตัวอย่าง Inner Join
INNER JOIN

ตัวอย่าง Left Outer Join
LEFT OUTER JOIN1

ตัวอย่าง Right Outer Join
RIGHT OUTER JOIN

ตัวอย่าง Full Outer Join
FULL OUTER JOIN

ซึ่งถ้าใครสนใจจะอ่านเพิ่มเติม (มีโค้ดตัวอย่าง) สามารถเข้าไปชมต่อได้ที่ SQLHINTS.COM
------------------------
Q: What is a division operation in SQL?
A: การ Division หรือการหารใน SQL ก็เป็นเช่นเดียวกันกับการหารในอาเจ๊นั่นแหละ และยังคล้ายกันกับ Inner Join ด้วยแต่ความต่างอยู่ที่ Column ของตารางไม่ได้รวมกันเหมือน Join แต่จะยึดตาราง "ตัวหาร" เป็นตารางหลักนะครับ

ตัวอย่าง Division Operation

ที่มารูปภาพ: www.tutorialcup.com

Thanks ขอขอบคุณ: 

1. Joins by sqlhints
2. Relation Query Languages by tutorialcup

วันจันทร์ที่ 1 กุมภาพันธ์ พ.ศ. 2559

SQL Constraints

Do you know The Constraints ?? รู้จัก Constraints กันหรือเปล่า


so then what's the "constraints" ?? แล้ว อะไรคือ Constraints ล่ะ


Constraints คือ ข้อจำกัด หรือ ข้อบังคับ หรือ เงื่อนไข ของการเก็บข้อมูลนั่นเอง ถ้าเราได้ลองมองดูดีๆแล้วจะพบว่า ถ้าในการเก็บข้อมูลของเรา ไม่มีการกำหนดสิ่งเหล่านี้ไว้...จะเกิดปัญหาต่อ DB ของเราในอนาคตภายภาคหน้าหรือเปล่า เช่น หาคีย์ไม่เจอ ค่าอะไรก็ไม่รู้ บลาๆๆ


แต่ไม่ต้องกังวลอะไรทั้งนั้น เพราะวันนี้เราจะมาเรียนรู้กันในเรื่องนี้ไปด้วยกัน อันดับแรก ไปดู Cover Content ก่อนเลยดีกว่าคร้าบ

Cover Content เนื้อหาภายใน Content นี้

  • Part 1: Constraints = Limitation ??
  • Part 2: Tiny things of my selected DBMS เกร็ดเล็กน้อยยยย

 

Part 1: Constraints = Limitation ??

 ส่วนแรกเลยก่อนที่จะพิสูจน์สมการดังกล่าวข้างต้น จะอธิบายก่อนว่า Constraints มีอะไรบ้าง ซึ่งก็จะมีดังนี้
  • NOT NULL - column cannot store NULL value 
  • UNIQUE - each row for a column must have a unique value 
  • PRIMARY KEY - column have a unique identity 
  • FOREIGN KEY - the referential integrity of the data in one table to match values in another table 
  • CHECK - the value in a column meets a specific condition 
  • DEFAULT - specifies a default value for a column
ไม่เยอะเลยนะครับ สำหรับข้อจำกัดเหล่านั้น แล้วมันอยู่ตรงไหนล่ะ ของ SQL ???

นี่เลยครับ Syntax คร่าวๆให้มองภาพออก


CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);

สังเกตตรง Constraints Name นะครับตรงนั้นแหละที่เราจะไปดูกันต่อไป ส่วนวิธีการใช้งานสิ่งเหล่านี้ ก็จะนำเสนอดังต่อไปนี้ครับ

NOT NULL เป็นการกำหนดให้ data จะต้องไม่เก็บเป็น NULL นะครับ
CHECK คือการตรวจสอบเงื่อนไขก่อน ซึ่งก่อนที่จะเก็บข้อมูลลงใน database ก็ต้องผ่านเงื่อนไขนี้เท่านั้น
DEFAULT เป็นการกำหนดค่าดั้งเดิมให้กับค่า Column นั้นๆ หากไม่ได้กำหนดตอน Add Data


CREATE TABLE Persons
(
ID int NOT NULL,
Name varchar(20) NOT NULL,
Surname varchar(20),
Gender varchar(1) DEFAULT 'M',
CHECK (ID>0)
);

เมื่อลองรันดู ผลลัพธ์จะได้


อธิบาย: ในที่นี้เราจะสร้าง Table ชื่อว่า Persons มาใหม่มีข้อมูลเป็น
- ID: INT ใช้เงื่อนไข CHECK > 0 และ NOT NULL
- Name: VARCHAR ขนาด 20 ตัวอักษร และ NOT NULL
- Surname: VARCHAR ขนาด 20 ตัวอักษร
- Gender: VARCHAR ขนาด 1 ตัวอักษร โดยกำหนด DEFAULT คือ M (Male)


ลำดับต่อไปจะลองทดสอบกันดู
กรณีแรก ID=NULL, Name="first", Surname="one", Gender="F"


insert into persons(Name,Surname,Gender) value ('first','one','F');


ผลลัพธ์ คือส่วนของ Constraint NOT NULL ครับผม


กรณีสอง ID=-2, Name="second", Surname="two", Gender="F"


insert into persons(ID,Name,Surname,Gender) value (-2,'second','two','F');


ผลลัพธ์ คือส่วนของ Constraint CHECK ครับผม


หมายเหตุ: ทาง MySQL ได้อธิบายว่า "The CHECK clause is parsed but ignored by all storage engines." นะครับผม โดยสามารถหาอ่านได้ใน CREATE_TABLE Doc

กรณีสาม ID=3, Name="third", Surname="three", Gender=NULL


insert into persons(ID,Name,Surname) value (3,'third','three');

ผลลัพธ์ คือส่วนของ Constraint DEFAULT ครับผม



ส่วนต่อไปจะเป็นการแนะนำ Constraints UNIQUE, PRIMARY KEY นะครับ

โดยจะขอกล่าวถึง UNIQUE ก่อนว่าส่วนนี้ จะเป็นการบ่งบอกว่า ข้อมูลในแต่ละ entry นั้นมีความ Unique ของตัวเอง หรือมองได้ง่ายๆว่า ไม่มีใครซ้ำนั้นเองครับ ส่วนของ PRIMARY KEY จะเป็นเหมือน key ที่เป็นหลัก กล่าวคือ มีค่าเป็น NULL ไม่ได้นั้นเอง (ได้ Constraint ของ NOT NULL ด้วยเป็นไงๆๆ)

เพื่อเป็นการไม่เสียเวลา เรามาลองกันเลยดีกว่าครับ โดยอันดับแรกให้ทำการสร้าง Table ใหม่ โดยเราจะกำหนด Primary Key และ Unique Column ด้วยนะครับ


create table members(member_id varchar(3) primary key, name varchar(20),phone_number varchar(10) unique);
insert into members(member_id,name,phone_number) value ('001','Alice','0834567890');
insert into members(member_id,name,phone_number) value ('002','Bob','0809876543');


และทำการใส่ data ไปสัก 2 entry ผลลัพธ์จะได้ดังรูป



เมื่อเราพยายามลองขัดขืน ในการยัด data ด้วยการขัดต่อ Constraints ด้วย Code นี้


insert into members(member_id,name,phone_number) value ('001','Cathy','0855555555'); 
insert into members(member_id,name,phone_number) value ('004','Douge','0809876543');


ก็จะได้ผลดังนี้ครับ



อธิบาย: ใน Code จะถูกประกอบด้วย PRIMARY KEY และ UNIQUE นะครับ ถ้าเราพยายามยัด data เข้าไป จะเกิด ERROR เป็น Duplicate Entry นะครับ ซึ่งผลก็จะเป็นของ Constraint PRIMARY KEY กับ Constraint UNIQUE ตามลำดับ

จากนั้นเราลองไปดู FOREIGN KEY กันต่อเลย โดย Foreign Key จะเป็นตัวอ้างอิง Relation หรือความสัมพันธ์ระหว่าง 2 ความสัมพันธ์น่ะครับ เป็น Reference ระหว่าง Key นั้นเองงงงง มาลองดูกัน

อันดับแรกให้สร้างตารางขึ้นมาใหม่ และทำการ Add ข้อมูลเพิ่มเข้าไปในตารางเดิม (members)


create table membersdetail(id varchar(3), age int, height int, weight int,foreign key(id) references members(member_id));
insert into members(member_id,name,phone_number) value ('003','Cathy','0819871472');
insert into members(member_id,name,phone_number) value ('004','Douge','0895172253');


ผลการทดลอง



และลอง Add ข้อมูลในตารางใหม่ (membersdetail) เข้าไป


insert into membersdetail(id,age,height,weight) value ('002',19,168,62);
insert into membersdetail(id,age,height,weight) value ('005',24,175,68);


ผลลัพธ์



อธิบาย: สาเหตุที่ ข้อมูล entry แรก ใส่เข้าไปได้เพราะมีการ Reference หรืออ้างอิง id ของตารางใหม่ ที่มีค่าอยู่ใน member_id กล่าวคือ ถ้าในตารางแรก (members) มี id ที่ 3 อยู่เมื่อเราจะ Add entry เข้าไปในตารางใหม่ (membersdetail) จำเป็นต้องใช้ id ที่มีอยู่ใน id ของตารางแรก ซึ่งในที่นี้คือ 3 เช่นเดียวกัน หากแต่ว่าถ้าเรา Add entry เข้าไปใหม่ แต่ id ไม่มีอยู่ในตารางแรก ก็จะไม่สามารถ Add ค่าเข้าไปได้ (หรือการ Update) จึงเป็นที่มาของ Constraint FOREIGN KEY ครับผม


Part 2: Tiny things of my selected DBMS เกร็ดเล็กน้อยยยย

ส่วน part นี้นะครับ จะเป็นการบอกอะไรเล็กๆน้อยๆ เกี่ยวกับ DBMS ที่ผมเลือกใช้ กับ 3 คำถามที่จะถามและตอบในโพสต์นี้ ซึ่งในที่นี้ DBMS ที่ผมเลือกใช้ก็คือ MySQL นะครับ มาดูกันครับว่าจะมีอะไรบ้าง

1) Q: What's constraints of MySQL? ใน MySQL นั้นมี Constraints อะไรบ้าง??
A: มีเหมือนข้างต้นที่กล่าวเอาไว้ และนอกจาก Constraints ที่กล่าวมาข้างต้นแล้วนั้น ยังมี Constraints เพิ่มขึ้นมาอีก นั่นก็คือ ENUM และ SET 

โดย ENUM จะเป็นเหมือนตัวเลือก เช่น 'High', 'Medium', 'Low' ซึ่งในการ Add entry จะสามารถเลือก ได้เพียงแค่ 3 ค่านี้เท่านั้น

และ SET ก็คล้ายๆกับ ENUM แต่เราสามารถเลือกได้เป็นแบบ Set เลยนั้นเอง เช่น 'S1, S2, S5'

2) Q: How specify them? เราจะกำหนดมันอย่างไร
A: จากข้างต้น เรามีการกำหนด Constraints ต่างๆไปแล้ว เหลือแต่ ENUM และ SET ซึ่งจะเป็นดังนี้

ENUM specify:

CREATE TABLE Shops(Id INTEGER, Name VARCHAR(55), Quality ENUM('High', 'Average', 'Low'));


SET specify: 

CREATE TABLE Students(Id INTEGER, Name VARCHAR(55), Certificates SET('A1', 'A2', 'B1', 'C1')); 

3) Q: Give an Example? ลองยกตัวอย่างให้ดูหน่อย
A: สำหรับ ENUM

mysql> INSERT INTO Shops VALUES(1, 'Boneys', 'High');
mysql> INSERT INTO Shops VALUES(2, 'AC River', 'Average');
mysql> INSERT INTO Shops VALUES(3, 'AT 34', '**');
mysql> SELECT * FROM Shops;
+------+----------+-----------+
| Id     | Name   | Quality   |
+------+----------+-----------+
|    1   | Boneys  | High      |
|    2   | AC River| Average |
|    3   | AT 34    |             |
+------+----------+-----------+

และสำหรับ SET จะได้

mysql> INSERT INTO Students VALUES(1, 'Paul', 'A1,B1');
mysql> INSERT INTO Students VALUES(2, 'Jane', 'A1,B1,A2');
mysql> INSERT INTO Students VALUES(3, 'Mark', 'A1,A2,D1,D2');
mysql> SELECT * FROM Students;
+------+--------+--------------+
| Id     | Name | Certificates |
+------+--------+--------------+
|    1   | Paul   | A1,B1        |
|    2   | Jane  | A1,A2,B1    |
|    3   | Mark  | A1,A2        |
+------+--------+--------------+


ขอขอบคุณ Thanks:
1) MySQL Constraints
2) W3Schools.com
3) Hilite
4) CREATE_TABLE MySQL Document 

วันจันทร์ที่ 25 มกราคม พ.ศ. 2559

Get Started with MySQL

MySQL หนึ่งในพลพรรค DBMS

วันนี้เราจะมาทดลองใช้ เจ้าตัว DBMS กันนะครับ จากบทความที่แล้ว ได้เกริ่นไปบ้างเรื่อง DBMS (ใน Part 3) วันนี้เลยขอยกตัวอย่างมาสักตัว นั่นก็คือ MySQL นะครับผม


สาเหตุที่เลือกก็เพราะ อยากจะลองใช้ตัวนี้มั้งแค่นั้นครับ ฮ่าๆ ถ้าเป็นตัวอื่นๆถ้ามีเวลาจะมาแนะนำเพิ่มเติมนะครับ Request เข้ามาได้เลยเน้อ

ในบทความนี้ เราจะใช้ MySQL Version 5.7.10 based on Windows นะครับผม

Cover Content เนื้อหาภายใน Content นี้

  • Part 1: Introduces of 'MySQL' แนะนำ MySQL
  • Part 2: Just try it!! เริ่มทดลองใช้
  • Part 3: RefMan คู่มือ MySQL by เจ้าของเว็บ

Part 1: Introduces of 'MySQL' แนะนำ MySQL


https://en.wikipedia.org/wiki/File:MySQL.svg

เนื้อหาเริ่มแรกเลย อะไรคือ MySQL ??? คำตอบนั่นก็คือ MySQL เป็นหนึ่งใน DBMS ที่ใช้กันอย่างแพร่หลายในปัจจุบัน ซึ่ง Function Sample ต่างๆ รวมไปถึงการใช้งานถือว่า เยอะและเพียงพอเหมาะสมกับการทดลองใช้ และ ใช้งานจริง อีกอย่างที่สำคัญที่สุดเลยคือ "Free/OpenSource" ดังนั้นก็จง "feel free to use" นะครับ ฮ่าๆๆ และก็ในส่วนนี้จะไม่พูดถึงขั้นตอนการ Install นะครับ เพราะค่อนข้างที่ออกไปทางกด Next ๆ แล้วผ่านไปเรื่อยๆ จะมีก็แค่ให้ใส่ Root Password ซึ่งหน้าตา UI ของ Installer จะบอกเราเองครับผม
 
ในส่วนของหน้าต่างของโปรแกรมก็จะมี Workbench


และยังมี Command Line เป็น Console ให้ใช้อีกด้วย สำหรับคนที่ถนัดแบบนี้ก็ใช้กันได้



>> Link Download MySQL Installer on Windows <<

Part 2: Just try it!! เริ่มทดลองใช้

Part 2 นี้เราจะมาลองใช้ DBMS เจ้า MySQL กัน โดยเริ่มแรก ผมจะทำการเปิด MySQL Command Line ก่อนนะครับ

สำหรับ Windows 10: 
- กดปุ่ม "Windows" (หรือพิมพ์ค้นหา ในช่องที่เป็น Feature ของ Windows 10 ก็ได้ครับ) แล้วเริ่มพิมพ์คำสั่ง mysql ซึ่งก็จะได้ผลลัพธ์ประมาณนี้ แล้ว Enter โล๊ดดดด



ในส่วนนี้ถ้าใครใช้ Windows อื่นๆ (7, 8, 8.1) ก็คงต้องลอง Search ดู หรือว่าเข้าไปดูใน Folder ของโปรแกรมเพื่อเปิด Console นี้นะครับ โดยบางท่านอาจจะอยู่ใน path นี้

"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MySQL\MySQL Server 5.7"

เมื่อเปิดหน้าต่างของโปรแกรมขึ้นมาแล้ว ก็จะพบว่า ต้องใส่ Root Password


ซึ่ง Password ก็จะเป็นตัวเดียวกับตอนที่เราพิมพ์ช่วง Installer นะครับ ถ้าใครลืมก็...อาจจะต้องลบแล้วลงใหม่ แห่ะๆ 

เมื่อรหัสผ่านถูกต้องแล้วจะได้ผลลัพธ์เป็นการเข้าสู่การใช้งาน DBMS นะครับ
 


ถัดต่อมาเราจะเริ่มพิมพ์คำสั่ง

SHOW databases;

ผลลัพธ์จะได้ประมาณนี้ครับ


 ซึ่งจะแสดงผลลัพธ์เป็น Databases ที่เรามีอยู่ในเครื่อง

ถัดต่อมาเป็นคำสั่งที่ใช้สำหรับการสร้าง DB ของเราเองนะครับ

CREATE DATABASE MyFirstDB;

ในส่วนนี้จะอธิบายได้ว่าเป็นการสร้าง DB ที่ชื่อว่า "MyFirstDB" นะครับ และผลลัพธ์จะแสดงว่า


หลังจากนั้นจะลองใช้คำสั่งที่เราได้เรียนรู้กันใน Blog ก่อนหน้านี้นะครับซึ่งก็คือ "SELECT * FROM MyFirstDB;" แล้วลองรันดู ผลลัพธ์ปรากฏว่า


เอ้า Error เฉย -3- ไหนลองดู Error Status หน่อยว่าบอกว่าอะไร... "No database selected" อ่อ ไม่ได้เลือก DB ก่อนใช้คำสั่งนั่นเอง อ่ะโอเค เดี๋ยวลองรันคำสั่งนี้แล้วกัน


USE MyFirstDB

ผลลัพธ์

โอเค เลือก DB แล้วนะ ใช้คำสั่งพื้นฐานได้แล้วนะ hahaha

ข้อสังเกต: คำสั่ง USE ไม่ต้องใส่ ';' (semi-colon)

หลังจากนั้นเราจะมาลองกันว่า แสดงผล Table ได้มั้งไหม ด้วยคำสั่ง


SHOW TABLES;


และเมื่อรันคำสั่ง ผลลัพธ์ที่ได้คือ


อ่อ ไม่มี Table ใน DB เรานั่นเอง ฉะนั้น เราจึงต้อง Create Table ก่อนโดยใช้คำสั่งนี้


CREATE TABLE students (name VARCHAR(20), department VARCHAR(10), class_level INT);

ผลลัพธ์ที่ได้


สร้างเสร็จแล้ววววว โดยภายในคำสั่ง ในส่วน "students" นั่นคือชื่อ Table ของเรานะครับผม และหลังจากนั้นจะเป็นตัวแปรของเรา ในที่นี้จะมี
  • name เป็นแบบ VARCHAR Size 20
  • department เป็นแบบ VARCHAR Size 10
  • class_level เป็นแบบ INT
ไหนลอง "SHOW TABLE;" อีกทีเพื่อความแน่ใจ


โอเคผ่านนนนน ต่อจากนั้นลองดูสิว่าเราสร้างตัวแปรต่างๆมาถูกหรือเปล่า ด้วยคำสั่ง DESCRIBE


DESCRIBE students;

ผลลัพธ์ก็จะได้ ตรงตามที่เราสร้างไว้เลยนะครับ


ไหนลอง Add Entry เข้าไปสักอันสิ ด้วยคำสั่ง


INSERT INTO students VALUES ('Chinnawat','Cpr.E.',3);

ผลลัพธ์จะได้


โดยในคำสั่งด้านบนจะเป็นการ INSERT entry เข้าไปใน Table ที่ชื่อว่า "students" โดยมีค่าไล่เรียงลำดับเป็น (name, department, class_level) ซึ่งก็ต้องตรงกับ Type of data ของแต่ละอันเน้อ

ต่อมาเราจะลองดูคำสั่งที่ใช้ในการแสดงผลภายในตารางทั้งหมดนะ ก็คือคำสั่ง


SELECT * FROM students;

ผลที่ได้ก็คือ


เห็นไหมครับว่า เราจะ Add Entry ได้ด้วยคำสั่งนี้

Q: แล้วถ้าหาก อยากเพิ่มทีเดียวหลายๆอันล่ะ ?? ทำได้หรือเปล่า
A: ทำได้ด้วยการ Add ด้วย File ครับ แต่ก็มีข้อควรระมัดระวังนิดนึง
ซึ่งข้อควรระมัดระวังนะครับ หากเราต้องการจะ Add entry หลายๆอัน ด้วย File เดียวนั้น จะต้องมั่นใจก่อนว่า มันอ่าน/เก็บลง DB ได้

ตัวอย่างข้อมูลที่ผิด


อันดับเราจะสังเกตเบื้องต้นจาก 13 warnings นั่นแหละฮะ และหลังจาก Add เข้าไปแล้วผลลัพธ์อาจจะเป็นแบบนี้


ตัวอย่างข้อมูลที่ถูก


สังเกตได้ว่า ไม่มี warning นะครับ ดังนั้นผลลัพธ์ควรจะได้ประมาณนี้


ซึ่งใน MySQL แล้วนั่น จะมีการแบ่ง Cell ออกด้วย tab หนึ่งครั้ง หากจะใช้ csv format ก็ได้แต่ต้องหาข้อมูลเพิ่มเติมกันเอานะครับว่าเราจะสามารถ Add Entry เหล่านั้นอย่างไร

Extra Programming
Q: ถ้าเกิดว่า เราเกิด Add Entry แบบตัวอย่างที่ผิดแล้ว จะลบออกได้ไหม
A: ได้ครับ โดยใช้คำสั่ง DELETE ร่วมกับการ Filter นั่นเอง หรือถ้าสะดวกที่จะลบออกหมดก็ได้ครับ
โดยใน Code ของการ DELETE + WHERE (Filter) แล้วนั่นจะประมาณนี้ครับ

DELETE FROM students WHERE name<>'Chinnawat';

ซึ่งส่วนนี้จะอธิบายได้ว่า เป็นการลบจาก Table "students" โดยจะ Filter อันที่ ไม่ใช่ name "Chinnawat" ซึ่งพวก Operator ก็ศึกษาได้จาก Blog ก่อนหน้านี้ครับผม และสำหรับส่วน Part 2 ก็ขอจบลงเพียงเท่านี้ก่อนไว้มีอะไรให้ศึกษาต่อ จะเอามาบอกเล่ากันนะครับ

Part 3: RefMan คู่มือ MySQL by เจ้าของเว็บ

Part นี้จะขอกล่าวถึง Reference Manuals (RefMan) ที่ทาง MySQL เขามีให้ได้ลองศึกษาดูนะครับ เป็น Documents ที่ค่อนข้างที่จะทำตามได้ง่ายนะครับผม โดยเราสามารถเข้าไปได้ที่ Link นี้ โดยภายในนั้นก็จะเป็น Version 5.6 แต่ก็ยังใช้ได้เน้อ




ขอขอบคุณ Thanks:
- MySQL Download Installer
- MySQL Reference
- Logo MySQL 

วันอาทิตย์ที่ 24 มกราคม พ.ศ. 2559

SQL and DBMS

SQL and DBMS (1st content)

 


เกริ่นนำ: เนื้อหาหลักๆใน Blog นี้ขอทำเป็นภาษาไทยให้คนไทยได้อ่านบ้างนะครับ (Blog ก่อนๆเน้น English เยอะไปหน่อย) ถ้าหากมีบางส่วนที่ใช้ Eng อยู่ ก็ขอประธานอภัยด้วย (Eng มันพิมพ์ง่ายและสั้นดี+อธิบายเป็นภาษาไทย คนอื่นเขาเข้าใจผมยาก 555+)


Cover Content เนื้อหาภายใน Content นี้

  • Part 1: Introduces of SQL เริ่มต้นรู้จักกันด้วย SQL  

  • Part 2: TBC: The Basically Commands คำสั่งที่เป็นพื้นฐานของ SQL

  • Part 3: What's "DBMS" อะไรคือ "DBMS" 

     

Part 1: Introduces of SQL เริ่มต้นกันด้วย SQL

    What's "SQL" อะไรคือ SQL ??
SQL: Structured Query Language แปลภาษาไทยคงจะประมาณว่า "ภาษาโครงสร้างการคิวรี่" (นี่แปลแล้วหรอ??)

เอาเป็นว่ามันเป็นภาษาหนึ่งในทางคอมพิวเตอร์ ที่มันจะใช้ร่วมกับ Database ซึ่งเราจะทำการเขียนและใช้มันในวันนี้!!

โดยการที่เราจะได้ทดลองใช้ภาษา SQL เราจะอ้างอิงจากการศึกษาจากเว็บไซต์ w3schools.com นะครับ ซึ่งเขาก็จะมี SQL Editor ให้ได้ลอง Try it yourself! กัน

หน้าตาเว็บไซต์ w3schools.com

 

 มาเริ่มต้นกันที่หน้า SQL Home เลย

SELECT * FROM Customers; 

 คำสั่งแรกในการจะทดลองใช้ SQL จะแบ่งเป็น 4 ส่วน
1. SELECT ส่วนการเลือก
2. * การเลือก (Rows) ทั้งหมดเลย
3. FROM เลือกจากข้อมูล...
4. Customers อันนี้เป็นส่วนของ Data เน้อ ซึ่งจะเป็นเหมือนตัวแปรให้เราเลือกมาแสดงนั่นเอง

นี่ลองดู Example แบบนี้ใน Try it yourself ! ดิ Copy Code ไปลองรันดูความแตกต่างระหว่าง 2 Code ได้เลย

    Before
SELECT * FROM Shippers;

    After
SELECT Phone FROM Shippers;

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


Part 2: TBC: The Basically Commands คำสั่งที่เป็นพื้นฐานของ SQL

มาต่อกันเลยที่ Part 2 โดย part นี้จะพูดถึง The Most Important SQL Commands เน้อ ยกตัวอย่างเลยก็แล้วกัน
  • SELECT - extracts data from a database
  • UPDATE - updates data in a database
  • DELETE - deletes data from a database
  • INSERT INTO - inserts new data into a database
  • CREATE DATABASE - creates a new database
  • ALTER DATABASE - modifies a database
  • CREATE TABLE - creates a new table
  • ALTER TABLE - modifies a table
  • DROP TABLE - deletes a table
  • CREATE INDEX - creates an index (search key)
  • DROP INDEX - deletes an index
 โดยในบทความนี้จะสอนถึงในส่วนของ Delete นะครับ (เพราะถ้าเขียนไปรอบเดียวบทความคงเยอะและยาวมากกกก)

1] เริ่มกันเล๊ยย "SELECT" คำสั่งนี้คุ้นๆไหม ... นั่นคือคำสั่งที่เราได้ลองใช้ใน Part 1 ไง โดยหลัก Syntax ในการใช้ จะเป็นแบบนี้

SELECT column_name,column_name
FROM table_name;

สังเกตตรง column_name จะสามารถมีได้หลาย column เน้อ ซึ่งถ้าเราไม่กำหนด column ไหนเลยเราอาจจะใช้ * ในการแทนความหมายว่าเอา column data มันมาทั้งหมดน่ะแหละ และตรง table_name ก็จะเป็นส่วนของชื่อของตารางที่อยู่ใน database เรานั่นเอง

2] ถัดต่อมา "DISTINCT" โดยถ้าใช้ร่วมกับ SELECT ก็จะเป็นคำสั่งที่ใช้ในการเลือก column data นั่นๆ ซึ่งคล้ายๆกับ SELECT ไปดูตัวอย่าง Syntax ข้างล่างได้เลย



SELECT DISTINCT column_name,column_name
FROM table_name;

แต่!! มันมี feature ที่ extra มาก็คือการเลือกมาโดย ตัดตัวซ้ำกันออก และ เรียงลำดับตามตัวอักษร ให้เราด้วย เจ๋งมะๆ :D ในส่วนคำสั่ง DISTINCT นั้นจะวางอยู่ในตำแหน่งหลัง SELECT โดยที่คำสั่งอื่นๆ ก็ใช้รูปแบบคล้ายกับ Syntax ของ SELECT เลย

3] ถัดต่อมาเป็น "WHERE" เป็นคำสั่งที่เหมือนกับการ Filter หรือเป็นการกรอง Data ของเรานั่นเองโดยที่จะต้องมี ตัวแปรที่จะกรอง และ สิ่งที่เป็นตัวกรอง เสมอ ตัวอย่าง Syntax



SELECT * FROM Customers
WHERE City='berlin';

ข้อสังเกต คำสั่ง "WHERE" จะใช้หลังจากเราเลือก table data จาก FROM แล้ว โดยที่ "City" เป็นตัวแปร (ชื่อใน Column ของตาราง Customers) และ 'berlin' เป็นสิ่งที่เป็นตัวกรองนั่นเอง
 

[Hint: ตรงส่วนตรง 'berlin' จะไม่คิดถึงเรื่อง Capital Character เด้อ ประมาณว่าใช้ 'Berlin' หรือ 'BERLIN" ก็ได้ผลลัพธ์เหมือนกัน]

 และนอกจากการ filter ด้วย text แล้ว เรายังจะ filter ได้อีกหลายรูปแบบ ตัวอย่างเช่นการ filter ด้วยค่าตัวเลข


SELECT * FROM Products 
WHERE ProductID=1;

โดยเมื่อลองใช้กับ Try it yourself! แล้วจะได้มา 1 Entry เอง เพราะ filter เฉพาะ ProductID ที่มีค่าเท่ากับ 1 ซึ่งเท่านั้นยังไม่พอสำหรับการศึกษาคำสั่งนี้ เพราะโดยปกติเรามี Operator หลายตัว ถูกไหม ซึ่งจะมีดังตารางนี้เลย

Operator Description
= Equal
<> Not equal. Note: In some versions of SQL this operator may be written as !=
> Greater than
< Less than
>= Greater than or equal
<= Less than or equal
BETWEEN Between an inclusive range
LIKE Search for a pattern
IN To specify multiple possible values for a column

จากตารางก็สามารถนำเอา Operator ไปเลือกใช้เพื่อการ Filter ได้เล๊ยยยย

Q: แล้วถ้าเราอยากได้ Filter มากกว่า 1 Filter ล้ะ เช่น เอาค่าที่มากกว่า 2 แต่ไม่เกิน 4 แบบนี้ล้ะ จะทำอย่างไร????
A: ไม่ต้องห่วง เพราะเรามีคำสั่ง "AND" และ "OR" ให้ใช้ด้วย

4] คำสั่ง "AND" และ "OR" จะเป็นเหมือนตัวช่วยให้เราสามารถเลือก Filter ได้หลายรูปแบบมากขึ้น ตัวอย่าง Syntax ก็คือ

SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin'; 

ก็จากใน Syntax ถ้าลองกด Try it yourself! ดูก็จะพบว่า เอาส่วนของ Query Country ที่ตรงกับ Germany และ City ที่ตรงกับ Berlin ออกมา

แล้วถ้าเป็น Code นี้หล่ะ จะเป็นอย่างไร

SELECT * FROM Customers
WHERE Country='Germany'
AND Country='Mexico';

อ่า....ไม่ออกเลยสัก Entry =,.=" เอ้าก็ไป Filter มันทั้งสองประเทศ ที่มีค่า Country เดียวกัน แถมใช้ "AND" อีก มันจะมีไหมในโลกนี้ ถ้าอยากให้ได้ผลลัพธ์ทั้งสองประเทศต้อง Code นี้เลย

SELECT * FROM Customers
WHERE Country='Germany'
OR Country='Mexico';

สังเกตถึงความแตกต่าง ... เห็น "AND" แทนที่ด้วย "OR" ไหมหล่ะ เอ้อออออ ตรงนั้นแหละที่จะสามารถเอาทั้ง Country 'Germany' และ Country 'Mexico' ทั้งสองได้อ่ะ

EXTRA CODE แถมๆๆ การ Filter ที่ Advance ขึ้นมานิดนึง (Try it yourself!)

5] ต่อๆๆ ส่วนของ "ORDER BY" กันเลย ชื่อก็บอกแล้วว่ามันทำไรได้บ้าง นั่นคือการ เรียงลำดับนั่นเอง โดยการเรียงเนี่ยบอกเลยว่า Default ของมันคือการเรียงแบบ Ascending เด้อ ถ้าอยากเรียงถอยหลังแบบ Descending ก็แค่เติม DESC ต่อท้ายคำสั่งเท่านั้นเองงงงง

การเรียงแบบ Ascending [default]

SELECT * FROM Customers
ORDER BY Country; 

การเรียงแบบ Descending

SELECT * FROM Customers
ORDER BY Country DESC;

หลักง่ายๆ ในการใช้ก็แค่ ใส่ "ORDER BY" หลังจากที่เราเลือก table data ด้วยคำสั่ง FORM แล้ว ก็แค่นั้นเองแหละ ส่วนตรง Country ก็คือ Column ที่เราต้องการจะ Order หรือ Sorting มันนั่นแหละฮะ

Extra Code แถมๆๆ การ Order แบบสลับไปสลับมา (ตัวนึง Ascending อีกตัว Descending) (Try it yourself!)

6] ถัดต่อมาก็จะเป็นคำสั่ง "INSERT INTO" โดยขั้นตอนในการใช้งาน ก็จะต้องวางคำสั่งไว้ตำแหน่งแรกสุดเลยน้ะ ตัวอย่าง Syntax


INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');

หลักๆแล้ว ก็จะอ้างถึง Table data ก่อน แล้วตามด้วย () ของ Column ต่างๆ คั่นด้วยสัญลักษณ์ลูกน้ำ "," (Comma) ซึ่งหลังจากนั้นจะเป็นการ Add Values เข้าไป โดยจะต้องตรงกับ Column ที่เราเขียนไว้ข้างต้นด้วย เรามา Try it yourself! กัน

Q: Code เมื่อสักครู่ไม่มีการใส่ CustomerID หนิ แต่ทำไม CustomerID มีการเพิ่มขึ้นในตารางหล่ะ ??
A: การเพิ่มแบบอัตโนมัติแบบนี้เราเรียกว่า "auto_increment" ครับผม แต่ถ้าไม่ใส่ส่วนอื่นที่ไม่ได้ประกาศ auto_increment ใน Model DB ไว้ก็จะเป็น Null แทนครับ

ซึ่งถ้าลองกด Run แล้วใครเกิด Error ก็ถือว่า Code ไม่ได้ผิดเน้อ เพราะจะมี Browser บาง Browser (ex. Firefox) ที่ไม่ support WebSQL ซึ่งเจ้าของบล็อกก็ใช้ Firefox เลยไม่ได้ลองจริงเลย -,.-'

WebSQL support (Chrome, Safari, or Opera)

7] คำสั่งถัดมาเป็นคำสั่ง "UPDATE" ซึ่งเป็นคำสั่งที่ตรงกับความหมายเลยคือ การอัพเดทค่า นั่นเองลองดู Syntax เลย


UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';

ในตรงนี้ เราจะทำการเลือก Table Data ก่อน ในที่นี้คือ Customers แล้วถัดมาคือ คำสั่ง "SET" โดยเราจะทำการเลือก Column และตามด้วยค่าที่ต้องการจะเปลี่ยนให้เป็น โดยสามารถเปลี่ยนได้หลาย Column โดยการคั่นด้วยเครื่องหมาย "," (Comma) และที่สำคัญที่สุดเลย!! คือการ Filter ด้วยคำสั่ง "WHERE" ซึ่งถ้าเกิดว่า เราไม่ได้ Filter ตรงนี้ "ทุกช่อง" จะถูก SET ทั้ง Table Data เลย ย้ำๆๆๆๆๆๆๆ ลอง Try it yourself! ได้เลยจ้าาา

8] และคำสั่ง Basically สุดท้ายก็คือ "DELETE" ก็เป็นอีกคำสั่งที่ ความหมายตรงตัวเป๊ะเลยก็คือการลบออกไปนั่นเอง ลองดู Syntax เลยนะ


DELETE FROM table_name
WHERE some_column=some_value; 

ลำดับการเรียกใช้ก็คือ การพิมพ์ว่า DELETE แล้วตามด้วย Table Data ที่เราต้องการจะลบ จากนั้นก็จะเป็นส่วนของการ Filter เช่นเดิม ที่เราจะต้อง Filter เอาดูว่า จะลบส่วนไหนออกไป ซึ่งเมื่อรันคำสั่งแล้ว ก็จะลบทั้ง Entry นั้นๆออกไปเลย ลอง Try it yourself! ได้เลยคร้าบบบบบ ซึ่งข้อควรระวังก็เหมือนเดิม คือการที่จะใช้คำสั่งแล้วไม่ทำการ Filter ผลลัพธ์ก็จะลบ Data มันทั้งหมดเลยเหมือนกัน และที่สำคัญกว่านั้น...Undo ไม่ได้นะจ้ะ

หรือถ้าใครต้องการที่จะลบ Data เหล่านั้นจริงๆ ก็จะสามารถใช้คำสั่งได้ 2 คำสั่งนั้นก็คือ


DELETE FROM table_name;

or

DELETE * FROM table_name;

จบแล้วนะคร้าบ สำหรับการใช้งานคำสั่ง Basic ต่างๆ ที่จะมาบอกเล่ากันในวันนี้ ซึ่งถ้าไม่เข้าใจในคำสั่งส่วนไหน Comment ไว้ด้านล่างได้เลยนะครับ จะพยายามรีบตอบให้ไวที่สุดครับผม

Part 3: What's "DBMS" อะไรคือ "DBMS"

part สุดท้ายนี้ก็จะกล่าวถึง DBMS นะครับ ซึ่ง DBMS มันย่อมาจาก Database Management System กล่าวคือมันเป็นตัว Management นั่นเอง ซึ่งในปัจจุบันถือกำเนิดมาเยอะมากๆ ให้ผู้ใช้ได้ใช้ รวมไปถึง Administrator, Programmer ได้เลือกใช้อย่างหลากหลาย ยกตัวอย่างเช่น 
  • Oracle
  • IBM DB2
  • Microsoft SQL Server
  • Sybase
  • Cache'
  • PostgreSQL
  • Progress
  • MySQL
  • Interbase
  • Firebird
  • Pervasive SQL
  • SAP DB
  • Microsoft Office Access
  • SQLite
 ซึ่งเห็นไหม ว่ามันเยอะมากๆเลย ซึ่งในการเลือกใช้ก็ต้องลองดูว่า เราจะชอบ/ถนัดกับ DBMS ตัวไหน ซึ่งการใช้งาน UI ก็จะแตกต่างกันไม่ค่อยมากเสียเท่าไหร่

Thank for Credits: