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

คำสั่ง SQL SQL Query


SQL Query

หัวข้อสรุป SQL Query ครอบคลุมรายละเอียดการสร้างประโยคคำสั่ง SELECT ในการประยุกต์ต่างๆ ประโยคคำสั่ง SELECT เป็นแกนการทำงานของภาษา SQL และเหมือนกับคำสั่ง SQL ส่วนใหญ่ ประโยคคำสั่ง SELECT มีตัวเลือกในการเขียนคำสั่ง ซึ่งมีประโยชน์มากเมื่อนำตัวเลือกต่างในการสร้าง SQL query ( ด้วยประโยคคำสั่ง SELECT) รวมทั้งสามารถสร้างชุดคำสั่งได้มีประสิทธิภาพ หรือมากกว่า สรุป

1. SELECT Statement

ประโยคคำสั่ง SELECT ได้รับการนำไปใช้ในการค้นหาข้อมูลในฐานข้อมูล และดึงข้อมูลที่เลือกตรงตามเกณฑ์ที่กำหนด
ประโยคคำสั่ง SELECT มี 5 clause ให้เลือกใช้ แต่มีเฉพาะ FROM เป็น clause บังคับ แต่ละ clause มีตัวเลือก พารามิเตอร์ เป็นต้น ให้เลือก

ไวยากรณ์

ประโยคคำสั่ง SELECT
SELECT [ALL | DISTINCT] column1[,column2]
FROM table1[,table2]
[WHERE conditions ]
[GROUP BY column-list ]
[HAVING conditions ]
[ORDER BY column-list   [ASC | DESC] ];
[ ] ตัวเลือก

ตัวอย่าง

SELECT name, age, salary
FROM employee
WHERE age > 50;
ประโยคคำสั่งนี้จะเลือกค่าทั้งหมดในคอลัมน์ name, age และ salary จาก table “employee ที่ age มีค่ามากกว่า 50
NOTE: ต้องมีเครื่องหมาย semicolon(;) ปิดท้ายประโยค เพื่อชี้ว่าประโยคคำสั่ง SQL จบสมบูรณ์และพร้อมที่จะแปล

เครื่องหมายเปรียบเทียบ (comparison operator)

=เท่ากับ
>มากกว่า
<น้อยกว่า
>=มากกว่า หรือเท่ากับ
<=น้อยกว่า หรือเท่ากับ
<> หรือ !=ไม่เท่ากับ

เครื่องหมายเปรียบเทียบอื่นๆ

LIKEทดสอบเปรียบเทียบข้อความ
NOT LIKEหาค่าที่อยู่นอกเหนือจาก LIKE
NULLทดสอบเปรียบเทียบค่าว่าง
NOT NULLทดสอบเปรียบเทียบค่าที่ไม่ใช่ค่าว่าง

ตัวอย่าง

SELECT name, title, dept
FROM employee
WHERE title LIKE 'Pro%';
ประโยคคำสั่งข้างบนจะเลือก แถว/ค่า ในคอลัมน์ name, title และ dept จาก table “employee” ที่มี title เริ่มต้นด้วย ‘Pro’ ซึ่งจะส่งตำแหน่งงานของ Programmer หรือตำแหน่งอื่นที่ขึ้นต้นด้วย Pro ออกมา

ตัวอย่าง

SELECT name, title, dept
FROM employee
WHERE title = NULL;
ประโยคคำสั่งข้างบนจะเลือก แถว/ค่า ในคอลัมน์ name, title และ dept จาก table “employee” ที่มี title ไม่ใช่ค่าว่าง
ALL และ DISTINCT เป็นคีย์เวิร์ดที่ใช้ในการควบคุมเลือกข้อมูลให้แสดง ทั้งหมด (ALL) หรือเฉพาะเรคคอร์ดแบบไม่ซ้ำ (DISTINCT) ในคิวรี่ ถ้าต้องการดึงเฉพาะเรคคอร์ดในคอลัมน์ที่ระบุแบบไม่ซ้ำให้ใช้คีย์เวิร์ด DISTINCT โดย DISTINCT จะคัดเรคคอร์ดซ้ำออกไปสำหรับคอลัมน์ที่ระบุ หลังจากประโยคคำสั่ง

ตัวอย่าง

SELECT DISTINCT age
FROM employee;
ประโยคคำสั่งนี้ส่งออกค่า age ที่ไม่ซ้ำกันจาก table “employee”]

2. GROUP BY

ไวยากรณ์

GROUP BY clause
SELECT column1, SUM(column2 )
FROM list-of-tables
GROUP BY column-list ;
GROUP BY clause ใช้หาผลรวมของคอลัมน์จากแถวในคอลัมน์ที่ระบุ และทำงานร่วมกับ aggregate function ที่ทำงานกับคอลัมน์ 1 คอลัมน์หรือมากกว่า เพื่อหาผลรวมของกลุ่มของแถวข้อมูล
SELECT max(salary), dept
FROM employee
GROUP BY dept;
ประโยคคำสั่งนี้จะเลือกค่า salary มากที่สุด ในแต่ละฝ่าย

ตัวอย่าง

การจัดกลุ่มภายในคอลัมน์ เช่น table ‘item_order’ มีคอลัมน์ quantity ที่เก็บค่า 1, 2, 3 และอื่นๆ โดยต้องการหาค่าราคาสูงสุดของละค่าใน quantity สามารถเขียนคำสั่งได้ดังนี้
SELECT quantity, max(price)
FROM items_ordered
GROUP BY quantity;

3. HAVING

ไวยากรณ์

HAVING clause
SELECT column1, SUM(column2 )
FROM list-of-tables
GROUP BY column-list
HAVING condition ;
HAVING clause ยินยอมให้ระบุเงื่อนไขบนแถวของแต่ละกลุ่ม หรือสามารถเลือกแถวตามเงื่อนไขที่ระบุ HAVING clause ควรตามหลัง GROUP BY clause

ตัวอย่าง

สมมติให้ table “employee” มีคอลัมน์เก็บข้อมูล ชื่อ (name), ฝ่าย (dept), เงินเดือน (salary) และ อายุ (age) ถ้าต้องการเลือกค่าเฉลี่ยเงินเดือนของพนักงานในแต่ละฝ่าย สามารถใช้คำสั่งนี้
SELECT dept, avg(salary)
FROM employee
GROUP BY dept;

ตัวอย่าง

ถ้าต้องการคำนวณและแสดงข้อมูลเฉพาะค่าเฉลี่ยของพนักงาน ที่มีเงินเดือนมากกว่า 20,000
SELECT dept, avg(salary)
FROM employee
GROUP BY dept
HAVING avg(salary) > 20000;

4. ORDER BY

ไวยากรณ์

ORDER BY clause
SELECT column1, SUM(column2 )
FROM list-of-tables
ORDER BY olumn-list  [ASC | DESC];
[ ] ตัวเลือก
ORDER BY clause เป็น clause ตัวเลือกซึ่งยินยอมให้แสดงผลลัพธ์ของคิวรี่ที่เรียงลำดับ (ทั้งเรียงลำดับจากน้อยไปมาก หรือ จากมากไปน้อย) ตามคอลัมน์ที่ระบุให้เรียงลำดับ
ASC = Ascending order (เรียงลำดับจากน้อยไปมาก) - เป็นค่าเริ่มต้น
DESC = Descending order (เรียงลำดับจากมากไปน้อย)
ตัวอย่าง
SELECT employee_id, dept, name, age, salary
FROM employee
WHERE dept = 'Sales'
ORDER BY salary;
ประโยคคำสั่งนี้จะเลือก employee_id, dept, name, age และ salary จาก table “employee” ที่ค่า dept เท่ากับ ‘Sales’ และแสดงผลลัพธ์ในลำดับจากน้อยไปมากตาม salary
ถ้าต้องการเรียงลำดับแบบหลายคอลัมน์ ต้องแยกคอลัมน์ด้วยเครื่องหมายจุลภาค
SELECT employee_id, dept, name, age, salary
FROM employee
WHERE dept = 'Sales'
ORDER BY salary, age DESC;

5. การรวมเงื่อนไข และ Boolean Operator

AND operator

AND operator ใช้เชื่อม 2 เงื่อนไข หรือมากกว่าและแสดงผลลัพธ์เฉพาะที่สอดคล้องกับเงื่อนไขที่กำหนดทั้งหมด

ไวยากรณ์

AND operator
SELECT column1, SUM(column2 )
FROM list-of-tables
WHERE condition1  AND condition2 ;
AND สามารถใช้เชื่อมเงื่อนไขใน WHERE clause ตั้งแต่ 2 เงื่อนไขขึ้นไป โดยการแสดงแถวข้อมูลตามเงื่อนไขต้องเป็นจริงทุกค่า

ตัวอย่าง

SELECT employee_id, name, title, salary
FROM employee
WHERE salary >= 50000.00 AND title = 'Programmer';
ประโยคคำสั่งนี้แสดงข้อมูล employee_id, name, title และ salary จาก table “employee” ที่เงินเดือน (salary) มากกว่าหรือเท่ากับ 50,000 และ ตำแหน่ง (title) เท่ากับ Programmer’ ซึ่งข้อมูลสามารถแสดงออกมา เมื่อเงื่อนไขทั้งสองเป็นจริง ถ้าเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริงจะไม่แสดงออกมา

OR operator

OR operator ใช้เชื่อม 2 เงื่อนไข หรือมากกว่าและแสดงผลลัพธ์เมื่อข้อมูลสอดคล้องกับเงื่อนไขใดเงื่อนไขจากเงื่อนไขที่กำหนดทั้งหมด

ไวยากรณ์

OR operator
SELECT column1, SUM(column2 )
FROM list-of-tables
WHERE condition1  OR condition2 ;
OR สามารถใช้เชื่อมเงื่อนไขใน WHERE clause ตั้งแต่ 2 เงื่อนไขขึ้นไป โดยสามารถแสดงแถวข้อมูล เมื่อข้อมูลมีเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง หรือทุกเงื่อนไขเป็นจริง

ตัวอย่าง

SELECT employee_id, name, title, salary
FROM employee
WHERE (title = 'Sales') OR (title = 'Programmer');
ประโยคคำสั่งนี้จะเลือก employee_id, name, title และ salary จาก table “employee” โดยตำแหน่ง (title) เท่ากับ ‘Sales’ หรือตำแหน่ง เท่ากับ ‘Programmer’
หมายเหตุ การเขียนเงื่อนไขในวงเล็บช่วยให้การอ่านคำสั่งง่ายขึ้น

6. IN และ BETWEEN

IN และ BETWEEN ใช้กับการกำหนดหลายเงื่อนไขได้ดี

IN

ไวยากรณ์

IN conditional operator
SELECT column1, SUM(column2 )
FROM list-of-tables
WHERE column3  IN (list-of-values );
IN เป็น operator ที่ใช้ทดสอบข้อมูลกับชุดของสมาชิก โดยทดสอบว่าค่าในคอลัมน์ (ที่ระบุก่อนคีย์เวิร์ด IN) อยู่ในรายการของค่าที่กำหนดให้หลังคีย์เวิร์ด IN

ตัวอย่าง

SELECT employee_id, name, salary
FROM employee
WHERE name IN ('Somchai', 'Sompong', 'Wanchai', 'Pornchai');
ประโยคคำสั่งนี้แสดงข้อมูล employee_id, name และ salary จาก table “employee” เฉพาะชื่อ (name) เป็นชื่อใดชื่อหนึ่งของ 'Somchai', 'Sompong', 'Wanchai', 'Pornchai' ผลลัพธ์แสดงแถวข้อมูลจากการส่งออกค่าใดค่าหนึ่งในค่าเหล่านี้
IN สามารถเขียนในรูปของ OR ได้ดังนี้
SELECT employee_id, name, salary
FROM employee
WHERE (name = 'Somchai') OR (name = 'Sompong ') OR (name = ' Wanchai') OR (name = 'Pornchai');
NOT IN สามารถใช้ดึงข้อมูลที่ภายนอกค่าของ IN
SELECT employee_id, name, salary
FROM employee
WHERE name NOT IN ('Somchai', 'Sompong', 'Wanchai', 'Pornchai');

BETWEEN

ไวยากรณ์

BETWEEN conditional operator
SELECT column1, SUM(column2 )
FROM list-of-tables
WHERE column3  BETWEEN value1  AND value2 ;
BETWEEN ใช้ทอสอบค่า (ที่ระบุก่อนคีย์เวิร์ด BETWEEN) อยู่ภายในช่วงของค่า 2 ค่าที่ระบุหลังคีย์เวิร์ด BETWEEN

ตัวอย่าง

SELECT employee_id, age, name, salary
FROM employee
WHERE age BETWEEN 30 AND 40;
ประโยคคำสั่งนี้เลือก employee_id, age, name และ salary จาก table “employee” ที่ age อยู่ระหว่าง 30 ถึง 40
เขียนประโยคคำสั่งใหม่โดยไม่ใช่ BETWEEN
SELECT employee_id, age, name, salary
FROM employee
WHERE age >= 30 AND age <= 40;
NOT BETWEEN สามารถใช้ดึงข้อมูลที่ภายนอกค่าของ BETWEEN
SELECT employee_id, age, name, salary
FROM employee
WHERE age NOT BETWEEN 30 AND 40;

7. Function

ฟังก์ชันที่ทำงานกับข้อมูลของแต่ละแถว เป็นฟังก์ชันที่สามารถทำงานใช้ประโยชน์ได้ดี แต่ไม่อยู่ในมาตรฐาน ANSI SQL-92 ซึ่งฟังก์ชันเหล่านี้อาจจะมีให้หรือไม่มีให้ขึ้นระบบฐานข้อมูลที่ใช้ ฐานข้อมูลหลักส่วนใหญ่มีให้ใช้

ฟังก์ชัน String

LEFT(<string>,x)ส่งออกตัวอักษรซ้ายสุด x ตัวอักษรของข้อความ เช่น LEFT(‘America’,2) = Am
RIGHT(<string>,x)ส่งออกตัวอักษรขวาสุด x ตัวอักษรของข้อความ เช่น RIGHT(‘America’,2) = ca
UPPER(<string>)แปลงข้อความทั้งหมดให้เป็นตัวอักษรใหญ่ เช่น UPPER(‘america’) = AMERICA
LOWER(<string>)แปลงข้อความทั้งหมดให้เป็นตัวอักษรเล็ก เช่น LOWER(‘AMERICA’)=america
INITCAP(<string>)แปลงข้อความทั้งหมดให้ขึ้นต้นด้วยอักษรตัวใหญ่ เช่น INITCAP(‘america’) = America
LENGTH(<string>)ส่งออกตัวอักษรในข้อความ เช่น LENGTH (‘America’) = 7
<string>||<string>ต่อ 2 ข้อความเป็นข้อความเดียวกัน (concatenated)
SUBSTR(<string>,x,y)ดึงตัวอักษรตั้งแต่ตำแหน่งที่ x จำนวน y ตัวอักษร เช่น SUBSTR(‘ABCDEF’, 3,3) = CDE
NVL(<column>, <value>)ฟังก์ชันที่ใช้เปลี่ยนค่า Null ในคอลัมน์ column ที่ระบุเป็นค่าใหม่ตาม value เช่น NVL(salary,0) หมายถึง ค่าที่เป็น Null ในคอลัมน์ salary ให้เปลี่ยนเป็น ศูนย์

ฟังก์ชันคณิตศาสตร์

ABS(x)ส่งออกค่าสัมบูรณ์ของ x
SIGN(x)ส่งออกค่าเครื่องหมายของ x เป็น -1, 0, or 1 (ค่าลบ, ศูนย์ หรือค่าบวก)
MOD(x,y)modulo - ส่งออกค่าจำนวนเต็มของการหาร x ด้วย y (เหมือนกับ x%y)
FLOOR(x)ส่งออกค่าจำนวนเต็มใหญ่ที่สุดที่น้อยกว่าหรือเท่ากับ x
CEILING(x) or CEIL(x)ส่งออกค่าจำนวนเต็มเล็กที่สุดที่มากกว่าหรือเท่ากับ x
POWER(x,y)ส่งออกค่าของ x ยกกำลัง y
ROUND(x)ส่งออกค่าที่ปรับเป็นจำนวนเต็มที่ใกล้ที่สุดของ x
ROUND(x,d)ส่งออกค่าที่ปรับตามจำนวนตำแหน่งทศนิยมที่ระบุด้วยค่า d
SQRT(x)ส่งออกค่ารากที่ 2 ของ x
  

ตัวอย่าง

SELECT round(salary), name
FROM employee;
ประโยคคำสั่งนี้ปรับค่า salary ให้เป็นจำนวนเต็มที่ใกล้ที่สุด และ name จาก table “employee”

Mathematical Operators

ตามมาตรฐาน ANSI SQL-92 สนับสนุน arithmetic operators 4 ตัวแรก

+การบวก
-การลบ
*การคูณ
/การหาร
%modulo
  

modulo ใช้หาค่าจำนวนเต็มจากการหาร โดย modulo ไม่สนับสนุนมาตรฐาน ANSI SQL แต่ฐานข้อมูลส่วนใหญ่สนับสนุน

8. Aggregate Function

Aggregate function ในคำสั่ง SQL ได้แก่

MINส่งออกค่าน้อยที่สุดของคอลัมน์ที่กำหนด
MAXส่งออกค่ามากที่สุดของคอลัมน์ที่กำหนด
SUMส่งออกผลรวมค่าตัวเลขของคอลัมน์ที่กำหนด
AVGส่งออกค่าเฉลี่ยของคอลัมน์ที่กำหนด
COUNTส่งออกผลรวมจำนวนของค่าของคอลัมน์ที่กำหนด
COUNT(*)ส่งออกจำนวนแถวใน table

aggregate function ใช้คำนวณเทียบกับการส่งออกคอลัมน์ของข้อมูลตัวเลขจากประโยคคำสั่ง SELECT ฟังก์ชันกลุ่มนี้ใช้หาผลรวมพื้นฐานของคอลัมน์ที่เจาะจงจากข้อมูลที่เลือกมา การทำงานของฟังก์ชันต้องใช้ GROUP BY clause เพื่อครอบคลุมการทำงาน แต่ฟังก์ชันสามารถใช้ได้โดยไม่มี GROUP BY clause

ตัวอย่าง

SELECT AVG(salary)
FROM employee;
ประโยคคำสั่งจะส่งออกผลลัพธ์ที่เก็บค่าเฉลี่ยของทุกข้อมูลที่ส่งออกมาในคอลัมน์ salary จาก table “employee”

ตัวอย่าง

SELECT AVG(salary)
FROM employee;
WHERE title = 'Programmer';
ประโยคคำสั่งจะส่งออกผลลัพธ์ที่เก็บค่าเฉลี่ยเงินเดือน (salary) ของพนักงานที่มีตำแหน่ง (title) เป็น ‘Programmer’

ตัวอย่าง

SELECT Count(*)
FROM employee;
ประโยคคำสั่งนี้แตกต่างจากฟังก์ชันอื่น เพราะไม่ต้องระบุคอลัมน์ให้ฟังก์ชัน COUNT(*) ผลลัพธ์ของคำสั่ง คือ การส่งออกจำนวนแถวใน table “employee”

9. JOIN

การค้นหาและเลือกข้อมูลตามหัวข้อที่ผ่านมาเป็นการทำงานกับ table เดียว ในขณะที่การทำงานจริงต้องมีการเลือกข้อมูลจากหลาย table เพื่อแสดงสารสนเทศที่ต้องการได้ เนื่องจากหลักการพื้นฐานของ Relational Database System ให้ออกแบบการจัดเก็บข้อมูลในแต่ละ table สำหรับ entity เดียว เพื่อขจัดการเก็บข้อมูลที่ซ้ำซ้อน แล้วใช้ความสัมพันธ์ของ table แสดงผลเป็นสารสนเทศที่ต้องการ
JOIN สามารถรับรู้ในประโยคคำสั่ง SQL ถ้ามี table มากกว่า 1 table หลังคีย์เวิร์ด FROM

ไวยากรณ์

SELECT list-of-columns
FROM table1,table2,..
WHERE search-condition1 = search-condition2, ..
สมมติว่า ในการเก็บข้อมูลการซื้อสินค้า ประกอบด้วย 3 table คือ
1. customer_info เก็บรายละเอียดของลูกค้า
2. purchase_order เก็บรายละเอียดรายการสั่งซื้อ
”customer_info”

customer_numberfirstnamelastnameaddresscityprovincezip
       

”purchases”

customer_numberbuydateitemquantityprice
     

Key

ในการเชื่อม table ของ SQL มีส่วนสำคัญที่เกี่ยวข้อง คือ Key ซึ่งมีแนวคิด ดังนี้
primary key เป็นคอลัมน์หรือชุดของคอลัมน์ที่ระบุแบบไม่ซ้ำ ตัวอย่างเช่น table “customer_info” มีคอลัมน์ customer_number เป็นคอลัมน์ที่ระบุแบบไม่ซ้ำของ ซึ่งมีความหมาย 2 อย่าง คือ ประการแรก ไม่มีข้อมูล 2 แถวสามารถมี customer_number เดียวกัน ถึงแม้ว่า 2 customer_number มีชื่อแรกและชื่อหลังเหมือนกัน ประการที่ 2 คอลัมน์ customer_number ทำให้มั่นใจว่าลูกค้า 2 รายนี้ไม่มีความสับสนต่อกัน เพราะการค้นหาข้อมูลใช้คอลัมน์ customer_number แทนการใช้ชื่อ
foreign key เป็นคอลัมน์ใน table ที่ primary key อยู่ table อื่น ซึ่งหมายความว่า ข้อมูลในคอลัมน์ foreign key ต้องตรงกับข้อมูลของ primary key ใน table อื่น ใน RDBMS ข้อมูลที่ตรงกัน รู้จักในฐานะ Reference Integrity ตัวอย่างเช่น table “purchases” มีคอลัมน์ customer_number เป็น foreign key โดยมี primary key อยู่ใน table “customer_info”
JOIN ที่กล่าวถึงนี้ เป็น INNER JOIN ซึ่งเป็นประเภทการเชื่อมปกติ

ตัวอย่าง

SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info, purchases
WHERE customer_info.customer_number = purchases.customer_number;
ประโยคคำสั่งนี้ แสดงผลลัพธ์ของคอลัมน์ firstname และ lastname จาก table “customer_info” และคอลัมน์ item จาก table “purchases” โดยเชื่อมระหว่าง table ด้วยคอลัมน์ customer_number ของ 2 table
Notice: แต่ละคอลัมน์นำหน้าด้วย ชื่อ table และจุด ซึ่งไม่มีความจำเป็นในทุกกรณี แต่จำเป็นถ้าคอลัมน์ที่เรียกมีอยู่ใน 2 table การเขียนด้วยรูปแบบนี้เป็นแบบแผนการเขียนที่ดีในการป้องกันความสับสนในเรื่องที่มาของคอลัมน์และ table
การเขียนคำสั่งตามมาตรฐานไวยากรณ์ ANSI SQL-92
SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info INNER JOIN purchases
ON customer_info.customer_number = purchases.customer_number;

ตัวอย่าง

SELECT employee.employee_id, employee.lastname, employee_sales.comission
FROM employee, employee_sales
WHERE employee.employeeid = employee_sales.employeeid;
ประโยคคำสั่งนี้เลือก employee_id และ lastname จาก table “employee” และ comission จาก table “employee_sales” สำหรับทุกแถวที่ employee_id ใน table “employee” ตรงกับ employee_id ใน table “employee_sales”

10. OUTER JOIN

OUTER JOIN เป็นการเชื่อม table ที่ต้องการแสดงข้อมูลจาก table นั้น โดยค่าที่ใช้เชื่อมไม่จำเป็นต้องมีค่าเท่ากับอีก table หนึ่ง การเขียนคำสั่งให้ใช้ (+) หน้าข้อมูลที่ต้องการแสดงรายการออกมา และจะแสดงค่าว่างสำหรับกรณีที่ไม่มีข้อมูล
SELECT cloumn1, column2,..
FROM table1, table2
WHERE table1.column1 (+) = table2.column2;
NOTE: เป็นการแสดงข้อมูลทั้งหมดของ table2
ตัวอย่าง สมมติมี 2 table คือ Employee และ Department

“Employee”

NameDept
110
210
320
420
530

“Department”

Dept
10
20
30
40

ในฐานข้อมูล Oracle สามารถเขียนได้ดังนี้
SELECT E.Name, D.Dept
FROM Employee E, Department D
WHERE E.Dept (+) = D.Dept;

ผลลัพธ์

NameDept
110
210
320
420
530
 40

Microsoft มีมาตรฐานการเขียน OUTER JOIN ซึ่งสามารถใช้กับ Microsoft Access, Visual Basic เป็นต้น
LEFT JOIN ใช้สำหรับการแสดงเรคคอร์ดของ table แรกทั้งหมดถึงแม้จะมีเรคคอร์ดของ table แรกมีค่าของฟิลด์ที่ไม่ตรงกับฟิลด์เชื่อมของ table ที่สอง
ไวยากรณ์ OUTER JOIN 1 สำหรับการเชื่อมตาม ด้านซ้ายของความสัมพันธ์
SELECT list-of-columns
FROM table1,table2,..
LEFT JOIN table1 ON table1.column1 = table2.column2
RIGHT JOIN ใช้สำหรับการแสดงเรคคอร์ดของ table ที่สองทั้งหมด ถึงแม้ว่าจะมีเรคคอร์ดของ table ที่สองมีค่าของฟิลด์ที่ไม่ตรงกับฟิลด์เชื่อมของ table แรก
ไวยากรณ์ OUTER JOIN 2 สำหรับการเชื่อมตาม ด้านขวาของความสัมพันธ์
SELECT list-of-columns
FROM table1,table2,..
RIGHT JOIN table2 ON table1.column1 = table2.column2
จากตัวอย่าง ฐานข้อมูล Access สามารถเขียนได้ดังนี้
SELECT Employee.Name, Department.Dept
FROM Department LEFT JOIN Employee ON Department.Dept = Employee.Dept;

11. Sub Query และ UNION

Sub Queries

คิวรี่ย่อย (sub queries) หมายถึง การสร้างประโยคคำสั่ง SELECT ภายในอีก ประโยคคำสั่ง SELECT หนึ่ง ซึ่งมักจะใช้ใน WHERE clause เช่น การเลือกลูกค้าที่ซื้อสินค้าแพงกว่าค่าเฉลี่ย 100
SELECT customer_number
FROM purchases
WHERE price >(SELECT avg(price) + 100 FROM purchases);
คิวรี่ย่อยคำนวณค่าเฉลี่ยของ price แล้วบวก 100 และใช้เป็นค่าอ้างอิง โดยการแสดง customer_number ที่มีค่า price มากกว่าค่าคำนวณจากคิวรี่ย่อย

UNION

UNION เป็นการนำหลายคิวรี่ ให้มาแสดงผลเป็นคิวรี่เดียวที่ใช้คอลัมน์ร่วมกัน
SELECT list-of-column FROM table1
UNION
SELECT list-of-column FROM table2
. . .
UNION
SELECT list-of-column FROM tablen
[ORDER BY columnname];

ตัวอย่าง

SELECT name, phone FROM employee
UNION SELECT lastname, phone FROM customer_info;
ประโยคคำสั่งนี้เลือก name, phone จาก table “employyee” และ lastname, phone จาก table “customer_info” เพื่อแสดงผลคอลัมน์ name เป็นรายชื่อของพนักงานและลูกค้า ส่วนคอลัมน์ phone แสดงหมายเลขโทรศัพท์ของพนักงานและลูกค้า

12. สรุป

สรุปคำสั่ง SQL

ในส่วนการสรุปรูปแบบทั่วไปของประโยคคำสั่ง SQL แต่ระบบฐานข้อมูลแต่ละระบบอาจจะสนับสนุนหรือไม่สนับสนุนต้องดูคู่มือของ่ระบบฐานข้อมูลนั้นประกอบด้วย
ALTER TABLE tablename [ADD| DROP| MODIFY] columnname; (ดูเพิ่มเติม1, ดูเพิ่มเติม2 ) ใช้สำหรับการเพิ่ม, แก้ไข หรือลบ คอลัมน์ของ table และเปลี่ยนข้อความ เช่น ประเภทข้อมูล ของคอลัมน์ที่มีอยู่ การเลือก ADD, DROP หรือ MODIFY เลือกได้อย่างเดียว
COMMIT; (ดูเพิ่มเติม) บันทึกการเปลี่ยนแปลงเข้าสู่ฐานข้อมูล
CREATE [UNIQUE] INDEX indexname
ON tablename (columnname); (ดูเพิ่มเติม1, ดูเพิ่มเติม2 ) UNIQUE เป็นตัวเลือกการสร้างดัชนีแบบไม่ซ้ำ
CREATE TABLE tablename
(columnname1 datatype [size] [constraint], columnname2 datatype [size] [constraint], . .); (ดูเพิ่มเติม1, ดูเพิ่มเติม2) เป็นคำสั่งสร้าง table การกำหนด size ขึ้นกับประเภทข้อมูล constraint ที่สามารถกำหนดได้ คือ NULL หรือ NOT NULL, UNIQUE (บังคับให้ค่าไม่ซ้ำ), PRIMARY KEY (ระบุ primary key ของ table), CHECK (การยอมให้ตรวจสอบข้อมูลที่มีการเปลี่ยนแปลง), DEFULT (ให้แทรกค่าเมื่อมีการเพิ่มแถวข้อมูล), FOREIGN KEY (กำหนด foreign key ของ table)
CREATE VIEW tablename AS select statement; (ดูเพิ่มเติม) สร้าง view
DELETE FROM tablename WHERE condition; (ดูเพิ่มเติม) ลบข้อมูล
INSERT INTO tablename (column1, column2,..)
VALUES (value1, value2,..); (ดูเพิ่มเติม)
ROLLBACK;(ดูเพิ่มเติม) เรียกข้อมูลเดิมกลับมา จากการเปลี่ยนแปลงข้อมูลที่เกิดขึ้น โดยสามารถเรียกกลับจาก COMMIT ครั้งสุดท้าย
SELECT [ALL | DISTINCT] column1[,column2]
FROM table1[,table2]
[WHERE conditions]
[GROUP BY column-list]
[HAVING conditions]
[ORDER BY column-list [ASC | DESC] ]; (ดูเพิ่มเติม) โดย ASC | DESC ให้เลือกวิธีเรียงลำดับข้อมูล
UPDATE tablename
SET column1 = value1, column2 = value2, ..
[WHERE condition]; (ดูเพิ่มเติม) ถ้าไม่มี WHERE clause จะเปลี่ยนค่าตามที่กำหนดทั้งหมด

ตัวอย่างคำสั่ง SQL ใน Visual Basic

คำสั่ง Select

คำสั่ง Select ใช้เป็นประโยคคำสั่งในการส่งออกเรคคอร์ด ตามเกณฑ์ในการเลือก
ไวยากรณ์
SELECT fieldname1, fieldname2,...
FROM tablename1, tablename2,...
[Where Condition]
[Group By]
[Having]
[Order By];
[ ] – ตัวเลือก
แสดงทุกฟิลด์และทุกเรคคอร์ด ใน table เดียว เช่นการข้อทั้งหมดใน table ชื่อ publishers
SELECT * FROM Publishers ;
แสดงบางฟิลด์ ซึ่งชื่อฟิลด์ ที่มีเครื่องหมายพิเศษ หรือมีการเว้นวรรคให้อยู่ในวงเว็บก้ามปู [ ]
SELECT PubID, [Company Name], Address FROM Publishers;
แสดงฟิลด์ที่เป็น expression และตั้งชื่อใหม่ (ให้ใช้ As)
SELECT Author, 2000 - [Year Born] As Age FROM Authors;
การใช้ฟังก์ชัน aggregate
SELECT COUNT ([Year Born]) FROM Authors;
การเลือกเฉพาะเรคคอร์ด ที่ต้องการด้วย WHERE clause
SELECT Name, City FROM Publishers WHERE State = ‘CA’;
การเลือกเฉพาะเรคคอร์ดด้วย WHERE Clause หลายเงื่อนไขต้องเชื่อมด้วย AND หรือ OR เช่น state เป็น CA และ Name ขึ้นต้นด้วย M
SELECT * FROM Publishers WHERE State = ‘CA’ AND name LIKE ‘m%’;

การเรียงและจัดกลุ่ม

การเรียงใช้ ORDER BY clause
SELECT * FROM Publishers ORDER BY [Company Name] ;
การเรียงจากน้อยไปมากให้ใช้คีย์เวิร์ด DESC ต่อท้ายฟิลด์ต้องการเรียงจากน้อยไปมาก
SELECT * FROM Publishers ORDER BY State, City DESC;
การจัดกลุ่มใช้ GROUP BY Clause
SELECT [Year Published], Count (*) As Title In Year FROM Titles
GROUP BY [Year Published];
ให้แสดงจำนวนหนังสือใน 10 ปีสุดท้าย
SELECT TOP 10 [Year Published], COUNT (*) As Title In Year FROM Titles
GROUP BY [Year Published] ORDER BY [Year Published] DESC;
การคัดเลือกด้วยเขื่อนไขของ HAVING Clause เช่น แสดงเฉพาะที่มีจำนวนหนังสือมากกว่า 50
SELECT [Year Published], COUNT (*) As Title In Year FROM Titles
GROUP BY [Year Published] HAVING COUNT ((*) >50);

คิวรี่ย่อย

คิวรี่ย่อย เป็นการใช้ประโยคคำสั่ง Select ภายในประโยคคำสั่ง Select อีกคำสั่งสำหรับการค้นหาที่ซับซ้อน
SELECT * FROM Title WHERE Pub ID =
(SELECT pubID FROM Publishers WHERE Name = ‘MACMILLIAN’);

JOIN

JOIN ใช้สำหรับการดึงข้อมูลจาก 2 table ที่สัมพันธ์กับผ่านฟิลด์ร่วม ถ้าแถวของ table แรกแสดงตามฟิลด์ของ table ที่สอง ให้ใช้ ON clause ในคำสั่ง JOIN
SELECT Title.Title, Titles. [Year Published], Publishers.Name FROM Titles
INNER JOIN Publishers ON Titles.PubID = Publishers.PubID
การใช้ไวยากรณ์ tablename.fieldname เช่น Titles.PubID เมื่อชื่อฟิลด์มีอยู่ใน 2 table ที่เชื่อมกัน
นอกจากมี LEFT JOIN สำหรับการแสดงเรคคอร์ดของ table แรกทั้งหมดถึงแม้จะมีเรคคอร์ดของ table แรกมีค่าของฟิลด์ที่ไม่ตรงกับฟิลด์เชื่อมของ table ที่สอง
SELECT Titles.Title, Titles.[Year Published], Publishers.Name FROM Titles
LEFT JOIN Publishers ON Titles.PubID = Publishers.PubID;
RIGHT JOIN สำหรับการแสดงเรคคอร์ดของ table ที่สองทั้งหมด ถึงแม้ว่าจะมีเรคคอร์ดของ table ที่สองมีค่าของฟิลด์ที่ไม่ตรงกับฟิลด์เชื่อมของ table แรก

UNION

การนำ table 2 ต่อกัน สามารถทำได้โดยใช้คีย์เวิร์ด UNION
SELECT Name, Address, City FROM Customers
UNION SELECT CompanyName, Address, City FROM Suppliers

คำสั่ง Insert Into

คำสั่ง INERT INTO ใช้ในประโยคคำสั่งสำหรับการเพิ่มเรคคอร์ดใหม่
ไวยากรณ์
INERT INTO tablename [(fieldname1, fieldname2,...)]
VALUES (value1, value 2,...);
[ ] ตัวเลือก
หมายเหตุจำนวน value ต้องเท่ากับ fieldname
INERT INTO Authors (Author, [Year Born] VALUES (‘Frank Whale’, 1960);

คำสั่ง Update

คำสั่ง UPDATE ใช้ในประโยคคำสั่งสำหรับการปรับปรุงค่าในเรคคอร์ด
ไวยากรณ์
UPDATE tablename
SET fieldname = expression
WHERE [condition];
[ ] ตัวเลือก
UPDATE Authors SET [Year Born] = 1961 WHERE Author = ‘Frank Whale’;











คำสั่ง 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 การทำงานของทรานแซคชันได้ถูกต้อง