www . i t s c i .m ju . ac . t h / sayan
LEC 04: SQL FUNCTIONS SAYAN UNANKARD1/2558
5
CONVERSION FUNCTIONS
Implicit data typeconversion
Explicit data typeconversion
Data typeconversion
2
Oracle server สามารถเปลยนแปลงคาไดโดยอตโนมต ดงน
IMPLICIT DATA TYPE CONVERSION
NUMBERVARCHAR2 or CHAR
DATEVARCHAR2 or CHAR
ToFrom
VARCHAR2 or CHARNUMBER
VARCHAR2 or CHARDATE
ToFrom
3
EXPLICIT DATA TYPE CONVERSION
NUMBER CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
4
USING THE TO_CHAR FUNCTION WITH DATES
รปแบบของ format_model• ตองอยภายในเครองหมาย single quotation marks
• เปน case-sensitive
• สามารถก าหนดดวยรปแบบวนทตามทตองการได
• มค าสง fm element เพอจดการชองวางหรอเลขศนยทน าหนา ออกไปได เชน 01/03/2008
TO_CHAR(date, 'format_model ')
5
ELEMENTS OF THE DATE FORMAT MODEL
Three-letter abbreviation of the day of the weekDY
Full name of the day of the weekDAY
Two-digit value for the monthMM
Full name of the monthMONTH
Three-letter abbreviation of the monthMON
Numeric day of the monthDD
Full year in numbersYYYY
Year spelled out (in English)YEAR
ResultElement
6
รปแบบของเวลา
การแทรกขอความเขาไปในรปแบบ โดยอยภายในเครองหมาย double quotation marks
การสะกดค าตอทายของตวเลข
ELEMENTS OF THE DATE FORMAT MODEL
DD "of" MONTH 12 of OCTOBER
ddspth fourteenth
HH24:MI:SS AM 15:45:32 PM
7
SELECT last_name,TO_CHAR(hire_date, 'fmDD Month YYYY')AS HIREDATE
FROM employees;
USING THE TO_CHAR FUNCTION WITH DATES
…
8
USING THE TO_CHAR FUNCTION WITH NUMBERS
สามารถจดการรปแบบของตวเลข โดยสามารถใชค าสง TO_CHAR function
Prints a decimal point.
Prints a comma as a thousands indicator,
Places a floating dollar sign$
Uses the floating local currency symbolL
Represents a number9
Forces a zero to be displayed0
ResultElement
TO_CHAR(number, ‘format_model’' )
9
SELECT TO_CHAR(salary, '$99,999.00') SALARYFROM employeesWHERE last_name = 'Ernst';
USING THE TO_CHAR FUNCTION WITH NUMBERS
to_char(1210.73, '9999.9') would return '1210.7'
to_char(1210.73, '9,999.99') would return '1,210.73'
to_char(1210.73, '$9,999.00') would return '$1,210.73'
to_char(21, '000099') would return '000021'
10
ฟงกชนสามารถทจะเรยกใช ซอน ๆ กนได
การประมวลผลจะเรยกจากระดบขางในกอน
NESTING FUNCTIONS
F3(F2(F1(col,arg1),arg2),arg3)
Step 1 = Result 1
Step 2 = Result 2
Step 3 = Result 3
11
SELECT last_name,UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM employeesWHERE department_id = 60;
NESTING FUNCTIONS
12
NVL FUNCTION
การแปลงคาวางใหกลายเปนคาตามทตองการ• ชนดของขอมลทสามารถใชในฟงกชนนไดคอ date, character, และ number
• ตวอยางการเรยกใช โดยทชนดของขอมลทเปลยนตองตรงกบขอมลเดม
• NVL(commission_pct,0)
• NVL(hire_date,'01-JAN-08')
• NVL(job_id,'No Job Yet')
13
SELECT last_name, salary, NVL(commission_pct, 0),
(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;
USING THE NVL FUNCTION
…
1
1 2
2
14
CONDITIONAL EXPRESSIONS
ในค าสง SQL สามารถก าหนดเงอนไขในการแสดงผล โดยใชค าสง IF-THEN-ELSE
ประกอบดวย 2 วธคอ• CASE expression
• DECODE function
15
SIMPLE CASE
Simple CASE
Syntax SELECT Field, Field, CASE Field | Expression WHEN value THEN result WHEN value THEN result ELSE result END As alias FROM Table
Examples
Select Firstname, Case Gender When 'F' Then 'woman' When 'M' Then 'man' End As Sex From Members
16
SIMPLE CASE EXAMPLE
Select Artistname, Region,
Case Region
When 'NC' Then 'South'
When 'VA' Then 'South'
When 'IL' Then 'Midwest'
When 'VT' Then 'New England'
Else 'Somewhere Else'
End As Area
From Artists
17
Artistname Region Area -------------- --------------- -------------The Neurotics NC SouthLouis Holiday IL MidwestWord IN Somewhere ElseSonata VA SouthThe Bullets TX Somewhere ElseJose MacArthur CA Somewhere ElseConfused GA Somewhere ElseThe Kicks NY Somewhere ElseToday ONT Somewhere Else21 West Elm VT New EnglandHighlander OH Somewhere Else
SIMPLE CASE EXAMPLE
18
SWITCHED CASE
Switched CASE
Syntax SELECT Field, Field, CASE WHEN Field | Expression comparison Value | Field | Expression THEN result WHEN Field | Expression comparison Value | Field | Expression THEN result ELSE result END As alias FROM Table
Select TrackNum, TrackTitle, LengthSeconds, Case When TrackNum=1 And LengthSeconds<240 Then 'Short 1st' When TrackNum=1 And LengthSeconds>480 Then 'Long 1st' Else 'Another Track' End as Eval From Tracks Where TrackNum<3
19
SWITCHED CASE EXAMPLE
Select TrackNum, TrackTitle, LengthSeconds,Case
When TrackNum=1 And LengthSeconds<240 Then 'Short 1st Track'When TrackNum=1 And LengthSeconds>480 Then 'Long 1st Track'Else 'Another Track'
End as EvalFrom Tracks Where TrackNum<3
20
SWITCHED CASE EXAMPLE
TrackNum TrackTitle LengthSeconds Eval------------- ---------- ------------------- ------------1 Bob's Dream 185 Short 1st Track2 My Wizard 233 Another Track1 Fat Cheeks 352 Another Track1 Hottie 233 Short 1st Track2 GoodtimeMarch 293 Another Track2 Rocky and Natasha 283 Another Track1 Violin Sonata
No.1 in D Major 511 Long 1st Track2 Violin Sonata
No. 2 in A Major 438 Another Track1 Song 1 285 Another Track2 Song 2 272 Another Track1 I Don't Know 201 Short 1st Track2 What's the Day 332 Another Track
21
DECODE FUNCTION
การใชค าสง DECODE เพอก าหนดเงอนไขไดเชนเดยวกบค าสง CASE
DECODE(col|expression, search1, result1 [, search2, result2,...,][, default])
22
SELECT last_name, job_id, salary,DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,'SA_REP', 1.20*salary,
salary)REVISED_SALARY
FROM employees;
USING THE DECODE FUNCTION
…
…
…23
SELECT last_name, salary,DECODE (TRUNC(salary/2000, 0),
0, 0.00,1, 0.09,2, 0.20,3, 0.30,4, 0.40,5, 0.42,6, 0.44,
0.45) TAX_RATEFROM employeesWHERE department_id = 80;
USING THE DECODE FUNCTION
ตวอยางการแสดงคาภาษ จากเงอนไขทก าหนดจากเงนเดอน เฉพาะแผนกหมายเลข 80
24
WHAT ARE GROUP FUNCTIONS?
ฟงกชนกลมคอ ฟงกชนทไดจากการประมวลผลขอมลหลาย ๆ แถวEMPLOYEES
Maximum salary in EMPLOYEEStable
…
25
TYPES OF GROUP FUNCTIONS
• AVG
• COUNT
• MAX
• MIN
• STDDEV
• SUM
• VARIANCE
Group
functions
26
SELECT group_function(column), ...FROM table[WHERE condition][ORDER BY column];
GROUP FUNCTIONS: SYNTAX
27
SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary)
FROM employeesWHERE job_id LIKE '%REP%';
USING THE AVG AND SUM FUNCTIONS
AVG คาเฉลย SUM คาผลรวม ซงจะใชกบขอมลตวเลขเทานน
28
SELECT MIN(hire_date), MAX(hire_date)FROM employees;
USING THE MIN AND MAX FUNCTIONS
MIN คานอยทสด MAX คามากทสด สามารถใชไดกบ ตวเลข ตวอกษร และ วนท ได
29
USING THE COUNT FUNCTION
COUNT(*) นบจ านวนแถวขอมลทตรงเงอนไข ทก าหนด
COUNT(expr) นบจ ำนวนแถวทไมเปนคำวำง ส าหรบคอลมน expr
SELECT COUNT(commission_pct)FROM employeesWHERE department_id = 80;
SELECT COUNT(*)FROM employeesWHERE department_id = 50;
1
2
30
COUNT(DISTINCT expr) นบจ านวนแถวทไมเปนคำวำง โดยไมรวมแถวทขอมลซ ำของคอลมนexpr
ตวอยางการนบจ านวนแผนกของพนกงาน ในตาราง EMPLOYEES โดยหากแผนกซ ากนจะนบเปน 1SELECT COUNT(DISTINCT department_id)FROM employees;
USING THE DISTINCT KEYWORD
31
GROUP FUNCTIONS AND NULL VALUES
การใชฟงกชนกลมโดยไมมการประมวลผลคาวาง
หากตองการใหประมวลผลคาวางดวยสามารถใชฟงกชน NVL functions
SELECT AVG(commission_pct)FROM employees;
SELECT AVG(NVL(commission_pct, 0))FROM employees;
1
2
32
CREATING GROUPS OF DATA
EMPLOYEES
…
4400
9500
3500
6400
10033
Average salary in EMPLOYEES table for
each department
33
CREATING GROUPS OF DATA: GROUP BY CLAUSE SYNTAX
สามารถใชฟงกชนแบบกลม เพอประมวลผลขอมลเปนกลมยอย ๆ ได โดยระบค าสง GROUP BY clause.
SELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];
34
คอลมนทงหมดทถกเลอกใหแสดงผลในค าสง SELECT ไมรวมทถกใชใน ฟงกชนแบบกลม จะตองอยในค าสง GROUP BY clause
SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id ;
USING THE GROUP BY CLAUSE
35
การใชค าสง GROUP BY โดยไมมในคอลมนทเลอกแตอาจจะท าใหสบสนไดวาผลลพธทไดของแตละแถวเปนของแผนกอะไร
USING THE GROUP BY CLAUSE
SELECT AVG(salary)FROM employeesGROUP BY department_id ;
36
GROUPING BY MORE THAN ONE COLUMN
EMPLOYEES Add the salaries in the EMPLOYEES
table for each job, grouped by
department.
…
37
SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id ORDER BY department_id;
USING THE GROUP BY CLAUSE ON MULTIPLE COLUMNS
38
ILLEGAL QUERIES USING GROUP FUNCTIONS
คอลมนทเลอกไมไดระบในสวนของ GROUP BY clause
SELECT department_id, COUNT(last_name)FROM employees;
SELECT department_id, job_id, COUNT(last_name)FROM employeesGROUP BY department_id;
A GROUP BY clause must be added to count the last names for each department_id.
Either add job_id in the GROUP BY or remove the job_id column from the SELECT list.
39
ILLEGAL QUERIES USING GROUP FUNCTIONS
ไมสามารถใชเงอนไขฟงกชนกลม ในสวนของค าสง WHERE ไดอนญาตใหใชค าสง HAVING clause ในการก าหนดเงอนไขของฟงกชนกลม เทานน
SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;
Cannot use the WHERE clause to restrict groups
40
RESTRICTING GROUP RESULTS
EMPLOYEES
…
The maximum salary per
department when it is
greater than $10,000
41
SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
RESTRICTING GROUP RESULTS WITH THE HAVING CLAUSE
กรณทตองการใชค าสง HAVING clause สามารถใชก าหนดเงอนไขไดดงน1. แถวทถกจดกลม
2. ฟงกชนกลม
3. กลมขอมลทตรงกบเงอนไขจะถกแสดงผล
42
SELECT department_id, MAX(salary)FROM employeesGROUP BY department_idHAVING MAX(salary)>10000 ;
USING THE HAVING CLAUSE
43
SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_idHAVING SUM(salary) > 13000ORDER BY SUM(salary);
USING THE HAVING CLAUSE
44
SELECT MAX(AVG(salary))FROM employeesGROUP BY department_id;
NESTING GROUP FUNCTIONS
แสดงคาสงสดของคาเฉลยของเงนเดอนในแตละแผนก
45
VIEW
Logically represents subsets of data from
one or more tables
View
Generates numeric valuesSequence
Basic unit of storage; composed of rows Table
Gives alternative names to objectsSynonym
Improves the performance of some queriesIndex
DescriptionObject
46
WHAT IS A VIEW?EMPLOYEES table
47
ADVANTAGES OF VIEWS
To restrict
data access
To make complex
queries easy
To provide data
independence
To present different
views of the same
data
48
SIMPLE VIEWS AND COMPLEX VIEWS
Yes
No
No
One
Simple Views
YesContain functions
YesContain groups of data
One or moreNumber of tables
Not alwaysDML operations through
a view
Complex ViewsFeature
49
CREATING A VIEW
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(alias[, alias]...)]
AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY [CONSTRAINT constraint]];
เปนการน าชดค าสง SQL ในการสรางวว
NOFORCE Creates the view only if the base tables exist (This is the default.)
สามารถใชค าสง SQL ทงแบบปกตและแบบซบซอน
50
ตวอยางการสราง EMPVU80 view ซงประกอบดวยขอมลพนกงานในแผนกหมายเลข 80
การเรยกดโครงสรางของ วว ใน SQL*Plus โดยใชค าสง DESCRIBE
CREATING A VIEW
DESCRIBE empvu80
CREATE VIEW empvu80AS SELECT employee_id, last_name, salary
FROM employeesWHERE department_id = 80;
51
การสรางววโดยใชนามแฝงของคอลมน
CREATING A VIEW
CREATE VIEW salvu50AS SELECT employee_id ID_NUMBER, last_name NAME,
salary*12 ANN_SALARYFROM employeesWHERE department_id = 50;
52
SELECT *FROM salvu50;
RETRIEVING DATA FROM A VIEW
53
การแกไขวว EMPVU80 โดยใชค าสง CREATE OR REPLACE VIEW
การใชนามแฝงของคอลมน จะเรยงล าดบตามล าดบของคอลมนทถกเลอกในค าสง SQL ของควร
MODIFYING A VIEW
CREATE OR REPLACE VIEW empvu80(id_number, name, sal, department_id)
AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employeesWHERE department_id = 80;
54
CREATING A COMPLEX VIEW
การสรางววแบบซบซอน โดยประกอบดวยฟงกชนกลม
CREATE OR REPLACE VIEW dept_sum_vu(name, minsal, maxsal, avgsal)
AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary)
FROM employees e JOIN departments dON (e.department_id = d.department_id)GROUP BY d.department_name;
55
DENYING DML OPERATIONS
ขอควรระวงคอจะตองแนใจวาไมมการใชค าสง WITH READ ONLY ในสวนของการสรางวว
ซงจะท าใหผลลพธของววใน Oracle server เกดขอผดพลาดได
56
CREATE OR REPLACE VIEW empvu10(employee_number, employee_name, job_title)
AS SELECT employee_id, last_name, job_idFROM employeesWHERE department_id = 10WITH READ ONLY ;
DENYING DML OPERATIONS
57
REMOVING A VIEW
การลบวว ซงจะไมกระทบกบขอมลทอยในตาราง สามารถลบววได เพราะววเปนเพยงสวนทใชในการเลอกขอมลจากตารางจรง มาเทานน
DROP VIEW view;
DROP VIEW empvu80;
58
SEQUENCES
Logically represents subsets of data from
one or more tables
View
Generates numeric valuesSequence
Basic unit of storage; composed of rows Table
Gives alternative names to objectsSynonym
Improves the performance of some queriesIndex
DescriptionObject
59
SEQUENCES
A sequence:• สามารถสรางล าดบตวเลขอตโนมต
• อยในรปแบบทแบงปนขอมล
• สามารถน าไปสรางเปน primary key
• สามารถใชแทนรหสในโปรแกรมได
• เพมความเรวในการจดการหนวยความจ าได
1
2 4
3 5
6 8
7
10
9
60
CREATE SEQUENCE STATEMENT : SYNTAX
รปแบบการสรางตวเลขเรยงล าดบอตโนมต
CREATE SEQUENCE sequence[INCREMENT BY n][START WITH n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}];
61
CREATING A SEQUENCE
ตวอยางการสราง ตงชอวา DEPT_DEPTID_SEQ เพอใชเปนคยหลกของตาราง DEPARTMENTS
ไมอนญาตใหใช CYCLE
CREATE SEQUENCE dept_deptid_seqINCREMENT BY 10START WITH 120MAXVALUE 9999NOCACHENOCYCLE;
62
NEXTVAL AND CURRVAL PSEUDOCOLUMNS
NEXTVAL คนคาตวเลขตอไป ของล าดบ ซงจะเปนคาทไมซ า ส าหรบ ทกๆ กลมผใช
CURRVAL คนคาล าดบปจจบน
NEXTVAL จะตองถกก าหนดคากอน ทคาของ CURRVAL จะถกก าหนด
63
USING A SEQUENCE
ตวอยางการเพมแถวขอมลใหม โดยใชตวเลขล าดบ
การเรยกดคาปจจบนของ ตวเลขล าดบ DEPT_DEPTID_SEQ
INSERT INTO departments(department_id, department_name, location_id)
VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);
SELECT dept_deptid_seq.CURRVALFROM dual;
64
CACHING SEQUENCE VALUES
การจดการคาแบบเรยงล าดบในหนวยความจ าจะท าใหการเขาถงขอมลไดเรวขน
ชองวางระหวางตวเลขสามารถเกดขนไดจาก• rollback
• ระบบลมเหลว
• ถกน าไปใชในตารางอน
65
MODIFYING A SEQUENCE
ALTER SEQUENCE dept_deptid_seqINCREMENT BY 20MAXVALUE 999999NOCACHENOCYCLE;
การแกไขคาทเพมขน คาสงสด คาต าสด การวนคา และ การจดการหนวยความจ า
66
GUIDELINES FOR MODIFYING A SEQUENCE
DROP SEQUENCE dept_deptid_seq;
จะท าการแกไขไดจะตองมการก าหนดสทธ ใหสามารถใชค าสง ALTER sequence ได
ตวเลขถดไปเทานนทจะมผล หลงจากใชค าสงแกไข ไมสามารถจดการกบคาทผานมาแลวได
หากตองการเรมตนคาใหม จะตองท าการลบออกกอน และ สรางใหม
การลบ sequence โดยใชค าสง DROP
67
SYNONYMS
Logically represents subsets of data from
one or more tables
View
Generates numeric valuesSequence
Basic unit of storage; composed of rows Table
Gives alternative names to objectsSynonym
Improves the performance of some queriesIndex
DescriptionObject
68
CREATING A SYNONYM FOR AN OBJECT
CREATE [PUBLIC] SYNONYM synonymFOR object;
การเขาถงวตถตาง ๆ ใน Oracle สามารถก าหนดใหเรยกใชไดงายขนโดยใชนามแฝง หรอ ชอเหมอนของวตถนน ๆ• สรางการอางอง และ การเขาถงตารางใหงายขนส าหรบบคคลอน ๆ
• เปนการตงชอใหสนลง
69
CREATING AND REMOVING SYNONYMS
CREATE SYNONYM d_sumFOR dept_sum_vu;
DROP SYNONYM d_sum;
การสรางชอวว DEPT_SUM_VU ใหสนลง
การลบ synonym
70