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