ภาษา SQL

Download Report

Transcript ภาษา SQL

คาบปฏิบตั กิ าร ครัง้ ที่ 3
รายวิชา 421-343 การออกแบบและพัฒนาฐานข้อมูล
ภาควิชาบรรณารักษศาสตร์และสารนิเทศศาสตร์
LOG
O
1
ความเป็ นมาของภาษาSQL
ในการสอบถามข้อมูลจากฐานข้อมูลนั้น คาถามของผูใ้ ช้ เรียกว่า “Query”
และภาษาที่ใช้ในการสอบถามข้อมูลเรียกว่า “Query Language” ซึ่งใน
ปั จจุบนั มีอยูห่ ลายภาษาด้วยกัน โดยภาษา SQL พัฒนาโดยบริษทั IBM
เป็ นที่รูจ้ กั และใช้กนั อย่างแพร่หลาย จึงถือเป็ นมาตรฐานที่ใช้ใน RDBMS
หลายตัวที่ใช้อยูใ่ นปั จจุบนั
2
ประเภทของคาสั ่งในภาษา SQL
 DDL (Data Definition Language) เป็ นชุดคำสัง่ ที่ใช้ในกำรนิ ยำม กำหนด หรือ
กำรสร้ำงข้อมูลบนฐำนข้อมูล ได้แก่ คำสัง่ CREATE TABLE, CREATE VIEW
 DML (Data Manipulation Language) เป็ นชุดคำสัง่ ที่ใช้ในกำรประมวลผลหรือ
จัดกำรกับข้อมูลในฐำนข้อมูล ได้แก่ คำสัง่ SELECT, INSERT , UPDATE เป็ นต้น
 DCL (Data Control Language) เป็ นคำสัง่ ที่ใช้ในกำรควบคุมสิทธิ์ของผูใ้ ช้ในกำร
ใช้ขอ้ มูล รวมทั้งส่วนที่ใช้ควบคุมกำรใช้ฐำนข้อมูลจำกผูใ้ ช้หลำยๆคนพร้อมกัน
3
รายละเอียดข้อมูล (Data Dictionary)
ชื่อเทเบิล
CUSTOMER
PRODUCT
ชื่อคอลัมน์
ประเภทข้อมูล
ความหมาย
IDcustomer (PK)
Char (6)
รหัสลูกค้ำ
C_name
Varchar(40)
ชื่อลูกค้ำ
C_address
Varchar(30)
ที่อยู่
C_Telephone
Varchar(10)
เบอร์โทรศัพท์
C_Creditlim
number
วงเงินกำรให้สินเชื่อ
C_currbal
number
ยอดสินเชื่อคงเหลือ
IDproduct(PK)
Char (6)
รหัสสินค้ำ
p_name
Varchar(20)
ชื่อสินค้ำ
p_unitprice
number
รำคำต่อหน่ วย(บำท)
P_onhand
number
จำนวนสินค้ำคงเหลือ
P_orderpt
number
จำนวนตำ่ สุดที่ตอ้ งสัง่ ้ื้ อเพิ่ม
P_orderqty
number
จำนวนที่ตอ้ งสัง่ ้ื้ อเพิ่ม
อ้างถึง
4
รายละเอียดข้อมูล (Data Dictionary)
ชื่อเทเบิล
EMPLOYEE
ORDER
ชื่อคอลัมน์
ประเภทข้อมูล
ความหมาย
IDemployee (PK)
Char (6)
รหัสพนักงำน
e_name
Varchar(40)
ชื่อพนักงำนขำย
e_salary
number(8,2)
เงินเดือนปั จจุบนั
e_address
Varchar(30)
ที่อยู่
e_telephone
Char(10)
เบอร์โทรศัพท์
อ้างถึง
IDorder(PK)
Char (6)
รหัสใบสัง่ ้ื้ อสินค้ำ
IDproduct
Char (6)
รหัสสินค้ำ
qty
number
จำนวนสินค้ำที่สงั ่ ้ื้ อ
discount
number
ส่วนลด(%)
IDcustomer
Char (6)
รหัสลูกค้ำ
Customer
IDemployee
Char (6)
รหัสพนักงำนขำย
employee
product
5
การสร้างตาราง(Create Table)
▫ กำรสร้ำงตำรำงด้วย SQL สำมำรถทำได้ดว้ ยคำสัง่ CREATE TABLE
้ึ่งกำหนดลักษณะของข้อมูลเป็ นคอลัมน์ โดยมีรปู แบบดังนี้
รูปแบบ >>
CREATE TABLE <Table_name>
(<column_name_1> <data_type> [NOT NULL] [UNIQUE],
(<column_name_2> <data_type> [NOT NULL] [UNIQUE],
…
…
…
…
…
…
[PRIMARY KEY (column_name,)]
[FOREIGN KEY (column_name) REFERENCES table_name]);
6
การสร้างตาราง(Create Table)
โจทย์ >>
สร้ำงตำรำง customer ตำมที่ได้ออกแบบรำยละเอียดตำรำงไว้
CREATE TABLE Customer
SQL >>
(
IDcustomer char(6) NOT NULL UNIQUE,
C_name
varchar(40) NOT NULL,
C_address varchar(30),
C_telephone char(10),
C_credit
number,
C_currbal
number,
PRIMARY KEY (IDcustomer));
คาอธิบาย >> กำหนดให้ IDcustomer เป็ นคียห์ ลัก ดังนั้นจะใส่ PRIMARY KEY
(IDcustomer) เข้ำไปด้วย และในคอลัมน์ IDcustomer ต้องมีค่ำเสมอ
(NOT NULL) และมีค่ำไม่้้ำกัน (UNIQUE) และในแต่ละแถวคอลัมน์
c_name จะต้องมีค่ำเสมอ (NOT NULL) เนื่ องจำกควำมเป็ นจริงที่ของ
ข้อมูลที่ลกู ค้ำทุกคนต้องมีชื่อ
7
การเปลี่ยนโครงสร้างของตาราง (Alter Table)
ในกำรทำงำนจริง อำจมีกำรเปลี่ยนแปลงโครงสร้ำงข้อมูลของตำรำงนั้นๆ
เนื่ องจำกกำรออกแบบที่อำจผิดพลำด หรืออำจเปลี่ยนควำมต้องกำร ในกำร
แก้ไขโครงสร้ำงของตำรำงนั้นทำได้ดว้ ยคำสัง่ ALTER TABLE โดยมีรปู แบบดังนี้
รูปแบบ >>
โจทย์ >>
SQL
ALTER TABLE <Table_name>
ADD <colum_name> <data_type> ;
เพิ่มคอลัมน์ที่เป็ นรหัสแผนก(IDdepartment)
ในตำรำง employee เพื่อบอกว่ำพนักงำนสังกัดอยูแ่ ผนกใด
>>
ALTER TABLE employee
ADD IDdepartment char(6) ;
8
การเปลี่ยนโครงสร้างของตาราง (Alter Table)
หำกต้องกำรลบคอลัมน์ก็สำมำรถทำได้เช่นกันด้วยคำสัง่ ต่อไปนี้
รูปแบบ >>
โจทย์ >>
SQL
ALTER TABLE <Table_name>
DROP <colum_name> ;
ลบคอลัมน์ที่เป็ นรหัสแผนก(IDdepartment)
ในตำรำง employee
>>
ALTER TABLE employee
DROP Iddepartment ;
9
การแก้ไขคอลัมน์ในตาราง (MODIFY)
รูปแบบ >>
โจทย์ >>
SQL
>>
ALTER TABLE <Table_name>
MODIFY <colum_name> <data_type> ;
เปลี่ยนขนำดของข้อมูลในคอลัมน์ Iddeparment ในตำรำง
employee จำกขนำด 6 ตัวอักษร เป็ นขนำด 5 ตัวอักษร
ALTER TABLE employee
MODIFY (IDdepartment char(5)) ;
10
การลบตารางออกจากฐานข้อมูล (Drop Table)
รูปแบบ >>
โจทย์
SQL
DROP TABLE <Table_name>;
>> ต้องกำรลบเทเบิล ORDER ออกจำกฐำนข้อมูล
>>
DROP TABLE Order
DROP TABLE ORDER;
11
การเพิ่มข้อมูลแต่ละแถว (INSERT)
รูปแบบ >>
โจทย์ >>
INSERT INTO <Table_name>
VALUES ([<value 1>, <value 2>,… ) ;
ป้อนข้อมูลของลูกค้ำใหม่ ้ึ่งมีรหัส 101 ชื่อ Supaporn อำศัยอยู่ Pattani
เบอร์โทรศัพท์ 073658758 มีวงเงิน 150,000 บ. และยอดเงินคงเหลือ
100,000 บ.
SQL >> INSERT INTO customer
VALUES (‘101’,‘Supaporn’, ‘Pattani’,‘073658758’, 150000 ,100000 ) ;
12
การเพิ่มข้อมูลแต่ละแถว (INSERT) (ต่อ)
ในกรณีที่อาจการเพิ่มข้อมูลเฉพาะบางคอลัมน์ สามารถเขียนคาสั ่งได้ดงั นี้
รูปแบบ >>
โจทย์ >>
SQL >>
INSERT INTO <Table_name><(list of columnname)>
VALUES <( list of matching value)> ;
ป้อนข้อมูลของลูกค้ำใหม่ ้ึ่งมีรหัส 150 ชื่อ Walaiporn
INSERT INTO customer (IDcustomer , C_name)
VALUES (‘150’,‘Walaiporn’) ;
13
การเพิ่มข้อมูลโดยใช้ขอ้ มูลจากตารางอื่น
ในกรณีที่อาจการเพิ่มข้อมูลเฉพาะบางคอลัมน์ สามารถเขียนคาสั ่งได้ดงั นี้
โจทย์ >>
ต้องกำรสร้ำงตำรำงใหม่ ชือ่ CustomerInBangkok ้ึ่งประกอบด้วยคอลัมน์ รหัส,
ชือ่ และเบอร์โทรศัพท์ของลูกค้ำ โดยข้อมูลในตำรำงจะเลือกจำกตำรำง customer
เฉพำะลูกค้ำที่อำศัยอยูใ่ น ‘Bangkok’ เท่ำนั้น
1. สร้างตาราง CustomerInBangkok
SQL >>
CREATE TABLE CustomerInBangkok
(IDBangkok char(6) NOT NULL UNIQUE,
B_name
varchar(40) NOT NULL,
B_telephone char(10) );
2. เพิ่มข้อมูลลงในตาราง CustomerInBangkok
INSERT INTO CustomerInBangkok
SELECT IDcustomer , C_name,C_telephone
FROM
Customer WHERE address =‘Bangkok’ ;
14
การแก้ไขข้อมูล (Update)
ในกรณีที่เพิ่มข้อมูลในตารางแล้ว และต้องการแก้ไขข้อมูลทีม่ ีอยู่
สามารถเขียนคาสั ่งได้ดงั นี้
รูปแบบ >>
UPDATE <Table_name>
SET <columnname> = new_value
WHERE <condition>;
โจทย์ >> ต้องกำรปรับเงินเดือนพนักงำนชื่อ Piyanuch จำกเดิม 14,400 บำท เป็ น 15,000
SQL >>
UPDATE employee
SET
E_salary= 15000
WHERE E_name=‘Piyanuch’ ;
15
การแก้ไขข้อมูล (Update)
หากต้องการแก้ไขข้อมูลที่มีอยู่ ครั้งละหลายแถวสามารถเขียนคาสั ่งได้ดงั นี้
โจทย์ >> ต้องกำรเพิ่มวงเงินให้แก่ลกู ค้ำที่อำศัยอยูใ่ น Bangkok อีกคนละ 50,000 บำท
SQL >>
UPDATE customer
SET C_credit = C_credit + 50000
WHERE C_address =‘Bangkok’ ;
16
การลบข้อมูล (Delete)
รูปแบบ >>
โจทย์ >>
SQL >>
DELETE <Table_name>
WHERE <condition>;
ในกรณีที่พนักงานชื่อ ‘Walai’ ลาออกจากบริษัท
DELETE FROM employee
WHERE E_name = ‘Walai’ ;
17
การสอบถามข้อมูล (SELECT)
รูปแบบ >>
โจทย์ >>
SQL1 >>
SQL2 >>
SELECT column_name, list of column_name,
or * FROM table_name ,or list of table_name;
ต้องการสอบถามข้อมูลทั้งหมดของลูกค้า
SELECT Idcustomer ,C_name,C_address,
C_telephone,C_Credit, C_currlim,C_currbal
FROM Customer ;
SELECT * FROM Customer ;
*** ในกรณี ที่ตอ้ งกำรเรียงลำดับกำรแสดงข้อมูล สำมำรถระบุชื่ อคอลัมน์ เรียง
18
ตำมลำดับที่ตอ้ งกำรโดยไม่จำเป็ นต้องเรียงตำมลำดับที่สร้ำงในตำรำง
การเปลี่ยนหัวคอลัมน์เป็ นข้อความอื่น (SELECT…AS)
รูปแบบ >>
โจทย์ >>
SQL >>
ผลลัพธ์ >>
SELECT column_name AS “NEW HEADING”;
แสดงชื่อและยอดคงเหลือของลูกค้ำทุกคนโดยให้หวั คอลัมน์
ชื่อ แสดงเป็ น Customer_name และ ยอดเงิน แสดงเป็ น
Current Balance
SELECT C_name AS “Customer_name”,
C_currbal AS “Current Balance”
FROM customer;
Customer_name
------------------Sopha
Silee
…
Current Balance
--------------------1000000
2000000
…
19
แสดงข้อมูลที่ไม่ซ้ ากันด้วย DISTINCT
รูปแบบ >>
โจทย์ >>
SQL
>>
SELECT DISTINCT Columnname
FROM Table_name;
ให้แสดงข้อมูลที่อยูล่ กู ค้ำของบริษัทว่ำอยูท่ ี่ใดบ้ำง
SELECT DISTINCT address
FROM customer ;
20
จัดเรียงข้อมูลด้วย ORDER BY
รูปแบบ >>
ORDER BY column_name [DESC] ;  เรียงจำกมำกไปน้อย
ORDER BY column_name ;
 เรียงจำกน้อยไปมำก
โจทย์ >>
ต้องกำรทรำบรหัสและชื่อของลูกค้ำทั้งหมด โดยแสดงผลแบบเรียง
ตำมลำดับชื่อลูกค้ำจำกน้อยไปหำมำก และ มำกไปน้อย
SQL  น้อยไปหามาก
SQL  มากไปหาน้อย
SELECT IDCustomer , C_name
FROM customer ORDER BY C_name;
SELECT IDCustomer , C_name
FROM customer
ORDER BY C_name DESC;
21
จัดเรียงข้อมูล
โจทย์ >>
SQL
>>
ผลลัพธ์ >>
ต้องกำรสอบถำมชื่อ ที่อยู่ และวงเงินของลูกค้ำ โดยเริ่มแสดงข้อมูล
จำกกลุ่มลูกค้ำที่มีที่อยูเ่ ดียวกันจำกน้อยไปหำมำก และในแต่ละกลุ่ม
หรือจังหวัดก็เรียงตำมชื่อลูกค้ำจำกน้อยไปหำมำก
SELECT C_address , C_name, C_creditlim
FROM customer
ORDER BY address, C_name;
address
--------Ayuthaya
Bangkok
Bangkok
C_name
---------Worachat
Anan
Silee
C_Creditlim
--------------5000000
1000000
6000000
22
การจัดกลุ่มข้อมูล (SELECT… GROUP BY)
รูปแบบ >>
โจทย์ >>
SQL
>>
SELECT column_name
FROM <table name>
GROP BY <column name> ;
ต้องกำรทรำบค่ำเฉลี่ยของวงเงินของลูกค้ำแต่ละกลุ่ม
โดยแบ่งกลุ่มตำมที่อยู่
SELECT address, AVG(credit_lim)
FROM customer
GROUP BY address;
23
เลือกกลุ่มข้อมูลด้วย HAVING และ WHERE
รูปแบบ >>
SQL
>>
ผลลัพธ์ >>
SELECT column_name
FROM <table name>
GROP BY <column name>
HAVING <condition> ;
ต้ อ งกำรทรำบค่ ำ เฉลี่ ย ของ
โจทย์ >>
วงเงิ น ของลู ก ค้ำ แต่ ล ะกลุ่ ม
โดยแบ่งกลุ่มตำมที่อยูท่ ี่มีวงเงิน
เฉลี่ยตั้งแต่ 300,000 ขึ้ นไป
SELECT address, AVG(credit_lim)
FROM customer
GROUP BY address
HAVING AVG(credit_lim)>=300000 ;
address
Ayuthaya
Bangkok
Rayong
AVG(credit_lim)
800000
533333.33
300000
24
เลือกกลุ่มข้อมูลด้วย HAVING และ WHERE
รูปแบบ >>
SQL
SELECT column_name
FROM <table name>
WHERE <condition>
GROP BY <column name>
HAVING <condition> ;
ต้ อ งกำรทรำบค่ ำ เฉลี่ ย ของ
โจทย์ >>
วงเงินของลูกค้ำที่อยูใ่ นกรุงเทพ
และระยองโดยแบ่ ง กลุ่ ม ตำม
ที่ อยู่ ที่ มี ว ง เ งิ น เ ฉ ลี่ ย ตั้ ง แ ต่
300,000 ขึ้ นไป
>>
SELECT address, AVG(credit_lim)
FROM customer
WHERE address IN (‘Bangkok’ , ‘Rayong’)
GROUP BY address
HAVING AVG(credit_lim)>=300000 ;
ผลลัพธ์ >>
address
Bangkok
Rayong
AVG(credit_lim)
533333.33
300000
25
การสอบถามข้อมูลแบบมีเงื่อนไข
รูปแบบ >>
SELECT
FROM
WHERE
column_name
table_name
condition ;
โจทย์ >> ต้องกำรข้อมูลทั้งหมดของลูกค้ำเฉพำะที่อำศัยอยูใ่ นBangkok
SQL
>>
SELECT
FROM
WHERE
*
customer
address = ‘Bangkok’ ;
26
ตัวดาเนินการเชิงเปรียบเทียบ(Comparison Operators)
เครื่องหมายที่ใช้เปรียบเทียบ
=
!=
>
<
>=
<=
ความหมาย
เท่ำกับ
ไม่เท่ำกับ
มำกกว่ำ
น้อยกว่ำ
มำกกว่ำหรือเท่ำกับ
น้อยกว่ำหรือเท่ำกับ
27
ระบุหลายเงื่อนไขโดยใช้ OR
โจทย์ >> สอบถำมข้อมูลของลูกค้ำที่อยู่ Bangkok และมีวงเงินมำกกว่ำ 500,000 บำท
SELECT *
SQL >>
FROM customer
WHERE (C_address = ‘Bangkok’)
AND (C_creditlim> 500000) ;
โจทย์ >> สอบถำมข้อมูลของลูกค้ำที่อยู่ Bangkok หรือมีวงเงินมำกกว่ำ 500,000 บำท
SQL
>>
SELECT *
FROM customer
WHERE (C_address = ‘Bangkok’)
OR (C_creditlim> 500000) ;
28
ระบุหลายเงื่อนไขโดยใช้ IN
โจทย์ >> สอบถำมข้อมูลของลูกค้ำที่อยู่ Bangkok, Rayong หรือ Ayuthaya
SQL 1 >>
SQL 2 >>
SELECT * FROM customer
WHERE (C_address = ‘Bangkok’)
OR
(C_address = ‘Rayong’)
OR
(C_address = ‘Ayuthaya’) ;
SELECT * FROM customer
WHERE address IN (‘Bangkok’, ‘Rayong’ , ‘Ayuthaya’)
29
ระบุหลายเงื่อนไขโดยใช้ NOT
โจทย์ >> สอบถำมข้อมูลของลูกค้ำที่ไม่อยูใ่ นBangkok
SQL1
>>
SQL2 >>
SELECT
FROM
WHERE
*
customer
C_address != ‘Bangkok’ ;
SELECT
FROM
WHERE
*
customer
NOT C_address = ‘Bangkok’;
30
เลือกข้อมูลที่อยูใ่ นช่วงที่ตอ้ งการด้วย BETWEEN…AND
รูปแบบ >>
SELECT
FROM
WHERE
column_name
table_name
column_name BETWEEN values1 AND values2 ;
*** สำหรับเลือกแสดงข้อมูลที่อยูร่ ะหว่ำงค่ำที่กำหนด(values1) และ values2***
รูปแบบ >>
SELECT
column_name
FROM
table_name
WHERE
column_name NOT BETWEEN
values1 AND values2 ;
*** สำหรับเลือกแสดงข้อมูลที่มีคำ่ ไม่อยูร่ ะหว่ำงค่ำที่กำหนด***
31
เลือกข้อมูลที่อยูใ่ นช่วงที่ตอ้ งการด้วย BETWEEN…AND
โจทย์ >> แสดงชื่อของพนักงำนที่มีเงินเดือนอยูร่ ะหว่ำง 3,500 และ 5,000 บำท
SQL1 >>
SQL2 >>
SELECT
FROM
WHERE
AND
e_name
employee
(salary >= 3500)
(salary <= 5000) ;
SELECT
FROM
WHERE
BETWEEN
e_name
employee
salary
3500 AND 5000 ;
32
เลือกข้ อมูลที่ตรงกับความต้ องการด้ วย LIKE
คำสัง่ SQL สำมำรถกำหนดเงื่อนไขเพื่อเลือกข้อมูลโดยใช้คำว่ำ “LIKE”
และ ‘_’ โดยมีรำยละเอียดดังนี้
เครื่องหมาย/คา
การแทนค่า
‘_’
‘%’
แทนตัวอักษรใดๆ 1 ตัวอักษร
แทนตัวอักษรกี่ตวั ก็ได้ หรือเป็ น 0 (ไม่มีขอ้ มูลเลยก็
ได้)
33
เลือกข้อมูลที่ตรงกับความต้องการด้วย LIKE
โจทย์ >> แสดงชื่อของลูกค้ำที่ขึ้นต้นด้วย ‘So’
SQL1 >>
SELECT
FROM
WHERE
like
C_name
customer
c_name
‘So%’ ;
ผลลัพธ์ >> C_name
-----------Sopha
Somchai
Somsak
โจทย์ >> แสดงชื่อของลูกค้ำที่ขึ้นต้นด้วย ‘Si’ และตำมด้วยอักษรได้ก็ได้ 3 ตัว
SQL1
>>
SELECT
FROM
WHERE
like
C_name
customer
c_name
‘Si_ _ _’ ;
ผลลัพธ์ >> C_name
-----------Silee
34
ฟั งก์ชั ่นสาหรับการคานวณทางคณิตศาสตร์
ฟั งก์ชั ่น
พารามิเตอร์(Argument)
การคืนค้า (Returned values)
ABS(m)
m= เลขจำนวนเต็ม
ค่ำตัวเลขบวกของ m
เช่น ABS(-3) = 3
MOD(m,n)
m= เลขจำนวนเต็ม(ตัวตั้ง)
n = เลขจำนวนเต็ม(ตัวหำร)
เศษที่ได้จำกกำรหำร m ด้วย n เช่น MOD(9,2)
=1
POWER(m,n)
m= เลขจำนวนเต็ม(ตัวตั้ง)
n = เลขจำนวนเต็ม(ตัวยกกำลัง)
ค่ำของ m ยกกำลัง n(mn)
เช่น POWER(4,2)=16
ROUND(m,n)
m= เลขจำนวนเต็ม(ตัวตั้ง)
n = เลขจำนวนเต็ม้ึ่งแสดงจำนวนทศนิ ยมที่
ต้องกำร หลังจำกปั ดเศษขึ้ น /ลง ถ้ำไม่กำหนด
n ให้พิจำรณำ n = 0
ค่ำของ m ที่ปัดเศษขึ้ น / ลง ให้มีจำนวน
ทศนิ ยม n ตำแหน่ ง โดยตำแหน่ งที่ n+1 มีคำ่
มำกกว่ำหรือเท่ำกับ 5 จะปั ดขึ้ น แต่ถำ้ น้อยกว่ำ
5 จะปั ดเศษลง เช่น ROUND(4.25,1) = 4.3
ROUND (4.24,1) = 4.2
TRUNC(m,n)
m= เลขจำนวนจริง
ค่ำของ m ที่ปัดเศษทิ้ ง ให้มีจำนวนทศนิ ยม n
n = เลขจำนวนเต็ม้ึ่งแสดงจำนวนทศนิ ยมที่ ตำแหน่ ง
ต้องกำร หลังจำกปั ดเศษทิ้ ง ถ้ำไม่กำหนด n ให้
35
พิจำรณำ n = 0
ฟั งก์ชั ่น ABS(m)
โจทย์ >> ต้องกำรทรำบยอดเงินคงเหลือของลูกค้ำแต่ละคน
ว่ำมีคำ่ ต่ำงจำกวงเงินเท่ำไหร่
SQL1 >>
ผลลัพธ์ >>
SELECT C_name, ABS(C_currbal – C_creditlim)
AS “difference”
FROM customer ;
C_name
difference
------------
------------
Sopha
Somchai
Somsak
Amorn
200000
200000
100000
47950
36
ฟั งก์ชั ่น MOD(m,n)
โจทย์ >> เพื่อที่จะบรรจุหีบห่อของสินค้ำ กล่องละ 10 ชิ้ น ให้แสดงรำยกำรสินค้ำและ
เศษที่เหลือจำกกำรบรรจุสินค้ำ
SQL1 >>
SELECT p_name, MOD(p_onhand,10)
FROM Product ;
ผลลัพธ์ >>
p_name
MOD(onhand,10)
------------
------------
Television
Radio
Table
Chair
0
5
2
0
37
ฟั งก์ชั ่น POWER(m,n)
โจทย์ >> ต้องกำรทรำบว่ำถ้ำขึ้ นเงินเดือนให้พนักงำนทุกคนมีคำ่ เท่ำกับเงินเดือน
ปั จจุบนั ยกกำลังสองแล้ว พนักงำนแต่ละคนจะมีเงินเดือนเท่ำไหร่
SQL1 >>
ผลลัพธ์ >>
SELECT e_name, POWER(e_salary,2)
FROM employee;
e_name
POWER(e_salary,2)
------------
------------
Piya
Pinyo
Wilai
…
12250000
24850225
6708100
…
38
ฟั งก์ชั ่น ROUND(m,n) และ TRUNC(m,n)
โจทย์ >> ต้องกำรทรำบรำคำต่อหน่ วยสินค้ำทั้งหมด
โดยแสดงเป็ นทศนิ ยม1 ตำแหน่ ง
SQL1 >>
ผลลัพธ์ >>
SELECT p_name, ROUND(P_unitprice,1), TRUNC(P_unitprice,1)
FROM product ;
p_name
ROUND(P_unitprice,10)
TRUNC(p_unitprice,1)
------------
----------------
----------------
Television
Radio
Table
Chair
Ruler
Paper
10500
1595
650
232.5
1.8
62.3
10500
1595
650
232.5
1.7
62.2
39
ฟั งก์ชั ่นสาหรับหาค่าของกลุ่มข้อมูล
ฟั งก์ชั ่น
รูปแบบ >>
หน้าที่
AVG
ผลลัพธ์เป็ นค่ำเฉลี่ยของข้อมูลทั้งกลุ่ม
SUM
ผลลัพธ์เป็ นผลบวกของข้อมูลทั้งกลุ่ม
MIN
ผลลัพธ์เป็ นค่ำน้อยที่สุดของข้อมูลทั้งกลุ่ม
MAX
ผลลัพธ์เป็ นค่ำมำกที่สุดของข้อมูลทั้งกลุ่ม
COUNT
ผลลัพธ์เป็ นจำนวนรำยกำรของข้อมูลทั้งกลุ่ม
SELECT
FROM
Function (column_name or *)
table_name ;
40
หาค่าเฉลี่ยด้วย AVG() , MAX()
โจทย์ >> ต้องกำรทรำบค่ำเฉลี่ยเงินเดือนพนักงำนทุกคน
SQL1 >>
SELECT AVG(salary)
FROM employee ;
ผลลัพธ์ >>
AVG(salary)
-----------4971
โจทย์ >> ต้องกำรทรำบวงเงินสูงสุดที่ให้แก่ลกู ค้ำมีค่ำเท่ำไหร่
SQL1 >>
SELECT MAX(C_creditlim)
FROM Customer ;
ผลลัพธ์ >>
MAX(C_creditlim)
-----------900000
41
การนับจานวน COUNT, DISTINCT
โจทย์ >> ต้องกำรทรำบจำนวนลูกค้ำของบริษัท
SQL1 >>
โจทย์ >>
SQL1 >>
SELECT COUNT(*)
FROM customer ;
ผลลัพธ์ >>
count(*)
-----------9
แสดงจำนวนรำยกำรสัง่ ซื ้อสินค้ ำทังหมด
้
พร้ อมระบุจำนวนรำยกำรสินค้ ำทังหมดที
้
่มี
กำรสัง่ ซื ้อ
SELECT
COUNT(*) AS “TOTAL” ,
COUNT(DISTINCT IDorder) AS “ORDER”
FROM
Order;
ผลลัพธ์ >>
TOTAL
ORDER
------------ -----------6
5
42
การเชื่อมตาราง (JOIN)
โจทย์ >> ต้องกำรทรำบว่ำใบสัง่ ้ื้ อแต่ละใบมีพนักงำนชื่ออะไรเป็ นผูข้ ำย
Employee
Order
IDorder
IDemployee
IDproduct*
E_name
E_salary
=
E_address
Qty
Discount
IDcustomer *
E_telephone
IDemployee *
SQL >>
ผลลัพธ์ >>
SELECT DISTINCT IDorder, order.IDemployee, e_name
FROM order,employee WHERE order.IDemployee= employee.IDemployee;
IDorder
…….
A-001
A-059
…
IDemployee
……
10100
1855
…
e_name
……..
Piya
Sukchai
…
43
การใช้นิพนธ์คณิตศาสตร์ในการเชื่อมตาราง
โจทย์ >> ต้องกำรทรำบชื่อสินค้ำและยอดเงินที่ยงั ไม่ได้หกั ลดในใบสัง่ ้ื้ อรหัส A-001
product
Order
IDproduct
IDorder
p_name
IDproduct*
unitprice
onhand
=
reorder_pt
SQL >>
ผลลัพธ์ >>
Qty
Discount
reorder_qty
IDcustomer *
total_amount= qty* uniprice
IDemployee *
SELECT p_name, qty * unitprice AS “total_amount”
FROM product , order WHERE IDorder= ‘A-001’ AND
product.IDproduct =order. IDproduct ;
p_name
……
television
total_amount
……..
3150000
44
การเชื่อมตารางแบบ Equi join
โจทย์ >> ต้องกำรทรำบชื่อสินค้ำและยอดเงินของสินค้ำในใบสัง่ ้ื้ อ ‘D-593’
โดยเรียงลำดับตำมปริมำณจำกมำกไปหำน้อย
product
Order
IDproduct
IDorder
p_name
IDproduct*
unitprice
onhand
reorder_pt
reorder_qty
total_amount= qty* uniprice
SQL >>
=
Qty
Discount
IDcustomer *
IDemployee *
SELECT p_name, qty FROM product , order
WHERE product.IDproduct=order.Idproduct
AND IDorder=‘D-593’ ORDER BY qty DESC ;
ผลลัพธ์ >>
p_name
……
Paper
Pencil
qty
……..
150
50
45
การเชื่อมตารางแบบ Self join
โจทย์ >> พนักงำนแต่ละคนต้องกำรทรำบว่ำมีพนักงำนคนใดบ้ำงที่
เงินเดือนมำกกว่ำตน
employee E2
IDemployee
IDemployee
lowerpaid
higherpaid
lowersalary
SQL >>
employee E2
<
highersalary
address
address
telephone
telephone
=
SELECT E1.e_name AS “lowerpaid”,
E1.salary AS “lowersalary”,
E2.e_name AS “higherpaid”,
E2.salary AS “highersalary”
FROM employee E1, employee E2
WHERE E1.salary < E2.salary ORDER BY 1;
46
การเชื่อมตารางแบบ Self join
ผลลัพธ์ >>
lowerpaid
lowersalary
……..
higherpaid
Pinyo
Pinya
Pinya
Pinya
Sukchai
Sukchai
Wilai
Wilai
Wilai
Wilai
4985
3500
3500
3980
3980
3980
2590
2590
2590
2590
Sompat
Pinyo
Sukchai
Sombat
Pinyo
Sombat
Piya
Pinyo
Sombat
Sukchai
……
……
highersalary
……..
9800
4985
3980
9800
4985
9800
3500
4985
9800
3980
47
การเชื่อมตารางแบบ Outer join
โจทย์ >> แสดงรหัสและชื่อสินค้ำที่ไม่มีกำรสัง่ ้ื้ อจำกลูกค้ำ
product
Order
IDproduct
IDorder
p_name
IDproduct*
unitprice
onhand
reorder_pt
reorder_qty
=
Qty
Discount
IDcustomer *
IDemployee *
SQL >>
SELECT p_name, P.Idproduct , IDorder
FROM product P, order O
WHERE P.IDproduct = O.IDproduct(+);
48
การเชื่อมตารางแบบ Self join
ผลลัพธ์ >>
IDproduct
……
10515
10515
20001
20002
21011
35155
36710
39001
p_name
……..
Television
Television
Radio
Table
Chair
Pencil
Ruler
Paper
IDorder
……..
A-001
C-523
B-191
A-059
D-593
แถวที่ไม่มีขอ้ มูลในorder
D-593
49