LEC 04: SQL FUNCTIONS SAYAN UNANKARD 1/2558 5 › sayan › it332 › slides ›...

Preview:

Citation preview

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

Recommended