Ngôn ngữ thao tác dữ liệu( Data Manipulation Language-DML):

Một phần của tài liệu Báo cáo đồ án cuối kỳ môn quản lý thông tin đề tài Oracle UIT (Trang 56)

Chương 4 : Các câu lệnh SQL trong Oracle

4.2. Ngôn ngữ thao tác dữ liệu( Data Manipulation Language-DML):

4.2.1.Thêm dữ liệu vào bảng:

a) Thêm một mẩu tin:

Cú pháp:

INSERT INTO table_name [(column 1, column 2,…)] VALUES (values 1, values 2,..)

Ví dụ:

INSERT INTO PHONG_BAN ( MA_PHG, TEN_PHG, DIA_DIEM) VALUES (‘KTTT’, ‘Khoa học và Kĩ thuật thông tin’, ‘UIT’);

b) Thêm nhiều mẩu tin:

Cho phép chèn nhiều dòng vào bảng với giá trị từ những bảng khác. Cú pháp:

INSERT INTO table_name [(column 1, column 2,…)] SELECT column1, column2, FROM table(s)

Ví dụ:

INSERT INTO SINH_VIEN (DEAN) SELECT TENDA FROM DEAN

4.2.2.Sửa dữ liệu trong bảng:

Cú pháp:

UPDATE table_name SET column1=value 1, column2=value 2,.. [WHERE condition]

Lưu ý: Nếu bỏ quả điều kiện WHERE thì tất cả các dịng của cột sẽ được

update

UPDATE NHAN_VIEN SET TEN = ‘Nguyen Van A’, SDT = ‘0364441422’ WHERE DIACHI = ‘BINH DINH’

4.2.3.Xóa dữ liệu trong bảng:

Cú pháp:

DELETE FROM table _name [WHERE condition]

Ví dụ:

DELETE FROM SINH_VIEN WHERE MSSV = ‘12346789’ 4.3. Ngôn ngữ điều khiển dữ liệu( Data Control Language-DCL):

4.3.1.Role:

Role là tên của tập hợp các quyền hệ thống nhằm quản lí tập hợp các quyền cho các ứng dụng cơ sở dữ liệu hoặc các nhóm user. Một user có thể có nhiều role, nhiều user có thể có thể có cùng một role.

a) Lệnh tạo Role:

Cú pháp:

CREATE ROLE rolename

NOT IDENTIFIED | IDENTIFIED BY password

Trong đó:

NOT INDENTIFIED: Không đặt password cho role.

IDENTIFIED BY password: user phải nhập password để enable role

Ví dụ:

CREATE ROLE NHANSU INDENTIFIED BY nhansu;

b) Lệnh xóa Role:

Cú pháp:

DROP ROLE rolename;

Ví dụ:

DROP ROLE NHANSU;

c) Lệnh SET ROLE:

Mục đích: Để disable ( làm mất hiệu lực ) hoặc enable ( phục hồi hiệu lực ) của role trong phiên làm việc hiện hành.

rolename ] [NONE]

Trong đó:

ALL: enable tất cả các role ngoại trừ role sau EXCEPT NONE: disable tất cả các role trong session hiện hành. 4.3.2.Ngôn ngữ điều khiển dữ liệu:

a) Lệnh cấp quyền:

Lệnh này dùng để cấp quyền hoặc cấp role cho user và role.  Gán quyền cho role:

Cú pháp:

GRANT privilege(s) [ON object_name] TO rolename [WITH GRANT OPTION]

Ví dụ:

CREATE ROLE technic

GRANT ALL ON member TO techinic WITH GRANT OPTION  Gán quyền cho user:

Cú pháp:

GRANT privilege(s) [ON object_name] TO username [WITH GRANT OPTION]

Ví dụ:

GRANT ALL ON member TO scott WITH GRANT OPTION  Gán role cho role:

Cú pháp:

GRANT rolename TO rolename WITH GRANT OPTION

Ví dụ:

GRANT DBA TO technic WITH GRANT OPTION  Gán role cho user:

Cú pháp:

GRANT rolename TO username [ WITH GRANT OPTION ]

Ví dụ:

GRANT technic TO tech_dept

Cú pháp:

REVOKE privilege | role FROM role | user

Ví dụ:

REVOKE UPDATE, DELECT ON member FROM scott REVOKE DBA FROM technic

4.3.3.Quản lí user:a) Lệnh tạo user: a) Lệnh tạo user:

Cú pháp:

CREATE USER username IDENTIFIED BY password

Ví dụ:

CREATE USER quanlyns IDENTIFIED BY ns2022

b) Lệnh đổi password cho user:

Cú pháp:

ALTER USER username IDENTIFIED BY password

Ví dụ:

ALTER USER quanlyns IDENTIFIED BY ns2022new

c) Lệnh xóa user:

Cú pháp:

DROP USER username

Ví dụ:

DROP USER quanlyns 4.4. Truy vấn dữ liệu:

4.4.1.Câu truy vấn tổng quát:

Cú pháp:

SELECT [DISTINCT] [table].expr [alias] ,… FROM table [alias],…

WHERE [join condition] AND [row condition] OR [another row condition] GROUP BY [epxr/ column] HAVING [group condition]

 DISTINCT: loại bỏ những dòng trùng lặp.  WHERE: điều kiện trước khi gom nhóm.  GROUP BY: gom nhóm dữ liệu theo cột.  HAVING: những điều kiện sau khi gom nhóm.

 ORDER BY: sắp xếp kết quả hiển thị theo cột trong mệnh đề Order.  ASC: sắp xếp tăng dần.

 DESC: sắp xếp giảm dần.

4.4.2.Truy vấn con(Subquery):

Cú pháp:

SELECT column 1, column 2… FROM table

WHERE column=(SELECT column FROM table

WHERE condition)

Ví dụ:

SELECT TENNV FROM NHANVIEN

WHERE MANV=(SELECT MANV FROM THANNHAN WHERE MATN= ‘1001’)

4.4.3.Phép kết(join):

Phép kết hay còn gọi là join là điểm mạnh của các hệ quản trị cơ sở dữ liệu quan hệ. Đặc điểm này cho phép các nhóm dữ liệu khác nhau có thể tổ hợp lại tạo nên một quan hệ giữa các bảng. Các đặc tính của phép kết:

 Trong một câu SELECT chỉ có thể kết tối đa 15 bảng.

 Nếu truy vấn đến một cột mà tên của nó xuất hiện trong nhiều bảng thì phải chỉ định tên bảng chứa cột đó.

 Kiểu dữ liệu trong các cột trong một phép kết phải tương thích nhau. Các loại phép kết:

 Phép tự kết(Self join).  Phép kết ngoài(Outer join).

a) Phép kết đơn: Phép kết đơn là một loại phép kết phổ biến nhất. Phép kết

này tạo ra giữa các table mà có những cột chung.

Ví dụ:

SELECT SOLUONG FROM HOADON, CTHD

WHERE HOADON.SOHD=CTHD.SOHD

b) Phép tự kết: Phép tự kết là phép kết của bảng với chính nó. Khi có phép

kết này, nó sẽ tạo ra hai bảng copy của cùng một bảng, các bảng này phân biệt thơng qua đặt tên bí danh alias.

Ví dụ:

SELECT A.MASACH, A.GIA, B.MASACH, B.GIA FROM A.SACH, B.SACH

WHERE A.GIA <= B.GIA AND A.MASACH= “BB002”

c) Phép kết ngoài: Phép kết ngoài tương như phép kết đơn, tuy nhiên sẽ có một số đặc điểm là tất cả các dịng trả về hồn tồn tương tự như phép kết đơn. Ngồi ra, nó cịn trả về các dịng mà nó khơng thỏa mãn điều kiện.

Ví dụ:

SELECT SOLUONG FROM HOADON, CTHD

WHERE HOADON.SOHD(+)=CTHD.SOHD

Dấu cộng (+) tượng trưng cho phép kết ngồi, ở ví dụ sẽ in ra những thơng tin SELECT thỏa điều kiện HOADON.SOHD = CTHD.SOHD, ngồi ra nó cịn in ra những dịng của bảng CTHD mà có HOADON.SOHD != CTHD.SOHD

4.4.4.Các toán tử so sánh và logic: a) Toán tử SOME, ANY, ALL:

 Kết hợp với các toán tử so sánh (=, !=, <,>,<=,>=) trrong mệnh đề WHERE and HAVING.

 ANY(SOME): so sánh một giá trị với mỗi giá trị được trả về bởi một subquery (truy vấn con).

con).

Chú ý: tốn tử NOT khơng đi với SOME, ANY, ALL. Ví dụ:SELECT A.TENSANPHAM, A.GIA

FROM SANPHAM A

WHERE A.GIA > ALL ( SELECT B.GIA FROM SANPHAM B)

b) Toán tử EXISTS, NOT EXIST , IN, NOT IN:

 NOT IN tương đương != ALL  Giá trị trả về là TRUE hoặc FALSE

 Toán tử EXISTS trả về TRUE nếu câu truy vấn con trả về ít nhất một dịng, trả về FALSE nếu khơng có dịng nào trả về.

 NOT EXISTS cũng giống như NOT IN, tuy nhiên NOT IN xem giá trị NULL là FALSE

Ví dụ 1:

SELECT NV.TENNV, NV.LUONG FROM NHANVIEN NV

WHERE NV.MANV EXISTS ( SELECT PC.MANV FROM PHANCONG PC

WHERE PC.TENCONGVIEC= “Ke Toan”)

Ví dụ 2:

SELECT TENSANPHAM FROM SANPHAM SP,

WHERE SP.MASP NOT IN ( SELECT CTHD.MASP FROM CTHD)

4.5. Các loại hàm trong SQL: 4.5.1.Các hàm kiểu số:

 ABS(n): Trả về giá trị tuyệt đối của n.

 FLOOR(n): Trả về số nguyên bằng hoặc nhỏ hơn n.  MOD(m,n): Trả về phép dư của phép chia m/n.

 ROUND(n,m): Làm tròn số n với phần lẻ là m số. Nếu m bỏ qua thì n sẽ khơng lấy phần lẻ, nếu m âm thí số bên trái phần thập sẽ được làm tròn.

 SIGN(n): Trả về giá trị -1 nếu n âm, 0 nếu n bằng 0 và +1 nếu n dương.

 TRUNC(n,m): Cắt ngắn n tới m số lẻ, nếu m bỏ qua thì khơng lấy phần lẻ. Nếu m âm thì phần bên trái thập phân bị cắt đến 0.

4.5.2.Các hàm kiểu chuỗi:

 LENGTH(char): Trả về độ dài của chuỗi kí tự char.

 CONCAT(char1, char2): Nối hai chuỗi char1 và char2, hàm tương đương với toán tử ||.

 INITCAP( char): Đổi kí tự đầu tiên của mỗi từ trong char sang chữ hoa.  LOWER(char)/UPPER(char): Đổi char sang chữ thường/chữ hoa.

 LPAD(char1, n, char2)/RPAD(char1, n, char2): Cho thêm vào bên trái / bên phải của char1 những kí tự char2 đến char1 có độ dài bằng n kí tự.

 LTRIM(char, set)/RTRIM(char, set): Bỏ những kí tự set ở bên trái/bên phải của char, nếu set bỏ qua.thì bỏ những khoảng trắng ở bên trái và bên phải của char.  TRANSLATE( char, from, to): tìm trong char những kí tự xuất hiện trong from

sẽ được thay thế bởi các ký tự tương ứng trong to.

4.5.3.Các hàm kiểu ngày:

 MONTH_BETWEEN( date1, date2): Trả về số tháng giữa date1 và date2. Nếu date1 lớn hơn date2 thì kết quả dương và ngược lại là kết quả âm.

 ADD_MONTHS(date, n) Cộng n tháng vào date , n có thể âm.  NEXT_DAY(date, char): Chỉ ngày tương ứng với char sau date.  LAST_DAY(date): Chỉ ngày sau cùng của tháng chứa date.

4.5.4.Các hàm gom nhóm:

 AVG( DISTINCT | ALL | n): Trả về giá trị trung bình của n, bỏ qua giá trị rỗng.  COUNT(DISTINCT | ALL | expr*): Đếm số dòng của expr.

 MIN/MAX(DISTINCT | ALL | expr): Trả về giá trị nhỏ nhất và lớn nhất của expr.

4.6.1.Thủ tục(Procedure):

Thủ tục là một chương trình con mà nó sẽ thực hiện một hành động cụ thể nào đó.

a) Cấu trúc của một thủ tục:

Một thủ tục gồm có 2 phần: phần đặc tả và phần thân thủ tục.

 Phần đặc tả bắt đầu từ khóa PROCEDURE và kết thúc bởi tên của thủ tục hoặc danh sách tham số.

 Phần thân của thủ tục bắt đầu từ từ khóa IS và kết thúc bởi tên của thủ tục hoặc danh sách tham số. Trong phần thân gồm có 3 phần:

 Phần khai báo: chứa các khai báo cục bộ nằm giữa từ khóa IS và BEGIN. Từ khóa DECLARE khơng được dùng để khai báo trong thủ tục, nó chỉ dùng để khai báo trong khối PL/SQL mà thôi.

 Phần thi hành lệnh: chứa các câu lệnh nằm trong khoảng giữa BEGIN và END. Tối thiểu phải có 1 câu lệnh trong phần này.

 Phần xử lí ngoại lệ: chứa các xử lí ngoại lệ.

b) Tạo thủ tục:

Cú pháp:

CREATE [OR REPLACE] PROCEDURE procedure_name (variable_name datatype) IS [local declarations] BEGIN executable statements [ EXCEPTION Exception handler] END [procedurename]; Ví dụ:

CREATE PROCEDURE QUEQUAN (QQ char(5)) IS

BEGIN

SELECT TENSV FROM FROM SINHVIEN WHERE TINH=QQ

END;

c) Gọi thủ tục:

Cú pháp:

Gọi thủ tục trong đoạn lệnh PL/SQL: DECLARE …… BEGIN Procedure_name(values); END; Gọi thủ tục từ SQL*Plus: SQL> EXECUTE Procedure_name(values); d) Xóa thủ tục:

Cú pháp: DROP PROCEDURE procedure_name;

4.6.2.Hàm(Function):

Hàm là chương trình con có trả về giá trị.

a) Tạo hàm:

Cú pháp:

CREATE [OR REPLACE] FUNCTION function_name (variable_name datatype) RETURN datatype IS [local declarations] BEGIN executable statements [ EXCEPTION Exception handler] END [functionname]; Ví dụ:

CREATE FUNCTION day_fn (mday NUMBER) RETURN CHAR

IS

display_day CHAR(15); BEGIN

disp_day:=Sunday; ELSEIF mday=2 THEN

disp_day:=Monday; ELSEIF mday=3 THEN

disp_day:=Tuesday; ELSEIF mday=4 THEN

disp_day:=Webnesday; ELSEIF mday=5 THEN

disp_day:=Thursday; ELSEIF mday=6 THEN

disp_day:=Friday; ELSEIF mday=7 THEN

disp_day:=Saturday; END IF; RETURN disp_day; END; b) Gọi hàm: DECLARE chardays CHAR(15); BEGIN chardays:=day_function(10); END; c) Xóa hàm:

Cú pháp: DROP FUNCTION function_name; 4.6.3.Cursor:

a) Đặc điểm của con trỏ:

 Tên của con trỏ không được khai báo định danh, chỉ dùng khi tham chiếu đến câu truy vấn.

 Không được gán giá trị cho tên con trỏ và không được sử dụng tên con trỏ như là một biểu thức.

 Con trỏ tường minh có thể có tham số.

 Có thể khởi tạo giá trị mặc định cho tham số của con trỏ.

 Giá trị của tham số của con trỏ chỉ có nghĩa khi con trỏ đã được mở (OPENED).

b) Khai báo con trỏ:

Cú pháp:

CURSOR cursor_name IS select_statement;

Ví dụ:

CURSOR cur_first IS SELECT TENSACH FROM SACH

WHERE MASACH= “S001”;

c) Thao tác trên con trỏ:

Gồm 3 thao tác: OPEN, FETCH, CLOSE

 Open con trỏ: Mở một con trỏ đã định nghĩa, việc mở con trỏ chính là thi hành câu truy vấn và định vị vùng ngữ cảnh để chứa tất cả các dòng của kết quả câu truy vấn.

Cú pháp: OPEN cursor_name

 Fetch con trỏ: Lệnh FETCH được dùng để gọi một dòng trong tập dữ liệu của con trỏ. Lệch FETCH có thể được lặp để gọi tất cả các dịng của con trỏ.

Cú pháp:

FETCH cursor_name INTO variable 1, variable 2, …variable n; Hoặc

FETCH cursor_name INTO record_variable;

 Đóng con trỏ: Lệnh CLOSE cursor để đóng một con trỏ, giải phóng con trỏ ra khỏi bộ nhớ.

Cú pháp: CLOSE cursor_name

4.6.4.Trigger: a) Tạo Trigger:

Cú pháp:

CREATE [OR REPLACE] TRIGGER trigger_name BEFORE | AFTER

[FOR EACH ROW] WHEN (condition) PS/SQL block Trong đó:

 OR REPLACE: để tự động xóa và tạo mới trigger nếu trigger đó đã tồn tại .  INSERT | DELETE | UPDATE: ứng với sự kiện tác động lên table để trigger

tự động thi hành khi sự kiện đó xảy ra.

 AFTER chỉ rằng database trigger sẽ thi hành sau khi đã thực hiện sự kiện và BEFORE là để khai báo trigger sẽ thi hành khi thi hành sự kiện

 FOR EACH ROW: để chỉ rằng trigger sẽ thi hành khi câu lệnh SQL tác động lên từng dòng.

Những chú ý khi tạo Trigger:

 Phần thân Trigger có thể chứa các lệnh DML, nhưng lệnh SELECT phải là SELECT INTO ngoại trừ lệnh SELECT khi khai báo cursor.

 DDL không được dùng trong phần thân của Trigger.

 Không cho phép các lệnh quản lí giao tác ( COMMIT, ROLLBACK, SAVEPOINT) trong phần thân của trigger.

 Nếu Trigger gọi một chương trình con thì chương trình con đó khơng được chứa các lệnh giao tác.

b) Thao tác Trigger:

Lệnh disable trigger:

ALTER TRIGGER trigger_name DISABLE;

Lệnh enable trigger:

ALTER TRIGGER trigger_name ENABLE;

Lệnh disable/enable tất cả trigger:

ALTER TRIGGER trigger_name [ DISABLE | ENABLE ] ALL TRIGGERS;

c) Xóa Trigger:

Cú pháp: DROP TRIGGER trigger_name;

4.6.5.Package:

 Oracle Package là nhóm gồm nhiều thành phần như hàm, thủ tục, biến, hằng, cursor hay kiểu dữ liệu cho người dùng định nghĩa. Nhưng thành phần này gom chung trong một đơn vị xử lý duy nhất là package. Package có hai phần, phần đặc tả( package specification) và phần thân (package body).

 Ưu điểm của package:  Dễ dàng thiết kế.  Module hóa.  Che dấu thơng tin.

 Thêm vào các tính năng mới.  Hiệu quả về tốc độ,

b) Phần đặc tả của package:

Phần đặc tả của Package chỉ bao gồm biến, hằng, các khai báo hàm, thủ tục hay kiểu dữ liệu do người dùng định nghĩa. Phần đặc tả nói chung dùng để khai báo các biến dữ liệu toàn cục và các hàm hay phương thức dùng để xử lý dữ liệu cũng như thực hiện một chức năng cơ bản nào đó của package. Package trong cơ sở dữ liệu Oracle cũng được coi là đối tượng tương tự table, view, trigger, stored procedure.

Cú pháp:

CREATE [OR REPLACE] PACKAGE package_name AS

Đặc tả các đối tượng toàn cục. Đặc tả các chương trình con.

END [package_name];

c) Phần thân của package:

Phần thân package bao gồm mã lệnh thực sự cho các hàm hay thủ tục được khai báo ở phần đặc tả. Phần này sẽ truy xuất và tương tác trực tiếp đến các hằng, biến, cursor mà phần đặc tả đã khai báo trong phần thân.

Cú pháp:

CREATE [ OR REPLACE ] PACKAGE BODY package_name AS Khai báo các đối tượng cục bộ.

Viết xử lí cho các chương trình con. END [package_name];

Chương 5: Ứng dụng/ Kết quả thực nghiệm/So sánh-Đánh giá

5.1. Ứng dụng:

Oracle là hệ thống quản trị cơ sở dữ liệu đa người dùng, quản lý các nguồn lực, một cơ sở dữ liệu về thông tin giữa yêu cầu của nhiều khách hàng một cách hiệu quả.

Oracle được phát triển thêm các thuật toán máy học (machine learning) trong cơ sở dữ liệu: Machine Learning trong Cơ sở dữ liệu Oracle hỗ trợ thăm dị dữ liệu, chuẩn bị và mơ hình hóa machine learning ở quy mơ lớn bằng cách sử dụng SQL, R, Python, REST, AutoML và giao diện khơng mã hóa. Bằng cách giữ dữ liệu trong cơ sở dữ liệu, các tổ chức có thể đơn giản hóa kiến trúc tổng thể của họ và duy trì đồng bộ hóa và bảo mật dữ liệu. Nó cho phép các nhà khoa học dữ liệu và các chuyên gia dữ liệu khác xây dựng các mơ hình một cách nhanh chóng bằng cách đơn giản hóa và tự động hóa các yếu tố chính của vịng đời học máy.

Tính ứng dụng mà Machine learning mang lại:

+ Tránh việc di chuyển dữ liệu: Việc tải dữ liệu vào bên thứ ba đều có chi phí. Các doanh nghiệp dễ dàng tránh được các chi phí này bằng cách sử dụng các thuật toán học máy được xây dựng trong việc phát triển và triển khai mơ hình cơng cụ cơ sở dữ liệu, cũng như thăm dò và chuẩn bị dữ liệu.

+ Giảm độ phức tạp: Sử dụng các cơng cụ học máy riêng biệt để lập mơ hình thường yêu cầu cài đặt, cấu hình và quản lý bổ sung các cơng cụ đó. Ngồi ra, các mơ hình máy học cần được lưu trữ, quản lý và bảo mật. Với Oracle Machine Learning, các mơ hình máy học trong cơ sở dữ liệu nằm ngay tại nơi dữ liệu cư trú. Đối với dự đốn hàng loạt và thậm chí thời gian thực, chấm điểm với Oracle Machine Learning có thể đơn giản như việc chạy truy vấn SQL.

+ Tự động hóa: Chu trình tạo mơ hình học máy nhanh địi hỏi phải tự động hóa,

Một phần của tài liệu Báo cáo đồ án cuối kỳ môn quản lý thông tin đề tài Oracle UIT (Trang 56)

Tải bản đầy đủ (DOCX)

(95 trang)
w