Professional Documents
Culture Documents
Thực hành CSDL buổi 1 - Nguyễn Hoàng Thiên - N20DCVT059
Thực hành CSDL buổi 1 - Nguyễn Hoàng Thiên - N20DCVT059
CƠ SỞ DỮ LIỆU
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
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:
5
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:
ướ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)
6
• JOB_TITLE
• MIN_SALARY
• 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.
7
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.
và sau đó
SELECT *
FROM employee
WHERE emp_name = 'KING';
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;
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.
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
= So sánh bằng
13
BETWEEN Kiểm tra trong khoảng
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;
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 );
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.
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:
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
);
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
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