รู้จักกับภาษา SQL ?
SQL หรือ Structured Query Language
เป็นภาษาที่ใช้ในการติดต่อกับฐานข้อมูลหรือพูดอีกอย่างก็คือ เป็นภาษาที่ใช้ในการสั่งให้ฐานฐานข้อมูลกระทำการใด ๆ ตามคำสั่งที่เราสั่ง ซึ่งในการติดต่อฐานข้อมูลนั้น ไม่ว่าจะเป็น SQL Server , Microsoft Access , MySQL ,DB2 หรือแม้แต่ Oracle ก็จะต้องใช้คำสั่งภาษา SQL ในการควบคุมทั้งสิ้น และเราจะมาเรียนรู้ถึงคำสั่งพื้นฐาน ของ SQL ที่จำเป็นกัน
แต่ก่อนอื่นต้องทราบศัพท์ที่ใช้เรียกในตารางฐานข้อมูลก่อนนะค่ะ สำหรับใครที่ยังไม่รู้จักคำว่า ฟิลด์(Field) และ เรคคอร์ด(Record) ไม่อธิบายมากนะเอาเป็นว่าดูตามรูปก็แล้วกัน
ส่วนตารางข้างล่างคือฐานข้อมูลที่จะยกตัวอย่าง เพื่อความเข้าใจที่ง่ายยิ่งขึ้นซึ่งมีค่าตามนี้นะค่ะ
ID |
Name |
LastName |
Address |
City |
Gender |
Age |
Year |
1 |
Supap |
Wanawan |
69/34 M.4 Soi.3 |
Samutprakran |
Male |
18 |
1990 |
2 |
Sumalee |
Muangjan |
69/34 M.4 Soi.3 |
Samutprakran |
Female |
40 |
1968 |
3 |
Jame |
Osbon |
|
Banglumpoo |
Male |
20 |
1992 |
4 |
Ola |
Hansen |
Timoteivn 10 |
Sandnes |
Male |
20 |
1992 |
5 |
Kari |
Pettersen |
Storgt 20 |
|
Female |
30 |
1978 |
6 |
Naomi |
Seea |
446 Bunland |
StellSon |
Female |
19 |
1989 |
7 |
Hatari |
mee |
|
Sandnes |
Male |
24 |
1984 |
โดยส่วนใหญ่แล้วการใช้คำสั่ง SQL เพื่อติดต่อฐานข้อมูลนั้น จะใช้โดยหลักคือ 3 กรณี
1. การเรียกดู
2. การแก้ไข ลบ, เพิ่ม, เปลี่ยนแปลง
3. การสร้างขึ้นใหม่
ซึ่งในส่วนนี้ผมจะสอนเพียงคำสั่ง SQL ที่ใช้ในการติดต่อฐานข้อมูลที่เป็น MS Access และ MySQL เท่านั้นซึ่งเหมาะสำหรับผู้ที่เขียน asp และ php
ประเภทของคีย์
1. คีย์หลัก (Primary Key)
เป็นคอลัมน์ที่มีคุณสมบัติของข้อมูลที่เก็บเป็นค่าเฉพาะไม่ซ้ำซ้อนกัน คุณสมบัติดังกล่าวจะสามารถระบุว่าข้อมูลนั้นเป็นข้อมูลของแถวใด เช่น รหัสของนักศึกษา เลขที่ 450021 สามารถระบุว่าเป็นรหัสของศึกษาชื่อ สมชาย เป็นต้น
อย่างไรก็ตาม ในตารางหนึ่ง ๆ อาจจะมีคอลัมน์ที่มีคุณสมบัติเป็นคีย์หลักได้มากกว่าหนึ่งคอลัมน์ คอลัมน์เหล่านี้มีคุณสมบัติเป็นคีย์คู่แข่ง (Candidate Key)
คุณสมบัติของคอลัมน์ที่เป็นคีย์หลัก จะต้องไม่มีค่าของคอลัมน์ในแถวต่าง ๆ ซ้ำกัน เช่น ถ้ารหัสนักศึกษาเป็นคีย์หลัก ค่าของรหัสศึกษาแต่ละคนจะต้องมีค่าที่ไม่ซ้ำกัน เป็นต้น
2. คีย์นอก (Foreign Key)
เป็นคอลัมน์ในตารางหนึ่งที่สามารถใช้ในการเชื่อมโยงข้อมูลกับอีกตารางหนึ่งที่มีคอลัมน์เดียวกันนี้ปรากฏอยู่ ตัวอย่างเช่น ตาราง Studens มีคอลัมน์ StudentID เป็นคีย์นอกที่ใช้ในการเชื่อมโยงกับข้อมูลของตาราง Faculty ซึ่งมีคอลัมน์ FacultyID อยู่ สมมุติว่าต้องการดูว่านักศึการหัส 1001 อยู่คณะอะไร จากตาราง Faculty นักศึกษารหัส 1001 มีค่ารหัสคณะเท่ากับ 10 รหัสนี้จะตรวจสอบกับรหัสคณะ (FacultyID) ในตาราง Faculty ก็จะทราบได้ว่านักศึกษาคนดังกล่าวอยู่คุณ รัฐศาสตร์ เป็นต้น
การสร้างดัชนี
การสร้างดัชนี(Index)เป็นการจัดเรียงค่าของคอลัมน์ใดคอลัมน์หนึ่งที่ถูกกำหนดให้เป็นดัชนี วัตถุประสงค์ของการสร้างดัชนี เพื่อให้การค้นหาข้อมูลทำได้รวดเร็วยิ่งขึ้น เมื่อเปรียบเทียบกับข้อมูลที่บันทึกอยู่ในตารางที่ไม่มีการจัดเรียง การค้นหาข้อมูลจะทำได้ช้ากว่า เพราะจะต้องค้นหาข้อมูลทีละแถว จนกว่าจะพบแถวที่ต้องการ ทั้งนี้เพราะเมื่อมีการสร้างดัชนีโดยใช้คอลัมน์ใดคอลัมน์หนึ่ง ค่าของคอลัมน์นั้น ๆ จะถูกจัดเรียงและเก็บไว้ในหน่วยความจำ ทำให้การค้นหาสามารถค้นหาโดยตรงกับข้อมูลแถวที่ต้องการได้เลย หลักเกณฑ์ในการสร้างดัชนี 1. การสร้างดัชนีให้กับตารางใด ควรจะเป็นตารางที่มีข้อมูลมากพอสมควร ทั้งนี้ เพราะการสร้างดัชนี เป็นการเพิ่มประสิทธิภาพในการค้นหาข้อมูลให้เร็วยิ่งขึ้น 2. การกำหนดคอลัมน์ เพื่อใช้ในการสร้างดัชนี อาจจะได้มากกว่าหนึ่งคอลัมน์ แต่ก็ไม่ควรมากเกินไป เช่น มากกว่าสามคอลัมน์ เป็นต้น ทั้งนี้เพราะการสร้างดัชนีจะกินเนื้อที่ในหน่วยความจำ และทำให้การปรับปรุงข้อมูลของตารางนั้น ๆ ใช้เวลามากขึ้นทีเดียว 3. คอลัมน์ที่จะสร้างเป็นดัชนีจะต้องเป็นคอลัมน์ที่มีค่าเฉพาะ (Unique) คอลัมน์ที่มักถูกใช้งานในลักษณะการคำนวณหรือนิพจน์ เช่น SALARY*1.5 ฯลฯ ไม่ควรจะนำไปใช้เป็นตัวสร้างดัชนีให้กับตาราง คำสั่งที่ใช้ในการสร้างดัชนี คำสั่งที่ใช้ในการสร้างดัชนี คือ CREATE INDEX รูปแบบของคำสั่ง คือ รูปแบบ CREATE INDEX< index name > ON< table name >(< column name >[,< column name >]..); ตัวอย่างที่ 1 ให้สร้างดัชนีชื่อ EMPNONDX โดยใช้คอลัมน์รหัสพนักงานในการจัดเรียง คำสั่งที่ใช้คือ CREATE INDEX EMPNONDX ON EMPLOYEE (EMPNUMX). การลบดัชนี คำสั่งที่ใช้ในการลบดัชนี คือ DROP INDEX รูปแบบของคำสั่งคือ รูปแบบ DROP INDEX< index name >; |
คำสั่งที่ใช้ในการลบตาราง คือ รูปแบบ DROP TABLE < table name >; คำสั่งนี้จะลบข้อมูลในตารางออกหมด คำสั่งนี้ควรจะใช้อย่างระมัดระวัง ผู้ที่จะใช้คำสั่งนี้ควรจะเป็นผู้ที่มีอำนาจในการสร้างตาราง หรือผู้จัดการฐานข้อมูลเท่านั้น |
คำสั่งที่ใช้ลบข้อมูลในแต่ละแถวของตาราง คือ DELETE คำสั่งนี้มีรูปแบบดังนี้ คือ รูปแบบ DELETE FROM < table name > [ WHERE < condition > ] ตัวอย่างที่ 1 ให้เลิกจ้างและลบข้อมูลของพนักงานสังกัดแผนกที่มีรหัส 50 คำสั่งที่ใช้ คือ DELETE FROM EMPLOYEE WHERE DEPNO = ‘50’ ข้อควรจำ คำสั่ง DELETE นี้ หากไม่ได้ระบุเงื่อนไข [ WHERE CONDITION ] ข้อมูลทั้งหมดในตารางจะถูกลบออกหมด เหลือไว้เพียงโครงสร้างของข้อมูลเท่านั้น เช่น DELETE FROM EMPLOYEE ข้อมูลในตารางนี้จะหายไปทั้งหมด |
ประเภทของตารางอาจจำแนกออกเป็นหลายประเภท ประเภทของตารางที่จะกล่าวถึงในที่นี้จะเป็นตารางที่มักจะกล่าวถึงในระบบจัดการฐานข้อมูลทั่ว ๆ ไป ดังนี้คือ
1. ตารางหลัก (Base Table) เป็นตารางหลักที่ถูกกำหนดขึ้นเพื่อกำหนดโครงสร้างและเก็บข้อมูลเพื่อนำข้อมูลไปใช้ เมื่อมีการสร้างตารางโดยใช้ภาษาสำหรับนิยามข้อมูล (DDL) เช่นใน SQL คำสั่ง CREATE TABLE เป็นการสร้างตารางหลักเพื่อกำหนดโครงสร้างและเก็บข้อมูล
2. ตารางสมมุติ (Virtual Table) เป็นตารางที่ถูกสร้างขึ้นตามความต้องการใช้ข้อมูลของผู้ใช้แต่ละคนในฐานข้อมูลอาจต้องการใช้ข้อมูลในลักษณะที่แตกต่างกัน จึงทำการกำหนดวิวของตนเองจากตารางหลักขึ้นมาต่างหาก เพื่อความสะดวกในการใช้ข้อมูลและช่วยให้การรักษาความปลอดภัยของฐานข้อมูลทำได้ง่ายขึ้น ตารางที่ถูกสมมุตินี้จะไม่มีการเก็บข้อมูลจริง ๆ ในระบบ ซึ่งจะแตกต่างจากตารางหลักที่มีการเก็บข้อมูลจริง ๆ
เมื่อมีการกำหนดโครงสร้างของตารางนั้น หากต้องการเพิ่มเติมคอลัมน์ในตาราง หรือการเพิ่มข้อจำกัดต่าง ๆ ให้กับคอลัมน์ คำสั่งที่ใช้คือ ALTER TABLE คำสั่งนี้ไม่สามารถใช้ลบคอลัมน์หรือเปลี่ยนแปล่งประเภทหรือความกว้างของข้อมูล คำสั่งนี้มีรูปแบบดังนี้คือ รูปแบบ ตัวอย่างที่ 7 ต้องการเพิ่มคอลัมน์ MGRNO ในตาราง EMPLOYEE โดยให้เก็บข้อมูลประเภท CHAR มีความกว้าง 4 คำสั่งที่ใช้ คือ ALTER TABLE EMPLOYEE ADD(MGRNO CHAR(4)); ตัวอย่างที่ 8 ต้องการเพิ่มข้อจำกัดของคอลัมน์ SALARY ในตาราง EMPLOYEEโดยให้มีการตรวจสอบข้อมูลของเงินเดือนว่าห้ามเกิน 500000 คำสั่งที่ใช้ คือ ALTER TABLE EMPLOYEE ADD (CHECK (SALARY<=500000)); |
ก. ข้อมูลในแต่ละแถวจะไม่ซ้ำกัน
ข้อมูลที่จัดเก็บในแต่ละแถวจะไม่มีข้อมูลซ้ำกัน โดยทั่วไประบบจัดการฐานข้อมูลจะมีกลไกที่ใช้ในการควบคุมไม่ให้มีความซ้ำซ้อนเกิดขึ้น
ข. การเรียงลำดับของคอลัมน์จะเรียงลำดับก่อนหลังอย่างไรก็ได้
การเรียงลำดับของคอลัมน์แต่ละคอลัมน์จะเรียงลำดับก่อนหลังอย่างไรก็ได้ ไม่มีการระบุว่าคอลัมน์ซ้ายสุด คือ คอลัมน์แรก หรือคอลัมน์ขวาสุด คือ คอลัมน์สุดท้าย
ค. การเรียบลำดับของข้อมูลในแต่ละแถวไม่เป็นสาระสำคัญ
การจัดเก็บของข้อมูลในรีเลชั่น จะถูกจัดเรียงตามลำดับลงบนสื่อที่เก็บข้อมูล การจัดเก็บข้อมูลในตารางสามารถแสดงให้เป็นไปตามที่ผู้ใช้ต้องการ (Logical Level)นอกเหนือจากที่แสดงตามที่ถูกจัดเก็บจริง (Physical Level)
ง. ค่าของข้อมูลในแต่ละคอลัมน์ จะบรรจุข้อมูลได้เพียงค่าเดียว
ค่าของข้อมูลในแต่ละคอลัมน์ จะบรรจุข้อมูลได้เพียงค่าเดียวไม่ใช่กลุ่มของข้อมูลที่แสดงค่าที่มากกว่าหนึ่ง
การปรับปรุงข้อมูลอาจจะเป็นการเปลี่ยนค่าของคอลัมน์หรือข้อมูลของแถวใดแถวหนึ่ง คำสั่งที่ใช้ในการปรับปรุงข้อมูลคือ UPDATE คำสั่งนี้มีรูปแบบดังนี้คือ รูปแบบ UPDATE< table name > SET < column1 >,< column2 > = < expression lsubquery > [ WHERE < condition > ]; ตัวอย่างที่ 1 สมมุติให้ปรับค่าเงินเดือนของพนักงานจากตาราง EMPLOYEE ให้เพิ่มขึ้นอีก 50% คำสั่งที่ใช้คือ UPDATE EMPLOYEE SET SALARY = SALARY* 1.5 ตัวอย่างที่ 2 สมมุติให้แผนกที่มีรหัส 20 มีการปรับเงินเดือนเพิ่มขึ้น 20% คำสั่งที่ใช้คือ UPDATE EMPLOYEE SET SALARY = SALARY* 1.2 WHERE DEPNO = ‘20’ |
การบันทึกข้อมูลลงในตารางใดตารางหนึ่ง อาจทำได้โดยป้อนข้อมูลใหม่ หรือการคัดลอกข้อมูล(COPY)จากตารางหนึ่งไปยังอีกตารางหนึ่ง โดยคำสั่งที่ใช้เป็นดังนี้ คือ ก. การป้อนข้อมูลใหม่ คำสั่งที่ใช้ในการป้อนข้อมูลคือ INSERT คำสั่งนี้มีรูปแบบ ดังนี้ คือ รูปแบบ INSERT INTO< table name >[(column 1, column 2,…)] VALUES(< value1, value2,…. >); การป้อนข้อมูลด้วยคำสั่ง INSERT นี้ อาจไม่จำเป็นต้องระบุชื่อคอลัมน์ที่กำหนดไว้เป็นโครงสร้างของตาราง แต่ค่าของข้อมูล(value) จะต้องระบุค่าเรียงตามลำดับคอลัมน์ที่กำหนดไว้ในโครงสร้างนั้น ๆ นอกจากนี้ ค่าของข้อมูลประเภท CHARACTER หรือ DATEจะต้องมีเครื่องหมาย’ ‘ กำกับ คำสั่งที่ใช้คือ INSERT INTO EMPLOYEE VALUES(‘1001’,SIRIWAN’,’06/13/93’,9000’,CLERK’,’10’,’1002’); INSERT INTO EMPLOYEE VALUES(‘1002’,’JINTANA’,’10/31/93’,30000’,CONTROLLER’,’10’,’1003’); ข. การคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง รูปแบบของคำสั่ง INSERTที่นำข้อมูลจากตารางหนึ่งมาไว้อีกตารางหนึ่ง จะแตกต่างจากกรณีที่เริ่มป้อนข้อมูลใหม่ลงในตาราง รูปแบบของคำสั่ง INSERT ในกรณีนี้ เป็นดังนี้ คือ รูปแบบ INSERT INTO table name [< column1, column2,…. >] SELECT Statement; ชื่อตาราง(table name)ในคำสั่ง SELECT นี้คือ ชื่อตารางที่ถูกสร้างขึ้นมาแล้วด้วยคำสั่ง CREATE TABLE สำหรับข้อมูลที่นำมาจากตารางอื่น จะต้องมีค่าของข้อมูลในคอลัมน์ และชนิดของข้อมูลตรงกัน |
กฎที่ใช้กับฐานข้อมูลเชิงสัมพันธ์
1. กฎความบูรณภาพของเอนทิตี้ (The Entity Integrity Rule)
กฎนี้ระบุไว้ว่า คอลัมน์ใดที่จะเป็นคีย์หลัก ข้อมูลในคอลัมน์นั้นจะเป็นค่าว่าง (Null) ไม่ได้ ความหมายของการเป็นค่าว่างไม่ได้ (Not Null) คือ ข้อมูลของคอลัมน์ที่เป็นคีย์หลักจะไม่มีค่าไม่ได้
2. กฎความบูรณภาพของการอ้างอิง (The Referential Integrity Rule)
การอ้างอิงข้อมูลระหว่างตารางในฐานข้อมูลเชิงสัมพันธ์จะใช้คีย์หลักของตารางในฐานข้อมูลเชิงสัมพันธ์ไปตรวจสอบกับค่าของคอลัมน์ที่เป็นคีย์นอกของอีกตารางหนึ่ง กล่าวอีกนัยหนึ่งคือค่าของคีย์นอกจะต้องสามารถอ้างอิงให้ตรงกับค่าของคีย์หลักได้จึงจะเชื่อมโยงหรืออ้างอิงข้อมูลรหว่างสองตารางได้
สำหรับคีย์นอกจะมีค่าว่างได้ (Null) หรือไม่ขึ้นอยู่กับกฎเกณฑ์การออกแบบฐานข้อมูลว่า ข้อจำกัดในการออกแบบข้อมูลตามนโยบายของงานนั้น ๆ เป็นอย่างไร
การสร้างตาราง
คำสั่งที่ใช้ในการกำหนดโครงสร้างของตาราง คือ คำสั่ง CREATE TABLE ซึ่งเป็นคำสั่งที่ใช้ในการกำหนดโครงสร้างของตารางหลัก (Base Table) ที่มีข้อมูลบรรจุอยู่ รูปแบบของคำสั่งที่ใช้เป็นดังนี้ คือ
รูปแบบ
CREATE BABLE < table name >
( [ [constraint]
[, data type> [} [constraint],
……………..]);
ตัวอย่าง
CREATE TABLE EMPLOYEE
EMPNUM CHAR (4),
EMPNAME CHAR (15),
HIREDATE DATE,
DALARY NUMERIC (6),
POSTTION CHAR (10),
DEPNO CHAR (2));
CREATE TABLE DEP
(DEPNO CHAR (2),
DEPNAME CHAR (15),
LOCATION CHAR (15));
CREATE TABLE หมายถึง คำสั่ง SQLที่ใช้เมื่อต้องการสร้างตารางหลัก
Table name หมายถึง ชื่อของตารางหลักที่ต้องการสร้าง
Column name หมายถึง ชื่อของคอลัมน์ที่เป็นรายละเอียดของตารางโดยชื่อคอลัมน์ต่าง ๆ จะมีเครื่องหมาย , คั่นกลาง
Data type หมายถึง ประเภทของข้อมูลที่แต่ละคอลัมน์บรรจุข้อมูลไว้ ประเภทของข้อมูลที่ใช้ใน SQL จะแตกต่างกันบ้างขึ้นอยู่กับระบบจัดการฐานข้อมูล (DBMS) แต่ละประเภทว่าได้กำหนดประเภทของข้อมูลไว้อย่างไรบ้าง ซึ่งสามารถศึกษาถึงประเภทของข้อมูลได้ในหัวข้อต่อไป
การกำหนดโครงสร้างของตาราง
วัตถุประสงค์หนึ่งของการระบุข้อจำกัดก็เพื่อเป็นการควบคุมความบูรณภาพหรือความเชื่อถือได้ของข้อมูล หรือเพื่อการอ้างอิงกันของข้อมูลระหว่างตาราง ข้อจำกัดดังกล่าว มีดังต่อไปนี้ คือ
ก. การกำหนดไม่ให้คอลัมน์ใดคอลัมน์หนึ่งมีค่าว่า(NOT NULL)
การกำหนดข้อมูลของคอลัมน์ใดคอลัมน์หนึ่งว่าจะมีค่าว่างไม่ได้ โดยใช้คำว่า NOT NULL เช่น คอลัมน์ที่เป็นคีย์หลัก(Primary Key) ถูกระบุให้เป็น NOT NULL ในคอลัมน์นั้น ๆ เสมอ โดยทั่วไป NULL มักจะเป็นค่าโดยปริยาย(DEFAULT) นั่นคือคอลัมน์ใดที่สามารถมีค่าว่างได้ ก็ไม่จำเป็นต้องระบุว่า NULL
ตัวอย่างที่ 2 สมมุติให้สร้างตาราง EMPLOYEE โดยกำหนดให้คอลัมน์ EMPNUM จะมีค่าว่างไม่ได้
คำสั่งที่ใช้คือ
CREATE TABLE EMPLOYEE
(EMPNUM CHAR(4) NOT NULL,
EMPNAME CHAR(15),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2),
ข. การกำหนดไม่ให้มีค่าซ้ำซ้อนกัน (UNIQUE)
การกำหนดข้อมูลของคอลัมน์ใดคอลัมน์หนึ่งไม่ให้มีค่าซ้ำกัน โดยใช้คำว่า UNIQUE เช่น EMPNUM เป็นคอลัมน์รหัสพนักงานที่เป็นคีย์หลัก และไม่ต้องการให้มีค่าซ้ำ จะใช้คำว่า UNIQUE เป็นการระบุข้อจำกัดนี้
ตัวอย่างที่ 3 สมมุตให้สร้างตาราง EMPLOYEE โดยกำหนดให้คอลัมน์ EMPNUM จะมีค่าว่างไม่ได้และมีค่าเฉพาะที่ไม่ซ้ำกัน
คำสั่งที่ใช้คือ
CREATE TABLE EMPLOYEE
(EMPNUM CHAR (4)UNIQUE NOT NULL,
EMPNAME CHAR(15),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2));
ค. การกำหนดคีย์หลัก(Primary Key)
การกำหนดให้คอลัมน์ใดคอลัมน์หนึ่งเป็นคีย์หลัก สามารถกำหนดให้เป็นข้อจำกัดของคอลัมน์หรือข้อจำกัดของตาราง การกำหนดให้เป็นข้อจำกัดของคอลัมน์จะใช้คำว่า PRIMARY KEY ในการระบุต่อท้ายคอลัมน์นั้น ๆ ส่วนการกำหนดคีย์หลักเป็นข้อจำกัดของตาราง จะกำหนดไว้ตอนท้ายของคำสั่ง CREATE TABLE ด้วย คำว่า PRIMARY KEY ตามด้วยชื่อคอลัมน์ที่เป็นคีย์หลัก ในกรณีที่มีคีย์หลักมากกว่าหนึ่งคอลัมน์จะมีเครื่องหมาย , คั่นไว้ ในการระบุให้เป็นคีย์หลัก
ตัวอย่างที่ 4 สมมุติให้สร้างตาราง EMPLOYEEให้กำหนดให้คอลัมน์ EMPNUM เป็นคีย์หลัก
คำสั่งที่ใช้ในการกำหนดคีย์หลักเป็นข้อจำกัดของตาราง คือ
CREATE TABLE EMPLOYEE
(EMPNUM CHAR(4),
EMPNAME CHAR(15),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2),
PRIMARY KEY (EMPNUM CREATE TABLE EMPLOYEE
(CMPNUM CHAR(4),
EMPNAME CHAR(15),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2),
หรือกำหนดคีย์หลักเป็นข้อจำกัดของคอลัมน์ คำสั่งที่ใช้คือ
CREATE TABLE EMPLOYEE
(EMPNUM CHAR(4) PRIMARY KEY,
EMPNAME CHAR(15),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2));
ง. การกำหนดคีย์นอก(Foreign Key)
เป็นที่ทราบกันดีแล้วว่า คีย์นอก เป็นคอลัมน์ของตารางหนึ่งที่ใช้เชื่อมโยงหรืออ้างอิงข้อมูลกับอีกตารางหนึ่งที่มีคอลัมน์เดียวกันี้อยู่ ในการระบุให้คอลัมน์ใดเป็นคีย์นอกสามารถระบุเป็นข้อจำกัดของตารางโดยระบุในตอนท้ายของตาราง หรือโดยการกำหนดคีย์นอกเป็นข้อจำกัดของคอลัมน์
การกำหนดคีย์นอกเป็นข้อจำกัดของตารางมีรูปแบบดังนี้
CREATE TABLE….
:
:
FOREIGN KEY < column name >REFERENCES
[< column list >]
หากกำหนดคีย์นอกเป็นข้อจำกัดของคอลัมน์จะใช้คำว่า REFERENCES ต่อท้าย
ประเภทและขนาดของคอลัมน์ที่เป็นคีย์นอก
Column name < data type >< size >REFERENCES< primary key table>
[< column list >]
ตัวอย่างที่ 5 สมมุติให้สร้างตาราง EMPLOYEE โดยกำหนดให้คอลัมน์ EMPNUM เป็นคีย์หลัก รวมถึงกำหนดให้คอลัมน์ เป็นคีย์นอกที่อ้างอิงไปถึงคอลัมน์ DEPNOของตาราง DEP
คำสั่งที่ใช้ในการกำหนดคีย์หลักและคีย์นอกในระดับตาราง คือ
CREATE TABLE EMPLYEE
(EMPNUM CHAR(4),
EMPNAME CHAR(4),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2),
PRIMARY KEY EMPNUM,
FEREIGN KEY DEPNO REFERENCES DEP (DEPNO));
หรือกำหนดคีย์หลักและคีย์นกในระดับคอลัมน์ คำสั่งที่ใช้คือ
CREATE TABLE EMPLYEE
(EMPNUM CHAR(4) PRIMARY KEY,
EMPNAME CHAR(15),
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2), REFERENCES DEP (DEPNO));
จ. การกำหนดการตรวจสอบ(CHECK)
การตรวจสอบความถูกต้องของข้อมูล โดยการระบุเงื่อนไขหรือกำหนดค่าเฉพาะของคอลัมน์ใดคอลัมน์หนึ่งขึ้น หากมีการป้อนข้อมูลที่ผิดจากเงื่อนไขที่ระบุไว้ ค่านั้นก็จะถูกปฏิเสธหรือไม่ยอมรับ โดยการตรวจสอบจะใช้คำสั่ง CHECK <เงื่อนไข>ต่อท้ายชนิดและขนาดของข้อมูลคอลัมน์นั้น ๆ
ตัวอย่างที่ 6 ต้องการตรวจสอบค่าของคอลัมน์ EMPNAME ว่าข้อมูลที่ป้อนเข้ามาเป็นตัวพิมพ์ใหญ่ หรือไม่
คำสั่งที่ใช้ คือ
CREATE TABLE EMPLYEE
(EMPNUM CHAR(4) PRIMARY KEY,
EMPNAME CHAR(15), CHECK
(EMPNAME=UPPER(EMPNAME));
HIREDATE DATE,
SALARY NUMERIC(6),
POSITION CHAR(10),
DEPNO CHAR(2), REFERENCES DEP
(DEPNO));
ODBC DSN Connections
การใช้งาน ODBC DSN (Data Source Name) นั้นมีอยู่สองขั้นตอนดังนี้ 1) ขั้นแรกคุณต้องสร้าง DSN ที่ "ODBC Data Source Administrator" ซึ่งจะอยู่ใน Control Panel (หรือ Administrative Tools menu ถ้าคุณใช้ Windows 2000) และต้องดูให้แน่ใจว่า คุณเลือกที่ Tab SYSTEM DSN (ไม่ใช่ที่ USER DSN). 2) จากนั้นก็ใช้ connection string ตามตัวอย่างข้างล่างนี้ กับ DSN name ที่คุณสร้างไว้ข้างต้น ODBC - DSN oConn.Open "DSN=AdvWorks;" & _ "Uid=Admin;" & _ "Pwd=; คุณสามารถ create และใช้งาน File DSN. โดยใช้ ADO Connection string ตามตัวอย่างข้างล่างนี้ก็ได้ ODBC - File DSN oConn.Open "FILEDSN=c:\somepath\mydb.dsn;" & _ "Uid=Admin;" & _ "Pwd=;" ข้อมูลเพิ่มเติม เกี่ยวกับ ODBC data sources และ วิธีการใช้งาน File DSNs และ DSN-less Connections หมายเหตุ : ปัญหาเกี่ยวกับ DSN นั้นผู้ใช้สามารถที่จะแก้ไขหรือลบได้ถ้าเกิดการผิดพลาด... แต่ทางที่ดีควรจะใช้การ Connection แบบ DSN-Less หรือ OLE DB Provider จะดีกว่าเพราะสะดวกกว่า |
ฐานข้อมูลเชิงสัมพันธ์
ฐานข้อมูลเชิงสัมพันธ์เป็นฐานข้อมูลที่มีการจัดเก็บข้อมูลเป็นแถว และคอลัมน์ในลักษณะตารางสองมิติ โดยที่คอลัมน์หรือแเอททริบิวต์ในตารางต่าง ๆ ได้มีการออกแบบและผ่านการทำให้เป็นบรรทัดฐาน(Normalized) ทั้งนี้เพื่อลดความซ้ำซ้อน ความผิดพลาดที่เกิดจากการเพิ่ม ลบ หรือปรับปรุงข้อมูล และทำให้การจัดการฐานข้อมูลเป็นไปอย่างมีประสิทธิภาพ
ฐานข้อมูลที่ถูกต้องนั้นจะต้องไม่มีข้อมูลซ้ำซ้อน เพราะจะทำให้เสียพื้นที่ในการจัดเก็บและยากต่อการตรวจสอบค้นหาและแก้ไข ประโยชน์ของฐานข้อมูลที่ได้รับการออกแบบมาอย่างดีอีกอย่างก็คือ ทำให้สามารถมองเห็นภาพรวมของระบบการทำงานทั้งหมดได้ ซึ่งจะช่วยทำให้เกิดมองเห็นแนวทางการพัฒนาและปรับปรุงระบบงานนั้นๆ ได้ดียิ่งขึ้น
ประโยชน์ของ SQL
SQL เป็นภาษาเกี่ยวกับการจัดการฐานข้อมูล ไม่ว่าจะเป็นในเรื่องของการนิยามข้อมูล การเรียกใช้ หรือการควบคุม การใช้คำสั่งเหล่านี้ที่มีในระบบจัดการฐานข้อมูล (Database Management System : DBMS) เช่น ACCESS dBaseIV ORACLE, DB2 ฯลฯ จะช่วยประหยัดเวลาในการพัฒนาระบบงาน หรือนำไปใช้ในส่วนของการสร้างฟอร์ม (FROM) การทำรายงาน (REPORT) ของระบบงานต่าง ๆ ได้รวดเร็วยิ่งขึ้น
ประโยชน์ของภาษา SQL อีกประการก็คือ โปรแกรมระบบฐานข้อมูลส่วนใหญ่สนับสนุนภาษา SQL แทบทั้งสิ้น ดังนั้นถ้าเข้าใจภาษา SQL เท่ากับว่าคุณจะเขียนโปรแกรมติดต่อกับฐานข้อมูลอะไรก็ไม่ใช่เรื่องยากเลย...
ความรู้เกี่ยวกับ SQL
SQL ย่อมาจาก Structured Query Language เป็นภาษาที่ใช้ในการจัดการข้อมูลของฐานข้อมูลเชิงสัมพันธ์ ผู้คิดค้น SQL เป็นรายแรกคือ บริษัทไอบีเอ็ม หลังจากนั้นมาผู้ผลิตซอฟท์แวร์ด้านระบบจัดการฐานข้อมูลเชิงสัมพันธ์ได้พัฒนาระบบที่สนับสนุน SQL มากขึ้น จนเป็นที่นิยมใช้กันอย่างแพร่หลายในปัจจุบัน โดยผู้ผลิตแต่ละรายก็พยายามที่จะพัฒนาระบบจัดการฐานข้อมูลของตนให้มีลักษณะเด่นเฉพาะขึ้นมา ทำให้รูปแบบการใช้คำสั่ง SQL มีรูปแบบที่แตกต่างกันไปบ้าง เช่น ORACLE ACCESS SQL ของ Base Sybase INGRES หรือ SQL Server ของ Microsoft เป็นต้น ในขณะที่ American National Standards Institute (ANSI) ได้กำหนดรูปแบบมาตรฐานของ SQL ขึ้น ซึ่งเป็นมาตรฐานของคำสั่ง SQL ตาม ANSI-86 ที่ใช้เป็นมาตรฐานขั้นต่ำในการอ้างอิง อย่างก็ตามรูปแบบมาตรฐาน SQL ตาม ANSI-86 ก็มีข้อจำกัดในการใช้คำสั่ง SQL เช่นกันเมื่อเปรียบเทียบกับ SQL ของระบบจัดการฐานข้อมูล ที่ผู้ผลิตบางรายได้ทำการปรับปรุงและพัฒนาให้เป็นประโยชน์และง่ายสำหรับผู้ใช้อยู่ตลอดเวลา
ต่อมาในปี 1992 ANSI ได้ทำการทบทวน และปรับปรุงมาตรฐานของ SQL/2 และเป็นที่ยอมรับของISO (International Organization ) SQL/2 มีรายละเอียดเพิ่มขึ้น เช่น
- เพิ่มประเภทของข้อมูลที่มีจากเดิม
- สนับสนุนการใช้กลุ่มตัวอักษร
- มีความสามารถในการให้สิทธิ์เพิ่มขึ้น(Privilege)
- สนับสนุนการ SQL ใช้ แบบ Dynamic
- เพิ่มมาตรฐานในการใช้ Embedded SQL
- มีโอเปอเรเตอร์เชิงสัมพันธ์เพิ่มขึ้น ฯลฯ
ในขณะที่เขียนตำรานี้ ANSI กำลังทบทวนและปรับปรุง SQL อีกครั้ง (SQL/3) จุดประสงค์ของการกำหนดมาตรฐานเพื่อประโยชน์ในการใช้คำสั่งนี้ร่วมกันในระบบที่แตกต่างกันได้
(Application Portability) นอกจากนี้การเรียนรู้การใช้คำสั่ง SQL ตามมาตรฐานที่กำหนดขึ้น เป็นการง่ายที่จะนำไปประยุกต์ใช้หรือเรียนรู้เพิ่มเติมจากคำสั่ง SQL ของผู้ผลิตแต่ละรายได้
ประเภทของคำสั่ง SQL
1. ภาษาสำหรับนิยามข้อมูล (Data Definition Language : DDL) ประกอบด้วยคำสั่งที่ใช้ในการกำหนดโครงสร้างข้อมูลว่ามีคอลัมน์อะไร แต่ละคอลัมน์เก็บข้อมูลประเภทใด รวมถึงการเพิ่มคอลัมน์ การกำหนดดัชนี การกำหนดวิวของผู้ใช้ เป็นต้น
2. ภาษาสำหรับการจัดการข้อมูล (Data Manipulation Language : DML) ประกอบด้วยคำสั่งที่ใช้ในการเรียกใช้ข้อมูล การเปลี่ยนแปลงข้อมูล การเพิ่มหรือลบข้อมูล เป็นต้น
3. ภาษาที่ใช้ในการควบคุมข้อมูล (Data Control Language : DCL) ประกอบด้วยคำสั่งที่ใช้ในการควบคุม หรือป้องกันการเกิดเหตุการณ์ที่ผู้ใช้หลายคนเรียกใช้ข้อมูลพร้อมกัน โดยที่ข้อมูลนั้น ๆ อยู่ในระหว่างการปรับปรุงแก้ไข ซึ่งเป็นเวลาเดียวกับที่ผู้ใช้อีกคนหนึ่งก็เรียกใช้ข้อมูลนี้ ทำให้ข้อมูลที่ผู้ใช้คนที่สองได้ไปเป็นค่าเก่าที่ไม่ถูกต้อง ทั้งนี้เพราะผู้ใช้คนแรกยังปรับปรุงแก้ไขข้อมูลไม่เสร็จ นอกจากนี้ ยังประกอบด้วยคำสั่งที่เกี่ยวข้องกับการควบคุมความปลอดภัยของข้อมูลด้วยการให้สิทธิ์ผู้ใช้ที่แตกต่างกัน
ประเภทของข้อมูล
ประเภทของข้อมูล |
ความหมาย |
CHAR[ACTER](n) |
เก็บข้อมูลประเภทอักขระหรือสตริง ซึ่งประกอบด้วยตัวอักษร หรือตัวเลขทีไม่ได้ใช้ในการคำนวณ โดยมีความกว้าง n ตามที่ระบุไว้ |
VARCHAR(n) |
เก็บข้อมูลประเภทอักขระหรือสตริงที่มีขนาดไม่คงที่ โดย n คือความกว้างสูงสุดที่ข้อมูลนี้จะเก็บข้อมูลได้ |
NUMERIC(w,d) |
เก็บข้อมูลประเภทตัวเลขที่มีความกว้างเท่ากับ w หลักและมีทศนิยมเท่ากับ d ตำแหน่ง |
INTEGER |
เก็บข้อมูลประเภทตัวเลข จำนวนเต็ม ความกว้างของข้อมูลประเภทนี้ จะแตกต่างกันตาม DMBS แต่ละประเภท เช่น dBase IV เป็นตัวเลขจำนวนเต็ม บวกไม่เกิน 11 หลัก และจำนวนเต็มลบไม่เกิน 10 หลัก นั่นคือจะมีค่าช่วง –9999999999 ถึง 99999999999 |
SMALLINT |
มีความหมายเหมือน INTEGER เพียงแต่จะเก็บตัวเลขจำนวนเต็มที่น้อยกว่า คือ ระหว่าง –99999 ถึง 99999 |
DATE |
เก็บข้อมูลประเภทเดือน วัน ปี |
LOGICAL |
เก็บข้อมูลประเภทตรรก คือ T แทนค่าจริง และ F แทนค่าเท็จ |
FLOAT(x,y) |
เก็บข้อมูลตัวเลขซึ่งเขียนในรูปของ 10 ยกกำลัง |
รูปแบบการใช้คำสั่ง SQL
รูปแบบของการใช้คำสั่ง SQL สามารถใช้ได้เป็น 2 รูปแบบ ดังนี้ คือ
1. คำสั่ง SQL ที่ใช้เรียกดูข้อมูลแบบโต้ตอบ(Interactive SQL) เป็นการใช้คำสั่ง SQL สั่งงานบนจอภาพ เพื่อเรียกดูข้อมูลจากฐานข้อมูลได้โดยตรงในขณะที่ทำงาน
2. คำสั่ง SQL ที่ใช้เขียนร่วมกับโปรแกรมอื่น ๆ (Embedded SQL) เป็นการนำคำสั่ง SQL ไปใช้ร่วมกับชุดคำสั่งงานที่เขียนโดยภาษาต่าง ๆ เช่น COBOL PASCAL PL/1 ฯลฯ