SQL [ Standard Query Language ] ภาษาฐานข้อมูล SQL [ Standard Query Language ]
ภาษาฐานข้อมูล [SQL] ภาษาสอบถามเชิงโครงสร้างหรือภาษาเอสคิวแอล (Structured Query Language : SQL) เป็นภาษาที่พัฒนาขึ้นมาโดยบริษัทไอบีเอ็ม ประมาณต้น ทศวรรษ 1970 สถาบันมาตรฐานแห่งชาติอเมริกัน (ANAI) ได้กำหนด รูปแบบภาษา SQL มาตรฐาน (International Standard Database Language SQL) ขึ้นมาเพื่อให้เป็นมาตรฐาน ทั่วไปของภาษานี้
ภาษาฐานข้อมูล [SQL] SQL เป็นส่วนหนึ่งของระบบฐานข้อมูลแบบรีเลชั่นเนล (Relational Database) ที่ได้รับความนิยมมาก เพราะง่าย ต่อความเข้าใจ และอยู่ในรูปภาษาอังกฤษ SQL ใช้ในการจัดการข้อมูลของระบบฐานข้อมูลเชิงสัมพันธ์ สามารถใช้งานได้กับเครื่องคอมพิวเตอร์หลายระดับ ซอฟต์แวร์ระบบจัดการฐานข้อมูล (DBMS) ที่สนับสนุนการ ใช้คำสั่ง SQL ได้แก่ DB2, MS-SQL, MS-Access ซึ่ง ระบบจัดการฐานข้อมูลแต่ละตัวจะแตกต่างกันไป
ภาษาฐานข้อมูล [SQL] นอกจากนี้ภาษา SQL ถูกนำมาใช้เขียนร่วมกับโปรแกรม ภาษาต่างๆ เช่น ภาษา C/C++, Visual Basic และ JavaScript เป็นต้น วัตถุประสงค์ของ SQL 1. สร้างฐานข้อมูลและ ตาราง 2. สนับสนุนการจัดการฐานข้อมูล ซึ่งประกอบด้วย การเพิ่ม การปรับปรุง และการลบข้อมูล 3. สนับสนุนการเรียกใช้หรือ ค้นหาข้อมูล
ข้อตกลงมาตรฐานในการใช้คำสั่ง SQL < > คือ ชื่อต่าง ๆ หรือนิพจน์ที่ผู้ใช้จะต้องกำหนดค่าขึ้นมา (....) คือ สามารถจะระบุเพิ่มอีกตามสิ่งที่ระบุมาแล้วข้างหน้า [ ] คือ คำสั่งนั้นจะมีสิ่งที่ระบุไว้ในเครื่องหมายนี้หรือไม่ก็ได้ ::= คือ ส่วนที่อยู่ด้านขวาของเครื่องหมายนี้เป็นคำอธิบายหรือ คำนิยามของสิ่งที่อยู่ด้านซ้าย
ข้อตกลงมาตรฐานในการใช้คำสั่ง SQL | คือ จะเลือกใช้สิ่งใดสิ่งหนึ่งที่อยู่ด้านซ้ายหรือขวาก็ได้ COLUMN NAME คือ ชื่อของแอตทริบิวต์ของตาราง WIDTH คือ ขนาดความกว้างของข้อมูล DATA TYPE คือ ประเภทค่าของข้อมูล นอกจากนี้ยังมีตัวแปรที่ใช้กำหนดโครงสร้างข้อมูล ดังนี้
ตัวแปรที่ใช้กำหนดโครงสร้างข้อมูล ประเภทข้อมูล ความหมาย SMALLINT เลขจำนวนเต็ม ค่าระหว่าง -99999 ถึง 99999 INTEGER เลขจำนวนเต็มความกว้าง ประมาณ -10 หลัก ถึง+ 11 หลัก NUMBER (X,Y) เก็บจำนวนตัวเลขที่มีความกว้างรวม X หลัก และมีทศนิยม Y ตำแหน่ง FLOAT (X,Y) เก็บจำนวนตัวเลขที่เขียนในรูปของ 10 ยกกำลัง
ตัวแปรที่ใช้กำหนดโครงสร้างข้อมูล ประเภทข้อมูล ความหมาย CHAR (N) เก็บสายอักขระที่มีขนาดคงที่ตามที่ระบุ VARCHER (M) เก็บสายอักขระที่มีขนาดไม่คงที่ DATE เก็บ เดือน/วัน/ปี LOGICAL เก็บค่าตรรกะ คือ จริง (T หรือ True) หรือ เท็จ (F หรือ False)
ประเภทของคำสั่งภาษา SQL 1. ภาษานิยามข้อมูล (Data Definition Language : DDL) ใช้ในการสร้างฐานข้อมูล กำหนดโครงสร้างข้อมูลว่ามี Attributeใด ชนิดของข้อมูล รวมทั้งการเปลี่ยนแปลงตาราง และการสร้างดัชนี คำสั่ง : CREATE คือ คำสั่งที่ใช้ในการสร้าง DROP คือ คำสั่งที่ใช้ในการลบ ALTER คือ คำสั่งที่ใช้ในการเปลี่ยนแปลงโครงสร้าง
Table Structure Create Table เป็นคำสั่งที่ใช้ในการสร้างตารางใหม่ (Create New Table) ในฐานข้อมูล รูปแบบคำสั่งการสร้างตาราง CREATE TABLE table_name (<column name_1> <data type>, <column name_2> <data type>, ..…, <column name_n> <data type> );
Table Structure ตัวอย่างคำสั่งในการสร้างตาราง CREATE TABLE Employee (Empnum CHAR(4) PRIMARY KEY NOT NULL , Firstname CHAR (15), Last name CHAR(25), Birthdate DATE, Salary NUMBER);
Table Structure คำสั่งที่ใช้ในการเพิ่มคอลัมน์ในตาราง รูปแบบ ALTER TABLE <tablename> เพิ่ม ADD <Columnname> <data type> ตัวอย่าง ALTER TABLE Employee ADD Age INTEGER;
Table Structure คำสั่งที่ใช้ในการลบคอลัมน์ในตาราง รูปแบบ ALTER TABLE <tablename> ลบ DROP <Columnname> ตัวอย่าง ALTER TABLE Employee DROP Birthdate;
Table Structure คำสั่งที่ใช้ในการลบตาราง รูปแบบ DROP TABLE <tablename> ตัวอย่าง DROP TABLE Employee;
Index Structure คำสั่งที่ใช้ในการสร้าง index รูปแบบ CREATE INDEX <Index_name> ON table_name (attribute_name) ตัวอย่าง CREATE INDEX Pro_Index ON Product (Pro_Name);
Index Structure คำสั่งที่ใช้ในการลบ index รูปแบบ ALTER TABLE <table_name> DROP INDEX <Index_name> ตัวอย่าง ALTER INDEX Person DROP INDEX Person_Index;
View Structure การสร้างวิว : CREATE VIEW เป็นการสร้างตารางสมมติขึ้นมาให้กับผู้ใช้งาน โดยการดึงข้อมูล บางส่วนมาจากฐานข้อมูล เพื่อให้ผู้ใช้งานเรียกข้อมูลที่ต้องการจาก วิวที่กำหนดให้เท่านั้น คำสั่งที่ใช้ในการสร้างวิว คือ CREATE VIEW view-name [column_name1, column_name2,...] AS SELECT attribute1,attribute2,.. FROM table-name WHERE condition
View Structure ตัวอย่าง CREATE VIEW my_view1 AS SELECT Pro_id, Pro_name, Pro_price FROM PRODUCT WHERE Supid = 5 ;
View Structure การลบวิว ใช้คำสั่ง รูปแบบ DROP VIEW view-name ตัวอย่าง DROP VIEW MY_VIEW1
ประเภทของคำสั่งภาษา SQL 2. ภาษาจัดการข้อมูล (Data Manipulation Language :DML) ใช้ในการเรียกใช้ เพิ่ม ลบ และเปลี่ยนแปลงข้อมูลในตาราง คำสั่ง : SELECT คือ คำสั่งที่ใช้ในการเรียกข้อมูลในตาราง, INSERT คือ คำสั่งในการเพิ่มข้อมูลในตาราง UPDATE คือ คำสั่งในการแก้ไขข้อมูลในตาราง DELETE คือ คำสั่งในการลบข้อมูลในตาราง
Insert Structure คำสั่งการเพิ่มข้อมูลในตารางจะใช้คำสั่ง INSERT จะมีอยู่ 2 รูปแบบคือ 1.1 คำสั่งการเพิ่มข้อมูลทีละแถวโดยระบุข้อมูลเข้าไปโดยตรง รูปแบบของคำสั่งเป็นดังนี้ INSERT INTO <tablename> [(column 1, column 2,…)] VALUE(<value1,value2, …>);
Insert Structure ตัวอย่าง ถ้าต้องการจะใส่ข้อมูลทุกคอลัมน์ลงในตารางลูกค้า INSERT INTO Sales VALUES( 1001, ‘Chaiwat’, ‘Bangkok’, 0.12); SALENO SALENAME ADDRESS SALECOM 1001 Chaiwat Bangkok 0.12
Insert Structure ตัวอย่าง ถ้าต้องการจะใส่ข้อมูลบางคอลัมน์ เช่น ชื่อเมือง Bangkok ชื่อลูกค้า Arlee และหมายเลขลูกค้า 2001 ลงในตารางลูกค้า ใช้คำสั่งดังนี้ INSERT INTO Customer (ADDRESS, CUSNAME,CUSNO) VALUES( 'Bangkok','Arlee', 2001); CUSNO CUSNAME ADDRESS RATING SALENO 2001 Arlee Bangkok
Update Structure รูปแบบ คำสั่งที่ใช้ในการแก้ไขข้อมูลในตาราง UPDATE table_name SET column_name=‘value’ WHERE condition; ตัวอย่าง UPDATE Person SET Firstname=‘MR.’ + Firstname WHERE sex=‘man’;
Delete Structure รูปแบบ คำสั่งที่ใช้ในการลบข้อมูลในตาราง DELETE FROM table_name WHERE condition; ตัวอย่าง DELETE FROM Person WHERE Position NOT IN (‘Manager’);
SELECT * FROM Employee; Select Structure การเรียกดูข้อมูลจากตารางสามารถทำได้หลายรูปแบบทั้งที่มี เงื่อนไขหรือไม่มีเงื่อนไข หรือแม้แต่ดูข้อมูลจากหลายตาราง โดย คำสั่งที่ใช้ในการเรียกดูข้อมูล คือ คำสั่ง SELECT 1. การเรียกดูข้อมูลทั้งตาราง รูปแบบ SELECT * FROM <table name>; ตัวอย่าง ให้เรียกดูข้อมูลทั้งหมดของตาราง EMPLOYEE SELECT * FROM Employee;
Select Structure 2. การเรียกดูข้อมูลเพียงบางคอลัมน์ รูปแบบ 2. การเรียกดูข้อมูลเพียงบางคอลัมน์ รูปแบบ SELECT <column 1, column 2, ….> FROM <table name>; ตัวอย่าง ให้เรียกดูข้อมูลรหัสพนักงาน ชื่อ และเงินเดือน SELECT Empnum, Empname, Salary FROM Employee;
Select Structure 3. การเรียกดูโดยไม่ให้แสดงข้อมูลซ้ำกัน 3. การเรียกดูโดยไม่ให้แสดงข้อมูลซ้ำกัน เมื่อต้องการดูข้อมูลจากตารางโดยไม่ให้แสดงข้อมูลที่ซ้ำซ้อนออกมา จะใช้คำว่า DISTINCT กำกับ หลังคำว่า SELECT รูปแบบ SELECT DISTINCT<column 1,column 2,….> FROM <table name>;
Select Structure ตัวอย่าง ให้เรียกดูข้อมูลรหัสแผนก และตำแหน่งงานของพนักงานที่ไม่ซ้ำกัน SELECT DISTINCT Depno, Position FROM Employee;
4. การเรียกดูข้อมูลเป็นนิพจน์ทางคณิตศาสตร์ Select Structure 4. การเรียกดูข้อมูลเป็นนิพจน์ทางคณิตศาสตร์ เครื่องหมาย ความหมาย + บวก - ลบ * คูณ / หาร
Select Structure ตัวอย่าง ต้องการดูข้อมูลชื่อพนักงานและเงินเดือนต่อปีของพนักงาน SELECT Empname, Salary*12 FROM Employee; ตัวอย่าง ต้องการดูข้อมูลรหัสพนักงาน ชื่อ เงินเดือนใหม่ต่อปี โดยที่เงินเดือนใหม่จะปรับขึ้นเงินเดือนจากเดิมอีกคนละ 10 % SELECT Empnum, Empname, (Salary*1.1)*12 FROM Employee;
Select Structure 5. การเรียกดูโดยการจัดเรียงข้อมูล ข้อมูลที่ถูกเรียกจะจัดเรียงตามคอลัมน์ที่ต้องการ เช่น ให้เรียงชื่อตามตัวอักษร หรือให้เรียงข้อมูลตามเงินเดือน เป็นต้น รูปแบบ SELECT <column 1, ….> FROM <table name> ORDER BY <column 1,…..> [[ASC][DESC]];
Select Structure ORDER BY คือการสั่งให้จัดเรียงผลลัพธ์ตามคอลัมน์ที่ระบุต่อท้าย ORDER BY เรียงจากมากมาน้อยให้ระบุคำว่า DESC แต่ถ้าเรียงน้อยไปหามาก ไม่จำเป็นต้องระบุ ASC ตัวอย่าง ให้แสดงชื่อ ตำแหน่งและวันที่เริ่มทำงาน โดยให้เรียงตามวันที่เริ่มทำงานครั้งล่าสุด SELECT Empname, Position, Hiredate FROM Employee ORDER BY Hiredate DESC;
Select Structure ตัวอย่าง ให้แสดงชื่อ แสดงเงินเดือน ของพนักงานโดยเรียงจากเงินเดือนน้อยไปหามาก โดยให้เปลี่ยนชื่อเงินเดือน เป็นรายได้ ซึ่งรายได้ดังกล่าวจะเป็นเงินเดือนรวมกับโบนัส 15% SELECT Empname, (Salary*1.15) As Income FROM Employee ORDER BY Income;
Work : Select Structure แสดงชื่อ เงินเดือนและตำแหน่งของพนักงาน แสดงชื่อแผนกและสถานที่ของแผนกโดยเรียงตามชื่อแผนก แสดงข้อมูลรายละเอียดทั้งหมดของตาราง PROJECT แสดงชื่อโครงการ วันที่เริ่มโครงการและวันทีสิ้นสุดโครงการ โดยให้ เรียงตามวันที่เริ่มโครงการล่าสุด แสดงรหัสพนักงานและจำนวนชั่วโมงภายใน 1 เดือน (24วัน) เปลี่ยนชื่อเป็น MONTH แสดงรหัสแผนก ชื่อแผนกที่ไม่ซ้ำกัน แสดงชื่อ เงินเดือนพนักงานที่บวกเพิ่มเบี้ยขยันให้คนละ 500 บาท
1. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ทางตรรกะ 1. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ทางตรรกะ โอเปอเรเตอร์ ความหมาย = เท่ากับ > มากกว่า >= มากกว่าเท่ากับ < น้อยกว่า <= น้อยกว่าเท่ากับ <> ไม่เท่ากับ
1. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ทางตรรกะ 1. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ทางตรรกะ EX : แสดงรหัส,ชื่อพนักงาน,รหัสแผนกของพนักงานที่มี ตำแหน่ง MANAGER SELECT Empnum, Empname, Depno FROM Employee WHERE Position=‘Manager’;
ตัวอย่าง : แสดงชื่อพนักงาน ตำแหน่ง เงินเดือนพนักงานที่มีมากกว่าเท่ากับ 25000 บาท SELECT Empname, Position, Salary FROM Employee WHERE Salary >=25000;
ตัวอย่าง แสดงชื่อพนักงานที่มีเงินเดือนต่อปีมากกว่า 300000 บาท SELECT Empname, Salary FROM Employee WHERE Salary*12 > 300000;
2. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของ SQL 1) BETWEEN…AND… กำหนดเงื่อนไขระหว่างค่าสองค่า จะใช้แสดงต่อท้ายชื่อคอลัมน์ที่ถูกระบุให้เป็นเงื่อนไข ตัวอย่าง - แสดงชื่อ เงินเดือนของพนักงานที่มีเงินเดือนระหว่าง 20000 ถึง 50000 บาท SELECT Empname, Salary FROM Employee WHERE Salary BETWEEN 20000 AND 50000;
2. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของ SQL 2. IN กำหนดเงื่อนไขของคอลัมน์ที่ต้องการเป็นกลุ่มของข้อมูล โดย IN จะแสดงต่อท้ายชื่อคอลัมน์ ตัวอย่าง แสดงชื่อ เงินเดือนและรหัสผู้บังคับบัญชาเป็น 1002 2002 และ 3004 SELECT Empname, Salary, Mgrno FROM Employee WHERE Mgrno IN (‘1002’,’2002’,’3004’);
2. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของ SQL 3. LIKE ค้นหาข้อมูลของคอลัมน์ที่เก็บข้อมูลประเภทตัวอักษรเท่านั้น ตัวอย่าง - แสดงชื่อแผนกที่ขึ้นต้นด้วย A SELECT Depname FROM Department WHERE Depname LIKE ‘A%’;
2. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของ SQL ตัวอย่าง - แสดงชื่อพนักงานที่มีตัวอักษร T อยู่ SELECT Empname FROM Employee WHERE Empname LIKE ‘%T%’;
2. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของ SQL 4. IS NULL เป็นโอเปอเรเตอร์ที่ใช้ในการแสดงค่าของคอลัมน์ที่มีค่าเป็นค่าว่าง หรือไม่มีค่า ตัวอย่าง - ให้แสดงชื่อคอลัมน์ที่ไม่มีผู้บังคับบัญชา SELECT Empname FROM Employee WHERE Mgrno IS NULL;
3. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของบูลีน AND ใช้เชื่อมเงื่อนไขสองเงื่อนไข โดยแสดงข้อมูลออกมาเป็นจริงตามเงื่อนไขทั้งสอง OR ใช้เชื่อมเงื่อนไข แสดงข้อมูลออกมาเป็นจริงตามเงื่อนไขใดเงื่อนไขหนึ่ง NOT ใช้แสดงเงื่อนไขใดเงื่อนไขหนึ่ง แสดงข้อมูลที่ไม่เป็นไปตามเงื่อนไข
3. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของบูลีน ตัวอย่าง - แสดงชื่อ ตำแหน่งและเงินเดือน ที่มีตำแหน่ง MANAGER และมีเงินเดือนระหว่าง 30000 กับ 50000 SELECT Empname, Position, Salary FROM Employee WHERE Salary BETWEEN 30000 AND 50000 AND Position=‘Manager’;
3. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของบูลีน ตัวอย่าง - แสดงชื่อ ตำแหน่ง เงินเดือนที่มากกว่า 20000 และมีตำแหน่งเป็น MANAGER หรือ SUPERVISOR SELECT Empname, Position, Salary FROM Employee WHERE Salary > 20000 AND (Position= ‘Manager’ OR Position= ‘Supervisor’);
3. การเรียกดูข้อมูลโดยใช้โอเปอเรเตอร์ของบูลีน ตัวอย่าง - แสดงข้อมูลพนักงานที่เงินเดือนน้อยกว่า 20000 และไม่ได้อยู่แผนกรหัส 20 SELECT * FROM Employee WHERE NOT (Salary < 20000 AND Depno=‘20’);
การแสดงข้อมูลด้วยฟังก์ชันที่เกี่ยวกับการรวม หาค่าเงินเดือนเฉลี่ยของพนักงาน SELECT AVG(Salary) FROM Employee; นับจำนวนพนักงานของบริษัทที่อยู่แผนกรหัส 30 SELECT COUNT (*) FROM Employee WHERE Depno=‘30’;
การแสดงข้อมูลด้วยฟังก์ชันที่เกี่ยวกับการรวม ให้คำนวณค่าสูงสุด และต่ำสุดของเงินเดือนพนักงาน SELECT MAX(Salary), MIN(Salary) FROM Employee; หาผลรวมของเงินเดือนของพนักงานที่อยู่แผนก 20 SELECT SUM(Salary) FROM Employee WHERE DEPNO=‘20’;
การใช้อนุประโยค GROUP BY แสดงข้อมูลรหัสแผนกและเงินเดือนเฉลี่ยของแผนกต่างๆ SELECT Depno, AVG(Salary) FROM Employee GROUP BY Depno;
การใช้อนุประโยค GROUP BY แสดงข้อมูลรหัสแผนก เงินเดือนสูงสุด และต่ำสุดแต่ละแผนก SELECT Depno, MAX(Salary), MIN(Salary) FROM Employee GROUP BY Depno;
การใช้อนุประโยค GROUP BY แสดงข้อมูลตำแหน่งงานและเงินเดือนเฉลี่ยของแต่ละ ตำแหน่งงาน โดยไม่ต้องแสดงข้อมูลของพนักงานที่มี ตำแหน่ง Clerk SELECT Position, AVG(Salary) FROM Employee WHERE Position <> ‘Clerk’ GROUP BY Position;
การใช้อนุประโยค HAVING แสดงข้อมูลตำแหน่งงานและค่าเงินเดือนเฉลี่ยของแต่ละ ตำแหน่งงาน โดยแสดงการหาค่าเงินเดือนเฉลี่ยที่มากกว่า 20000 SELECT Position, AVG(Salary) FROM Employee GROUP BY Position HAVING AVG(Salary) > 20000;
ประเภทของคำสั่งภาษา SQL 3. ภาษาควบคุมข้อมูล (Data Control Language : DCL) ใช้ในการกำหนดสิทธิการอนุญาติ หรือ ยกเลิก การเข้าถึงฐานข้อมูล เพื่อป้องกันความปลอดภัยของฐานข้อมูล คำสั่ง : GRANT คือ คำสั่งในการกำหนดสิทธิการเข้าถึงข้อมูล REVOKE คือ คำสั่งการยกเลิกสิทธิการเข้าถึงข้อมูล