Modern Management and Information TechnologyCollage of Arts, Media and Technology,
Chiang Mai University
Structured Query Language
SQL (Structured Query Language) เป็นภาษามาตราฐานบนระบบฐานข้อมูลเชิงสมัพันธ์ สามารถใช้งานได้กบัเครื่องคอมพิวเตอร์หลายระดบั ปัจจุบนัมีซอฟตแ์วร์ระบบจัดการฐานข้อมูล (DBMS) ที่สนับสนุนการใช้คาํสั่ง SQL เช่น ORACLE, DB2, MS-SQL, MS-Access
เริ่มพัฒนาครั้งแรกโดย almaden research center ของบริษัท IBM โดยมีชื่อเริ่มแรกว่า “ซีเควล” (Sequel)
ปี ค.ศ. 1986 ทางด้าน American National Standards Institute (ANSI) จึงได้กาํหนดมาตรฐานของ SQL ขึ้น
ผู้ผลิตได้ซอฟต์แวร์ได้ขยาย SQL ออกไปจนเกนิข้อกาํหนดของ ANSI โดยเพิ่มคุณสมบัติอื่นๆ ที่คิดว่าเป็นประโยชน์เข้าไปอกีแต่โดยหลักทั่วไปแล้วกย็ังปฏบิตัิตามมาตราฐานของ ANSI
ประเภทคาํส ัง่ของภาษา SQL ภาษาสาํหรับการนิยามข้อมูล (Data Definition Language : DDL)
ประกอบด้วยคาํสั่งที่ใช้ในการกาํหนดโครงสร้างข้อมูลว่ามีคอลัมน์อะไร แต่ละคอลัมน์เกบ็ข้อมูลประเภทใด รวมถงึการเพิ่มคอลัมน์ การกาํหนดดัชนี การกาํหนดวิวหรือตารางเสมือนของผู้ใช้ เป็นต้น
ภาษาสาํหรับการจัดการข้อมูล (Data Manipulation Language : DML) ประกอบด้วยคาํสั่งที่ใช้ในการเรียกใช้ข้อมูล การเปลี่ยนแปลงข้อมูล การเพิ่มหรือลบข้อมูล เป็นต้น
ภาษาควบคุม (Data Control Language : DCL) : ประกอบด้วยคาํสั่งที่ใช้ในการควบคุม การเกดิภาวะพร้อมกนั หรือการป้องกนัการเกดิเหตุการณท์ี่ผู้ใช้หลายคนเรียกใช้ข้อมูลพร้อมกนั และคาํสั่งที่เกี่ยวข้องกบัการควบคุมความปลอดภัยของข้อมูลด้วยการกาํหนดสทิธขิองผู้ใช้ที่แตกต่างกนั เป็นต้น
ชนดิของขอ้มูลทีใ่ชใ้นภาษา SQL ตัวหนังสอื
ความยาวคงที่ (Fixed-length Character) จะใช้ char(n) หรือ
character(n) ความยาวไม่คงที่ (Variable-length Character) จะใช้ varchar(n)
จาํนวนเลข
มีจุดทศนิยม (Decimal) จะใช้ dec(m,n) หรือ decimal(m,n) ไม่มีจุดทศนิยม (Integer) จะใช้ int, integer (10 หลกั) หรือ smallint
(5หลัก)
เลขจาํนวนจริง (Number) จะใช้ number(n) ข้อมูลในลักษณะอื่นๆ
วันที่และเวลา (Date/Time) จะใช้ date
การสร้าง Table
ไวยากรณ์
CREATE TABLE tablename
(column1 datatype [constraint],
column2 datatype [constraint],
column3 datatype [constraint],…);
ตวัอย่าง
CREATE TABLE employee
(first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));
ตย การใช ้constraintCREATE TABLE SALESTAB(SALENO integer NOT NULL,SALENAME char(10) NOT NULL,ADDRESS char(10),SALECOM decimal);
CREATE TABLE SALESPEOPLE(SALENO integer NOT NULL UNIQUE,SALENAME char(10) NOT NULL UNIQUE,ADDRESS char(10),SALECOM decimal);
CREATE TABLE SALESPEOPLE(SALENO integer NOT NULL UNIQUE PRIMARY KEY,SALENAME char(10) NOT NULL UNIQUE,ADDRESS varchar(30),SALECOM decimal);
CREATE TABLE NAMEFIELD(FIRSTNAME char(10) NOT NULL ,LASTNAME char(10) NOT NULL UNIQUE,CITY char(10),PRIMARY KEY (FIRSTNAME ,LASTNAME ));
ถ้า ต้องการสร้างตารางลูกค้า ( CUSTOMERSTAB) โดยกาํหนดให้CUSNO เป็น PRIMARY KEY และคอลัมน์SALENO เป็นคีย์นอก
(foreign key) ที่ใช้เชื่อมโยงหรืออ้างองิข้อมูลกบัตาราง พนักงานขาย(
SALESTAB) โดยใช้คาํสั่งอย่างใดอย่างหนึ่งดังนี้
CREATE TABLE CUSTOMERSTAB(CUSNO integer NOT NULL PRIMARY KEY,CUSNAME char(10) ,ADDRESS varchar(50),SALENO integer,FOREIGN KEY (SALENO) REFERENCES SALESTAB(SALENO));
CREATE TABLE CUSTOMERSTAB(CUSNO integer NOT NULL PRIMARY KEY,CUSNAME char(10) ,ADDRESS varchar(50),SALENO integer REFERENCES SALESTAB(SALENO));
ขอ้คาํนงึในการสร้างตาราง
ในการสร้างตารางแต่ละตารางอย่างน้อยที่สดุต้องกาํหนดคอลัมน์ได้ 1 คอลัมน์
รายละเอยีดของแต่ละคอลัมน์แยกจากกนัด้วยเครื่องหมาย comma (,)
สิ้นสดุคาํสั่งด้วยเครื่องหมาย semicolon (;)
*ข้อคาํนึงเหล่านี้อาจมีความแตกต่างกนัไปบ้าง ขึ้นอยู่กบัผู้ผลิตแต่ละราย
การลบ Table DROP statement ที่ใช้ในการลบ Table หรือยกเลิก
ไวยากรณ์
DROP TABLE tablename ;
ตวัอย่าง
DROP TABLE employee;
การแกไ้ข table รปูแบบ
ALTER TABLE <table name>Database update(<column_name> data type [SIZE]);
เช่นALTER TABLE SALESPEOPLE ADD SALESTAB_FAX CHAR(15);คือการเพิ่ม SALESTAB_FAX ลงในตาราง SALEPEOPLE
ALTER TABLE SALESPEOPLE RENAME ADDRESS TO COUNTRY;คือการเปลี่ยนชื่อคอลัมม์จาก ADDRESS เป็น country
ALTER TABLE TEAMSADD TYPE CHAR(1) AFTER TEAMNO;เพิ่ม TYPE หลัง TEAMNO ในตาราง TEAMS
ALTER TABLE TEAMSDROP TYPE;ทาํการลบ TYPE ออกจากตาราง TEAMS
ALTER TABLE PLAYERCHANGE BIRTH_DATE DATE_OF_BIRTH DATE;ทาํการเปลี่ยนชื่อคอลัมม์ BIRTH_DATE เป็น DATE_OF_BIRTH มีโครงสร้างเป็น date
ALTER TABLE PLAYERSCHANGE TOWN TOWN varchar(40) NOT NULL;เปลี่ยนชนิดของ town ให้เป็น varchar ขนาด 40 และไม่เป็นค่า null
การสร้างดชัน ี(index) ดัชนีมีความสาํคัญคือ ช่วยเพิ่มความสามารถในการค้นหาข้อมูลได้เรว็ยิ่งขึ้น
ถ้าตารางข้อมูลใดไม่มกีารสร้างดชันีไว้การค้นหาข้อมูลในตารางนั้นจะต้องทาํการค้นหา
แบบเรียงลาํดับจากแถวแรกจนถงึแถวสดุท้าย
ดัชนีสามารถช่วยให้ผู้ใช้หาข้อมูลแต่ละแถวตามที่กาํหนดเฉพาะเจาะจงตามต้องการได้โดย
อตัโนมัติ
การสร้างดัชนีจะทาํให้การค้นหาข้อมูลเรว็ขึ้น แต่การสร้างดัชนีกเ็ปลื้องพื้นที่ใน
หน่วยความจาํ
สมมติว่าตารางลูกค้ามีข้อมูลป้อนไว้หลายรายการ และต้องการหาลูกค้าหมายเลข 2999
เนื่องจากไม่ได้เรียงลาํดับแถวตามหมายเลขลูกค้าไว้ ปกติโปรแกรมจะต้องค้นหาไปที่ละ
แถวจนตลอดทั้งตารางเพื่อหาค่าลูกค้าหมายเลข 2999 ในคอลัมน์ CUSNO อย่างไรก็ดีถ้ามีดัชนีอยู่ในคอลัมน์ CUSNO โปรแกรมกจ็ะตรงไปที่หมายเลข 2999 ในดัชนีเลย
รูปแบบคาํส ัง่ในการสร้างดชัน ี CREATE INDEX <index name>
ON <table name>(<column>name>[,<column name>]..);
เช่น CREATE UNIQUE INDEX CLIENTGROUP ON CUSTOMERSTAB(SALENO);
จากคาํสั่ง “UNIQUE” เป็นการระบุว่าดัชนี( index) ที่สร้างขึ้นในคอลัมน์ CLIENTGROUP ซึ่งในคอลัมน์นี้จะมีค่าที่ซํา้กนัไม่ได้ และจะใช้คอลัมน์ SALENO เป็นข้อมูลในการค้นหา ผลของคาํสั่งตารางลูกค้าจะมี CLIENTGROUP เป็นดัชนี( index) ในการค้นหาข้อมูล โดยเรียงลาํดบัตามข้อมูลในคอลัมน์ SALENO ของตารางลูกค้า index คอลัมน์CLIENTGROUP ที่สร้างขึ้นนี้จะไม่ถูกเกบ็ไว้ในตารางลูกค้า แต่จะถูกเกบ็ไว้แยกต่างหากในหน่วยความจาํของเครื่องคอมพิวเตอร์
ภาษาสาํหรบัการจดัการขอ้มูล (Data Manipulation Language : DML) การบันทกึข้อมูล -- INSERT
การปรับปรงุข้อมูล -- UPDATE
การลบข้อมูล -- DELETE
การเรียกข้อมูล -- SELECT
การบนัทกึขอ้มูล
รปูแบบ
INSERT INTO <tablename>[(column 1, column 2,…)]VALUE(<value1,value2, …>);
เช่น
ต้องการใส่ข้อมูลทุกคอลัมน์
INSERT INTO SALESTABVALUES( 1001, “Chaiwat”, “Bangkok”,0.12);
การใส่ข้อมูลบางคอลัมน์
INSERT INTO CUSTOMERSTAB(ADDRESS,CUSNAME,CUSNO)VALUES( 'Bangkok','Arlee', 2001);
ค่าที่ระบุใน VALUES จะถูกจัดเกบ็เรียงลาํดับตามคอลัมน์ที่ระบุ เช่น Bangkok จะถูกจัดเกบ็ใน ADDRESS ดังนั้นจะต้องระบุตาํแหน่งการจัดเกบ็ให้ถูกต้อง
การปรบัปรุงขอ้มูล รปูแบบ
UPDATE <table name> SET <column 1>[, column 2,…] = <expression |sunquery>[WHERE<condition>];
เช่น
UPDATE CUSTOMERSTAB SET RATING = 200
WHERE SALENO = 1001;
คือการเปลี่ยนค่า RATING เป็น 200 ที่ตาราง CUSTOMERSTAB สาํหรับ SALENO ที่มีค่า 1001
หากใช้
UPDATE CUSTOMERSTABSET RATING = 200;
จะหมายถงึ ให้เปลี่ยน RATING เป็น 200 ในทุกๆแถวของตาราง CUSTOMERSTAB
การลบขอ้มูล รูปแบบ
DELETE FROM <table name>[WHERE<condition>];
เช่น
DELETE FROM SALESTABWHERE SALENO = 1003;แถวที่มี SALENO=1003 จะถูกลบออกไป
DELETE FROM SALESTAB;จะเป็นลบข้อมูลทุกแถวในตาราง SALESTAB
การเรยีกดูขอ้มูล การเรียกดูทุกคอลัมน์ในตาราง
SELECT *FROM <table name>;เช่น select * from checks;
การเรียกดูบางคอลัมน์SELECT <column 1, column 2,…>
FROM <table name>; เช่น
SELECT CHECK#, amount from checks;