การจัดการฐานข้อมูล (คำสั่ง SQL)
คำสั่งของภาษา
ภาษา SQL (สามารถอ่านออกเสียงได้ 2 แบบ คือ “เอสคิวแอล” (SQL) หรือ “ซีเควล” (Sequel) ย่อมมาจาก Structured Query Language หรือภาษาในการสอบถามข้อมูล เป็นภาษาทางด้านฐานข้อมูล ที่สมารถสร้างและปฏิบัติการกับฐานข้อมูลแบบสัมพันธ์ (Relational Database) โดยเฉพาะ และเป็นภาษาที่มีลักษณะคลายกับภาษาอังกฤษ ภาษา SQL ถูกพัฒนาขึ้นจากแนวคิดของ Relational Calculus และ Relational Algebra เป็นหลัก ภาษา SQL เริ่มพัฒนาครั้งแรกโดย Almaden Research Center ของบริษัท IBM โดยมีชื่อเริ่มแรกว่า “ซีเควล” (Sequel) ต่อมาได้เปลี่ยนชื่อเป็น “เอสคิวแอล” (SQL) หลังจากนั้นภาษา SQL ได้ถูกนำมาพัฒนาโดยผู้ผลิตซอฟต์แวร์ด้านระบบจัดการฐานข้อมูลเชิงสัมพันธ์จนเป็นที่นิยมกันอย่างแพร่หลายในปัจจุบัน โดยผู้ผลิตแต่ละรายก็พยายามที่จะพัฒนาระบบจัดการฐานข้อมูลของตนให้มีลักษณะเด่นเฉพาะขึ้นมา ทำให้รูปแบบการใช้คำสั่ง SQL มีรูปแบบที่แตกต่างกันไปบ้าง เช่น Oracle Access SQL Base ของ Sybase Ingres หรือ SQL Server ของ Microsoft เป็นต้น ดังนั้นในปี ค.ศ. 1986 ทางด้าน American National Standards Institute (ANSI) จึงได้กำหนดมาตรฐานของ SQL ขึ้น อย่างไรก็ดี โปรแกรมฐานข้อมูลที่ขายในท้องตลาด ได้ขยาย SQL ออกไปจนเกินข้อกำหนดของ ANSI โดยเพิ่มคุณสมบัติอื่น ๆ ที่คิดว่าเป็นประโยชน์เข้าไปอีก แต่โดยหลักทั่วไปแล้วก็ยังปฏิบัติตามมาตรฐานของ ANSI ในการอธิบายคำสั่งต่าง ๆ ของภาษาSQL
ภาษา SQL (สามารถอ่านออกเสียงได้ 2 แบบ คือ “เอสคิวแอล” (SQL) หรือ “ซีเควล” (Sequel) ย่อมมาจาก Structured Query Language หรือภาษาในการสอบถามข้อมูล เป็นภาษาทางด้านฐานข้อมูล ที่สมารถสร้างและปฏิบัติการกับฐานข้อมูลแบบสัมพันธ์ (Relational Database) โดยเฉพาะ และเป็นภาษาที่มีลักษณะคลายกับภาษาอังกฤษ ภาษา SQL ถูกพัฒนาขึ้นจากแนวคิดของ Relational Calculus และ Relational Algebra เป็นหลัก ภาษา SQL เริ่มพัฒนาครั้งแรกโดย Almaden Research Center ของบริษัท IBM โดยมีชื่อเริ่มแรกว่า “ซีเควล” (Sequel) ต่อมาได้เปลี่ยนชื่อเป็น “เอสคิวแอล” (SQL) หลังจากนั้นภาษา SQL ได้ถูกนำมาพัฒนาโดยผู้ผลิตซอฟต์แวร์ด้านระบบจัดการฐานข้อมูลเชิงสัมพันธ์จนเป็นที่นิยมกันอย่างแพร่หลายในปัจจุบัน โดยผู้ผลิตแต่ละรายก็พยายามที่จะพัฒนาระบบจัดการฐานข้อมูลของตนให้มีลักษณะเด่นเฉพาะขึ้นมา ทำให้รูปแบบการใช้คำสั่ง SQL มีรูปแบบที่แตกต่างกันไปบ้าง เช่น Oracle Access SQL Base ของ Sybase Ingres หรือ SQL Server ของ Microsoft เป็นต้น ดังนั้นในปี ค.ศ. 1986 ทางด้าน American National Standards Institute (ANSI) จึงได้กำหนดมาตรฐานของ SQL ขึ้น อย่างไรก็ดี โปรแกรมฐานข้อมูลที่ขายในท้องตลาด ได้ขยาย SQL ออกไปจนเกินข้อกำหนดของ ANSI โดยเพิ่มคุณสมบัติอื่น ๆ ที่คิดว่าเป็นประโยชน์เข้าไปอีก แต่โดยหลักทั่วไปแล้วก็ยังปฏิบัติตามมาตรฐานของ ANSI ในการอธิบายคำสั่งต่าง ๆ ของภาษาSQL
2.1 Character
|
ชนิดข้อมูล
|
ขอบเขตของชนิดข้อมูล
|
ขนาดหน่วยความจำ (ไบต์)
|
|
Char[(n)]
|
1 - 8000
|
n
|
|
Varchar[(n)]
|
1 – 8000
|
ความยาวข้อมูล
|
|
Text
|
231-1(2,147,483,647) ตัวอักษร
|
16+Multiple of 2k
|
2.2 Binary
|
ชนิดข้อมูล
|
ขอบเขตของชนิดข้อมูล
|
ขนาดหน่วยความจำ (ไบต์)
|
|
Binary(n)
|
1 - 8000
|
n
|
|
Varbinary(n)
|
1 - 8000
|
n + 1
|
|
Image
|
231 -1(2,147,483,647) ไบต์
|
16+Multiple of 2k
|
|
Timestamp
|
ใช้สำหรับเปลี่ยนการจัดการ
|
16
|
2.3 Date
|
ชนิดข้อมูล
|
ขอบเขตของชนิดข้อมูล
|
ขนาดหน่วยความจำ (ไบต์)
|
|
Datetime
|
วันที่เริ่มต้นตั้งแต่ January 1,1753 ถึง December 31,9999 ความละเอียดถึง 1/1000 วินาที
|
8
|
|
Smalldetetime
|
วันที่เริ่มต้นตั้งแต่ January 1,1900 ถึง June 6,2079
|
4
|
2.4 Logical
|
ชนิดข้อมูล
|
ขอบเขตของชนิดข้อมูล
|
ขนาดหน่วยความจำ (ไบต์)
|
|
Bit
|
0 หรือ 1
|
1
|
2.5 Numeric
|
ชนิดข้อมูล
|
ขอบเขตของชนิดข้อมูล
|
ขนาดหน่วยความจำ (ไบต์)
|
|
Int
|
±2,147,483,647
|
4
|
|
Smallint
|
±32767
|
2
|
|
Tinyint
|
0 255
|
1
|
|
Float(p)
P (Precision) คือ การนับจำนวน รวมของเลขหน้าและหลังทศนิยม มีค่าตั้งแต่ 1 ถึง 28 S (Scale) คือ จำนวนตัวเลขหลัง ทศนิยม |
±1.79E+308
|
4 (Precision<16)
8(Precision>=16) |
|
Double p
|
±1.79E+308
|
8
|
|
Real
|
±1.79E+308
|
4
|
|
Numeric(p,s)
Decimal(p,s) |
±103
|
2 ถึง 17
|
|
Money
|
±$922,337,203,685,477.5807
|
8
|
|
Smallmoney
|
±$214,748.3647
|
4
|
ตัวอย่างของคำสั่ง SQL
1 -
คำสั่งพื้นฐาน
Select <filed_1 , filed_2 , … ,
filed_n | *
>
From <Table_name> ;
หากเลือกทุก column สามารถใช้เครื่องหมาย * ได้
ตัวอย่าง
select * from employee ;
select emp_no , emp_name , emp_lname
from employee ;
2 – คำสั่งแบบมีเงื่อนไข (condition)
Select <filed_1 , filed_2 , … ,
filed_n / *
>
From <Table_name>
Where < condition >
;
Condition หรือ
เงื่อนไข หมายถึงการระบุความต้องการ มีรูปแบบการเขียนดังนี้คือ <field> <operator> < value >
Filed คือ
Filed ใดๆที่อยู่ในรายชื่อ Table อยู่ในคำสั่ง
From
Operator คือคำสั่งในการปฏิบัติการ เช่น = , >
, < , != , is null
Value ค่าที่ใช้เป็นเงื่อนไข
หากเป็นตัวเลขสามารถระบุได้เลย หากเป็นตัวอักษรต้องมีการใส่ " ก่อนและหลังค่าที่เป็นเงื่อนไข
ตัวอย่าง -
คำสั่งแบบมีเงื่อนไข
Select * from work
Where proj_num = 15 ;
(เลือกข้อมูลการทำงานโครงการ 15)
Select * from work
Where hours > 3
; (เลือกข้อมูลการทำงานที่มากกว่า
3 ชั่วโมง)
Select * from employee
where job = "Programmer" ; (เลือกพนักงานที่เป็น Programmer)
3 – คำสั่งแบบหลายเงื่อนไข
Select <filed_1 , filed_2 , … , filed_n / * >
From <Table_name>
Where < condition-1 >
<And / Or > <condition-2> ;
And ให้ผลเหมือนการ
Intersection
Or ให้ผลเหมือนการ
Union
ตัวอย่าง – คำสั่งแบบหลายเงื่อนไข
select * from work
where proj_num = 15
and hours > 3 ;
(เลือกพนักงานที่ทำงานโครงการ
15 และทำงานมากกว่า 3 ชั่วโมง : ต้องอยู่โครงการ 15)
select * from work
where proj_num = 15
or hours > 3 ;
(เลือกพนักงานที่ทำงานโครงการ
15 หรือทำงานมากกว่า 3 ชั่วโมง : อาจทำงานอยู่โครงการอื่น)
4 – คำสั่งที่มีการใช้งานหลายตาราง (join)
Select <filed_1 , filed_2 , … , filed_n / * >
From <table_1 , table_2 , …, table_n>
Where < condition-1 > ;
1.
ต้องมีการเชื่อม PK และ FK ของทั้งสองตารางเข้าด้วยกัน (Join)
2.
หากมี field ใดที่ชื่อซ้ำกันทั้งสองตาราง
เมื่ออ้างถึง ต้อง
ระบุชื่อตาราง ตามด้วยชื่อฟิลด์ เช่น
work.emp_num หรือ employee.emp_num
ตัวอย่าง -
คำสั่งที่มีการใช้งานหลายตาราง (join)
Select employee.emp_num , emp_name , hours
From employee , work
Where employee.emp_num = work.emp_num ;
(
แสดงข้อมูลรหัสพนักงาน ชื่อพนักงาน และชั่วโมงทำงาน เนื่องจาก ชื่อพนักงาน อยู่คนละตารางกับ
ข้อมูลชั่วโมงทำงาน จึงต้องมีการ join ตารางที่มีข้อมูลเข้าด้วยกัน)
5 – คำสั่งที่มีการเรียงลำดับ
Select <filed_1 , filed_2 , … , filed_n / * >
From <table_1 , table_2 , …, table_n>
Where < condition-1 >
Order by < [asc/desc] field_2 , [asc/desc]
filed_n > ;
อธิบายเพิ่มเติม
1.
Filed ที่จะใช้คำสั่ง order ต้องเลือกมาก่อนแล้วจากการ select
2.
การเรียงปกติจะเรียงจากน้อยไปมาก (asc) หากต้องการเรียงตากมาไปน้อยให้ใช้ (desc)
ตัวอย่าง – คำสั่งที่มีการเรียงลำดับ
Select employee.emp_num , emp_name , proj_num,hours
From employee , work
Where employee.emp_num = work.emp_num
Order by employee.emp_num
;
(แสดงข้อมูลรหัสพนักงาน
ชื่อพนักงาน และชั่วโมงทำงาน
เรียงลำดับข้อมูล ตามรหัสพนักงาน)
6 – การใช้ Operator : like
Select <filed_1 , filed_2 , … , filed_n / * >
From <table_1 , table_2 , …, table_n>
Where <filed_1 like “%” > ;
คำสั่ง like หมายถึงค่าที่คล้ายกัน
โดยมีสัญญลักษ์ % เป็น wild-card ที่ใช้หมายถึงค่าใดๆก็ได้
ตัวอย่าง -
การใช้ Operator : like
Select * from employee
where emp_name like
“A%” ;
(แสดงข้อมูล
พนักงานที่ชื่อขึ้นต้นด้วยอักษร A )
Select * from employee
where emp_name like
“%A%” ;
(แสดงข้อมูล
พนักงานที่ชื่อมีอักษร A )
7 – การใช้ Operator : in หรือ
การทำงานแบบเซต
select <filed1 , filed2 , … , filedn / * >
from <Table_name>
where field_i in
( value_lits) ;
ในวงเล็บทางขวาของ
in หมายถึง การมีค่าได้หลายค่า
แต่ละค่าคั่นด้วย เครื่องหมาย , (comma) เปรียบเสมือน value_list คือ เซตหรือกลุ่มของค่าที่เราต้องการใช้เป็น เงื่อนไข
หากเราใช้ Operator = ค่าทางขวาจะมีได้ค่าเดียวเท่านั้น
ตัวอย่าง – การใช้ Operator : in
select * from employee
where deptno in (
“Programmer” , “System Analyst”) ;
(แสดงข้อมูลพนักงานที่เป็นโปรแกรมเมอร์หรือ
นักวิเคราะห์ระบบ)
select * from work
where proj_num in ( 15
, 22 ) ;
(แสดงข้อมูลการทำงานโครงการ
15 หรือ โครงการ 22 )
8 – การใช้ค่า Null
ในการเก็บข้อมูล
ค่า Null ไม่เท่ากับ ค่าว่าง ค่า Null คือไม่มีการเก็บค่าใดๆใน
Filed นั้น การทำงานกับค่า null ต้องใช้
Operator “is”
ตัวอย่างเช่น
select * from
employee where job is null ;
(แสดงข้อมูลพนักงานที่ไม่มีหน้าที่)
9 - รูปแบบคำสั่ง : การทำงานเชิงนิเสธ
select <filed1 , … , filedn / * >
from <table_name>
where field_i not in ( value_lits)
;
select <filed1 , … , filedn / * >
from <table_name>
where field_i != value ;
ตัวอย่าง : การทำงานเชิงนิเสธ
select * from
work
where proj_num not in (
15 , 22) ;
(แสดงข้อมูลการทำงาที่ไม่ใช่
โปรเจ็ค 15 และ 22)
select * from employee
where job !=
“Programmer” ;
(แสดงข้อมูลการทำงานของพนักงานที่ไม่ใช่
Programmer)
10. รูปแบบคำสั่งที่มีการคำนวณ
Select employee.emp_num , proj_num,
chg_hours , work_hours ,
chg_hours
* work_hours
From employee , work
Where employee.emp_num
= work.emp_num ;
(แสดงข้อมูลการทำงานของพนักงานแต่ละคนในแต่ละโครงการ
และค่าตอบแทนที่ได้)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น