บทที่ 9 ภาษา SQL (Standard Query Language) 9.1 ภาษา Standard relational database Query Language (SQL) ภาษาที่กลายเปนภาษามาตรฐานสําหรับระบบฐานขอมูลคือ ภาษา Standard relational database Query Language หรือเอสคิวแอล (SQL) หรือซีควอล (SE-QUEL) ซึ่งเปนภาษาที่พัฒนาขึ้นมาโดยบริษัท ไอบีเอ็ม ภาษา SQL (Standard Query Language) เปนสวนหนึ่งของระบบฐานขอมูลแบบรีเลชั่นเนล (Relational Database) ทีไ่ ดรบั ความนิยมมากเพราะงายตอความเขาใจ และอยูในรูปภาษาอังกฤษ ภาษา SQL แบงออกเปน 2 สวน คือ • ภาษาที่ใชสําหรับนิยามขอมูล (Data Definition Language-DDL) • ภาษาสําหรับการจัดการขอมูลล (Data Manipulation Language: DML) • ภาษาควบคุม (Control Language) • ภาษาในการเลือกขอมูล (Data Query Language) รูปแบบการใชคําสั่ง SQL สามารถใชไดเปน 2 รูปแบบ ดังนี้ คือ • คําสั่ง SQL ที่ใชเรียกดูขอมูลไดทันที (Interactive SQL) เปนการเรียกใชคําสั่ง SQL สั่งงานบนจอภาพ เพื่อเรียกดูขอมูลในขณะที่ทํางานไดทันที เชน SELECT CITY FROM SUPPLIER WHERE SNO = ‘SE’; • คําสั่ง SQL ที่ใชเขียนรวมกันโปรแกรมอื่น ๆ (Embedded SQL) เปนคําสั่ง SQL ที่ใชรวมกับคําสั่งของโปรแกรมภาษาตาง ๆ เชน PL/1 PASCAL ฯลฯ หรือแม แตกับคําสั่งในโปรแกรมที่ระบบจัดการฐานขอมูลนั้นมีใชเฉพาะ เชน ORACLE มี PL/SQL (Procedural Language /SQL) ที่สามารถเขียนโปรแกรมและนําคําสั่ง SQL มาเขียนรวมดวย เปนตน ตัวอยางการใชคําสั่ง SQL ในภาษา PL/1 EXEC SQL SELECT CITY INTO :XCITY FROM SUPPLIER WHERE SNO = ‘S4’;
9.2 ภาษาที่ใชสําหรับนิยามขอมูล (Data Definition Language-DDL ) Data Definition Language (DDL) เปนภาษาที่ใชนิยามโครงสรางขอมูล เพื่อเปลี่ยนแปลง หรีอ ยกเลิกโครงสรางฐานขอมูลตามที่ออกแบบไว โครงสรางดังกลาวคือ สคีมา (Schema) นั้นเอง ตัวอยางเชน การกําหนดใหฐานขอมูลประกอบดวยตารางอะไรบาง ชื่ออะไร ประเภทใด มีอินเด็กซ (Index)
เอกสารประกอบการบรรยายวิชา 204204 การออกแบบและพัฒนาฐานขอมูล
8-2
ภาษา DDLประกอบดวย 3 คําสั่งคือ • คําสั่งการสราง (Create) ไดแก การสรางตารางและอินเด็กซ CREATE TABLE
( Attribute 1 Type 1, Attribute 2 Type 2 , ) CREATE Unique Index on X เชน CREATE TABLE S11 (SNO CHAR(5) Not NULL, SNAME CHAR(10) , STATUS integer ) CREATE Unique Index XS11 on S11(SNO) • คําสั่งเปลี่ยนแปลงโครงสราง ALTER TABLE < ชือ่ ตารางที่ตั้งขึ้น > <คําสั่งการเปลี่ยนแปลง> (<ชื่อคอลัมน ประเภทขอมูล>); ตัวอยางเชน ALTER TABLE SUPPLIER ADD (LAST_SNAME Char(10)); • คําสั่งยกเลิก (Drop) ตางๆ การลบโครงสรางตาราง DROP TABLE < ชือ่ ตารางที่ตั้งขึ้น > ภาษาดังกลาวคือ ภาษาที่ใชสรางฐานขอมูลลงในคอมพิวเตอร หลังจากที่เราไดออกแบบแลววา ฐานขอมูลมีกี่รีเลชั่น แตละรีเลชั่นมีความสัมพันธอยางไร จากนั้นการใชภาษา DDL นี้แปลงรีเลชั่น ตางๆ ใหอยูในรูปภาษาสําหรับนิยามขอมูล เพื่อปอนเขาสูระบบฐานขอมูล เพื่อสรางฐานขอมูลที่แทจริง ใหเกิดขึ้นในคอมพิวเตอร ภาษา DDL สามารถสรุปคําสั่งตางๆไดดังตอไปนี้ คําสั่ง ความหมาย CREATE TABLE นิยามโครงสรางขอมูลในรูปตารางบนฐานขอ มูล DROP TABLE ลบโครงสรางตารางขอมูลออกจากระบบ ALTER TABLE แกไขปรับปรุงโครงสรางตาราง
8-3
บทที่ 8 พีชคณิตเชิงสัมพันธและแคลคูลัสเชิงสัมพันธ
คําสั่ง CREATE INDEX DROP INDEX CREATE VIEW DROP VIEW
ความหมาย สรางดัชนีของตาราง ลบ ดัชนีของตารางออกจากระบบ กําหนดโครงสรางวิวของผูใช ลบโครงสรางวิวออกจากระบบ
9.2.1 คําสั่งนิยามโครงสรางตาราง การสรางตารางใน ฐานขอมูลแบบรีเลชั่นเนล โดยเฉพาะฐานขอมูลขนาดใหญบนระบบ UNIX จะทําดวยการปอนคําสัง่ ในลักษณะเท็กซโหมด (Text Mode) เขาไปในระบบฐานขอมูล ดังรูป แบบตอไปนี้ CREATE TABLE <ชือ่ ตาราง> (<ชือ่ คอลัมน ประเภทของขอมูล>[,<ชือ่ คอลัมน ประเภทของขอมูล>]....); 9.2.2 ประเภทของขอมูล ประเภทของขอมูลแบงเปน 5 ประเภทใหญๆ ขึ้นอยูกับซอฟตแวรระบบฐานขอมูลที่ใช วาคืออะไร ตัวอยางเชน CHAR, INTEGER, DATE ฯลฯ คําสั่งการลบโครงสรางตาราง DROP TABLE <ชือ่ ตารางที่ตองการลบ> คําสั่งการเปลี่ยนแปลงโครงสรางตาราง ในกรณีที่ตองการเปลี่ยนแปลงโครงสรางตารางที่เคยนิยามไว สามารถใชคําสั่งตอไปนี้ ALTER TABLE <ชือ่ ตารางที่ตองการเปลี่ยนแปลง> <คําสั่งการเปลี่ยนแปลง><[,<ชือ่ คอลัมน ประเภทของขอมูล>]> คําสั่งดัชนี ดัชนี ( INDEX ) มีความสําคัญมากตอฐานขอมูลเชิงสัมพันธ เนื่องจาก ระบบฐาน ขอมูลแบบรีเลชั่นเนล (RDBMS) จะใชดัชนีในการคนหาระเบียนที่ตองการไดอยางรวดเร็ว โดยดัชนีที่ ถูกสรางขึ้น จะเก็บไวแยกจากตารางในพื้นที่ตางหาดของคอมพิวเตอร โดยปกติ ถาไมมีการประกาศ ดัชนี ไวการคนหาขอมูลในตาราง นั้นจะตองทําแบบเรียงลําดับจากแถวที่หนึ่งจนถึงแถวสุดทาย การ สรางดัชนีสําหรับตารางใดๆ จะทําไดโดยการเลือกคอลัมนใดคอลัมนหนึ่งจากตารางมาเปนดัชนี และตา รางหนึ่งๆ สามารถมีไดหลายดัชนี นอกจากเพิ่มความรวดเร็วในการดึงขอมูลแลว ยังสามารถนําไปใชในการควบคุม คอลัมนที่นํามาสรางเปนดัชนีใหมีการเก็บขอมูลที่ไมซํากัน(Unique) อีกดวย
เอกสารประกอบการบรรยายวิชา 204204 การออกแบบและพัฒนาฐานขอมูล
8-4
การสรางดัชนีจะใชคําสั่ง CREATE INDEX แลวตามดวยชื่อดัชนีที่เราตั้งขึ้น ดังรูปแบบ ตอไปนี้ CREATE [UNIQUE] INDEX < ชื่อตารางที่ตั้งขึ้น > ON (<ชือ่ ตารางที่สรางดัชนี> (< ชื่อคอลัมน_1> [,< ชื่อคอลัมน_2>]…); การลบดัชนี เมื่อตองการลบดัชนีที่สรางขึ้น ก็สามารถทําไดดวยคําสั่ง DROP INDEX แลวตามดวย ชือ่ ดัชนีที่ตองการลบ ดังรูปแบบดังนี้ DROP INDEX <ชื่อดัชนี> 9.3 ภาษาสําหรับการจัดการขอมูล (Data Manipulation Language-DML) หลังจากที่เราสรางโครงสรางฐานขอมูลขึ้นแลว คําสั่งตอไปในการปอนขอมูลลงในฐานขอมูล และเปลีย่ นแปลงขอมูล ในฐานขอมูล โดยการใชภาษาสําหรับการจัดการขอมูล (Data Manipulation Language-DML) ใชจดั การขอมูลภายในตารางภายในฐานขอมูล และภาษาแกไขเปลี่ยนแปลงตาราง แบงออกเปน 4 Statement คือ • Select Statement : การเรียกหา (Retrieve) ขอมูลจาก ฐานขอมูล • Insert Statement : การเพิ่มเติมขอมูลลงใน ตาราง (Table) จาก ฐานขอมูล • Delete Statement: การลบขอมูลลงออกจาก ตาราง (Table) จาก ฐานขอมูล • Update Statement: การเปลี่ยนแปลงขอมูลลงใน ตาราง (Table) จาก ฐานขอมูล คําสั่ง ความหมาย SELECT เรียกคนขอมูลในตาราง INSERT เพิ่มแถวขอมูลลงในตาราง DELETE ลบแถวขอมูล UPDATE ปรับปรุงแถวขอมูลในตาราง คําสั่งคนหาขอมูล (Query Statement) คําสั่ง SELECT เปนคําสั่งการเรียกดูขอมูล หรือ คนขอมูล ตามเงื่อนไขที่ระบุบ เนื่องจากคําสั่ง SELECT เปนคําสั่งที่มีรูปแบบการใชงานที่งายเพื่อชวยในการคนหาขอมูลที่ซับซอน ดังมีรูปแบบดังนี้ SELECT <ชื่อคอลัมนที่ตองการดูขอมูล> FROM <ชื่อตาราง> WHERE <เงือ่ นไขตามที่ระบุบ> SELECT --- เปนคําสั่งใหทําการเรียกดูขอมูลในคอลัมนที่ระบุ ซึ่งอาจจะมากกวา หนึ่งก็ได และถามี มากกวาหนึ่งคอลัมนตองคั่นดวย คอมมา (,) และนอกจากนี้ยังสามารถใชเครื่องหมาย ดอกจัน (*) เพื่อแสดงถึงการขอดูขอมูลทั้งหมดไดอีกดวย
บทที่ 8 พีชคณิตเชิงสัมพันธและแคลคูลัสเชิงสัมพันธ
8-5
FROM --- เปนคําสวนประกอบของคําสั่งที่บอกถึงตารางที่ตองการดู ซึ่งอาจจะมีมากกวาหนึ่งตารางก็ ได ที่จะถูกเรียกใชจากคําสั่ง SELECT WHERE--- เปนสวนประกอบของคําสง ที่ใชบงบอกเงื่อนไขที่จะใชในการคนหาขอมูล ขึ้นมาจากตา รางใด ๆ ที่อยูหลัง FROM นี้ การเรียกดูแบบซอนกัน (Nested SELECT Statement) SELECT <ชื่อคอลัมน> FROM <ชื่อตาราง> WHERE <ชื่อคอลัมน> IN ( SELECT <ชื่อคอลัมน> FROM <ชื่อตาราง> WHERE <ชื่อคอลัมน> ) คําสั่งเติมขอมูล (Insert Statement) INSERT INTO < ชื่อตาราง > VALUES (< ชื่อคอลัมน_1> [,< ชื่อคอลัมน_2>]…);
คําสั่งแกไขและลบแถว (Update Statement ) UPDATE < ชื่อตาราง > SET <คาที่ตองการ> WHERE <เงื่อนไข>
9.4 ภาษาควบคุม (Control Language) ใชเปนภาษาที่ใชควบคุมระบบรักษาความปลอดภัย ของฐานขอมูล ประกอบดวยคําสั่ง 2 คําสั่งคือ • คําสั่ง GRANT เปนคําสั่งที่ใชกําหนดสิทธิใหกับผูใชแตละคนใหมีสิทธกระทําการใดกับขอมูลเชน การเพิ่มขอมูล การแกไข หรือ การลบขอมูลในตารางใดบาง • คําสั่ง REVOKE เปนคําสั่งใหมีการยกเลิกสิทธนั้นหลังจากที่ได GRANT แลว คาบูลลีน ( Boolean-Type Data) • AND • OR • NOT
เอกสารประกอบการบรรยายวิชา 204204 การออกแบบและพัฒนาฐานขอมูล
• • • • • • • • • • •
8-6
= > หรือ >= < หรือ =< <> Bulit-In Function COUNT SUM AVG MAX MIN DISTINCT
ชุดคําสั่ง GROUP BY, ORDER BY และ HAVING เนือ่ งจากขอมูลที่สนใจมักจะเปน ผลสรุป หรือ ขอมูลที่ใชในการตัดสินใจ ภาษา SQL จึงไดออก แบบใหมี ชุดคําสั่งพิเศษ ที่ทําหนาที่แบงออกเปนกลุมๆ ไดแก
1.1 ชุดคําสั่ง GROUP BY GROUP BY เปนคําสั่งใหมีการจัดกลุมแถวขอมูลตามคอลัมน โดยขอมูลที่เหมือนกันจะถูกจัดใหอยูในกลุมเดียวกัน ดังนั้นจากตัวอยางตาราง S SELECT S# , MAX( QTY) FROM SPJ GROUP BY S# ผลลัพธ S# QTY S1 700 S2 800 S3 500 S4 300 S5 800 1.2 ชุดคําสั่ง ORDER BY ORDER BY เปนคําสั่งใหมีการเรียงลําดับขอมูลในแถวขอมูลตามคอลัมน
บทที่ 8 พีชคณิตเชิงสัมพันธและแคลคูลัสเชิงสัมพันธ
8-7
โดยขอมูลที่เหมือนกันจะถูกจัดเรียงจากนอยไปมาก ถาไมการระบุบ แตถาระบุบวาเปน DESC จะเรียงจากมากไปนอย ดังนั้นจากตัวอยางตอไปนี้ SELECT S# , MAX( QTY) FROM SPJ GROUP BY S# ORDER BY 2 DESC S# QTY S5 800 S2 800 S1 700 S3 500 S4 300 หมายเหตุ ตัวเลข 2 ที่อยูหลัง ORDER BY จะเปน การบอกระบบใหทําการเรียงลําดับขอมูล ตามลําดับคอลัมนที่ 2 ของคําสั่ง SQL ซึ่งก็คือ MAX(QTY) นั่นเอง
1.3 ชุดคําสั่ง HAVING HAVING เหมือนกับคําสั่ง WHERE ที่ตองตามดวยเงื่อนไข แต HAVING จะใชในกรณีที่มีการจัดก ลุมหรือการใช GROUP BY สรุปชุดคําสั่งมาตรฐานของ SQL 1. CREATE TABLE [[database.]owner.]table_name (column_name datatype [not null | null] IDENTITY [(seed, increment)][constraint] [, column_name datatype [not null | null IDENTITY [(seed, increment)]]]. [constraint] …) [ON segment name] 2. DELETE [FROM] table_name WHERE column_name = “value” 3. ALTER TABLE [[]] ADD NULL [Canstsaint] [WITH nocmeck] {drop [ ] 4. UPDATE table_name SET column_name= value WHERE column_name =operator_value
เอกสารประกอบการบรรยายวิชา 204204 การออกแบบและพัฒนาฐานขอมูล
5. CREATE VIEW View_name AS SELECT column FROM table_1 …. WHERE table_key_1=table_key_2
หนงสืออางอิง 1. ชนวัฒน ศรีสอาน, การออกแบบและพัฒนาฐานขอมูล, มหาวิทยาลัยเทคโนโลยีสุรนารี : นครราชสีมา, 2542. 2. ศิริลักษณ โรจนกิจอํานวย, ระบบฐานขอมูล, พิมพครั้งที่ 3, ดวงกลมสมัย : กรุงเทพฯ, 2542
8-8
8-9
บทที่ 8 พีชคณิตเชิงสัมพันธและแคลคูลัสเชิงสัมพันธ
แบบฝกหัดทายบทที่ 9 จงใชภาษา SQL เขียนสมการคําตอบ ของ Schema ตอไปนี้ STUDENT(StudentNumber, Name, Class, Major) COURSE (CourseNumber, CourseName, CreditHour, Department) PREREQUISITE(PrerequisiteNumber, CourseNumber) SECTION(SectionIdentifier, CourseNumber, Semester, Year, Instructor) GRADE_REPORT(StudentNumber, SectionIdentifier, Grade) หมายเหตุ Class ประกอบดวย ปที่1(Freshy) , ปที่2 (Junior), ปที่ 3( Sephormor) , ปที่4( Senoir) 1.1) จงหา ชื่อของนักศึกษาชั้นปที่ 4 ( Senior) ที่มีสาขาเนนหนัก ‘IS’ 1.2) ในทุก ๆ วิชาที่สอนดวย อาจารย ดร. เกง จงหา รหัสวิชานั้น ๆ , เทอมการศึกษา (semester) , ปการศึกษา(Year) และ จํานวนนักเรียนที่สอนในแตละsection 1.3) จงหาชื่อ และ Transcript ของแตละ Senoir Student ที่มี Class = 5 และ มี major = ‘COSC’ โดย Transcript ประกอบดวย course name, course number, credit hours, semester, year และ grade สําหรับแตละ course ที่นักศึกษาลงทะเบียน 1.4) จงหา ชื่อของรายวิชา ที่สอนดวย อาจารย ดร. เกง ในป 2540 ถึง 2541 1.5) จงหา ชื่อของนักศึกษา และ major ที่มีผลการเรียน 4.00 ตลอดการเรียน 1.6) จงหา ชื่อ และ major ของ นักศึกษา ที่ไมเคยไดเกรด A มาเลย ตลอดการเรียน 1.7) จงหา ชื่อของนักศึกษา ที่ลงทะเบียนเรียนวิชา 204-204 1.8) จงหา ชื่อของวิชา ที่เปน Prerequisite ของวิชา Electrical Circuit I (205-100)
จากตารางตอไปนี้ จงหาคําตอบ SUPPLIER ( S#, SNAME, STATUS, CITY) S# SNAME S1 Smith S2 Jones S3 Blake S4 Clark S5 Adams
STATUS 20 10 30 20 30
CITY London Paris Paris London Athens
8 - 10
เอกสารประกอบการบรรยายวิชา 204204 การออกแบบและพัฒนาฐานขอมูล
PART (P#,PNAME, COLOR, WEIGHT, CITY) P# PNAME COLOR P1 Nut Red P2 Bolt Green P3 Screw Blue P4 Screw Red P5 Cam Bule P6 Cog Red
WEIGHT 12 17 17 14 12 19
CITY London Paris Rome London Paris London
ตาราง J J# J1 J2 J3 J4 J5 J6 J7 ตาราง SPJ S# S1 S1 S2 S2 S2 S2 S2 S2 S2 S2 S3 S3 S4
JNAME Sorter Runch Reader Console Collator Terminal Tape P# P1 P1 P3 P3 P3 P3 P3 P3 P3 P5 P3 P4 P6
CITY Paris Rome Athens Athens London Oslo London J# J1 J4 J1 J2 J3 J4 J5 J6 J7 J2 J1 J2 J3
QTY 200 700 400 200 200 500 600 400 800 100 200 500 300
8 - 11
บทที่ 8 พีชคณิตเชิงสัมพันธและแคลคูลัสเชิงสัมพันธ
S# S4 S5 S5 S5 S5 S5 S5 S5 S5 S5 S5 • • • • • • • • •
P# P6 P2 P2 P5 P5 P6 P1 P3 P4 P5 P6
J# J7 J2 J4 J5 J7 J2 J4 J4 J4 J4 J4
จงหาวา มีคนสงของชื่อใดบางที่สง Nut จงหาวา มีคนสงของชื่อใดบางที่มีสถานะ (Status) อยูระหวาง 5 ถึง 30 จงหาวา มีคนสงของชื่อใดบางที่สง Nut , Screw และ Bolt จงหาชื่อชิ้นสวนทั้งหมดที่สงโดยคนสงของ S4 จงหาชื่อคนสงของ(supplier) ที่สง ชิ้นสวนที่ผลิตในเมืองที่เขาอยู จงหา ชื่อของชิ้นสวน (PNAME) และ PNO ของชิ้นสวนที่มีสีเขียว และ สีแดง จงหาชื่อของคนสงของที่สงชิ้นสวน P2 และ P4 จงหาชื่อของคนสงของที่สงชิ้นสวน P2 หรือ P4 จงหา ของคนสงของที่สงชิ้นสวน ที่มีสีเขียว หรือ สีแดง
QTY 300 200 100 500 100 200 100 800 800 400 500
Related Documents
More Documents from "Jackson Arruda Diniz"