วันอาทิตย์ที่ 1 กุมภาพันธ์ พ.ศ. 2558

คำสั่ง SQL SQL Basic




SQL Basic

SQL เป็นภาษามาตรฐานสำหรับฐานข้อมูล Relational Database Management System (RDBMS) ตามมาตรฐานของ ANSI (American National Standard Institute) ในส่วนนี้กล่าวถึงคำสั่งต่างๆตามพื้นฐาน และสามารถดูการประยุกต์ที่ซับซ้อนมากขึ้นได้ โดยคำสั่ง QUERY 

1. SQL

SQL (ออกเสียงว่า "ess-que-el" หรือ "ซี-เคลว") ย่อมาจาก Structured Query Language เป็นภาษามาตรฐานที่ใช้ในการติดต่อกับฐานข้อมูล คิดค้นโดยนักวิทยาศาสตร์ของ IBM ในทศวรรษ 1970 ในปัจจุบัน ANSI (American National Standard Institute) ได้ประกาศให้ SQL ภาษามาตรฐานสำหรับระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System ย่อเป็น RDBMS) คำสั่งของ SQL ทำงานต่างของฐานข้อมูล เช่น การปรับปรุงข้อมูล การดึงข้อมูลเพื่อแสดงผลที่ต้องการ
ระบบฐานข้อมูลในปัจจุบันเกือบทั้งหมดเป็นแบบระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) เช่น Oracle, Sybase, Microsoft SQL Server, Microsoft Access, DB2 ของ IBM เป็นต้น ถึงแม้ว่า ฐานข้อมูลแบบ RDBMS ทุกระบบ จะสามารถใช้คำสั่งพื้นฐานของ SQL เหมือนกัน แต่ทุกระบบอาจจะมีคำสั่งพิเศษของตัวเองที่ ระบบอื่นอาจจะใช้ไม่ได้

2. Relational Database

ฐานข้อมูลเชิงสัมพันธ์ (Relational Database) เป็นโครงสร้างฐานข้อมูลที่สามารถกำหนดความสัมพันธ์ขึ้นเมื่อใดก็ได ้โดยไม่จำเป็นต้องกำหนดไว้ตั้งแต่เริ่มต้นออกแบบฐานข้อมูล และเปลี่ยนโครงสร้างได้ง่าย ฐานข้อมูลเก็บข้อมูลและสารสนเทศในอ๊อบเจค เรียกว่า Table
Table ประกอบด้วย คอลัมน์ (Column) และแถวข้อมูล (Row) โดยคอลัมน์ประกอบด้วย ชื่อคอลัมน์ ประเภทข้อมูล และคุณสมบัติอื่นๆ (เช่น การกำหนดเป็น primary key, ค่าเริ่มต้น) แถวเก็บข้อมูลของคอลัมน์
สามารถเปรียบกับฐานข้อมูล dBase ได้ดังนี้

Relational DatabasedBase
Tableไฟล์
คอลัมน์ (Column)ฟิลด์
แถวข้อมูล (Row)เรคคอร์ด

Table ตัวอย่างชื่อ “weather” มีข้อคอลัมน์ชื่อ city, state, high และ low มีแถวข้อมูลใน Table คือ

citystate highlow
PhoenixArizona10590
TucsonArizona10192
FlagstaffArizona8869
San DiegoCalifornia7760
AlbuquerqueNew Mexico8072

3. การเลือกข้อมูล

SELECTION statement ใช้ในการสร้างคิวรี่ หรือการสอบถามกับฐานข้อมูล และเลือกดึงข้อมูลที่ตรงกับเกณฑ์ที่กำหนด

ไวยากรณ์

SELECT column1 [, column2…]
FROM tablename
[WHERE condition ];
[ ] ตัวเลือก
columnเป็นคอลัมน์ที่ต้องการให้แสดงผล ถ้าต้องการเลือกทุกคอลัมน์ใน Table ให้ใช้ *
SELECT * FROM weather;
Tablenameเป็นการระบุ Table ที่ต้องการดึงข้อมูล
WHEREWHERE clause เป็นตัวเลือกซึ่งจะมีหรือไม่ก็ได้ใช้กำหนดเ หรือเงื่อนไขในการเลือกเฉพาะข้อมูลที่ต้องทราบ
condition ที่ใช้ใน WHERE clause คือ
=เท่ากับ
>มากกว่า
<น้อยกว่า
>=มากกว่าหรือเท่ากับ
<=น้อยกว่าหรือเท่ากับ
<>ไม่เท่ากับ
LIKE(ดูหมายเหตุ 1)

หมายเหตุ

1. LIKE เป็นแบบแผนของ operator การจับคู่ สามารถใช้ใน condition ของ WJERE clause ซึ่ง LIKE เป็น operator ที่มีความสามารถสูงในการในการเลือกข้อมูล เครื่องหมายเปอร์เซ็นต์ "%" สามารถเป็น wild card ในการเลือก โดยการจับคู่ตัวอักษรไม่จำกัดที่อยู่หน้าหรือหลังตัวอักษรที่กำหนด เช่น 'R%' ให้มีอักษร R อยู่ซ้ายสุด หรือหน้า '%R' ให้มีอักษร R อยู่ขวาสุดหรือท้าย '%R%' ให้มีอักษร R อยู่ตรงกลาง
2. SQL statement ต้องลงท้ายประโยคคำสั่งด้วยเครื่องหมาย semi colon (;) เพื่อแสดงการสิ้นสุดคำสั่ง

ตัวอย่าง

SELECT first, last, city
FROM empinfo
WHERE first LIKE 'Er%';
SQL statement จะจับคู่เฉพาะ first ที่ขึ้นต้นด้วย 'ER' ข้อความหรือตัวอักษร ใน WHERE clause ต้องอยู่ในเครื่องหมาย single quote (')
SELECT first, last
FROM empinfo
WHERE last LIKE '%s';
SQL statement จะจับคู่เฉพาะ first ที่ลงท้ายด้วย 's'
SELECT * FROM empinfo
WHERE first = 'Eric';
SQL statement จะเลือกแถวที่ข้อมูลในคอลัมน์ first คือ 'Eric'
ตัวอย่าง Table ชื่อ "empinfo"

4. การสร้าง Table

CREATE TABLE statement ใช้ในการสร้าง Table ขึ้นมาใหม่

ไวยากรณ์1

รูปแบบการสร้าง Table อย่างง่าย
CREATE TABLE tablename
(column1 datatype,
column2 datatype,
column3 datatype
, …);

ไวยากรณ์ 2

รูปแบบการสร้าง Table ที่มีข้อกำหนด หรือ constraint
CREATE TABLE tablename
(column1 datatype [constraint],
column2 datatype [constraint],
column3 datatype [constraint]
,…);
[ ] ตัวเลือก
tablenameระบุชื่อ Table
columnระบุคอลัมน์ที่ต้องการ
datatypeกำหนดประเภทข้อมูลของคอลัมน์
constraintข้อกำหนด หรือคุณสมบัติของคอลัมน์

ตัวอย่าง

CREATE TABLE employee
(first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));
การสร้าง Table ใหม่ให้พิมพ์คำสั่ง CREATE TABLE ตามด้วยชื่อ Table แล้วพิมพ์เครื่องหมายวงเล็บเปิด ตามด้วยชื่อคอลัมน์ แล้วกำหนด ประเภทข้อมูล ถ้าต้องการกำหนด constraint แล้วพิมพ์เครื่องหมายจุลภาค (,) จากนั้นให้พิมพ์คอลัมน์อื่นต่อไป โดยแบ่งแต่ละคอลัมน์ด้วยจุลภาค จนถึงคอลัมน์สุดท้าย ให้พิมพ์ตามเครื่องหมายวงเล็บปิด ตามด้วยเครื่องหมาย semicolon (;)

การกำหนดคอลัมน์

ชื่อคอลัมน์ สามารถกำหนดเป็นตัวอักษร หมายเลข และเส้นใต้ แต่ไม่เกิน 30 ตัวอักษร และไม่เป็น reserve word ของ SQL (เช่น SELECT, CREATE เป็นต้น)
ประเภทข้อมูล ต้องกำหนดให้เหมาะสมกับข้อมูลที่จะเก็บในคอลัมน์ เช่น first เป็นการเก็บชื่อพนักงาน ควรกำหนดเป็น CHAR หรือ VARCHAR (variable-length character), age เก็บอายุ ควรกำหนดเป็น NUMBER เป็นต้น

ประเภทข้อมูลที่ใช้บ่อย

ประเภทข้อมูลคำอธิบาย
CHAR(size)ตัวอักษรชนิดความยาวคงที่ size ระบุจำนวนตัวอักษรได้ไม่เกิน 255 ไบต์
VARCHAR(size)ตัวอักษรชนิดความยาวแปรผันในการเก็บ size ระบุจำนวนตัวอักษร
NUMBER(size)ตัวเลข size กำหนดจำนวนหลักที่ต้องการ
DATEวันที่
NUMBER(size,d)ตัวเลขชนิดมีทศนิยม size กำหนดจำนวนหลักทั้งหมดรวมถึงทศนิยม d กำหนดตำแน่งทศนิยม

Constraint

constraint เป็นตัวเลือกในการกำหนดคอลัมน์ โดย constraint เป็นกฎหรือคุณสมบัติ เช่น กำหนดเป็น primary key หรือควบคุมค่าที่ป้อนเข้ามา เช่น not null ใช้เป็นการระบุว่าคอลัมน์ต้องมีค่าเสมอ ห้ามเป็นช่องว่าง unique ใช้เป็นการบังคับว่าค่าของคอลัมน์ต้องเป็นค่าแบบไม่ซ้ำ check ใช้ในการตรวจสอบค่าก่อนนำเข้า
การกำหนด constraint สำหรับ primary key และ foreign key 

5. การกำหนด Key

Key เป็นข้อกำหนดคุณสมบัติของคอลัมน์ใน Table ซึ่งทำหน้าที่เป็น index เพื่อเพิ่มความเร็วในการค้นหาข้อมูล และใช้กำหนดความสัมพันธ์ระหว่าง Table
Primary key สร้างจากคอลัมน์ (หรือประกอบด้วยหลายคอลัมน์) ที่มีค่าของคอลัมน์ในทุกแถวข้อมูลมีค่าไม่ซ้ำกัน เป็นการควบคุมค่าที่เก็บในคอลัมน์ และใช้ในการเชื่อมโยงกับ Table อื่น ในแต่ละ Table กำหนด primary key ได้ 1 key
Foreign key เป็นคอลัมน์ใน Table ที่ primary key อยู่ที่ Table อื่น หมายถึงว่า ค่าของคอลัมน์ทั้งหมดใน Table ต้องมีค่าสอดคล้องกับค่าของคอลัมน์ที่เป็น primary key ของ Table ที่สัมพันธ์กัน
Index สามารถกำหนดขึ้นเพื่อใช้ในการเพิ่มความเร็วในการค้นหาข้อมูล การเรียงลำดับข้อมูล แต่ควรสร้างตามความจำเป็น เนื่องจากถ้ามีคอลัมน์ที่เป็น Index มากจะทำให้การทำงานช้าลง

การกำหนด primary key

ตัวอย่าง

CREATE TABLE employee
(employee_id (10),
first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20),
CONSTRAINT employee_primary_key PRIMARY KEY (employee_id));
หรือ
CREATE TABLE employee
(employee_id (10)NOT NULL
CONSTRAINT employee_primary_key PRIMARY KEY (employee_id),
first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));

การกำหนด foreign key

ตัวอย่าง

CREATE TABLE employee
(employee_id (10),
first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20),
CONSTRAINT employee_foreign_key PRIMARY KEY (state));

การกำหนด index

ไวยากรณ์

CREATE INDEX indexname
ON tablename (column);
indexnameกำหนดชื่อ index
tablenameที่ Table ที่ต้องการกำหนดสร้าง index
columnชื่อคอลัมน์ที่กำหนดเป็น index

ตัวอย่าง

CREATE INDEX Index_city
ON employee (city);

6. การแก้ไข Table

ALTER statement ใช้ในการปรับปรุงคอลัมน์ใน Table ที่สร้างเสร็จแล้ว

ไวยากรณ์ 1

การปรับปรุงคอลัมน์
ALTER TABLE tablename
ADD (column1 datatype [constraint]
[,column2 datatype [constraint],
column3 datatype [constraint],…]
 );
[ ] ตัวเลือก

ไวยากรณ์ 2

การปรับปรุง constraint ของ Table
ALTER TABLE tablename
ADD (tableconstraint );
tablenameระบุชื่อ Table
columnระบุคอลัมน์ที่ต้องการ
datatypeกำหนดประเภทข้อมูลของคอลัมน์
constraintข้อกำหนด หรือคุณสมบัติของคอลัมน์
tableconstraintกำหนด constraint ของ Table เช่น กำหนด primary key หรือ foreign key

ตัวอย่าง การปรับปรุง column

ALTER TABLE employee
ADD(employee_id(10),
first varchar(20),
edu varchar(20),

ตัวอย่าง การปรับปรุง primary key

ALTER TABLE employee
ADD (CONSTRAINT employee_primary_key1 PRIMARY KEY (emloyee_id);
การปรับปรุง Table ใหม่ให้พิมพ์คำสั่ง CREATE TABLE ตามด้วยชื่อ Table ตามด้วย ADD แล้วพิมพ์เครื่องหมายวงเล็บเปิด ตามด้วยชื่อคอลัมน์ แล้วกำหนด ประเภทข้อมูล ถ้าต้องการกำหนด constraint แล้วพิมพ์เครื่องหมายจุลภาค (,) จากนั้นให้พิมพ์คอลัมน์อื่นต่อไป โดยแบ่งแต่ละคอลัมน์ด้วยจุลภาค จนถึงคอลัมน์สุดท้าย ให้พิมพ์ตามเครื่องหมายวงเล็บปิด ตามด้วยเครื่องหมาย semicolon (;) ถ้าเป็นการปรับปรุง constraint ของ Table ให้ constraint ของ Table ในวงเล็บ และแก้ไขให้พิมพ์ชื่อคอลัมน์เดิมและการปรับปรุง ข้อกำหนดจะเข้าไปแทนที่ข้อกำหนดเดิม

7. การป้อนข้อมูล

INSERT statement ใช้ในการป้อนหรือเพิ่มแถวข้อมูลเข้า Table

ไวยากรณ์

INSERT INTO tablename
(column1,column2,...)
VALUES(value1,value2,...);
tablenameระบุชื่อ Table
columnระบุคอลัมน์ที่ต้องการ เพิ่มค่า
valueค่าที่ต้องการป้อน
หมายเหตุ แต่ละค่าของ value กับ column จะต้องตรงกัน

ตัวอย่าง

INSERT INTO employee
(first, last, age, address, city, state)
VALUES ('Luke', 'Duke', 45, '2130 Boars Nest', 'Hazard Co', 'Georgia');
NOTE: ข้อมูลที่เป็นข้อความ (string) ต้องอยู่ในเครื่องหมาย single quote (‘)
การป้อนข้อมูลเข้าสู่ Tableให้พิมพ์คำสั่ง INSERT INTO ตามด้วยชื่อ Table แล้วพิมพ์เครื่องหมายวงเล็บเปิด ตามด้วยชื่อคอลัมน์ แล้วพิมพ์เครื่องหมายจุลภาค (,) จากนั้นให้พิมพ์คอลัมน์อื่นต่อไป โดยแบ่งแต่ละคอลัมน์ด้วยจุลภาค จนถึงคอลัมน์สุดที่กำหนด ให้พิมพ์เครื่องหมายวงเล็บปิด ให้พิมพ์คำสั่ง VALUES แล้วพิมพ์เครื่องหมายวงเล็บเปิด ตามด้วยค่าที่ต้องป้อนเข้าในแต่ละคอลัมน์ แล้วพิมพ์เครื่องหมายจุลภาค (,) จากนั้นให้พิมพ์ค่าอื่นต่อไป โดยแบ่งแต่ละค่าด้วยจุลภาค จนถึงค่าสุดท้าย ให้พิมพ์ตามเครื่องหมายวงเล็บปิด ตามด้วยเครื่องหมาย semicolon (;)
การป้อนข้อมูลจาก table อื่น
ตัวอย่าง ตามตัวอย่างเป็นการป้อนข้อมูลเข้าสู่ table "employee" ด้วยข้อมูลจาก table "temp_emp"
INSERT INTO employee
(empid, first, last, age, dept)
SELECT empno, firstname, lastname, age, department
FROM temp_emp
WHERE departmant IN ('Sales','Account','IT');
การป้อนข้อมูลที่เป็น Date
ตัวอย่าง การป้อนค่าคอลัมน์ hiredate ด้วย '25-AUG-99'
INSERT INTO empid, fisrtname, lastname, hiredate, dept)
VALUE (1150, 'Luke', 'Duke', '25-AUG-99', 'Sales')
ตัวอย่าง ในฐานข้อมูล Oracle สามารถป้อนค่าด้วยฟังก์ชัน TO_DATE
INSERT INTO empid, fisrtname, lastname, hiredate, dept)
VALUE (1150, 'Luke', 'Duke', TO_CHAR('25/10/1999','dd/mm/yyyy'), 'Sales');

8. การปรับปรุงข้อมูล

UPDATE statement ใช้ในการปรับค่าหรือเปลี่ยนข้อมูลตามเกณฑ์ที่กำหนด

ไวยากรณ์

UPDATE tablename
SET columnname1 = newvalue1 [," columnname2" = "newvalue2"...]
WHERE column1  OPERATOR value  [AND|OR column2 OPERATOR value ];
[ ] ตัวเลือก
tablenameระบุชื่อ Table
columnnameระบุคอลัมน์ที่ต้องการ แก้ไขค่า
newvalueค่าใหม่ที่ต้องการแก้ไข
columnnameชื่อคอลัมน์ที่กำหนดเงื่อนไข
valueค่าของเงื่อนไข

ตัวอย่าง

UPDATE phone_book
SET area_code = 623
WHERE prefix = 979;
UPDATE phone_book
SET last_name = 'Smith', prefix=555, suffix=9292
WHERE last_name = 'Jones';
UPDATE employee
SET age = age+1
WHERE first_name='Mary' AND last_name='Williams';
การปรับปรุงข้อมูล ให้พิมพ์คำสั่ง UPDATE ตามด้วยชื่อ Table แล้วตามด้วยคำสั่ง SET ชื่อคอลัมน์ที่ต้องการเปลี่ยนค่า ตามเครื่องหมายเท่ากับ ค่าใหม่ที่นำแทนที่ ถ้าปรับปรุงหลายคอลัมน์ ให้ชื่อคอลัมน์ เท่ากับ ค่าใหม่ แล้วแยกด้วยเครื่องจุลภาค (ยกเว้นค่าชุดสุดท้าย) แล้วตามด้วย WHERE แล้วตามด้วยเงื่อนไข ถ้ามีหลายเงื่อนไขให้เชื่อมด้วย AND หรือ OR แล้วปิดท้ายคำสั่งด้วยเครื่องหมาย semicolon (;)

9. การลบข้อมูล

DELETE statement เป็นคำสั่งที่ใช้การลบข้อมูล

ไวยากรณ์

DELETE FROM tablename
WHERE column  OPERATOR value  [AND|OR column  OPERATOR value ];
[ ] ตัวเลือก
tablenameระบุชื่อ Table
columnnameชื่อคอลัมน์ที่กำหนดเงื่อนไข
valueค่าของเงื่อนไข

ตัวอย่าง

DELETE FROM employee;
NOTE: ถ้าใช้คำสั่ง DELETE statement โดยไม่มี WHERE clause จะเป็นการลบข้อมูลทั้งหมดใน Table
DELETE FROM employee
WHERE lastname = 'May';

DELETE FROM employee
WHERE firstname = 'Mike' or firstname = 'Eric';
การลบเป็นการลบแถวข้อมูลออกจาก Table ให้ป้อนคำสั่ง DELETE FROM ตามด้วย ชื่อ Table ตามด้วย WHERE และเงื่อนไขในการลบไข ถ้ามีหลายเงื่อนไขให้เชื่อมด้วย AND หรือ OR แล้วปิดท้ายคำสั่งด้วยเครื่องหมาย semicolon (;)

10. การลบ Table

DROP statement ที่ใช้ในการลบ Table หรือยกเลิก

ไวยากรณ์

DROP TABLE tablename ;

ตัวอย่าง

DROP TABLE employee;
การลบ Table ให้พิมพ์คำสั่ง DROP TABLE ตามชื่อ Table ที่ต้องการลบแล้วปิดท้ายคำสั่งด้วยเครื่องหมาย semicolon (;)

11. ROLLBACK, COMMIT

ROLLBACK

ROLLBACK เป็นคำสั่งที่ใช้ในยกเลิกการทำงานของคำสั่งที่ส่งผ่านไปก่อนหน้านี้ เช่น การส่งคำสั่งเพื่อลบข้อมูลบน table “employee” (DELELET * FROM employee;) แล้วต้องการยกเลิกการลบข้อมูล ทำได้โดยใช้คำสั่ง ROLLBACK ทันทีภายหลังคำสั่ง DELETE ผลจากการใช้คำสั่ง ROLLBACK จะทำให้ได้ข้อมูลที่ลบด้วยคำสั่ง DELETE กลับคืนมา

ไวยากรณ์

ROLLBACK;
ROLLBACK มีข้อจำกัด คือ ไม่สามารถเรียกกลับทรานแซคชันที่เกิดจากคำสั่ง DROP (TABLE, INDEX), ALTER (TABLE, USER), CREATE (TABLE, VIEW)

COMMIT

ตามปกติระบบฐานข้อมูล RDBMS จะไม่ยืนยันการทำงานทรานแซคชันอย่างอัตโนมัติ คือ เมื่อป้อนคำสั่ง INSERT, UPDATE, DELETE แล้ว โปรแกรมจะรอเวลาระยะหนึ่งตามที่กำหนดไว้ แล้วทำการยืนยันการเปลี่ยนแปลงด้วยการ COMMIT ทรานแซคชัน ที่ส่งเข้ามาในระบบ แต่สามารถทำการ COMMIT ทรานแซคชันได้ทันที แต่จะไม่สามารถ ROLLBACK ได้

ไวยากรณ์

COMMIT;
ข้อดีในการใช้คำสั่ง COMMIT ช่วยให้ข้อมูลของทรานแซคชันสมบูรณ์ และมีประโยชน์กรณีที่เครื่องคอมพิวเตอร์ที่เก็บฐานข้อมูลเสียหาย ระบบจัดการฐานข้อมูลสามารถ recovery การทำงานของทรานแซคชันได้ถูกต้อง









ไม่มีความคิดเห็น:

แสดงความคิดเห็น