Tải bản đầy đủ (.pptx) (36 trang)

Quản trị cơ sở dữ liệu Oracle 02 data type – function – subquery

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (94.24 KB, 36 trang )

Data type – Function – Subquery


– Kiểu dữ liệu (data type)
– Hàm (functions)
– Mệnh đề Group by (group By clause)
– Truy vấn con (sub-queries)


Kiểu dữ liệu (data type)
Loại dữ liệu

Mô tả

VARCHAR2(n)

Dữ liệu kiểu ký tự, n<=4000

CHAR(n)

Dữ liệu kiểu ký tự, kích thước cố đinh, n<=2000

NUMBER

Kiểu số nguyên, số ký số tối đa là 38 ký số

NUMBER(p)

Kiểu số nguyên, với số ký số tối đa là p

NUMBER(p,s)



Kiểu số thực, tối đa p ký số, s số thập phân. p≤38, -84 ≤ s ≤ 127.Ví dụ: số 7456123, khai báo kiểu number (7, -2)
= 7456100

DATE

Kiểu ngày, lưu ngày từ 1/1/4712 BC -> 31/12/9999

LONG

Kiểu ký tự (Do not create tables with LONG columns. Use LOB columns (CLOB, NCLOB) instead. LONG
columns are supported only for backward compatibility.)

RAW

Chuỗi nhị phân dài tối đa 2000 bytes

LONG RAW

Chuỗi nhị phân dài tối đa 2GB

BLOB

(Bynary Large Object) có độ dài ≤ 4GB

CLOB

(Character Large Object) có độ dài ≤ 4GB

BFILE


Chứa con trỏ chỉ đến một tập tin nhị phân ở ngoài DB


Hàm


Hàm chuyển đổi chữ hoa, chữ thường

Hàm

Kết quả

LOWER(‘SQL Course’)

sql course

UPPER(‘SQL Course’)

SQL COURSE

INITCAP(‘SQL Course’)

Sql Course


Ví dụ: Hàm chuyển đổi chữ hoa, thường

SELECT last_name, job_id, salary
FROM employees

WHERE last_name = ‘peng’;

0 rows returned.

SELECT last_name, job_id, salary
FROM employees
WHERE LOWER(last_name) = ‘peng’;

1 rows returned.

last_name

job_id

salary

Peng

IT

3.000

Jane

IT

2.500


Hàm xử lý ký tự


Hàm

Kết quả

SUBSTR(‘HelloWorld’, 1,5)

Hello

LENGTH(‘HelloWorld’)

10

INSTR(‘HelloWorld’, ‘W’)

6

LPAD(salary, 10, ‘*’)

*****24000

RPAD(salary, 10, ‘*’)

24000*****


Hàm xử lý số (number Function)

Hàm


ROUND(45.926, 2)

Kết quả

Làm tròn đến vị trí thứ 2

45.93

sau dấu chấm

TRUNC(45.926, 2)

Chỉ lấy đến vị trí thứ 2 sau

45.92

dấu chấm

MOD(1600, 300)

100


Ví dụ: TRUNC

SELECT TRUNC(45.923)





FROM DUAL;

Nếu không xác định vị trí thì mặc định là 0

Kết quả: 45 (zero decimal places)
Ghi chú: DUAL là một table giả, được dùng để xem kết quả từ một hàm hoặc từ
một tính toán nào đó


Hàm Ngày tháng





ADD_MONTHS (date, integer)

– trả về ngày tháng đã cộng với một số nguyên (integer) vào tháng.
– Ví dụ




add_months('01-Aug-03', 3) = 01-Nov-03
add_months('01-Aug-03', -3) = 01-MAY-03
add_months('31-Jan-03', 1) = 28-FEB-03

MONTHS_BETWEEN (date1, date2)

– Trả về số tháng giữa date1 và date2



Ví dụ: months_between('02-Feb-1995', '01-Jan-1995’) = 1.03225806


Hàm Ngày tháng (tt)



ROUND(date [, fmt ]): trả về ngày tháng đã được làm tròn đến hàng đơn vị được
xác định bởi định dạng ngày tháng (fmt)

– Ví dụ



ROUND (TO_DATE ('27-OCT-00'),'YEAR') = 01-JAN-01
ROUND(TO_DATE('13-OCT-06'), 'MONTH') = 01-OCT-06.


Hàm Ngày tháng (tt)




CURRENT_DATE trả về ngày tháng hiện tại nơi mà người dùng đang truy vấn.
NEXT_DAY (date, char)

– Trả về ngày của tuần đầu tiên được xác định bởi char, và phải sau date.
– Ví dụ:



NEXT_DAY('02-FEB-2001','TUESDAY') = 06-FEB-2001


Hàm Ngày tháng (tt)




LAST_DAY (date) trả về ngày cuối cùng của tháng.
Ví dụ

– LAST_DAY('08-JAN-01') = 31-JAN-01



SYSDATE trả về ngày giờ hiện tại của hệ điều hành nơi cài đặt database


Hàm Ngày tháng (tt)






EXTRACT( {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } FROM datetime_value_expression)

Ví dụ:




EXTRACT(YEAR FROM DATE '1998-03-07') = 1998

TO_CHAR (date, fmt): chuyển đổi ngày tháng thành chuỗi có kiểu dữ liệu varchar2 theo định dạng fmt
Ví dụ:







TO_CHAR(SYSDATE, 'YYYY') = ‘2017’
TO_CHAR(SYSDATE, 'DD-MM-YYYY') = '14-02-2017'
TO_CHAR(SYSDATE, 'DD-MON-YYYY') = '14-FEB-2017'
TO_CHAR(SYSDATE, 'fmDDTH') = '14TH'
TO_CHAR(SYSDATE, 'FMMonth DD, YYYY') = 'February 14, 2017'


Hàm Ngày tháng (tt)



TO_DATE (char, fmt): chuyển đổi một chuỗi sang kiểu ngày tháng theo định
dạng fmt.




Ví dụ:





TO_DATE('2003/07/09', 'yyyy/dd/mm') = 09-JUL-03
TO_DATE('070903', 'MMDDYY') = 09-JUL-03
TO_DATE('20020315', 'yyyymmdd') = 15-MAR-02


Hàm NVL




Hàm NVL dùng để chuyển đổi giá trị null thành một giá trị cụ thể nào đó.
Kiểu dữ liệu được chuyển đổi phải phù hợp với kiểu dữ liệu ban đầu.

– NVL(commision_pct, 0)
– NVL(hire_date, ’01-Jan-09’)
– NVL(job_title, ‘No Job Yet’)


Hàm gom nhóm

Hàm

Mô tả


AVG

Giá trị trung bình

COUNT

Đếm số dòng (row)

SUM

Tổng giá trị

MAX/MIN

Giá trị cao nhất/thấp nhất


Hàm gom nhóm với giá trị null



Hàm gom nhóm bỏ qua giá trị null trong cột
employees

SELECT AVG(commision_pct)
FROM employees;
Kết quả: 2.500




last_name

job_id

commision_pct

Peng

IT

3.000

Jane

IT

2.500

Anna

HR

2.000

Hàm NVL giúp hàm gom nhóm tính toán cả những
giá trị null
John
HR
Thomas


SELECT AVG(NVL(commision_pct, 0))
FROM employees;
Kết quả: 1.500

HR

null
null


Tạo nhóm dữ liệu



Ta có thể phân chia những dòng dữ liệu trong table thành những nhóm nhỏ hơn
sử dụng mệnh đề GROUP BY

SELECT column, group_function(column)
FROM table
[WHREE condition]
[GROUP BY group_by_expression]
[ORDER BY column];


VÍ DỤ: GROUP BY



Tất cả các cột trong SELECT (ngoại trừ các hàm tính toán) phải xuất hiện trong
mệnh đề GROUP BY


SELECT department_id, AVG(salary)
FROM

employees

GROUP BY department_id;


Truy vấn không hợp lệ với hàm GROUP

SELECT department_id, job_id, COUNT(name)
FROM employees
GROUP BY department_id;

Either remove job_id, or
Add job_id in the GROUP_BY

SELECT department_id, COUNT(name)
FROM employees;
A GROUP_BY clause must be added to count
the name for each dept


Truy vấn không hợp lệ với hàm GROUP (tt)



Không được sử dụng mệnh đề WHERE để lọc dữ liệu trong nhóm


SELECT department_id, AVG(salary)
FROM employees



WHERE AVG(salary) > 8000

Dùng mệnhGROUP
đề HAVING
để lọc dữ liệu trong nhóm
BY department_id;

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 8000


Hàm gom nhóm lồng nhau



Hiển thị lương trung bình cao nhất:
SELECT MAX(AVG(salary))
FROM

employees

GROUP BY department_id




Ghi chú: mệnh đề GROUP BY là bắt buộc khi dùng hàm gom nhóm lồng nhau.


Truy vấn con


Truy vấn con (Nested SELECT)
SELECT select_list
FROM table
WHERE expr operator




select_list
FROM
table)
Truy vấn con (subquery) thực(SELECT
thi trước
truy vấn chính (main
query)

Kết quả của truy vấn con được dùng bởi main query


×