วันพฤหัสบดีที่ 18 ธันวาคม พ.ศ. 2557

การจัดการฐานข้อมูล  (คำสั่ง 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 ;
(แสดงข้อมูลการทำงานของพนักงานแต่ละคนในแต่ละโครงการ และค่าตอบแทนที่ได้)

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

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