You are on page 1of 25

THỰC HÀNH

CƠ SỞ DỮ LIỆU

Điểm: Nhận xét:

Ngày tháng:............................................................................................................................
Lớp: D20CQVT01-N.............................................................................................................
Nhóm: 01 ...............................................................................................................................
MSSV: N20DCVT059 ..........................................................................................................
Họ và tên: NGUYỄN HOÀNG THIÊN ................................................................................

MỤC LỤC
1. Tạo một kết nối mới với tên HR@<tên SV<_<MSSSV> ............................................... 3
2. Lệnh SELECT trong Oracle dùng để lấy dữ liệu ............................................................ 7
3. Lệnh AS sẽ đặt tên mới cho đối tượng .......................................................................... 12
4. Các toán tử so sánh ........................................................................................................ 13
1
5. Lệnh rẻ nhánh CASE trong Oracle ................................................................................ 16
6. Lệnh INSERT thêm dữ liệu vào bảng trong Oracle ...................................................... 18
7. Lệnh UPDATE trong Oracle ......................................................................................... 19
8. Lệnh DELETE trong Oracle .......................................................................................... 21
9. Truy vấn con (Subquery) ............................................................................................... 22

2
1. Tạo một kết nối mới với tên HR@<tên SV<_<MSSSV>
THỰC HIỆN TRÊN ORACLE DEVELOPER
Bấm vào nút + xanh dương

Cửa sổ mới xuất hiện

Nhập vào tên, username, password…

3
Bấm nút Test và cho kết quả thành công hay không? Nếu connect không thành công thì tiến
hành sửa lỗi.
Ghi lại các thông tin đăng nhập, cách thức sửa lỗi (nếu có) và kết quả đạt được:
...............................................................................................................................................
Kết quả test thành công và không bị lỗi
Thông tin đăng nhập: Name: HR@THIEN_N20DCVT059
Username :hr
Password: hr
Hostname: localhost
Port: 1521
SID: orcl ................................................................................................................................

4
Bấm nút Connect

Bấm vào Tables (Filtered) và liệt kê ra có bao nhiêu Table trong lược đồ CSDL có sẵn:

- Có 7 table trong lượt đồ có sẵn

Liệt kê các thuộc tính của từng quan hệ có trong mục ra Tables, ghi lại thuộc tính nào là
thuộc tính khóa chính và khóa ngoại:
5
ưới đây là danh sách các thuộc tính của từng quan hệ và xác định thuộc tính khóa
chính (PK) và
khóa ngoại (FK):
1. COUNTRIES:
• COUNTRY_ID (PK)
• COUNTRY_NAME
• REGION_ID (FK)
2. DEPARTMENTS:
• DEPARTMENT_ID (PK)
• DEPARTMENT_NAME
• MANAGER_ID
• LOCATION_ID (FK)
3. EMPLOYEES:
• EMPLOYEE_ID (PK)
• FIRST_NAME
• LAST_NAME
• EMAIL
• PHONE_NUMBER
• HIRE_DATE
• JOB_ID (FK)
• SALARY
• COMMISSION_PCT
• MANAGER_ID (FK)
• DEPARTMENT_ID (FK)
4. JOB_HISTORY:
• JOB_ID (PK, FK)
• JOB_TITLE
• MIN_SALARY
6
• MAX_SALARY
5. LOCATIONS:
• LOCATION_ID (PK)
• STREET_ADDRESS
• POSTAL_CODE
• CITY
• STATE_PROVINCE
• COUNTRY_ID (FK)
6. REGIONS:
• REGION_ID (PK)
• REGION_NAME
Trong danh sách trên:
• (PK): Đánh dấu thuộc tính là khóa chính.
• (FK): Đánh dấu thuộc tính là khóa ngoại.

2. Lệnh SELECT trong Oracle dùng để lấy dữ liệu


Thực hiện lệnh như sau:
SELECT *
FROM department;

7
Kết quả hiển thị:

Thực hiện lệnh như sau:


SELECT *
FROM employee;

Kết quả hiển thị:

8
Nhận xét lệnh này thực hiện làm gì:
- Câu truy vấn SQL "SELECT * FROM EMPLOYEES;" được sử dụng để truy vấn tất cả
các dòng và tất cả các cột từ bảng có tên là "EMPLOYEES"
Khi bạn chạy câu truy vấn này, kết quả sẽ trả về một bảng dữ liệu chứa thông tin về mỗi
nhân viên, bao gồm tất cả các cột trong bảng "EMPLOYEES". Mỗi dòng của bảng sẽ
tương ứng với một bản ghi hoặc một nhân viên trong cơ sở dữ liệu.
- Câu truy vấn SQL "SELECT * FROM DEPARTMENTS;" được sử dụng để truy vấn
tất cả các dòng và tất cả các cột từ bảng có tên là "DEPARTMENTS".
Khi bạn chạy câu truy vấn này, kết quả sẽ trả về một bảng dữ liệu chứa tất cả các thông tin
trong bảng "DEPARTMENTS", bao gồm tất cả các cột và mỗi dòng tương ứng với một bản
ghi trong bảng.

• Thực hiện lệnh sau:


SELECT *
FROM EMPLOYEES
WHERE LAST_NAME = 'King';

và sau đó
SELECT *
FROM employee
WHERE emp_name = 'KING';

Nhận xét sau khi nhận kết quả thu được:


- Chạy lệnh đầu tiên:

9
- Chạy lệnh thứ 2:

Giải thích:
Câu truy vấn SQL "SELECT * FROM EMPLOYEES WHERE LAST_NAME = 'King';" được
sử dụng để truy vấn và lấy thông tin từ bảng "EMPLOYEES" chỉ cho những nhân viên có họ
(hoặc tên đệm) là 'King'.
Dưới đây là giải thích từng phần của câu truy vấn:
SELECT *:** Chọn tất cả các cột (*) từ bảng.
FROM EMPLOYEES:** Xác định rằng dữ liệu sẽ được lấy từ bảng có tên là
"EMPLOYEES".

10
WHERE LAST_NAME = 'King':** Điều kiện lọc dữ liệu. Chỉ lấy những bản ghi từ bảng
"EMPLOYEES" mà có giá trị trong cột "LAST_NAME" là 'King'. Điều này có thể áp dụng
cho việc tìm kiếm nhân viên với họ là 'King'.
- Do LAST_NAME =’KING’ không tồn tại trong bảng ghi EMPLOYEES nên khi trích
xuất dữ liệu sẽ không tìm thấy kết quả ứng với tên’KING’. Do đó kết quả sẽ trả về trống và
chỉ hiển thị khung tiêu đề của bảng ghi. Còn LAST_NAME =’KING’ có trong bảng ghi
EMPLOYEES, nên khi trích xuất dữ liệu thì sẽ trả về kết quả như trên.
• Giải thích cú pháp lệnh SELECT
SELECT expressions
FROM tables
WHERE conditions;

- SELECT expressions: Đây là phần mà bạn xác định các cột hoặc biểu thức bạn muốn
lấy dữ liệu từ. Các biểu thức này có thể là tên cột, các phép tính, hoặc các biểu thức
khác. Nếu bạn muốn chọn tất cả các cột, bạn có thể sử dụng dấu *.
- FROM tables: Đây là phần mà bạn chỉ định các bảng mà bạn muốn truy vấn dữ liệu.
Bạn có thể chỉ định một hoặc nhiều bảng từ nơi dữ liệu sẽ được trả về.
- WHERE conditions: Đây là phần mà bạn xác định các điều kiện lọc dữ liệu. Chỉ
những dòng thỏa mãn điều kiện này sẽ được trả về trong kết quả truy vấn. Điều kiện
này thường liên quan đến so sánh giá trị trong cột với một giá trị cụ thể hoặc với một
biểu thức logic
Thực hiện lệnh:
SELECT *
FROM employee
WHERE job = 'CLERK'
and salary > 900
ORDER BY salary DESC;

Kết quả thu được là gì và rút ra kết luận:

11
- KẾT LUẬN: Câu lệnh truy vấn này sẽ trả về tất cả các cột từ bảng employees cho
những nhân viên có job_id là 'ST_CLERK', mức lương (salary) lớn hơn 900, và kết
quả sẽ được sắp xếp theo mức lương giảm dần.

3. Lệnh AS sẽ đặt tên mới cho đối tượng


Sử dụng AS để đổi tên cột của các kết quả truy vấn
Thực hiện lệnh sau:
SELECT emp_id as manhanvien,
emp_name as tennhanvien
FROM employee

Kết quả thu được là gì và rút ra kết luận:

12
- KẾT LUẬN: Kết quả của câu truy vấn này sẽ là một bảng mới có hai cột được đổi
tên là manhanvien và tennhanvien, chứa dữ liệu từ cột employee_id và last_name
trong bảng employee

4. Các toán tử so sánh

= So sánh bằng

<> So sánh không bằng

!= So sánh không bằng

> So sánh lớn hơn

>= so sánh lớn hơn hợc bằng

< So sánh bé hơn

<= So sánh bé hơn hoặc bằng

IN ( ) Kiểm tra có nằm trong danh sách

NOT Kiểm tra phủ định

13
BETWEEN Kiểm tra trong khoảng

IS NULL Kiểm tra là giá trị NULL

IS NOT NULL Kiểm tra không phải là giá trị NULL

LIKE So sánh gần giống, sử dụng % and _

REGEXP_LIKE So sánh sử dụng Regular Expression

EXISTS Kiểm tra sub query có trả về dữ liệu không, tối thiểu là 1 row

Viết lệnh truy vấn SELECT lấy danh sách nhân viên có lương (SALARY) cao hơn 2500
và kết quả thu được:

Viết lệnh truy vấn SELECT lấy danh sách nhân viên có lương (SALARY) trong khoảng từ
2000 đến 3000 và kết quả thu được:

14
Viết lệnh truy vấn SELECT lấy danh sách nhân viên có ID là 7900, 7839, 7369 và kết quả
thu được:

Viết lệnh truy vấn SELECT lấy danh sách nhân viên có ngoại trừ nhân viên ở phòng có mã
phòng là 30 và kết quả thu được:

15
5. Lệnh rẻ nhánh CASE trong Oracle
Thực hiện lệnh như sau:
SELECT EMP_ID,EMP_NAME,JOB,
CASE
WHEN SALARY > 800 AND SALARY < 1000 THEN 'LUONG THAP'
WHEN SALARY >= 1000 AND SALARY <= 2500 THEN 'TRUNG BINH'
WHEN SALARY > 2500 THEN 'LUONG CAO'
ELSE 'khong ro'
END
FROM EMPLOYEE;

Nhận xét kết quả thu được:

16
Từ đó, giải thích cú pháp lệnh CASE trong Oracle:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n

ELSE result
END

• Giải thích:
Câu lệnh CASE trong SQL được sử dụng để thực hiện một loạt các kiểm tra điều kiện và
trả về giá trị tương ứng của biểu thức dựa trên điều kiện đầu tiên đúng.
expression: Biểu thức hoặc cột mà bạn muốn kiểm tra. Nếu expression không được cung
cấp, các điều kiện sẽ được kiểm tra một cách tuần tự và kết quả của điều kiện đầu tiên
đúng sẽ được chọn.
WHEN condition_1 THEN result_1: Điều kiện và kết quả tương ứng nếu điều kiện đó là
đúng.

17
ELSE result: Phần này là tùy chọn. Nếu không có điều kiện nào đúng, giá trị của ELSE sẽ
được trả về.

6. Lệnh INSERT thêm dữ liệu vào bảng trong Oracle


Thực hiện lệnh sau:
INSERT INTO EMPLOYEE
(EMP_ID,EMP_NAME,EMP_NO,HIRE_DATE,JOB,SALARY,DEPT_ID)
VALUES
(0001,'Nguyen Van A','D19', '05-09-2019','Sinh vien', 200, 5);

Sau khi thực hiện, vào trang Tab Data của bảng EMPLOYEE, kết quả thu được là gì:
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
Từ đó, giải thích cú pháp lệnh INSERT dùng để thêm một record vào bảng trong Oracle:
INSERT INTO table
(column1, column2, ... column_n )
VALUES
(expression1, expression2, ... expression_n );

INSERT INTO table:


INSERT INTO là phần của câu lệnh mà bạn sử dụng để xác định rằng bạn muốn thêm dữ
liệu vào một bảng cụ thể.
table là tên của bảng mà bạn muốn thêm dữ liệu vào.
(column1, column2, ... column_n):

18
Phần này là tùy chọn và được sử dụng khi bạn chỉ muốn thêm dữ liệu vào một số cột cụ
thể trong bảng.
column1, column2, ... column_n là danh sách các cột mà bạn muốn thêm dữ liệu vào.
VALUES:
Phần này được sử dụng để xác định giá trị cụ thể mà bạn muốn thêm vào bảng.
VALUES là từ khoá và được sử dụng để xác định rằng bạn sẽ cung cấp giá trị cho các cột
được liệt kê.
(expression1, expression2, ... expression_n):
Phần này chứa giá trị cụ thể mà bạn muốn thêm vào các cột tương ứng.
expression1, expression2, ... expression_n là giá trị bạn muốn thêm vào các cột tương
ứng với danh sách cột được liệt kê ở trên.

7. Lệnh UPDATE trong Oracle


Thực hiện lệnh sau:
UPDATE EMPLOYEE
SET HIRE_DATE = '05-09-2022'
WHERE EMP_ID = 1;

Sau khi thực hiện, vào trang Tab Data của bảng EMPLOYEE, kết quả thu được là gì:

19
Từ đó, giải thích cú pháp lệnh UPDATE dùng để cập nhật dữ liệu trong một bảng theo một
điều kiện nào đó:
UPDATE table_name
SET column1 = expression1,
column2 = expression2,
...
column_n = expression_n
WHERE conditions;

• Giải thích
2. UPDATE table_name:
• UPDATE là từ khoá mà bạn sử dụng để bắt đầu lệnh cập nhật.
• table_name là tên của bảng mà bạn muốn cập nhật.
3. SET column1 = expression1, column2 = expression2, ..., column_n =
expression_n:
• Phần này xác định cột cần được cập nhật và giá trị mới mà bạn muốn đặt vào
cột đó.
• Mỗi cặp column = expression xác định cột và giá trị mới mà bạn muốn đặt
cho cột đó.
• column1, column2, ..., column_n là danh sách các cột cần được cập nhật.
• expression1, expression2, ..., expression_n là giá trị bạn muốn gán cho các
cột tương ứng.
4. WHERE conditions:
• Phần này là tùy chọn và xác định điều kiện dữ liệu cần được cập nhật.
• Chỉ những hàng thỏa mãn điều kiện này sẽ được cập nhật. Nếu bạn bỏ qua
phần WHERE, tất cả các hàng trong bảng sẽ được cập nhật

20
Hãy cập nhật tên nhân viên và mã số nhân viên bằng chính tên của bạn và mã sinh viên của
bạn:

8. Lệnh DELETE trong Oracle


Thực hiện lệnh
DELETE FROM EMPLOYEE
WHERE emp_id = '1';

Sau khi thực hiện, vào trang Tab Data của bảng EMPLOYEE, kết quả thu được là gì:
Lệnh này sẽ xóa các bản ghi từ bảng EMPLOYEE mà có giá trị trong cột emp_id là '1'.
Sau khi thực hiện lệnh này, trên trang Tab Data của bảng EMPLOYEE, bạn sẽ không còn
thấy bản ghi nào có giá trị emp_id là '1'. Các dòng có emp_id bằng '1' đã được xóa khỏi
bảng
Thực hiện lệnh:
DELETE FROM EMPLOYEE
WHERE EMP_NAME = 'ADAMS'
AND SALARY < 1000;

Sau khi thực hiện, vào trang Tab Data của bảng EMPLOYEE, kết quả thu được là gì:
Lệnh này sẽ xóa các bản ghi từ bảng EMPLOYEE mà có tên nhân viên (EMP_NAME) là
'ADAMS' và mức lương (SALARY) nhỏ hơn 1000.
19
Sau khi thực hiện lệnh này, trên trang Tab Data của bảng EMPLOYEE, bạn sẽ không còn
thấy các bản ghi nào có tên nhân viên là 'ADAMS' và mức lương nhỏ hơn 1000. Các dòng
này đã được xóa khỏi bảng.
Từ đó, giải thích cú pháp lệnh DELETE dùng để xóa dữ liệu:
DELETE FROM table_name
WHERE conditions;

Lệnh DELETE trong SQL được sử dụng để xóa dữ liệu từ một hoặc nhiều dòng trong một
bảng dựa trên một điều kiện cụ thể.
21
Giải thích các phần chính của cú pháp:
DELETE FROM table_name: Chỉ định tên của bảng mà bạn muốn xóa dữ liệu khỏi.
WHERE conditions: Xác định điều kiện để xác định các dòng cụ thể mà bạn muốn xóa. Dữ
liệu sẽ chỉ được xóa từ các dòng thỏa mãn điều kiện này. Nếu bạn không chỉ định điều kiện,
lệnh DELETE sẽ xóa tất cả dữ liệu từ bảng.
Ví dụ:
DELETE FROM employees
WHERE department_id = 30 AND salary < 1000;
Trong ví dụ này, dữ liệu từ bảng "employees" sẽ bị xóa cho những người làm ở phòng có
department_id là 30 và có mức lương (salary) nhỏ hơn 1000.

9. Truy vấn con (Subquery)


Lệnh SELECT trả về một bảng dữ liệu mới, bảng này sẽ không lưu vào hệ thống mà là một
bảng tạm (local temporary) và sẽ tự giải phóng khi câu truy vấn kết thúc. Ta có thể thực hiện
một truy vấn trên bảng kết quả này.
Tìm nhân viên có lương cao nhất bằng lệnh:
SELECT *
FROM EMPLOYEE
WHERE SALARY =
(
SELECT MAX(SALARY)
FROM EMPLOYEE
);

Kết quả thu được là gì và giải thích:

22
Phần con-truy vấn bên trong ngoặc (SELECT MAX(SALARY) FROM EMPLOYEE) được
sử dụng để tìm giá trị lương cao nhất trong cột SALARY của bảng EMPLOYEE bằng hàm
MAX.
Phần chính của truy vấn sử dụng điều kiện WHERE SALARY = ... để lấy tất cả các bản ghi
từ bảng EMPLOYEE mà có mức lương bằng với giá trị lương cao nhất tìm được từ phần
con-truy vấn.
Kết quả thu được từ truy vấn này sẽ là tất cả các bản ghi của những nhân viên có mức
lương bằng với mức lương cao nhất trong bảng EMPLOYEE. Nếu có nhiều nhân viên có
cùng mức lương cao nhất, truy vấn sẽ trả về tất cả các bản ghi của những nhân viên đó
Tìm số lượng nhân viên có lương cao hơn lương trung bình:
SELECT COUNT(*)
FROM
( SELECT SALARY,
(
SELECT AVG(SALARY)
FROM EMPLOYEE) AS LUONGTB
FROM EMPLOYEE
)

23
WHERE SALARY > LUONGTB

Kết quả thu được là gì và giải thích:


Trong truy vấn này:
Phần con-truy vấn bên trong ngoặc (SELECT AVG(SALARY) FROM EMPLOYEE) được
sử dụng để tính lương trung bình (LUONGTB) của tất cả nhân viên trong bảng
EMPLOYEE.
Phần chính của truy vấn sử dụng SELECT SALARY, LUONGTB FROM EMPLOYEE để
lấy mức lương (SALARY) của tất cả nhân viên cùng với lương trung bình (LUONGTB) đã
tính toán từ phần con-truy vấn.
Cuối cùng, điều kiện WHERE SALARY > LUONGTB được sử dụng để chọn các bản ghi
trong phần chính của truy vấn mà có mức lương cao hơn lương trung bình.
Viết lệnh thực hiện tìm danh sách lương nhân viên có lương cao hơn mức trung bình:
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
Viết lệnh thực hiện tìm danh sách lương nhân viên có lương cao hơn mức trung bình:

24
Phần chính của truy vấn sử dụng SELECT employee_id, last_name, salary FROM
employees để lấy thông tin về employee_id, last_name, và salary của tất cả nhân viên từ
bảng employees.
Phần con-truy vấn (SELECT AVG(salary) FROM employees) được sử dụng để tính lương
trung bình của tất cả nhân viên trong bảng employees.
Cuối cùng, điều kiện WHERE salary > (SELECT AVG(salary) FROM employees) được sử
dụng để chọn những nhân viên có mức lương cao hơn lương trung bình.

25

You might also like