

















Preview text:
THỰC HÀNH
CƠ SỞ DỮ LIỆU
Điểm: | Nhận xét: |
Ngày tháng: 31/10/2025
Lớp: D22CQVTMD01-N
Nhóm: 1
MSSV: N22DCVT055
Họ và tên: Nguyễn Duy Mạnh
MỤC LỤC
1. Lệnh tạo bảng sử dụng lệnh Create Table 3
2. Tạo bảng với Lệnh Create Table As 5
3. Lệnh ALTER TABLE để sửa bảng 7
3.2 Thay đổi cấu trúc của column 8
3.3 Xóa một column ra khỏi Table 9
3.4 Thay đổi tên column của Table 10
Lệnh tạo bảng sử dụng lệnh Create Table
Thực hiện lệnh sau:
CREATE TABLE SINHVIEN
( SV_ID number(10) not null,
SV_NAME varchar2(50) not null,
NGUYENQUAN varchar2(50)
);
Bấm vào mục Tables, sau đó Refresh, sau đó xem ở Tab Columns, kết quả thu được là gì?

Từ đó, giải thích cú pháp lệnh Create Table dùng để tạo bảng dữ liệu:
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
column_n datatype [ NULL | NOT NULL ]
);
CREATE TABLE: tạo mới một bảng trong cơ sở dữ liệu.
table_name: tên bảng (phải duy nhất, dễ hiểu, không trùng tên hệ thống).
column1 … column_n: khai báo danh sách các cột.
atatype: xác định kiểu dữ liệu cho từng cột (số, chuỗi, ngày, v.v.).
NULL | NOT NULL]: quy định cột có thể để trống hay không.
Thực hiện lệnh sau:
CREATE TABLE SINHVIEN1 (
SV_ID number(10) not null,
SV_NAME varchar2(50) not null,
NGUYENQUAN varchar2(150),
CONSTRAINT SV_PK PRIMARY KEY (SV_ID)
);
Bấm vào mục Tables, sau đó Refresh, sau đó xem ở các Tab Columns, Constraints…, kết quả thu được là gì?
Từ đó, giải thích Cú pháp CONSTRAINT SV_PK PRIMARY KEY (SV_ID)dùng để làm gì:
CONSTRAINT SV_PK → Đặt tên cho ràng buộc khóa chính
PRIMARY KEY (SV_ID) → Xác định cột SV_ID là duy nhất, không được trùng
Tạo bảng với Lệnh Create Table As
Tạo bảng kết hợp với một lệnh SELECT sẽ thực hiện copy tất cả columns và dữ liệu từ lệnh SELECT vào bảng mới.
Thực hiện lệnh sau:
CREATE TABLE NEWEMPLOYEE
AS (SELECT EMP_ID, EMP_NAME
FROM EMPLOYEE
WHERE SALARY > 2000);
Bấm vào mục Tables, sau đó Refresh, sau đó xem ở Tab Columns, Data, kết quả thu được là gì?
Tab Columns

Tab Data

Từ đó, hãy viết cú pháp tổng quát cho lệnh Create Table As:
CREATE TABLE <tên_bảng_mới> AS
SELECT <danh_sách_cột> FROM <bảng_cũ>
WHERE <điều_kiện_lọc_dữ_liệu>;
Hãy tạo một bảng NEWEMPLOYEE_2 từ bảng EMPLOYEE lấy tất cả các cột và các nhân viên có lương từ 2000 đến 3500:
CREATE TABLE NEWEMPLOYEE_2 AS
SELECT
*
FROM employees
WHERE salary BETWEEN 2000 AND 3500; 
Lệnh ALTER TABLE để sửa bảng
Dùng để chỉnh sửa cấu trúc của Table như thêm column, xóa column, đổi kiểu dữ liệu, đổi tên Table, ...
Thêm column vào table
Cú pháp lệnh:
ALTER TABLE table_name
ADD (column_1 column-definition,
column_2 column-definition,
...
column_n column_definition);
- table_name là tên bảng muốn thay đổi
- column_name là tên column muốn thêm vào
- column-definition là các thông số dành cho column đó
Hãy thực hiện lệnh:
ALTER TABLE NEWEMPLOYEE
ADD GIOITINH VARCHAR2(50);
Kết quả thu được là gì?
Hãy thực hiện lệnh thêm 2 cột TUOI và TINHTRANGHONNHA vào cùng một lúc với kiểu dữ liệu là varchar2 và chiều dài tối đa lần lượt là 50 và 100 ký tự:
ALTER TABLE NEWEMPLOYEE .
ADD (
TUOI VARCHAR2(50),
TINHTRANGHONNHAN VARCHAR2(100)
); 
Thay đổi cấu trúc của column
Cú pháp lệnh:
ALTER TABLE table_name
MODIFY (column_1 column_type,
column_2 column_type,
...
column_n column_type);
Bấm vào Tables tên NEWEMPLOYEE,xem ở Tab Columns, ghi lại các thông số:
Thực hiện lệnh sau:
ALTER TABLE NEWEMPLOYEE
MODIFY ( EMP_NAME varchar2(80) null,
GIOITINH varchar2(100) );
Bấm vào mục Tables, sau đó Refresh, sau đó xem ở Tab Columns, kết quả thu được là gì? Đối chiếu với kết quả trước khi thực hiện và nhận xét.

Nhận xét:
Oracle thông báo: Table NEWEMPLOYEE altered.
Cột FIRST_NAME thay đổi độ dài từ 20 → 80 ký tự và cho phép NULL.
Cột GIOITINH thay đổi độ dài từ 50 → 100 ký tự.
Cấu trúc bảng được cập nhật đúng yêu cầu, dữ liệu không bị ảnh hưởng.
Xóa một column ra khỏi Table
Cú pháp lệnh:
ALTER TABLE table_name
DROP COLUMN column_name;
Hãy thực hiện lệnh xóa cột GIOITINH ra khỏi table và NEWEMPLOYEE ghi nhận lại kết quả:
Thay đổi tên column của Table
Cú pháp lệnh:
ALTER TABLE table_name
RENAME COLUMN old_name to new_name;
Hãy thực hiện lệnh đổi tên cột EMP_NAME của table và NEWEMPLOYEE thành TEN_NHANVIEN,ghi nhận lại kết quả:

Thay đổi tên Table
Cú pháp lệnh:
ALTER TABLE table_name
RENAME TO new_table_name;
Hãy thực hiện lệnh đổi tên table NEWEMPLOYEE thành NHANVIEN_MOI,ghi nhận lại kết quả:

Lệnh xóa bảng
Cú pháp lệnh:
DROP [schema_name].TABLE table_name
[ CASCADE CONSTRAINTS ]
[ PURGE ];
Chú thích:
- schema_name: Tên của Schema chứa bảng.
- table_name: Tên của bảng muốn xóa khỏi hệ quản trị CSDL.
- CASCADE CONSTRAINTS: Nếu thêm từ khóa này nó sẽ xóa tất cả tham chiếu khóa ngoại đến bảng này.
- PURGE: Nếu bạn thêm từ khóa này thì các bảng và đối tượng liên quan sẽ bị đưa vào thùng rác và không thể khôi phục được.
- Hai tham số CASCADE CONSTRAINTS và PURGE rất ít khi sử dụng.
Hãy thực hiện lệnh xóa table NHANVIEN_MOI,ghi nhận lại kết quả:
Phép tích
Dùng để kết nối 2 bảng với nhau giống như phép tích.
- Giả sử table A có 3 records, table B có 4 records, thì khi bạn thực hiện phép tích kết quả sẽ trả về là danh sách dữ liệu gồm 3 x 4 = 12 records.
- Giả sử table A có 3 column, table B có 3 column thì khi bạn tích sẽ trả về một danh sách gồm 3 + 3 = 6 column.
Tạo bảng SUPPLIERS như sau:
CREATE TABLE "SUPPLIERS"
( "SUPPLIER_ID" NUMBER,
"SUPPLIER_NAME" VARCHAR2(4000),
"SUPPLIER_ADDRESS" VARCHAR2(4000)
)
Thêm 3 record vào bảng SUPPLIERS:
INSERT INTO SUPPLIERS(SUPPLIER_ID, SUPPLIER_NAME, SUPPLIER_ADDRESS)
VALUES (1, 'APPLE', 'AMERICA');
INSERT INTO SUPPLIERS(SUPPLIER_ID, SUPPLIER_NAME, SUPPLIER_ADDRESS)
VALUES (2, 'SAMSUNG', 'KOREA');
INSERT INTO SUPPLIERS(SUPPLIER_ID, SUPPLIER_NAME, SUPPLIER_ADDRESS)
VALUES (3, 'NOKIA', 'EU');
Ghi nhận lại kết quả:

Tạo bảng ORDERS như sau:
CREATE TABLE "ORDERS"
( "ORDER_NO" NUMBER,
"SUPPLIER_ID" NUMBER,
"QUANTITY" NUMBER,
"PRICE" NUMBER,
"ORDER_DATE" date
);
Thêm 5 record vào bảng ORDERS:
INSERT INTO ORDERS(ORDER_NO, SUPPLIER_ID, QUANTITY, PRICE,ORDER_DATE)
VALUES (100,1,5,2000,TO_DATE('1-9-2022', 'dd-mm-yyyy'));
INSERT INTO ORDERS(ORDER_NO, SUPPLIER_ID, QUANTITY, PRICE,ORDER_DATE)
VALUES (125,2,10,2500,TO_DATE('2-10-2022', 'dd-mm-yyyy'));
INSERT INTO ORDERS(ORDER_NO, SUPPLIER_ID, QUANTITY, PRICE,ORDER_DATE)
VALUES (150,1,20,3000,TO_DATE('3-11-2022', 'dd-mm-yyyy'));
INSERT INTO ORDERS(ORDER_NO, SUPPLIER_ID, QUANTITY, PRICE,ORDER_DATE)
VALUES (175,2,25,3500,TO_DATE('5-12-2022', 'dd-mm-yyyy'));
INSERT INTO ORDERS(ORDER_NO, SUPPLIER_ID, QUANTITY, PRICE,ORDER_DATE)
VALUES (100,5,5,2000,TO_DATE('1-1-2023', 'dd-mm-yyyy'));
Ghi nhận lại kết quả:
Thực hiện lệnh tích sau:
SELECT *
FROM SUPPLIERS, ORDERS
Ghi nhận lại kết quả và nhận xét:
INNER JOIN
Là loại đơn giản và dễ hiểu nhất và thường được sử dụng nhất khi quản lý CSDL.
Thực hiện lệnh sau:
SELECT ORDERS.ORDER_NO, SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME
FROM SUPPLIERS
INNER JOIN ORDERS
ON SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;ON SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;
Ghi nhận lại kết quả thu được và giải thích:

Từ đó, giải thích cú pháp INNER JOIN:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
SELECT columns: chọn các cột muốn hiển thị.
FROM table1: từ bảng thứ nhất.
OIN table2: bảng thứ hai cần nối.
N table1.column = table2.column: điều kiện nối, thường là cột có giá trị chung giữa hai bảng.
Kết quả: chỉ hiển thị các dòng dữ liệu có giá trị trùng nhau giữa hai bảng theo cột nối. Các dòng không trùng (không có quan hệ) sẽ bị loại bỏ
Cú pháp INNER JOIN trên có tương tự với câu truy vấn sau đây không?
SELECT COLUMNS
FROM TABLE1, TABLE2
WHERE TABLE1.COLUMN = TABLE2.COLUMN;
Hai câu truy vấn cho kết quả hoàn toàn giống nhau
Cả hai đều thực hiện phép nối trong (INNER JOIN) – chỉ lấy những dòng dữ liệu có giá trị trùng nhau giữa hai bảng.
Hãy chứng minh điều đó với dữ liệu 2 bảng SUPPLIERS và ORDERS ở trên:
Lệnh 1: (Inner Join)
SELECT ORDERS.ORDER_NO, SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME
FROM SUPPLIERS
NNER JOIN ORDERS
N SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;

Lệnh 2: (Where)
SELECT ORDERS.ORDER_NO, SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME
FROM SUPPLIERS, ORDERS
WHERE SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;

Nhận xét:
Hai lệnh này truy vấn cho ra kết quả giống nhau, đều chỉ hiện thị các bản ghi các giá trị SUPPLIERS_ID giống nhau.
Outer Join
Gồm có:
- Left Outer Join,
- Outer Join,
- Full Outer Join,
Left Outer Join
Kết quả trả về sẽ như sau: Bảng thứ nhất (phía bên trái) sẽ lấy tất cả record cho dù có thỏa điều kiện ở ON hay không, còn bảng thứ hai (phía bên phải) thì chỉ lấy những record nào thỏa điều kiện ở ON. Những column nào không thỏa điều kiện ON sẽ có giá trị NULL.
Hãy thực hiện lệnh sau:
SELECT ORDERS.ORDER_NO, SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME
FROM SUPPLIERS
LEFT JOIN ORDERS
ON SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;
Ghi nhận lại kết quả thu được và nhận xét:
Từ đó, giải thích cú pháp LEFT JOIN:
SELECT columns
FROM table1
LEFT [OUTER] JOIN table2
ON table1.column = table2.column;
Thành phần | Ý nghĩa |
SELECT columns | Chọn các cột cần hiển thị trong kết quả. |
FROM table1 | Xác định bảng bên trái của phép nối. Đây là bảng chính, dữ liệu của bảng này sẽ được giữ lại toàn bộ. |
LEFT [OUTER] JOIN table2 | Thực hiện phép nối ngoài trái giữa hai bảng. Câu lệnh có thể viết là LEFT JOIN hoặc LEFT OUTER JOIN (từ “OUTER” có thể bỏ qua mà vẫn đúng). |
ON table1.column = table2.column | Điều kiện nối: xác định cách liên kết hai bảng, thường là giữa cột khóa chính của bảng 1 và cột khóa ngoại của bảng 2. |
Right Outer Join
Kết quả trả về sẽ như sau: lấy tất cả record ở bảng thứ hai (bảng bên phải) và chỉ những record thỏa điều kiện ON ở bảng thứ nhất (bảng bên trái). Column nào không thỏa điều kiện ON sẽ có giá trị NULL.
Hãy thực hiện lệnh sau:
SELECT ORDERS.ORDER_NO, SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME
FROM SUPPLIERS
RIGHT JOIN ORDERS
ON SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;
Ghi nhận lại kết quả thu được và nhận xét:

RIGHT OUTER JOIN (hay RIGHT JOIN) sẽ:
- Lấy tất cả các dòng của bảng bên phải (ORDERS).
- Ghép thêm dữ liệu của bảng bên trái (SUPPLIERS) nếu điều kiện ON đúng.
- Nếu không tìm thấy dòng khớp bên trái, các cột bên trái sẽ có giá trị NULL.
Từ đó, giải thích cú pháp RIGHT JOIN:
SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;
Thành phần | Ý nghĩa |
SELECT columns | Chọn các cột cần hiển thị trong kết quả. |
FROM table1 | Xác định bảng bên trái trong phép nối. |
RIGHT [OUTER] JOIN table2 | Thực hiện phép nối ngoài phải — lấy tất cả các dòng của bảng bên phải (table2), và chỉ ghép dữ liệu từ bảng bên trái (table1) nếu điều kiện đúng. (Từ khóa OUTER có thể bỏ mà vẫn đúng) |
ON table1.column = table2.column | Điều kiện để nối hai bảng — thường là khóa chung (primary key và foreign key). |
Full Outer Join
Kết quả trả về sẽ như sau: lấy tất cả các record ở bảng thứ nhất lẫn bảng thứ hai. Column nào không thỏa điều kiện ở ON sẽ có giá trị NULL.
Hãy thực hiện lệnh sau:
SELECT ORDERS.ORDER_NO, SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME
FROM SUPPLIERS
FULL JOIN ORDERS
ON SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID;
Ghi nhận lại kết quả thu được và nhận xét:

FULL JOIN hiển thị toàn bộ dữ liệu từ cả hai bảng SUPPLIERS và ORDERS, dù có hay không có mối liên kết giữa chúng.
• Các giá trị không trùng khớp được hiển thị với NULL ở cột thuộc bảng còn lại.
• Phép FULL JOIN = LEFT JOIN + RIGHT JOIN.
Từ đó, giải thích cú pháp FULL JOIN:
SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;
SELECT columns: Chọn các cột cần hiển thị (có thể đến từ một hoặc cả hai bảng)
FROM table1: Là bảng thứ nhất (bên trái) trong phép nối.
FULL [OUTER] JOIN table2: Là bảng thứ hai (bên phải). Oracle sẽ giữ lại toàn bộ dữ liệu của cả hai bảng, dù có khớp điều kiện hay không.
N table1.column = table2.column: Điều kiện nối – xác định mối liên hệ giữa hai bảng. Nếu giá trị không trùng nhau, cột thuộc bảng còn lại sẽ có giá trị NULL.
