You are on page 1of 22

THỰC HÀNH

CƠ SỞ DỮ LIỆU

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

Ngày tháng: 14/11/2023


Lớp: D20CQVT01-N.............................................................................................................
Nhóm: 1.................................................................................................................................
MSSV: N20DCVT059...........................................................................................................
Họ và tên: NGUYỄN HOÀNG THIÊN................................................................................

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.1 Thêm column vào table.............................................................................................7
3.2 Thay đổi cấu trúc của column...................................................................................9

1
3.3 Xóa một column ra khỏi Table................................................................................10
3.4 Thay đổi tên column của Table...............................................................................10
3.5 Thay đổi tên Table...................................................................................................11
4. Lệnh xóa bảng................................................................................................................11
5. Phép tích.........................................................................................................................12
6. INNER JOIN..................................................................................................................15
7. Outer Join.......................................................................................................................17
7.1 Left Outer Join.........................................................................................................18
7.2 Right Outer Join......................................................................................................19
7.3 Full Outer Join.........................................................................................................21

2
1. 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: Đây là câu lệnh tạo một bảng mới trong cơ sở dữ liệu.
3
 tên_bảng: Đây là tên của bảng mà bạn đang tạo. Bạn sẽ sử dụng tên này để tham
chiếu đến bảng trong các câu lệnh SQL khác.
 (cột1 kiểu_dữ_liệu [ NULL | NOT NULL ], cột2 kiểu_dữ_liệu [ NULL | NOT
NULL ], ... cột_n kiểu_dữ_liệu [ NULL | NOT NULL ]): Phần này định nghĩa các
cột của bảng và kiểu dữ liệu tương ứng của chúng.
 cột1, cột2, ..., cột_n: Các cột trong bảng, mỗi cột có một tên duy nhất.
 kiểu_dữ_liệu: Loại dữ liệu mà mỗi cột có thể chứa, như INT (số nguyên),
VARCHAR(n) (chuỗi ký tự có độ dài tối đa n), DATE (ngày), và nhiều kiểu
dữ liệu khác.
 [ NULL | NOT NULL ]: Cho biết liệu cột có thể chứa giá trị NULL hay
không. Nếu bạn sử dụng NULL, nghĩa là cột có thể chứa giá trị không xác
định hoặc không tồn tại. Nếu bạn sử dụng NOT NULL, nghĩa là mỗi hàng
phải có giá trị cho cột đó.

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ì:
4
Cú pháp CONSTRAINT SV_PK PRIMARY KEY (SV_ID) được sử dụng để thêm một
ràng buộc (constraint) vào cột SV_ID trong bảng SINHVIEN. Cụ thể, nó đang định nghĩa
một ràng buộc chính (primary key constraint) trên cột SV_ID.
CONSTRAINT SV_PK: Đây là tên bạn đặt cho ràng buộc. Trong trường này, ràng buộc
chính được đặt tên là SV_PK, nhưng bạn có thể chọn một tên khác theo mong muốn.
 PRIMARY KEY: Đây là loại ràng buộc, trong trường này là ràng buộc chính. Ràng
buộc chính được sử dụng để định nghĩa một cột hoặc một nhóm các cột làm khóa
chính của bảng.
 (SV_ID): Đây là cột hoặc danh sách các cột được đặt làm khóa chính. Trong
trường này, chỉ có một cột là SV_ID. Khóa chính đảm bảo rằng giá trị trong cột
này là duy nhất và không thể có giá trị NULL

2. 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ì?

Từ đó, hãy viết cú pháp tổng quát cho lệnh Create Table As:
 Câu lệnh tổng quát:
CREATE TABLE new_table_name

5
AS
SELECT column1, column2, ..., column_n
FROM existing_table1
[JOIN existing_table2 ON condition]
 Giải thích câu lệnh:
WHERE condition;
 new_table_name: Tên mới cho bảng mà bạn đang tạo.
 AS: Dùng để chỉ định rằng bạn đang tạo một bảng mới.
 SELECT column1, column2, ..., column_n: Các cột mà bạn muốn sao chép từ các
bảng hiện tại vào bảng mới.
 FROM existing_table1: Tên của bảng hoặc các bảng hiện tại mà bạn muốn lấy dữ
liệu.
 [JOIN existing_table2 ON condition]: Nếu bạn cần kết hợp dữ liệu từ nhiều bảng,
bạn có thể sử dụng mệnh đề JOIN để chỉ định cách kết hợp.
 WHERE condition: Điều kiện để lựa chọn dữ liệu từ bảng hiện tại.

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:

Lệnh tạo:

6
CREATE TABLE NEWEMPLOYEE_2
AS
SELECT *
FROM EMPLOYEES
WHERE Salary BETWEEN 2000 AND 3500;
...............................................................................................................................................
3. 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, ...
3.1 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ì?

7
Hãy thực hiện lệnh thêm 2 cột TUOI và TINHTRANGHONNHAN 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ự:

Cú pháp thực hiện:


ALTER TABLE NEWEMPLOYEE
ADD (TUOI VARCHAR2(50), TINHTRANGHONNHAN VARCHAR2(100));

8
3.2 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.

...............................................................................................................................................

9
3.3 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ả:

3.4 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ả:

10
3.5 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ả:

4. Lệnh xóa bảng


Cú pháp lệnh:
DROP [schema_name].TABLE table_name
[ CASCADE CONSTRAINTS ]
[ PURGE ];
Chú thích:
11
 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ả:

5. 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)
)
12
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)

13
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ả:

...............................................................................................................................................
14
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:

Nhận xét: Lệnh SQL SELECT * FROM SUPPLIERS, ORDERS sử dụng phép nhân các
bảng (cartesian product) để trả về tất cả các cột từ bảng SUPPLIERS và tất cả các cột từ
bảng ORDERS. Phép nhân các bảng này kết hợp mỗi hàng từ SUPPLIERS với mỗi hàng từ
ORDERS, tạo ra một bảng kết quả lớn chứa mọi cấp kết hợp có thể xảy ra giữa hai bảng
6. 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:

15
Nhận xét: Câu lệnh trên sử dụng INNER JOIN để kết hợp dữ liệu từ bảng "SUPPLIERS"
và "ORDERS" dựa trên điều kiện liên kết là "SUPPLIERS.SUPPLIER_ID =
ORDERS.SUPPLIER_ID". Kết quả trả về bao gồm các cột "ORDER_NO",
"SUPPLIER_ID", và "SUPPLIER_NAME" từ hai bảng.
Từ đó, giải thích cú pháp INNER JOIN:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

Cú pháp INNER JOIN được sử dụng để kết hợp dữ liệu từ hai hoặc nhiều bảng dựa trên
một điều kiện liên kết giữa chúng.
- SELECT columns: Chọn các cột mà bạn muốn hiển thị từ các bảng tham gia.
- FROM table1: Chỉ định bảng đầu tiên mà bạn muốn kết hợp.
- INNER JOIN table2: Chỉ định bảng thứ hai mà bạn muốn kết hợp, sử dụng INNER JOIN
để chỉ lấy các dòng có điều kiện liên kết đúng.
- ON table1.column = table2.column: Chỉ định điều kiện liên kết giữa hai bảng. Dòng sẽ
được kết hợp khi giá trị trong cột của bảng 1 bằng giá trị trong cột của bảng 2.

...............................................................................................................................................
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ú pháp trên có giống nhau, cú pháp sử dụng dấu phẩy và WHERE để kết hợp dữ liệu
từ hai bảng dựa trên điều kiện liên kết. Tuy nhiên, cú pháp INNER JOIN thường được ưa
chuộng hơn vì nó rõ ràng và dễ đọc hơn. Cú pháp INNER JOIN tạo ra một mối quan hệ
16
giữa hai bảng dựa trên điều kiện liên kết trong phần ON của câu lệnh, trong khi cú pháp
sử dụng WHERE chỉ là một điều kiện lọc sau khi bảng đã được kết hợp.

...............................................................................................................................................

Hãy chứng minh điều đó với dữ liệu 2 bảng SUPPLIERS và ORDERS ở trên:
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
7. Outer Join
Gồm có:
- Left Outer Join,

17
- Outer Join,
- Full Outer Join,
7.1 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;

18
Lệnh `LEFT JOIN` (hoặc còn được gọi là `LEFT OUTER JOIN`) trong SQL được sử dụng
để kết hợp dữ liệu từ hai bảng dựa trên một điều kiện và trả về tất cả các hàng từ bảng bên
trái (table1) và các hàng khớp từ bảng bên phải (table2). Nếu không có sự khớp nào, các
cột từ bảng bên phải sẽ có giá trị NULL.

 SELECT columns: Xác định các cột mà bạn muốn lấy từ các bảng tham gia.
 FROM table1: Chỉ định bảng chính mà bạn muốn lấy dữ liệu từ đó (bảng bên trái).
 LEFT [OUTER] JOIN table2: Chọn loại kết nối, ở đây là LEFT JOIN hoặc LEFT
OUTER JOIN.OUTER có thể được bỏ qua vì LEFT JOIN và LEFT OUTER JOIN
là tương đương. Xác định bảng phụ mà bạn muốn kết hợp với bảng chính (bảng bên
phải).
ON table1.column = table2.column: Xác định điều kiện để kết hợp dữ liệu giữa hai bảng.
Các cột được sử dụng để so sánh và quyết định cách kết hợp các hàng.
...............................................................................................................................................
7.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:

19
Nhận xét: Các hàng từ bảng ORDERS được bao gồm, kể cả những hàng không có sự khớp
trong bảng SUPPLIERS.
Nếu không có khớp nào, cột từ bảng SUPPLIERS sẽ có giá trị NULL.
Trong ví dụ này, hàng với ORDER_NO là 103 có SUPPLIER_ID là 1 được kết hợp với
SUPPLIER_NAME là "Supplier_A".

...............................................................................................................................................
Từ đó, giải thích cú pháp RIGHT JOIN:
SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;
Lệnh RIGHT JOIN (hoặc RIGHT OUTER JOIN) trong SQL được sử dụng để kết hợp dữ
liệu từ bảng bên phải (table2) và tất cả các hàng từ bảng bên trái (table1). Kết quả sẽ chứa
tất cả các hàng từ bảng bên phải và các hàng khớp từ bảng bên trái. Nếu không có sự
khớp, các cột từ bảng bên trái sẽ có giá trị NULL.
 SELECT columns: Xác định các cột mà bạn muốn lấy từ các bảng tham gia.
 FROM table1: Chỉ định bảng chính mà bạn muốn lấy dữ liệu từ đó (bảng bên trái).
 RIGHT [OUTER] JOIN table2: Chọn loại kết nối, ở đây là `RIGHT JOIN` hoặc
`RIGHT OUTER JOIN`. `OUTER` có thể được bỏ qua vì `RIGHT JOIN` và `RIGHT
OUTER JOIN` là tương đương. Xác định bảng phụ mà bạn muốn kết hợp với bảng
chính (bảng bên phải).
 ON table1.column = table2.column: Xác định điều kiện để kết hợp dữ liệu giữa hai
bảng. Các cột được sử dụng để so sánh và quyết định cách kết hợp các hàng.

20
...............................................................................................................................................
7.3 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:

...............................................................................................................................................
Từ đó, giải thích cú pháp FULL JOIN:
SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;

21
Lệnh `FULL JOIN` (hoặc `FULL OUTER JOIN`) trong SQL được sử dụng để kết hợp dữ
liệu từ cả hai bảng bên trái và bên phải dựa trên một điều kiện và trả về tất cả các hàng từ
cả hai bảng. Nếu không có sự khớp, các cột từ bảng không có sự khớp sẽ có giá trị NULL.
 SELECT columns: Xác định các cột mà bạn muốn lấy từ các bảng tham gia.
 FROM table1: Chỉ định bảng chính mà bạn muốn lấy dữ liệu từ đó (bảng bên trái).
 FULL [OUTER] JOIN table2: Chọn loại kết nối, ở đây là `FULL JOIN` hoặc
`FULL OUTER JOIN`. `OUTER` có thể được bỏ qua vì `FULL JOIN` và `FULL
OUTER JOIN` là tương đương. Xác định bảng phụ mà bạn muốn kết hợp với bảng
chính (bảng bên phải).
ON table1.column = table2.column: Xác định điều kiện để kết hợp dữ liệu giữa hai bảng.
Các cột được sử dụng để so sánh và quyết định cách kết hợp các hàng
...............................................................................................................................................

22

You might also like