คำสั่ง SQL

Download Report

Transcript คำสั่ง SQL

Introduction to
Database SQL
วรวิทย ์ พูลสวัสดิ ์
1
ฐานขอมู
้ ล (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
ข้อมูลทีม
่ ค
ี วามสั มพันธกั
์ นนามาเก็บรวมรวมไว้
น
ดวยกั
้
- เพือ
่ การใช้ขอมู
นอยางมี
้ ลเหลานั
่ ้นรวมกั
่
่
ประสิ ทธิภาพ
2
ระบบจัดการฐานขอมู
้ ล (Database
Management System)




System Software ที่ ใช้ในการจัดการขอมู
้ ล
จุดประสงคเพื
่ สรางสภาพแวดล
อมที
ส
่ ะดวก
์ อ
้
้
และมีประสิ ทธิภาพในการจัดเก็บและเขาถึ
้ ง
ขอมู
้ ล
้ ล ของฐานขอมู
การเขาถึ
้ ง/ใช้ขอมู
้ ล จะใช้ภาษาเชิง
โครงสราง
(Sql)
้
ทีท
่ าหน้าทีเ่ ป็ นตัวกลางระหวางฐานข
อมู
่
้ ลกับ
ผูใช
งกชั
้ ้งาน ประกอบไปดวยฟั
้
์ นตางๆช
่
่ วยให้
ระบบฐานขอมู
้ ลมีความถูกตอง
้ (Integrity) และ
3
ภาษา SQL




เป็ นภาษาทีใ่ ช้ในการเขาถึ
้ ล ในระบบ
้ งขอมู
จัดการฐานขอมู
้ ล
เป็ นภาษาในแบบ Non Procedural
การทางานพืน
้ ฐาน อยูบน
Set และ
่
Relation
แบงการท
างานเป็ น 3 กลุมใหญ
ๆได
แก
่
่
่
้ ่
DDL / DML และ DCL
4
กลุมของค
าสั่ งในภาษา SQL –
่
DDL

Data Definition Language (DDL)
เป็ นกลุมค
่ าสั่ งทีใ่ ช้ในการกาหนดโครงสราง
้
ตางๆในระบบจั
ดการฐานขอมู
่
้ ล
ตัวอยางของค
Create , Alter ,
าสั่ งไดแก
่
้ ่
Drop
5
ตัวอยางการใช
่
้ภาษา SQL แบบ
DDL
CREATE 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
6
กลุมของค
าสั่ งในภาษา SQL –
่
DML

Data Manipulation Language (
DML)
เป็ นกลุมค
่ าสั่ งทีใ่ ช้ในการ
เขาถึ
้ งขอมู
้ ล แบงเป็
่ น 2 กลุม
่
หลักๆคือ


กลุมที
่ ใ่ ช้ในการแสดงผลขอมู
้ ล ไดแก
้ ่
คาสั่ ง Select
กลุมที
่ ใ่ ช้ในการปรับปรุงเนื้อหาขอมู
้ ล
ไดแก
Insert , Update ,
้ ค
่ าสั่ ง
7
ตัวอยางการใช
่
้ภาษา SQL แบบ
DML
INSERT 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 =
8
กลุมของค
าสั่ งในภาษา SQL –
่
DCL
Data Control Language (DCL)
 Grant , Revoke
GRANT SELECT , INSERT ,
UPDATE , DELETE , ALTER
ON demo TO user02;

REVOKE ALL PRIVILEGES ON demo
FROM user02 ;
9
เทคนิคการใช้งานภาษา SQL เพือ
่ ใช้
ในการแสดงผลข้อมูล



วิเคราะห ์ output
ดูวาจะต
องแสดงผลลั
พธอย
่
้
์ างไรตามความ
่
ตองการของโจทย
้
์
วิเคราะห ์ input
ตองใช
้
้ขอมู
้ ล (column) จากตาราง (Table)
อะไร
วิเคราะห ์ process
จา syntax หรือ รูปแบบของคาสั่ งให้ถูกต้อง
วิเคราะหว์ า่ ตองเขี
ยนเงือ
่ นไขอยางไร
จึงจะ
้
่
10

Syntax : รูปแบบคาสั่ ง
1 - คาสั่ งพืน
้ ฐาน
Select <filed_1 , filed_2 , … , filed_n | * >
From <Table_name> ;
 หากเลือกทุก column สามารถใช้เครือ
่ งหมาย
* ได้
ตัวอยาง
่
select * from employee ;
select emp_no , emp_name , emp_lname
from employee ;
12
2 – คำสัง่ แบบมีเงื่อนไข (condition)
Select <filed_1 , filed_2 , … , filed_n / * >
From <Table_name>
Where < condition > ;
13
Condition
Condition หรือ เงือ
่ นไข หมายถึงการระบุ
ความตองการ
มีรป
ู แบบการเขียนดังนี้คอ
ื
้
<field> <operator> < value >
อ
่ Table อยู่
Filed คือ Filed ใดๆทีอ
่ ยูในรายชื
่
ในคาสั่ ง From
Operator คือคาสั่ งในการปฏิบต
ั ก
ิ าร เช่น = , >
, < , != , is null
Value คาที
่ นไข หากเป็ นตัวเลข
่ ใ่ ช้เป็ นเงือ
สามารถระบุไดเลย
หากเป็ นตัวอักษรตองมี
้
้
14
ตัวอย่ำง - คำสัง่ แบบมีเงื่อนไข
Select * from work
Where proj_num = 15 ; (เลือกขอมู
้ ลการ
ทางานโครงการ 15)
Select * from work
Where hours > 3 ; (เลือกขอมู
้ ลการทางานที่
มากกวา่ 3 ชัว
่ โมง)
Select * from employee
where job = "Programmer" ; (เลือก
พนักงานทีเ่ ป็ น Programmer)
15
3 – คาสั่ งแบบหลายเงือ
่ นไข
Select <filed_1 , filed_2 , … , filed_n / * >
From <Table_name>
Where < condition-1 >
<And / Or > <condition-2> ;
And ให้ผลเหมือนการ Intersection
Or ให้ผลเหมือนการ Union
16
ตัวอยาง
– คาสั่ งแบบหลายเงือ
่ นไข
่
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 ชัว
่ โมง : อาจทางานอยูโครงการ
่
อืน
่ )
17
4 – คาสั่ งทีม
่ ก
ี ารใช้งานหลายตาราง
(join)
Select <filed_1 , filed_2 , … , filed_n / * >
From <table_1 , table_2 , …, table_n>
Where < condition-1 > ;
การเชือ
่ ม PK และ FK ของทัง้ สอง
1. ตองมี
้
ตารางเขาด
น (Join)
้ วยกั
้
2. หากมี field ใดทีช
่ อ
ื่ ซา้ กันทัง้ สองตาราง
ง ต้อง ระบุชอ
เมือ
่ อางถึ
ื่ ตาราง ตามดวย
้
้
ชือ
่ ฟิ ลด ์ เช่น
work.emp_num หรือ
employee.emp_num
18
ตัวอยาง
่ ก
ี ารใช้งานหลาย
่ - คาสั่ งทีม
ตาราง (join)
Select employee.emp_num , emp_name ,
hours
From employee , work
Where employee.emp_num =
work.emp_num ;
( แสดงขอมู
่ พนักงาน และ
้ ลรหัสพนักงาน ชือ
ชัว
่ โมงทางาน
เนื่องจาก
ชือ
่ พนักงาน อยูคนละตารางกั
บ
่
ข้อมูลชัว
่ โมงทางาน
19
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)
หากตองการเรี
ยงตากมาไปน้อยให้ใช้
้
20
ตัวอยาง
- คาสั่ งทีม
่ ก
ี ารเรียงลาดับ
่
Select employee.emp_num , emp_name ,
proj_num,hours
From employee , work
Where employee.emp_num =
work.emp_num
Order by employee.emp_num ;
(แสดงขอมู
่ พนักงาน และ
้ ลรหัสพนักงาน ชือ
ชัว
่ โมงทางาน
21
6 – กำรใช้ Operator : like
Select <filed_1 , filed_2 , … , filed_n / * >
From <table_1 , table_2 , …, table_n>
Where <filed_1 like “%” > ;
คาสั่ ง like หมายถึงคาที
่ ลายกั
น โดยมี
่ ค
้
สั ญญลักษ์ % เป็ น wild-card ทีใ่ ช้
หมายถึงคาใดๆก็
ได ้
่
22
ตัวอยาง
- การใช้ Operator :
่
like
Select * from employee
where emp_name like “A%” ;
(แสดงขอมู
่ อ
ื่ ขึน
้ ตนด
กษร A
้ ล พนักงานทีช
้ วยอั
้
)
Select * from employee
where emp_name like “%A%” ;
(แสดงขอมู
่ อ
ื่ มีอก
ั ษร A )
้ ล พนักงานทีช
23
7 – การใช้ Operator : in หรือ
การทางานแบบเซต
select <filed1 , filed2 , … , filedn / * >
from <Table_name>
where field_i in ( value_lits) ;
ในวงเล็บทางขวาของ in หมายถึง การมีคาได
่
้
หลายคา่ แตละค
าคั
่ ดวย
เครือ
่ งหมาย ,
่
่ น
้
(comma)
เปรียบเสมือน value_list คือ
เซตหรือกลุมของค
าที
่
่ เ่ ราตองการใช
้
้เป็ น
เงือ
่ นไข
24
ตัวอยาง
– การใช้ Operator : in
่
select * from employee
where deptno in ( “Programmer” ,
“System Analyst”) ;
(แสดงขอมู
้ ลพนักงานทีเ่ ป็ นโปรแกรมเมอร ์
หรือ นักวิเคราะหระบบ)
์
select * from work
where proj_num in ( 15 , 22 ) ;
(แสดงขอมู
้ ลการทางานโครงการ 15 หรือ
25
8 – การใช้คา่ Null


ในการเก็บขอมู
่
่ าง
่ บ คาว
้ ล คา่ Null ไมเท
่ ากั
คา่ Null คือไมมี
Filed นั้น
่ การเก็บคาใดๆใน
่
การทางานกับคา่ null ตองใช
้
้ Operator
“is”
ตัวอยางเช
่
่น
select * from employee where job is null
;
(แสดงขอมู
้ ลพนักงานทีไ่ มมี
่ หน้าที)่
26
9 - รูปแบบคาสั่ ง : การทางานเชิง
นิเสธ
select <filed1 , … , filedn / * >
from <table_name>
where field_i not in ( value_lits) ;
select <filed1 , … , filedn / * >
from <table_name>
where field_i != value ;
27
ตัวอยาง
: การทางานเชิงนิเสธ
่
select * from work
where proj_num not in ( 15 , 22) ;
(แสดงขอมู
้ ลการทางาทีไ่ มใช
่ ่ โปรเจ็ค 15 และ
22)
select * from employee
where job != “Programmer” ;
(แสดงขอมู
้ ลการทางานของพนักงานทีไ่ มใช
่ ่
Programmer)
28
10 - รูปแบบคาสั่ ง : การทางานแบบ
sub query
select <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) ;
29
Sub-query



การ Select ในการทา Sub-query สามารถ
เลือกได้ Filed เดียวเทานั
่ ้น
สามารถเลือกใช้ Operator เชิงเซต (in)
เมือ
่ Sub-query ให้ผลมากกวา่ 1 คา่
จะสามารถใช้ Operator เชิงเปรียบเทียบ (
= , > , < ) ได้ เมือ
่ การทา sub-query
ให้ผลคาเดี
่ ้น
่ ยวเทานั
30
ตัวอยาง
: การทางานแบบ sub
่
query
select * from work
where emp_num deptno in ( select emp_num
from employee
where job =
“Programmer”) ;
(แสดงขอมู
่ างานหน้าที่
้ ลการทางานของผู้ทีท
Programmer – ทีอ
่ าจมีหลายคน)
select * from work
where proj_num = ( select proj_num from project
where proj_name = “โรงงานแก
ลงการยาง” );
31
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)
>
32
การใช้งาน Aggregate function




หากใช้ aggregate function มักตองใช
้กับ
้
function การจัดกลุม
่
( group by )
ทุก filed ที่ select มักจะตองอยู
group
ใน
้
่
by ดวย
้
function count มักใช้ parameter * แทนชือ
่
field เนื่องจากอาจมีคา่ null อยูในบางรายการ
่
aggregate function ไมใช
่ ่ Field ดังนั้นจึงไม่
สามารถนามาเป็ นเงือ
่ นไขในช่วงคาสั่ ง where
33
ตัวอยาง
การทางานแบบรวม
่
(Aggregate function)
select job , count(*)
from employee group by job ;
(นับจานวนพนักงานจัดกลุมตามอาชี
พ)
่
select emp_num , sum(work_hours)
from work group by emp_num ;
(รวมชัว
่ โมงทางาน จัดกลุมตามรหั
สพนักงาน)
่
34
ตัวอยาง
การทางานแบบรวม
่
(Aggregate function) (2)
select proj_num , min(work_hours) ,
max(work_hours)
from work
group by proj_num ;
(แสดงชัว
่ โมงทางานน้อยทีส
่ ุด และมากทีส
่ ด
ุ
ชองแตละโครงการ)
่
35
ตัวอยาง
การทางานแบบรวม
่
(Aggregate function) (3)
select job, count(*) from employee
group by job having count(*) > 2 ;
(นับจานวนพนักงาน จัดกลุมตามอาชี
พ เฉพาะที่
่
มีพนักงานมากกวา่ 3 คน)
select emp_num , sum(work_hours) from
work
group by emp_num having sum(work_hours)
> 20;
(รวมชัว
่ โมงทางาน จัดกลุมตามรหั
สพนักงาน
่
36
12 รูปแบบคาสั่ งทีม
่ ก
ี ารคานวณ
Select employee.emp_num , proj_num,
chg_hours , work_hours ,
chg_hours * work_hours
From employee , work
Where employee.emp_num =
work.emp_num ;
(แสดงขอมู
้ ลการทางานของพนักงานแตละคนใน
่
แตละโครงการ
และคาตอบแทนที
ไ่ ด)้
่
่
37
13 รูปแบบคาสั่ งทีม
่ ก
ี ารเปลีย
่ นชือ
่
การแสดงผล
Select employee.emp_num , proj_num,
chg_hours , work_hours ,
chg_hours * work_hours pay
From employee , work
Where employee.emp_num =
work.emp_num ;
(แสดงขอมู
้ ลการทางานของพนักงานแตละคนใน
่
แตละโครงการ
และคาตอบแทนที
ไ่ ด้ แสดง
่
่
คอลัมนค
อ pay )
์ าตอบแทนคื
่
38
14 รูปแบบคาสั่ งทีม
่ ก
ี ารเปลีย
่ นชือ
่
ตาราง
Select e.emp_num , proj_num,
chg_hours , work_hours ,
chg_hours * work_hours
From employee e, work w
Where e.emp_num = w.emp_num ;
(แสดงขอมู
้ ลการทางานของพนักงานแตละคนใน
่
แตละโครงการ
และคาตอบแทนที
ไ่ ด)้
่
่
39
สรุปรูปแบบคาสั่ ง
Select …..
From …..
Where ….. and (or) …..
Group by …. ( Having ….)
Order by ….
40
QUESTIONS