You are on page 1of 34

QLBHABÀI TẬP THỰC HÀNH 1

1. Tạo CSDL tên QLSV, connect với CSDL bằng tài khoản SYS.
HD:
- Chạy Database Configuration Assistant:

1
Chạy sqldeveloper.exe

2. Tạo new user QLSV, new connection: UserStudent


HD: Trong MyStudent, chọn Other Users

2
- Right Click vào Other User chọn Create User

3
- Nhập User Name: QLSV
- New Password: 123456
- Confirm Password: 123456
- Chọn Apply

- User QLSV đã được tạo ra. Right Click chọn Edit User để chọn các quyền cho
user QLSV

4
- Chọn quyền: Granted Roles; System Privileges

- Quotas:

5
- Tạo new conection:
+ Name: UserStudent
+ UserName: QLSV; Password: 123456
+SID: SV

3. Tạo bảng và nhập dữ liệu cho lược đồ CSDL Sinh viên (SV) như sau:
Khoa
FieldName FieldType FieldSize Ghi chú
MaKhoa Char 4 Mã khoa – Khóa chính
TenKhoa Nvarchar 30 Tên khoa

MonHoc
FieldName FieldType FieldSize Ghi chú
MaMH Char 4 Mã môn học – Khóa chính
TenMH Nvarchar 100 Tên môn học
SoTiet Int Số tiết

SinhVien
FieldName FieldType FieldSize Ghi chú
MaSV Char 8 Mã sinh viên – Khóa chính
HoSV Nvarchar 100 Họ sinh viên
TenSV Nvarchar 50 Tên sinh viên
Phai Nvarchar 50 Phái
NgaySinh DateTime Ngày sinh
NoiSinh Nvarchar 100 Nơi sinh
MaKH Char 4 Mã khoa – Khóa ngoại

6
7
KetQua
FieldName FieldType FieldSize Ghi chú
MaMH Char 4 Mã môn học – Khóa chính
MaSV Char 4 Mã sinh viên – Khóa chính
LanThi Int Lần thi
Diem Decimal (4,2) Điểm thi

Dữ liệu mẫu:
Khoa
MaKhoa TenKhoa
AV Anh văn
CNTT Công nghệ thông tin
TCNH Tài Chính Ngân Hàng
QTKD Quản trị kinh doanh

MonHoc
MaMH TenMH Số tiết
01 Cơ sở dữ liệu 60
02 An toàn thông tin 60
03 Lập trình web 75
04 Hệ thống thông tin quản lý 60

SinhVien
MaSV HoSV TenSV Phai NgaySinh NoiSinh MaKH
10001 Trần Minh Anh Nữ 12/09/2005 Hà Nội QTKD
10002 Hoàng Tú Hải Nam 24/12/2005 Tiền Giang CNTT
10003 Lê Thanh Hoa Nữ 13/2/2005 Mỹ Tho CNTT
10004 Mai Thùy Minh Hạnh Nữ 6/9/2005 Bình Định TCNH
10005 Nguyễn Huy Hoàng Nam 29/3/2005 Huế AV

8
BÀI TẬP THỰC HÀNH 2

Cho lược đồ CSDL quản lý nhân sự (HR.sql) như sau:

Cơ sở dữ liệu HR gồm các bảng được mô tả như sau:

Bảng Regions

Tên thuộc tính Diễn giải Kiểu dữ Chiều dài Ràng buộc
liệu

REGION_ID Mã vùng number Primary Key


(PK)

REGION_NAME Tên vùng Varchar2 25

Bảng Countries

Tên thuộc tính Diễn giải Kiểu dữ Chiều dài Ràng buộc
liệu

9
COUNTRY_ID Mã quốc gia Char 2 PK

COUNTRY_NAME Tên quốc gia Varchar2 40

REGION_ID Mã vùng Number Foreign Key


(FK)

Bảng Locations

Tên thuộc tính Diễn giải Kiểu dữ Chiều dài Ràng buộc
liệu

LOCATION_ID Mã địa điểm number 4 PK

STREET_ADDRESS Đường Varchar2 40

POSTAL_CODE Mã bưu điện Varchar2 12

CITY Thành phố Varchar2 30

STATE_PROVINCE Tỉnh Varchar2 25

COUNTRY_ID Mã quốc gia Char 2 FK

Bảng Departments

Tên thuộc tính Diễn giải Kiểu dữ Chiều dài Ràng buộc
liệu

DEPARTMENT_ID Mã phòng number 4 PK

DEPARTMENT_NAM Tên phòng Varchar2 30


E

MANAGER_ID Mã người quản number 6

10

LOCATION_ID Mã địa điểm number 4 FK

Bảng Jobs

Tên thuộc tính Diễn giải Kiểu dữ Chiều dài Ràng buộc
liệu

JOB_ID Mã công việc Varchar2 10 PK

JOB_TITLE Tên công việc Varchar2 35

MIN_SALARY Lương tối thiểu Number 6

MAX_SALARY Lương tối đa Number 6

Bảng Employees

Tên thuộc tính Diễn giải Kiểu dữ Chiều dài Ràng buộc
liệu

EMPLOYEE_ID Mã nhân viên Number 6 PK

FIRST_NAME Họ nhân viên VarChar2 20

LAST_NAME Tên nhân viên VarChar2 25

EMAIL Email VarChar2 25

PHONE_NUMBER Số điện thoại VarChar2 20

HIRE_DATE Ngày tuyển dụng Date

Date Mã công việc Varchar2 10 FK

11
SALARY Lương Number 8,2 >0

COMMISSION_PCT Hoa hồng Number 2,2

MANAGER_ID Mã người quản lý number 6 FK

DEPARTMENT_ID Mã phòng Number 4 FK

Hướng dẫn:

1. Chạy Database Configuration Asistant tạo 1 database tên là HR (đặt mặt khẩu:
123456)

2. Chạy SQLDeveloper tạo kết nối với Database HR

3. Mở Query Builder chạy câu lệnh: alter session set "_ORACLE_SCRIPT"=true;

4. Tạo user mới: Click phải Other User/ Create User

Thiết lập các thông số, cấp quyền.

(Luôn thiết lập mật khẩu là 123456 cho dễ nhớ)

12
Hoặc sử dụng lệnh trong Query Builder:

ALTER SESSION SET "_ORACLE_SCRIPT"=true;

--

CREATE USER huong IDENTIFIED BY 123456

PROFILE DEFAULT

DEFAULT TABLESPACE USERS

TEMPORARY TABLESPACE TEMP;

GRANT CREATE SESSION TO huong;

Cấp quyền cho user mới tạo:

+ RC tên user/ Edit User

+ Chọn Granted Roles/ Grant All và Sysyem Privileges/ Grant All

+ Apply/ OK
13
14
4. Tạo connection với user mới và database HR

Yêu cầu thực hiện các truy vấn:

1. Lệnh Create, Alter, Drop


1.1.1 Sử dụng câu lệnh Create để tạo các bảng với cấu trúc đã mô tả ở phần
trên
1.1.2 Sử dụng câu lệnh Alter để thêm các ràng buộc khóa ngoại cho các bảng
1.1.3 Sử dụng lệnh Alter để thêm ràng buộc miền giá trị cho cột SALARY
trong Bảng Employees
1.1.4 Tạo index trên thuộc tính tên nhân viên
1.1.5 Tạo sequence cho các bảng
1.1.6 Nhập dữ liệu vào các bảng

15
2. Liệt kê tên (last_name) và lương (salary) của những nhân viên có lương lớn hơn
12000$.
3. Liệt kê tên và lương của những nhân viên có lương thấp hơn 5000$ hoặc lớn hơn
12000$.
4. Cho biết thông tin tên nhân viên (last_name), mã công việc (job_id) , ngày thuê
(hire_date) của những nhân viên được thuê từ ngày 20/02/1998 đến ngày

1/05/1998. Thông tin được hiển thị tăng dần theo ngày thuê.
5. Liệt kê danh sách nhân viên làm việc cho phòng 20 và 50. Thông tin hiển thị gồm:

last_name, department_id, trong đó tên nhân viên được sắp xếp theo thứ tự
alphabe.

6. Liệt kê danh sách nhân viên được thuê năm 1994.


7. Liệt kê tên nhân viên (last_name), mã công việc (job_id) của những nhân viên không
có người quản lý
8. Cho biết thông tin tất cả nhân viên được hưởng hoa hồng (commission_pct), kết quả
được sắp xếp giảm dần theo lương và hoa hồng.
9. Liệt kê danh sách nhân viên mà có kí tự thứ 3 trong tên là “a”.
10. Liệt kê danh sách nhân viên mà trong tên có chứa chữ “a” và chữ “e”.
11. Cho biết tên (last_name), mã công việc (job_id), lương (salary) của những nhân viên
làm “Sales representative” hoặc “Stock clert” và có mức lương khác 2500$, 3500$,
7000$.
12. Cho biết mã nhân viên (employee_id), tên nhân viên (last_name), lương sau khi tang
thêm 15% so với lương ban đầu, được làm tròn đến hàng đơn vị và đặt lại tên cột là
“New Salary”.
13. Cho biết tên nhân viên, chiều dài tương ứng của tên đối với những nhân viên có kí tự
bắt đầu trong tên là “J”, “A”, “L”, “M”. Kết quả hiển thị tăng dần theo tên, kí tự đầu
của tên viết hoa, các kí tự còn lại viết thường. (dùng hàm INITCAP, LENGTH,
SUBSTR)

16
14. Liệt kê danh sách nhân viên, khoảng thời gian (tính theo tháng) mà nhân viên đã làm
việc trong công ty cho đến nay. Kết quả sắp xếp tăng dần theo số lượng tháng làm
việc. (dung hàm MONTHS_BETWEEN)
15. Thực hiện câu truy vấn cho kết quả theo định dạng sau :

<last_name> earns <salary> monthly but wants <3*salary> .

16. Liệt kê tên nhân viên, mức hoa hồng nhân viên đó nhận được. Trường hợp nhân viên
nào không được hưởng hoa hồng thì hiển thị “No commission”. (dùng hàm NVL)
17. Thực hiện câu truy vấn cho kết quả như sau: (dùng hàm DECODE hoặc cấu trúc
CASE…)

JOB_ID GRADE
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Không thuộc 0
18. Cho biết tên nhân viên, mã phòng, tên phòng của những nhân viên làm việc ở thành
phố Toronto.
19. Liệt kê thông tin nhân viên cùng với người quản lý của nhân viên đó. Kết quả hiển
thị: mã nhân viên, tên nhân viên, mã người quản lý, tên người quản lý.
20. Liệt kê danh sách những nhân viên làm việc cùng phòng.
21. Liệt kê danh sách nhân viên được thuê sau nhân viên “Davies‟.
22. Liệt kê danh sách nhân viên được thuê vào làm trước người quản lý của họ.
23. Cho biết lương thấp nhất, lương cao nhất, lương trung bình, tổng lương của từng loại
công việc.
24. Cho biết mã phòng, tên phòng, số lượng nhân viên của từng phòng ban.
25. Cho biết tổng số nhân viên, tổng nhân viên được thuê từng năm 1995, 1996, 1997,
1998.

17
26. Liệt kê tên, ngày thuê của những nhân viên làm việc cùng phòng với nhân viên
“Zlotkey‟.
27. Liệt kê tên nhân viên, mã phòng ban, mã công việc của những nhân viên làm việc
cho phòng ban đặt tại vị trí (location_id) 1700.
28. Liệt kê danh sách nhân viên có người quản lý tên “King‟.
29. Liệt kê danh sách nhân viên có lương cao hơn mức lương trung bình và làm việc
cùng phòng với nhân viên có tên kết thúc bởi “n‟.
30. Liệt kê danh sách mã phòng ban, tên phòng ban có ít hơn 3 nhân viên.
31. Cho biết phòng ban nào có đông nhân viên nhất, phòng ban nào có ít nhân viên nhất.
32. Liệt kê danh sách nhân viên được thuê vào ngày có số lượng nhân viên được thuê
đông nhất. (dùng hàm TO_CHAR(hire_date, “Day‟)).
33. Liệt kê thông tin 3 nhân viên có lương cao nhất.
34. Liệt kê danh sách nhân viên đang làm việc ở tiểu bang “California‟.
35. Cập nhật tên của nhân viên có mã 3 thành “Drexler‟.
36. Liệt kê danh sách nhân viên có mức lương thấp hơn mức lương trung bình của phòng
ban mà nhân viên đó làm việc.
37. Tăng thêm 100$ cho những nhân viên có lương nhỏ hơn 900$.
38. Xóa phòng ban 500.
39. Xóa phòng ban nào chưa có nhân viên

Lệnh CREATE VIEW:

40. Tạo view chứa thông tin của những quốc gia ở vùng Asia.
41. Tạo view chứa danh sách nhân viên không có người quản lý.
42. Tạo view chứa danh sách phòng ban chưa có nhân viên.
43. Tạo view chứa mã nhân viên, tên nhân viên, tên phòng, mã công việc, số năm làm
việc, lương của những nhân viên có mức lương lớn hơn mức lương trung bình của
công ty.
Lệnh CREATE PROCEDURE:
44. Tạo thủ tục có tên là dept_info cho biết thông tin về phòng ban với tham số truyền
vào là mã phòng ban.

18
45. Tạo thủ tục có tên là add_job thêm một công việc mới với tham số truyền vào là
mã công việc, tên công việc.
46. Tạo thủ tục có tên là update_comm cập nhật hoa hồng cho nhân viên tăng thêm
5% hoa hồng ban đầu, tham số truyền vào là mã nhân viên.
47. Tạo thủ tục có tên là add_emp thêm một nhân viên mới với tất cả các giá trị là
tham số truyền vào.
48. Tạo thủ tục có tên là delete_emp xóa một nhân viên mới với mã nhân viên là tham
số truyền vào.
49. Tạo thủ tục có tên find_emp tìm kiếm nhân viên có lương lớn hơn mức lương
thấp nhất (MIN_SALARY) và nhỏ hơn mức lương cao nhất (MAX_SALARY).
50. Tạo thủ tục có tên update_comm cập nhật lương của nhân viên với điều kiện nhân
viên nào làm việc trên 2 năm thì tăng lương thêm 200$, nhân viên làm việc trên 1
năm và dưới 2 năm thì tăng lương thêm 100$, nhân viên nào làm việc đúng 1 năm
thì tăng 50$, còn lại không tăng.
51. Tạo thủ tục có tên job_his cho biết lịch sử làm việc của nhân viên với tham số
truyền vào là mã nhân viên.

Lệnh CREATE FUNCTION:


52. Tạo hàm có tên sum_salary tính tổng lương của từng phòng ban với tham số
truyền vào là mã phòng ban.
53. Tạo hàm có tên name_con cho biết tên quốc gia với mã quốc gia là tham số truyền
vào.
54. Tạo hàm có tên là annual_comp tính thu nhập hàng năm với tham số truyền vào là
lương tháng và hoa hồng. (lương hàng năm = lương tháng * 12 + (hoa hồng *
lương tháng*12))
55. o hàm có tên avg_salary tính lương trung bình của từng phòng ban với tham số
truyền vào là mã phòng ban.
56. Tạo hàm có tên là time_work tính số tháng làm việc của nhân viên, với tham số
truyền vào là mã nhân viên.

19
Lệnh CREATE PACKAGE:
57. Tạo package có tên emp_info chứa thủ tục salary_table cho biết thông tin về lương
của nhân viên và một hàm có tên sum_salary tính tổng lương của các phòng ban
với mã phòng ban là tham số truyền vào.
58. Tạo package có tên employer chứa thủ tục employ_info cho biết mã nhân viên,
tên nhân viên, lương, hoa hồng, ngày thuê, tên người quản lý, tên công việc, tên
phòng ban với mã nhân viên là tham số truyền vào.
59. Tạo package có tên là job_pack chứa 3 thủ tục tên là add_job để thêm công việc,
update_job để cập nhật công việc, del_job để xóa công việc và 1 hàm có tên q_job
để tìm kiếm tên công việc theo mã.
60. Tạo package có tên emp_pack chứa một thủ tục tên new_emp thêm một nhân viên
mới với tất cả các tham số truyền vào và một hàm tên valid_deptid kiểm tra mã
phòng ban hợp lệ , khi mã phòng hợp lệ mới được phép thêm nhân viên.

Lệnh CREATE TRIGGER:

61. Cài đặt ràng buộc toàn vẹn ngày thuê nhân viên phải nhỏ hơn hoặc bằng ngày
hiện hành khi thêm mới hoặc cập nhật thông tin về nhân viên.
62. Cài đặt ràng buộc toàn vẹn min_salary luôn nhỏ hơn max_salary khi thêm mới
hoặc cập nhật thông tin bảng công việc
63. Cài đặt ràng buộc toàn vẹn ngày bắt đầu luôn nhỏ hơn hoặc bằng ngày kết thúc khi
thêm mới hoặc cập nhật thông tin bảng job_history.
64. Cài đặt ràng buộc toàn vẹn lương và hoa hồng của nhân viên phải tăng chứ không
giảm khi cập nhật nhân viên.

Quản trị người dùng.


65. Tạo không gian bảng (tablespace) có kích thước 100M.
66. Tạo không gian bảng tạm (temporary tablespace) có kích thước 50M.
67. Tạo rollback segment rolora để truy xuất đồng thời cho table space vừa tạo.

20
68. Tạo user có tên là tên sinh viên, mật khẩu do sinh viên tự đặt với tablespace và
temporary tablespace vừa tạo.
69. Cấp quyền truy xuất tài nguyên (resource) cho user vừa tạo.
70. Cấp quyền cho phiên làm việc (session) cho user vừa tạo.
71. Cấp quyền tạo bảng (table) cho user vừa tạo.
72. Cấp quyền tạo khung nhìn (view) cho user vừa tạo.
73. Cấp quyền Select, Insert, Update, Delete trên bảng Employees cho user vừa tạo.
74. Cấp quyền Select, Insert, Update, Delete trên bảng Departments cho user vừa tạo.
75. Cấp quyền Select chỉ với các thuộc tính job_id, job_title trên bảng Jobs cho user
vừa tạo.
76. Login vào csdl HR với user vừa tạo.
77. Truy vấn các bảng trong csdl HR và cho nhận xét.
78. Cho biết các user hiện có từ view dba_users.
79. Đăng nhập với quyền hệ thống và tao user có tên là mã sinh viên, mật khẩu là tên
sinh viên
a. Thay đổi mật khẩu của user.
b. Cấp quyền đăng nhập csdl
c. Truy xuất view v$session để xem phiên làm việc.
d. Tao bảng phòng ban gồm 2 thuộc tính: mã phòng ban, tên phòng ban và cho
nhận xét câu c.
e. Cấp phát hạn ngạch (quota) 20M cho user vừa tao.
f. Tao lại bảng Phòng ban và cho nhận xét.
g. Cấp phát không gian giới hạn tablespace cho user vừa tao
h. Cấp phát tài nguyên cho user
i. Cấp phát phiên làm việc cho user
j. Cấp quyền đăng nhập OEM
80. Truy xuất vào view hệ thống dba_profiles.
81. Tao profile giới hạn việc truy xuất tài nguyên và cấp cho user vừa tạo:
a. Thời gian kết nối 120s
b. Số lần thất bại khi cho phép kết nối là 3.

21
c. Thời gian chờ kết nối là 60s
d. Phiên làm việc cho mỗi user là 2

BÀI TẬP THỰC HÀNH 3

Lược đồ cơ sở dữ liệu BanHang

Cơ sở dữ liệu BanHang gồm các bảng được mô tả như sau:


(1) Bảng Chi nhánh (ChiNhanh)

22
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaCN Mã chi nhánh Number 2 NOT NULL
TenCN Tên chi nhánh Varchar2 50 NOT NULL
DiaChiCN Địa chỉ chi nhánh Varchar2 100 NULL
DienThoaiCN Điện thoại chi Varchar2 12 NULL
nhánh

(2) Bảng Phòng ban (PhongBan)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaPB Mã phòng ban Number 2 NOT NULL
TenPB Tên phòng ban Varchar2 50 NOT NULL
MaCN Mã chi nhánh Number 2 NULL

(3) Bảng Chức vụ (ChucVu)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaCV Mã chức vụ Number 2 NOT NULL
TenCV Tên chức vụ Varchar2 25 NOT NULL

(4) Bảng Nhân viên (NhanVien)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaNV Mã nhân viên Number 2 NOT NULL
HoLot Họ lót Varchar2 35 NOT NULL
TenNV Tên nhân viên Varchar2 15 NOT NULL
NgayVaoLam Ngày vào làm Date NULL
Luong Lương Number 11.2 NULL
HoaHong Hoa hồng Number 4.2 NULL

23
MaNQL Mã người quản Number 2 NULL

MaCV Mã chức vụ Number 2 NULL
MaPB Mã phòng ban Number 2 NULL
(5) Bảng Kho hàng (KhoHang)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaKho Mã kho hàng Number 2 NOT NULL
TenKho Tên kho hàng Varchar2 50 NOT NULL
DiaChiKho Địa chỉ kho Varchar2 100 NULL
DienThoaiKho Điện thoại kho Varchar2 12 NULL
MaNV Mã nhân viên Number 2 NULL
MaCN Mã chi nhánh Number 2 NULL

(6) Bảng Quốc gia (QuocGia)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaQG Mã quốc gia Number 4 NOT NULL
TenQG Tên quốc gia Varchar2 50 NOT NULL

(7) Bảng Tỉnh/ thành phố (TinhTP)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaTinh Mã tỉnh Number 5 NOT NULL
TenTinh Tên tỉnh Varchar2 50 NOT NULL
MaQG Mã quốc gia Number 4 NULL

(8) Bảng Khách hàng (KhachHang)

24
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaKH Mã khách hàng Number 7 NOT NULL
TenKH Tên khách hàng Varchar2 50 NOT NULL
DienThoaiKH Điện thoại Varchar2 12 NULL
khách hàng
DiaChiKH Địa chỉ khách Varchar2 200 NULL
hàng
MucDoHaiLong Mức độ hài lòng Varchar2 15 NULL
GhiChu Ghi chú Varchar2 255 NULL
MaNV Mã nhân viên Number 2 NULL
MaTinh Mã tỉnh/ thành Number 5 NULL
phố

(9) Bảng Đơn vị tính (DonViTinh)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaDVT Mã đơn vị tính Number 2 NOT NULL
TenDVT Tên đơn vị tính Varchar2 20 NOT NULL

(10) Bảng Sản phẩm (SanPham)

Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaSP Mã sản phẩm Number 7 NOT NULL
TenSP Tên sản phẩm Varchar2 50 NOT NULL
QuyCach Quy cách Varchar2 255 NULL
GiaBan Giá bán Number 11.2 NULL
MaDVT Mã đơn vị tính Number 2 NULL

(11) Bảng Tồn kho (TonKho)

25
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ghi chú
MaSP Mã sản phẩm Number 7 NOT NULL
MaKho Mã kho Number 2 NOT NULL
NgayKiem Ngày kiểm Date NOT NULL
SoLuongTon Số lượng tồn Number 9 NOT NULL
TonDK Tồn ít nhất Number 9 NOT NULL
TonCK Tồn nhiều nhất Number 9 NULL
NhapTK Nhập trong kỳ Number 9 NULL
XuatTK Xuất trong kỳ Number 9 NULL
GhiChu GhiChu Varchar2 255 NULL

(12) Bảng Đơn hàng (DonHang)

Tên thuộc tính Mô tả Kiểu dữ liệu Chiều dài Ghi chú


MaDH Mã đơn hàng Number 7 NOT NULL
MaKH Mã khách hàng Number 7 NOT NULL
NgayDatHang Ngày đặt hàng Date NULL
NgayGiaoHang Ngày giao hàng Date NULL
HinhThucTra Hình thức trả Varchar2 20 NULL
XacNhan Xác nhận Varchar2 1 NULL
MaNV Mã nhân viên Number 2 NULL

(13) Bảng Chi tiết đơn hàng (CTDonHang)

Tên thuộc tính Mô tả Kiểu dữ liệu Chiều dài Ghi chú


MaDH Mã đơn hàng Number 7 NOT NULL
MaSP Mã sản phẩm Varchar2 7 NOT NULL
DonGia Đơn giá Number 11.2 NOT NULL

26
SoLuong Số lượng đặt Number 9 NOT NULL

Thực hành các câu hỏi sau bằng ngôn ngữ truy vấn có cấu trúc PL/SQL:
1. Lệnh Create, Alter, Drop
1.1. Sử dụng câu lệnh Create để tạo các bảng đã mô tả ở phần trên.
1.2. Sử dụng lệnh Alter để thêm các ràng buộc khóa ngoại cho các bảng đã mô tả ở
phần trên.
1.3. Sử dụng lệnh Alter và Drop để xóa các ràng buộc tham chiếu đã tạo và xóa bảng
ChiNhanh, DonViTinh.
1.4. Tạo lại các bảng và ràng buộc vừa xóa ở câu 1.3.
1.5. Tạo index trên thuộc tính tên khách hàng và tên sản phẩm.
1.6. Tạo sequence cho các bảng vừa tạo.
1.7. Tạo ràng buộc trên thuộc tính Lương của nhân viên phải lớn hơn 0.
1.8. Nhập dữ liệu cho các bảng vừa tạo.
2. Lệnh Select
2.1. Cho biết tất cả thông tin của khách hàng.
2.2. Cho biết mã khách hàng, tên khách hàng và địa chỉ của mỗi khách hàng.
2.3. Cho biết tên và điện thoại của mỗi khách hàng với số điện thoại xuất hiện đầu
tiên.
2.4. Cho biết tên và ngày vào làm việc của tất cả các nhân viên vào làm việc năm
1991.
2.5. Cho biết họ lót và tên của tất cả các nhân viên có ký tự thứ hai là ‘a’.
2.6. Cho biết mã nhân viên, tên nhân viên, lương nhân viên và mã phòng ban của các
nhân viên có mức lương lớn hơn 7.000.000đ làm việc ở phòng ban có mã phòng
ban là 44 hoặc 42.
2.7. Cho biết tên nhân viên, mã chức vụ, lương nhân viên có bí danh là ‘Lương tháng’.
2.8. Cho biết tất cả các thông tin của nhân viên mà lương năm của nhân viên là
84.000.000đ.
2.9. Cho biết mã nhân viên, tên nhân viên, lương năm của nhân viên có bí danh là
‘Lương năm’của tất cả nhân viên có lương lớn hơn 5.000.000 và năm vào làm
việc là năm 1990.
2.10. Cho biết tên khách hàng, mã khách hàng, mức độ hài lòng của khách hàng
được bán hàng bởi nhân viên có mã nhân viên là 11.
2.11. Cho biết tên khách hàng, mã khách hàng, mức độ hài lòng của khách hàng được
bán hàng bởi nhân viên có mã nhân viên là 11.
27
2.12. Cho biết tên khách hàng có bí danh là ‘Cust’, mã khách hàng, mức độ hài lòng
của khách hàng được bán hàng bởi nhân viên có mã số là 11, mã khách hàng sắp
xếp theo thứ tự tăng dần.
2.13. Cho biết họ lót và tên của nhân viên có mã nhân viên là 23.
2.14. Cho biết họ lót, tên nhân viên, mã phòng ban của nhân viên mà phòng ban đó có
mã phòng ban là 10 hoặc mã phòng ban là 50, sắp theo tăng dần theo tên nhân
viên. Họ lót và tên nhân viên được ghép lại với nhau có bí danh là ‘Employees’.
2.15. Cho biết tất cả thông tin của nhân viên mà tên nhân viên có chứa ký tự ‘h’.
2.16. Cho biết họ lót, tên nhân viên và ngày vào làm việc của tất cả các nhân viên mà
ngày vào làm việc nằm trong khoảng ’14-05-1990’ đến ngày ’26-05-1991’. Sắp
xếp tăng dần theo ngày vào làm việc của nhân viên.
2.17. Cho biết tên và lương của tất cả nhân viên mà lương không nằm trong khoảng từ
7.000.000đ đến 8.500.000đ.
2.18. Cho biết tên nhân viên, lương nhân viên mà lương nhân viên lớn hơn 7.500.000đ
và mã phòng ban là 31, 42 hoặc 50.
2.19. Cho biết họ lót và tên nhân viên mà không có người quản lý.
2.20. Cho biết tên của sản phẩm bắt đầu bằng ‘Int’.
2.21. Cho biết tên sản phẩm và mô tả về sản phẩm có chứa ‘EPSON’.
2.22. Cho biết mã nhân viên, tên nhân viên và lương nhân viên tăng 15% so với lương
hiện hành.
2.23. Cho biết tên nhân viên và tên chức vụ của nhân viên.
2.24. Cho biết tên sản phẩm mà tên sản phẩm đó có chứa ‘Max’.
2.25. Cho biết tên nhân viên, tên chi nhánh phụ trách và phần trăm hoa hồng của tất
cả nhân viên có hưởng hoa hồng.
2.26. Cho biết tên nhân viên, mã phòng ban và tên phòng ban của tất cả nhân viên.
2.27. Cho biết tên nhân viên, tên phòng ban và tên chi nhánh phụ trách của tất cả các
nhân viên có hưởng hoa hồng.
2.28. Cho biết tên nhân viên và tên phòng ban mà tên nhân viên là ‘Linh’.
2.29. Cho biết mã sản phẩm, tên sản phẩm, số lượng đặt của của những đơn hàng có
mã đơn hàng là 101.
2.30. Cho biết mã khách hàng và tên của nhân viên đại diện bán hàng. Sắp xếp thứ tự
tăng dần theo tên nhân viên.
2.31. Cho biết mã khách hàng, tên khách hàng, mã đơn hàng của những đơn đặt hàng
có tổng trị giá đơn hàng lớn hơn 100.000.000đ.
2.32. Cho biết tên nhân viên ngắn nhất và tên nhân viên dài nhất.
2.33. Cho biết phần trăm hoa hồng của nhân viên ở phòng ban có mã phòng là 31.

28
2.34. Cho biết số lượng nhân viên ở phòng ban có mã phòng là 31.
2.35. Cho biết mã nhân viên, tên nhân viên, tên chức vụ và lương cao nhất của nhân
viên.
2.36. Cho biết mã phòng ban, tên phòng ban, số nhân viên của mỗi phòng ban.
2.37. Cho biết mã phòng ban và tổng lương tháng của mỗi phòng ban với điều kiện
tổng lương của mỗi phòng ban phải lớn hơn 5.500.000đ. Sắp xếp theo tăng dần
của tổng lương.
2.38. Cho biết những dơn hàng có số lượng đặt hàng nhiều nhất. Thông tin hiển thị
gồm: mã đơn hàng, ngày đặt hàng, mã sản phẩm, tên sản phẩm, số lượng đặt
nhiều nhất.
2.39. Cho biết số lượng đặt hàng của đơn hàng ít nhất. Thông tin hiển thị gồm: mã đơn
hàng, ngày đặt hàng, mã sản phẩm, tên sản phẩm, số lượng đặt ít nhất.
2.40. Cho biết mã nhân viên, tên nhân viên, tên chức vụ, lương cao nhất và lương
thấp nhất của mỗi nhân viên.
2.41. Cho biết số phòng quản lý nhân viên.
2.42. Cho biết mã đơn hàng, mã sản phẩm, số lượng hàng đặt của mỗi đơn hàng, bí
danh của cột số lượng đặt là ‘Number of Items’.
2.43. Cho biết mã nhân viên, tên nhân viên và lương thấp nhất của nhân viên với điều
kiện lương thấp nhất nhỏ hơn 5.000.000đ. Sắp xếp giảm dần theo lương thấp
nhất của nhân viên.
2.44. Cho biết khoảng cách khác nhau giữa lương cao nhất và lương thấp nhất là bao
nhiêu?
2.45. Cho biết mã chi nhánh phụ trách, tên chi nhánh và số phòng ban cho mỗi chi
nhánh.
2.46. Cho biết mã đơn hàng, tổng số lượng hàng đặt cho mỗi đơn hàng với điều kiện
tổng trị giá đơn hàng đó lớn hơn 30.000.000đ.
2.47. Cho biết mã khách hàng và số đơn đặt hàng cho mỗi khách hàng.
2.48. Cho biết mã nhân viên, tên nhân viên, tên khách hàng kể cả những nhân viên
không đại diện bán hàng.
2.49. Cho biết mã nhân viên, tên nhân viên, tên khách hàng kể cả những khách hàng
không có nhân viên đại diện bán hàng.
2.50. Cho biết họ nhân viên, tên nhân viên, ngày vào làm việc của tất cả các nhân viên
ở trong phòng ban có tên nhân viên là ‘Hà’.
2.51. Cho biết mã nhân viên, họ lót, tên của tất cả nhân viên có lương lớn hơn lương
trung bình của cc nhn vin lm việc ở phịng ban cĩ m phịng l 41.
2.52. Cho biết tên phòng ban, mã phòng ban và tên chức vụ của tất cả nhân viên phụ
trách chi nhánh 1 hoặc chi nhánh 2.

29
2.53. Cho biết tên và lương của tất cả nhân viên mà phải báo cáo cho ‘Võ Duy Anh’.
2.54. Cho biết mã nhân viên và tên của tất cả các nhân viên có lương lớn hơn lương
trung bình của nhân viên mà tên nhân viên có chứa ký tự ‘t’.
2.55. Cho biết mã khách hàng, tên khách hàng, mức độ hài lòng của khách hàng, tên
nhân viên bán hàng cho tất cả các khách hàng ở trong chi nhánh ‘Hà Nội’ hoặc
tên nhân viên bán hàng là ‘Hương’.
2.56. Cho biết tên sản phẩm và mô tả sản phẩm của bất kỳ sản phẩm nào mà không có
xuất hiện trong đơn đặt hàng trong tháng 9 năm 2007.
2.57. Cho biết tên khách hàng và mức độ hài lòng của tất cả khách hàng có người đại
diện bán hàng là ‘Út Hoài’.
2.58. Cho biết mã sản phẩm, tên sản phẩm, mô tả của những sản phẩm có giá bán do
người dùng nhập vào từ bàn phím.
2.59. Cho biết thông tin về kho hàng với tên kho do người dùng nhập vào từ bàn phím.
2.60. Cho biết mã sản phẩm, tên sản phẩm, mã đơn hàng, tổng tiền của đơn hàng, ngày
đặt hàng, ngày giao hàng của những khách hàng có mã nhân viên bán hàng do
người dùng nhập vào từ bàn phím.
2.61. Cho biết mã sản phẩm, tên sản phẩm, mã đơn hàng, hình thức thanh toán, mức
độ hài lòng của những khách hàng có mã đơn hàng do người dùng nhập vào từ
bàn phím.
3. Lệnh Insert
3.1. Thêm vào bảng phòng ban một phòng ban mới có mã phòng 11, tên phòng là
‘Marketing’, mã chi nhánh là 2.
3.2. Thêm vào bảng phòng ban một phòng ban mới có mã phòng là 37, tên phòng là
‘Quản trị mạng'
3.3. Thêm vào bảng phòng ban một phòng ban mới có mã phòng là 54, tên phòng là
‘Vật tư’.
3.4. Thêm vào bảng nhân viên một nhân viên mới có mã nhân viên là 201, họ và tên
nhân viên là ‘Albert Jones’, mã phòng ban là 54.
3.5. Thêm vào bảng nhân viên một nhân viên mới có mã nhân viên là 202, họ và tên
nhân viên là ‘Hary Chin’, mã phòng ban là 75.
3.6. Thêm vào bảng nhân viên một nhân viên mới có mã nhân viên là 203, họ và tên
nhân viên là ‘Rey Guiliani’, mã phòng ban là 37.
3.7. Thêm vào bảng chi nhánh một chi nhánh mới có mã chi nhánh là 8, tên chi
nhánh là ‘Đồng Tháp’.
3.8. Thêm vào bảng kho hàng với điều kiện tất cả các thông tin về kho hàng do người
dùng nhập vào từ bàn phím.
4. Lệnh Update
4.1. Chuyển nhân viên có mã nhân viên là 2 sang làm việc ở phòng ban có mã phòng
là 35 và cập nhật lại lương là 8.500.000đ.

30
4.2. Cập nhật lại phòng ban có tên phòng là ‘Vật tư’ thành phòng ban có tên phòng là
‘Sản xuất’.
4.3. Cập nhật tên nhân viên có mã nhân viên là 202 thành ‘Korsgaard’.
4.4. Truy vấn để xem kết quả nhân viên có mã 202.
4.5. Tăng lương của các nhân viên có chức vụ ‘Thư ký kho’ thêm 1.000.000đ.
5. Lệnh Delete
5.1. Xóa nhân viên có tên nhân viên là ‘Albert Jones’.
5.2. Xóa nhân viên có mã số là 202.
6. Lệnh Grant
6.1Tạo không gian bảng (tablespace) có kích thước 100M.
6.2 Tạo không gian bảng tạm (temporary tablespace) có kích thước 50M.
6.3 Tạo rollback segment ro1ora để truy xuất đồng thời cho tablespace vừa tạo.
6.4Tạo user có tên là tên sinh viên, mật khẩu do sinh viên tự đặt với tablespace và
temporary tablespace vừa tạo.
6.5 Cấp quyền truy xuất tài nguyên (resource) cho user vừa tạo.
6.6 Cấp quyền cho phiên làm việc (session) cho user vừa tạo.
6.7 Cấp quyền tạo bảng (table) cho user vừa tạo.
6.8 Cấp quyền tạo khung nhìn (view) cho user vừa tạo.
6.9 Cấp quyền Select, Insert, Update, Delete trên bảng NhanVien cho user vừa tạo.
6.10 Cấp quyền Select, Insert, Update trên bảng SanPham cho user vừa tạo.
6.11 Cấp quyền Select, Insert trên bảng ChucVu cho user vừa tạo.
6.12 Cấp quyền Select, Insert, Delete trên bảng PhongBan cho user vừa tạo.
6.13 Cấp quyền upadte chỉ với các thuộc tính TenKH, DiaChi, DienThoai trên bảng
KhachHang cho user vừa tạo.
6.14 Login vào cơ sở dữ liệu BanHang với user vừa tạo.
6.15 Truy vấn trên bảng NhanVien, DonHang, CTDonHang, SanPham, KhachHang
và cho nhận xét.
7. Lệnh Revoke
7.1Hủy các quyền Select trên bảng SanPham.
7.2Hủy các quyền Select, Delete trên bảng PhongBan.
7.3Login vào cơ sở dữ liệu BanHang với user vừa tạo và truy xuất vào bảng
SanPham, PhongBan và cho nhận xét.
7.4Hủy user vừa tạo.
8. Lệnh Create View
8.1 Tạo view có tên là product_info cho biết mã sản phẩm, tên sản phẩm, quy cách,
tên đơn vị tính, giá bán, tên kho, số lượng tồn của tất cả các sản phẩm.
8.2 Tạo hoặc thay thế view có tên là cust_info cho biết tên khách hàng, ngày đặt
hàng, số lượng đặt, tổng trị giá của những đơn hàng có ngày giao hàng nhỏ hơn
26/09/07.

31
8.3 Tạo hoặc thay thế view có tên là emp_info cho biết mã nhân viên, họ lót, tên
nhân viên, lương, hoa hồng của những nhân viên ở phòng ban 44 hoặc 41 và có
hưởng hoa hồng.
8.4 Tạo hoặc thay thế view có tên là info_emp cho biết mã nhân viên, họ lót, tên
nhân viên, tên phòng ban, tên chức vụ, lương của mỗi nhân viên. Sắp xếp giảm
dần theo tên nhân viên.
8.5 Tạo hoặc thay thế view có tên là info_dept cho biết mã phòng ban, tên phòng
ban, tổng lương của mỗi phòng ban với điều kiện tổng lương của phòng ban lớn
hơn hoặc lương trung bình của phòng ban có mã phòng là 41 hoặc 44. Sắp xếp
giảm dần theo tổng lương của phòng ban.

9. Lệnh Create Procedure


9.1 Tạo thủ tục có tên là all_dept cho biết tất cả các thông tin về phòng ban với tham
số truyền vào là mã phòng ban.
9.2 Tạo thủ tục có tên là del_rows xóa tất cả các thông tin về đơn hàng với tham số
truyền vào là mã đơn hàng.
9.3 Tạo thủ tục có tên là insert_dept thêm một phòng ban mới với mã phòng ban có
kiểu sequence, tên phòng ban là tham số truyền vào, mã chi nhánh là null.
9.4 Tạo thủ tục có tên là insert_emp thêm một nhân viên mới với tất cả các giá trị là
tham số truyền vào.
9.5 Tạo thủ tục có tên là delete_emp xóa một nhân viên mới với mã nhân viên là
tham số truyền vào.
9.6 Tạo thủ tục có tên là find_emp tìm nhân viên với mã chức vụ là tham số truyền
vào.
9.7 Tạo thủ tục có tên là update_region cập nhật chi nhánh với tên chi nhánh là tham
số truyền vào.
9.8 Tạo thủ tục có tên là customer_info cho biết thông tin về mã khách hàng, tên
khách hàng, địa chỉ, tên tỉnh/tp, tên quốc gia, mã đơn hàng, ngày giao hàng, tổng
tiền của đơn hàng.
9.9 Tạo thủ tục có tên là ord_process và sử dụng cursor cho biết mã sản phẩm, đơn
giá*số lượng với mã đơn hàng là tham số truyền vào.
9.10 Tạo thủ tục có tên là set_comm1 cập nhật hoa hồng của nhân viên với điều kiện
những đơn hàng có tổng tiền <=50.000.000đ thì cập nhật hoa hồng là 10%.
Những đơn hàng có tổng tiền từ 50.000.000đ đến 150.000.000đ thì cập nhật hoa
hồng là 15%. Những đơn hàng có tổng tiền >200.000.000đ thì cập nhật hoa hồng
là 20%. Còn lại cập nhật hoa hồng của nhân viên là 0%.
9.11 Tạo thủ tục có tên là top_emp và sử dụng cursor cho biết mã nhân viên, tên nhân
viên, lương và sắp xếp của giảm dần theo lương với mã nhân viên là tham số
truyền vào.
32
10. Lệnh Create Function
10.1 Tạo hàm có tên là sum_salary tính tổng lương của từng phòng ban với tham số
truyền vào là mã phòng ban.
10.2 Tạo hàm có tên là sum_price_quality tính thành tiền của từng mặt hàng trong chi
tiết đơn hàng của tất cả khách hàng với số lượng và đơn giá là tham số truyền
vào. Tạo thủ tục tên bill_ord và gọi hàm vừa tạo để tính thành tiền của từng mặt
hàng.
10.3 Tạo hàm có tên là sum_order tính tổng tiền c ủa từng đơn hàng với tham số
truyền vào là mã đơn hàng.
10.4 Tạo hàm có tên là avg_salary tính lương trung bình của từng phòng ban với tham
số truyền vào là mã phòng ban
11. Lệnh Create Package
11.1 Tạo package có tên emp_info và thủ tục salary_table cho biết thông tin về lương
của nhân viên và một hàm có tên là sum_salry tính tổng lương của các phòng
ban với mã phòng ban là tham số truyền vào.
11.2 Tạo package có tên customer và thủ tục customer_info cho biết mã khách hàng,
tên khách hàng, tên nhân viên bán hàng, mã đơn hàng, tổng tiền, ngày giao hàng,
số lượng đặt, số lượng giao của tất cả khách hàng với mã khách hàng là tham số
truyền vào.
11.3 Tạo package có tên product và thủ tục pro_info cho biết mã sản phẩm, tên sản
phẩm, mô tả, giá bán, tên đơn vị tính với mã đơn vị tính là tham số truyền vào.
11.4 Tạo package có tên employeer và thủ tục employ_info cho biết mã nhân viên,
tên nhân viên, lương, hoa hồng, ngày vào làm, tên người quản lý, tên chức vụ,
tên phòng ban với mã nhân viên là tham số truyền vào.
12. Tạo các ràng buộc toàn vẹn cho các câu hỏi sau:
12.1 Cài đặt ràng buộc toàn vẹn ngày vào làm của nhân viên phải nhỏ hơn hoặc bằng
ngày hiện hành khi thêm mới hoặc cập nhật thông tin về nhân viên.
12.2 Cài đặt ràng buộc toàn vẹn số lượng đặt hàng phải nhỏ hơn hoặc bằng số lượng
giao hàng khi khách hàng đặt đơn hàng.
12.3 Cài đặt ràng buộc toàn vẹn ngày đặt hàng phải nhỏ hơn hoặc bằng ngày giao
hàng.
12.4 Cài đặt ràng buộc toàn vẹn lương nhân viên phải tăng chứ không giảm khi thêm
mới hoặc cập nhật lương nhân viên.
12.5 Cài đặt ràng buộc toàn vẹn số lượng đặt hàng của chi tiết đơn hàng phải lớn hơn
0.
12.6 Cài đặt ràng buộc toàn vẹn đơn giá đặt hàng của chi tiết đơn hàng phải lớn hơn 0.

33
34

You might also like