11
Introduction to Database SQLวรว�ทย์� พูลสว�สดิ์��
22
ฐานข้�อมู�ล (Database)- Data and its relation - Databases are designed to offer an
organized mechanism for storing, managing and retrieving information. They do so through the use of tables
- ข้�อมู�ลที่� มู�ความูสั�มูพั�นธ์�กั�นน�ามูาเกั�บรวมูรวมูไว�ด้�วยกั�น - เพู��อการใช้�ข้�อมูลเหล�านั้��นั้ร�วมูก�นั้อย์�างมู ประส�ทธิ�ภาพู - โดิ์ย์มูากมู�กท&าเพู��อตอบสนั้องการท&างานั้ดิ์�านั้สารสนั้เทศ
33
ระบบจั�ดิ์การฐานั้ข้�อมูล (Database Management System)
System Software ท � ใช้�ในั้การจั�ดิ์การข้�อมูล จั,ดิ์ประสงค์�เพู��อสร�างสภาพูแวดิ์ล�อมูท �สะดิ์วกและมู
ประส�ทธิ�ภาพูในั้การจั�ดิ์เก/บและเข้�าถึ1งข้�อมูล ข้องฐานั้ข้�อมูล
การเข้�าถึ1ง/ใช้�ข้�อมูล จัะใช้�ภาษาเช้�งโค์รงสร�าง (Sql) ท �ท&าหนั้�าท �เป3นั้ต�วกลางระหว�างฐานั้ข้�อมูลก�บผู้�ใช้�งานั้
ประกอบไปดิ์�วย์ฟั7งก�ช้�นั้ต�างๆช้�วย์ให�ระบบฐานั้ข้�อมูลมู ค์วามูถึกต�อง (Integrity) และมู ค์วามูสอดิ์ค์ล�องก�นั้
(Consistency)
4
ภาษา SQL เป3นั้ภาษาท �ใช้�ในั้การเข้�าถึ1งข้�อมูล ในั้ระบบจั�ดิ์การ
ฐานั้ข้�อมูล เป3นั้ภาษาในั้แบบ Non Procedural การท&างานั้พู��นั้ฐานั้ อย์�บนั้ Set และ Relation แบ�งการท&างานั้เป3นั้ 3 กล,�มูใหญ่�ๆไดิ์�แก�
DDL / DML และ DCL
5
กัล��มูข้องค�าสั� งในภาษา SQL – DDL Data Definition Language (DDL)
เป3นั้กล,�มูค์&าส��งท �ใช้�ในั้การก&าหนั้ดิ์โค์รงสร�างต�างๆในั้ระบบจั�ดิ์การฐานั้ข้�อมูลต�วอย์�างข้องค์&าส��งไดิ์�แก� Create , Alter , Drop
6
ตั�วอย�างกัารใช้�ภาษา SQL แบบ DDLCREATE TABLE project01 ( proj_num varchar(2)
NOT NULL, proj_name varchar(20) NOT NULL ) ;
ALTER TABLE project01 ADD proj_status VARCHAR( 5 ) NOT NULL ;
DROP TABLE project01 ;
CREATE USER user01 IDENTIFIED BY "1234" ;DROP USER user01 ;
6
7
กัล��มูข้องค�าสั� งในภาษา SQL – DML Data Manipulation Language (
DML) เป3นั้กล,�มูค์&าส��งท �ใช้�ในั้การเข้�าถึ1งข้�อมูล แบ�งเป3นั้ 2 กล,�มูหล�กๆค์�อ กล,�มูท �ใช้�ในั้การแสดิ์งผู้ลข้�อมูล ไดิ์�แก� ค์&า
ส��ง Select กล,�มูท �ใช้�ในั้การปร�บปร,งเนั้��อหาข้�อมูล ไดิ์�แก�
ค์&าส��ง Insert , Update , Delete
88
ตั�วอย�างกัารใช้�ภาษา SQL แบบ DMLINSERT INTO project ( proj_num, proj_name) VALUES (16, “Burapha") ;
SELECT * FROM project WHERE proj_num = 16 ;
UPDATE Project set proj_name = "Burapha Chant.“
WHERE proj_num = 16 ;
DELETE FROM project where proj_num = 16 ;
9
กัล��มูข้องค�าสั� งในภาษา SQL – DCL Data Control Language (DCL)
Grant , RevokeGRANT SELECT , INSERT ,
UPDATE , DELETE , ALTER ON demo TO user02;
REVOKE ALL PRIVILEGES ON demoFROM user02 ;
1010
เที่คน'คกัารใช้�งานภาษา SQL เพั( อใช้�ในกัารแสัด้งผลข้�อมู�ล
ว'เคราะห์� output ดิ์ว�าจัะต�องแสดิ์งผู้ลล�พูธิ�อย์�างไรตามูค์วามูต�องการข้อง
โจัทย์�ว'เคราะห์� input
ต�องใช้�ข้�อมูล (column) จัากตาราง (Table) อะไรว'เคราะห์� process
จั&า syntax หร�อ รปแบบข้องค์&าส��งให�ถึกต�อง ว�เค์ราะห�ว�า ต�องเข้ ย์นั้เง��อนั้ไข้อย์�างไร จั1งจัะไดิ์�ผู้ลตามู
ต�องการ
Syntax : รปแบบค์&าส��ง
1212
- 1 ค์&าส��งพู��นั้ฐานั้ Select <filed_1 , filed_2 , … , filed_n | *
> From <Table_name> ; หากเล�อกท,ก column สามูารถึใช้�เค์ร��องหมูาย์ * ไดิ์�ตั�วอย�างselect * from employee ;
select emp_no , emp_name , emp_lname
from employee ;
1313
2 – ค์&าส��งแบบมู เง��อนั้ไข้ (condition)
Select <filed_1 , filed_2 , … , filed_n / * >
From <Table_name> Where < condition > ;
14
Condition Condition หร�อ เง��อนั้ไข้ หมูาย์ถึ1งการระบ,ค์วามูต�องการ มู
รปแบบการเข้ ย์นั้ดิ์�งนั้ �ค์�อ <field> <operator> < value >
Filed ค์�อ Filed ใดิ์ๆท �อย์�ในั้ราย์ช้��อ Table อย์�ในั้ค์&าส��ง From
Operator ค์�อค์&าส��งในั้การปฏิ�บ�ต�การ เช้�นั้ = , > , < , != , is null
Value ค์�าท �ใช้�เป3นั้เง��อนั้ไข้ หากเป3นั้ต�วเลข้สามูารถึระบ,ไดิ์�เลย์ หากเป3นั้ต�วอ�กษรต�องมู การใส� " ก�อนั้และหล�งค์�าท �เป3นั้เง��อนั้ไข้
15
ต�วอย์�าง - ค์&าส��งแบบมู เง��อนั้ไข้ Select * from work
Where proj_num = 15 ; (เล�อกข้�อมูลการท&างานั้โค์รงการ 15)
Select * from work
Where hours > 3 ; (เล�อกข้�อมูลการท&างานั้ท �มูากกว�า 3 ช้��วโมูง)
Select * from employee where job = "Programmer" ; (เล�อกพูนั้�กงานั้ท �เป3นั้ Programmer)
1616
3 – ค์&าส��งแบบหลาย์เง��อนั้ไข้Select <filed_1 , filed_2 , … , filed_n /
* > From <Table_name> Where < condition-1 ><And / Or > <condition-2> ;
And ให�ผู้ลเหมู�อนั้การ IntersectionOr ให�ผู้ลเหมู�อนั้การ Union
17
ต�วอย์�าง ค์&าส��งแบบหลาย์เง��อนั้ไข้– 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 ช้��วโมูง : อาจัท&างานั้อย์�โค์รงการอ��นั้ )
1818
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 ใดิ์ท �ช้��อซ้ำ&�าก�นั้ท��งสองตาราง เมู��ออ�างถึ1ง ตั�อง ระบ,ช้��อตาราง ตามูดิ์�วย์ช้��อฟั<ลดิ์� เช้�นั้ work.emp_num หร�อ employee.emp_num
19
ต�วอย์�าง - ค์&าส��งท �มู การใช้�งานั้หลาย์ตาราง (join)Select employee.emp_num , emp_name ,
hoursFrom employee , workWhere employee.emp_num =
work.emp_num ; ( แสัด้งข้�อมู�ลรห์�สัพัน�กังาน ช้( อพัน�กังาน และช้� วโมูงที่�างาน
เน( องจากั ช้( อพัน�กังาน อย��คนละตัารางกั�บ ข้�อมู�ลช้� วโมูงที่�างาน
จ.งตั�องมู�กัาร join ตัารางที่� มู�ข้�อมู�ลเข้�าด้�วยกั�น)
2020
- 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)
21
ต�วอย์�าง - ค์&าส��งท �มู การเร ย์งล&าดิ์�บSelect employee.emp_num , emp_name ,
proj_num,hoursFrom employee , workWhere employee.emp_num =
work.emp_numOrder by employee.emp_num ;
(แสัด้งข้�อมู�ลรห์�สัพัน�กังาน ช้( อพัน�กังาน และช้� วโมูงที่�างานเร�ยงล�าด้�บข้�อมู�ล ตัามูรห์�สัพัน�กังาน)
2222
6 – การใช้� Operator : like
Select <filed_1 , filed_2 , … , filed_n / * >
From <table_1 , table_2 , …, table_n>
Where <filed_1 like “%” > ;
ค�าสั� ง like ห์มูายถึ.งค�าที่� คล�ายกั�น โด้ยมู�สั�ญญล�กัษ� % เป็2น wild-card ที่� ใช้�ห์มูายถึ.งค�าใด้ๆกั�ได้�
23
ต�วอย์�าง - การใช้� Operator : likeSelect * from employee where emp_name like “A%” ;(แสัด้งข้�อมู�ล พัน�กังานที่� ช้( อข้.4นตั�นด้�วยอ�กัษร A )
Select * from employee where emp_name like “%A%” ;(แสัด้งข้�อมู�ล พัน�กังานที่� ช้( อมู�อ�กัษร A )
2424
7 – การใช้� Operator : in หร�อ การท&างานั้แบบเซ้ำตselect <filed1 , filed2 , … , filedn / * > from <Table_name> where field_i in ( value_lits) ;
ในวงเล�บที่างข้วาข้อง in ห์มูายถึ.ง กัารมู�ค�าได้�ห์ลายค�า แต�ละค์�าค์��นั้ดิ์�วย์ เค์ร��องหมูาย์ , (comma) เปร ย์บเสมู�อนั้ value_list ค์�อ เซ้ำตหร�อกล,�มูข้องค์�าท �เราต�องการใช้�เป3นั้ เง��อนั้ไข้
หากเราใช้� Operator = ค�าที่างข้วาจะมู�ได้�ค�าเด้�ยวเที่�าน�4น
25
ต�วอย์�าง การใช้� – Operator : inselect * from employeewhere deptno in ( “Programmer” , “System
Analyst”) ;(แสัด้งข้�อมู�ลพัน�กังานที่� เป็2นโป็รแกัรมูเมูอร�ห์ร(อ น�กั
ว'เคราะห์�ระบบ)select * from work where proj_num in ( 15 , 22 ) ;(แสัด้งข้�อมู�ลกัารที่�างานโครงกัาร 15 ห์ร(อ โครงกัาร
22 )
26
8 – การใช้�ค์�า Null ในั้การเก/บข้�อมูล ค์�า Null ไมู�เท�าก�บ ค์�าว�าง ค์�า
Null ค์�อไมู�มู การเก/บค์�าใดิ์ๆในั้ Filed นั้��นั้ การท&างานั้ก�บค์�า null ต�องใช้� Operator “is”
ต�วอย์�างเช้�นั้ select * from employee where job is null ;
(แสัด้งข้�อมู�ลพัน�กังานที่� ไมู�มู�ห์น�าที่� )
2727
- 9 รปแบบค์&าส��ง : การท&างานั้เช้�งนั้�เสธิ select <filed1 , … , filedn / * > from <table_name> where field_i not in ( value_lits) ;
select <filed1 , … , filedn / * > from <table_name> where field_i != value ;
28
ต�วอย์�าง : การท&างานั้เช้�งนั้�เสธิselect * from workwhere proj_num not in ( 15 , 22) ;(แสัด้งข้�อมู�ลกัารที่�างาที่� ไมู�ใช้� โป็รเจ�ค 15 และ
22)
select * from employeewhere job != “Programmer” ;(แสัด้งข้�อมู�ลกัารที่�างานข้องพัน�กังานที่� ไมู�ใช้�
Programmer)
2929
- 10 รปแบบค์&าส��ง : การท&างานั้แบบ sub queryselect <filed1 , filed2 , … , filedn / * > from <Table_name> where field_i = ( select field from
table1) ;
select <filed1 , filed2 , … , filedn / * > from <Table_name> where field_i in ( select field from
table1) ;
30
Sub-query การ Select ในั้การท&า Sub-query สามูารถึ
เล�อกไดิ์� Filed เดิ์ ย์วเท�านั้��นั้ สามูารถึเล�อกใช้� Operator เช้�งเซ้ำต (in) เมู��อ
Sub-query ให�ผู้ลมูากกว�า 1 ค์�า จัะสามูารถึใช้� Operator เช้�งเปร ย์บเท ย์บ ( = ,
> , < ) ไดิ์� เมู��อ การท&า sub-query ให�ผู้ลค์�าเดิ์ ย์วเท�านั้��นั้
3131
ต�วอย์�าง : การท&างานั้แบบ sub queryselect * from workwhere emp_num deptno in ( select emp_num from
employee where job = “Programmer”) ;(แสัด้งข้�อมู�ลกัารที่�างานข้องผ��ที่� ที่�างานห์น�าที่� Programmer – ที่�
อาจมู�ห์ลายคน)select * from workwhere proj_num = ( select proj_num from project
where proj_name = “โรงงานั้แกลงการย์าง” );
(แสัด้งข้�อมู�ลกัารที่�างานข้องผ��ที่� งานในโครงกัาร โรงงานแกัลงกัารยางค� – มู�โครงกัารเด้�ยวแน�นอน)
3232
-11 รปแบบค์&าส��ง : การท&างานั้แบบรวมู (Aggregate function)
Select field-0 , [sum(field1 , count(*), min(field2) , max(field3),
avg(filed4) ]From <table_name> Group by filed-0< Having ( condition of aggregate
function) >
33
การใช้�งานั้ Aggregate function หากใช้� aggregate function มู�กต�องใช้�ก�บ
function การจั�ดิ์กล,�มู ( group by )
ท,ก filed ท � select มู�กจัะต�องอย์�ในั้ group by ดิ์�วย์ function count มู�กใช้� parameter * แทนั้ช้��อ
field เนั้��องจัากอาจัมู ค์�า null อย์�ในั้บางราย์การ aggregate function ไมู�ใช้� Field ดิ์�งนั้��นั้จั1งไมู�
สามูารถึนั้&ามูาเป3นั้เง��อนั้ไข้ในั้ช้�วงค์&าส��ง where ไดิ์� แต�สามูารถึใช้�เป็2นเง( อนไข้ในช้�วงค�าสั� ง Having
34
select job , count(*) from employee group by job ;(น�บจ�านวนพัน�กังานจ�ด้กัล��มูตัามูอาช้�พั)
select emp_num , sum(work_hours) from work group by emp_num ; (รวมูช้� วโมูงที่�างาน จ�ด้กัล��มูตัามูรห์�สัพัน�กังาน)
ตั�วอย�าง การท&างานั้แบบรวมู (Aggregate function)
35
select proj_num , min(work_hours) , max(work_hours) from workgroup by proj_num ; (แสัด้งช้� วโมูงที่�างานน�อยที่� สั�ด้ และมูากัที่� สั�ด้ ช้องแตั�ละโครงกัาร)
ตั�วอย�าง การท&างานั้แบบรวมู (Aggregate function) 2( )
36
ตั�วอย�าง การท&างานั้แบบรวมู (Aggregate function) (3)select job, count(*) from employeegroup by job having count(*) > 2 ;(น�บจ�านวนพัน�กังาน จ�ด้กัล��มูตัามูอาช้�พั เฉพัาะที่� มู�พัน�กังาน
มูากักัว�า 3 คน)
select emp_num , sum(work_hours) from work
group by emp_num having sum(work_hours) > 20;
(รวมูช้� วโมูงที่�างาน จ�ด้กัล��มูตัามูรห์�สัพัน�กังาน เฉพัาะที่� มู�ช้� วโมูงกัารที่�างานรวมูมูากักัว�า 20 ช้� วโมูง)
37
12 รปแบบค์&าส��งท �มู การค์&านั้วณSelect employee.emp_num , proj_num,
chg_hours , work_hours , chg_hours * work_hours
From employee , workWhere employee.emp_num =
work.emp_num ;(แสดิ์งข้�อมูลการท&างานั้ข้องพูนั้�กงานั้แต�ละค์นั้ในั้แต�ละ
โค์รงการ และค์�าตอบแทนั้ท �ไดิ์�)
38
13 รปแบบค์&าส��งท �มู การเปล �ย์นั้ช้��อการแสดิ์งผู้ลSelect employee.emp_num , proj_num,
chg_hours , work_hours , chg_hours * work_hours pay
From employee , workWhere employee.emp_num =
work.emp_num ;(แสดิ์งข้�อมูลการท&างานั้ข้องพูนั้�กงานั้แต�ละค์นั้ในั้แต�ละ
โค์รงการ และค์�าตอบแทนั้ท �ไดิ์� แสัด้งคอล�มูน�ค�าตัอบแที่นค(อ pay )
39
14 รปแบบค์&าส��งท �มู การเปล �ย์นั้ช้��อตารางSelect e.emp_num , proj_num,
chg_hours , work_hours , chg_hours * work_hours
From employee e, work wWhere e.emp_num = w.emp_num ;(แสดิ์งข้�อมูลการท&างานั้ข้องพูนั้�กงานั้แต�ละค์นั้ในั้
แต�ละโค์รงการ และค์�าตอบแทนั้ท �ไดิ์�)
40
สร,ปรปแบบค์&าส��งSelect …..From …..Where ….. and (or) …..Group by …. ( Having ….)Order by ….
QUESTIONS