Bài tập thực hành môn Cơ sở dữ liệu bài số 02 | Học viện Công nghệ Bưu chính Viễn thông
Bài tập thực hành môn Cơ sở dữ liệu bài số 02 của Học viện Công nghệ Bưu chính Viễn thông với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!
Preview text:
lOMoARcPSD| 37922327 THỰCHÀNH CƠSỞDỮLIỆU Điểm: Nhận xét: Ngày tháng: 14/11/2023
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
............................................................................................................................................... .
.............................................................................................................................................. MỤCLỤ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...................................................................................6 3. Lệnh ALTER TABLE ể sửa
bảng.....................................................................................9
3.1 Thêm column vào table.................................................................................................9
3.2 Thay ổi cấu trúc của column.....................................................................................11
3.3 Xóa một column ra khỏi Table................................................................................... 14
3.4 Thay ổi tên column của Table...................................................................................16 3.5 Thay ổi tên
Table.......................................................................................................17
4. Lệnh xóa bảng................................................................................................................... 19 lOMoARcPSD| 37922327 5. Phép
tích............................................................................................................................ 20
6. INNER JOIN.....................................................................................................................26 7. Outer
Join.......................................................................................................................... 28 7.1 Left Outer
Join.............................................................................................................28
7.2 Right Outer Join.......................................................................................................... 30 7.3 Full Outer
Join.............................................................................................................31
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ì? lOMoARcPSD| 37922327
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 ] );
Lệnh CREATE TABLE ược sử dụng ể tạo một bảng trong SQL. Trong ó:
table_name: tên bảng, nó phải là duy nhất trong một CSDL.
column(1, 2, 3 ... n): danh sách các column.
datatype: mỗi column sẽ ược thiết lập kiểu dữ liệu. lOMoARcPSD| 37922327 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ì? lOMoARcPSD| 37922327 Từ
ó, giải thích Cú pháp CONSTRAINT SV_PK PRIMARY KEY (SV_ID)dùng ể làm gì:
CONSTRAINT SV_PK PRIMARY KEY (SV_ID): Thiết lập cột SV_ID là khóa chính
và tên khóa chính là SV_PK
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ì? lOMoARcPSD| 37922327
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 lOMoARcPSD| 37922327 SELECT cột_1, cột_2,... FROM tên_bảng_ ã_có WHERE iều_kiện;
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: lOMoARcPSD| 37922327
2. 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, ... 2.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ì? lOMoARcPSD| 37922327
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ự: lOMoARcPSD| 37922327 lOMoARcPSD| 37922327 2.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) ); lOMoARcPSD| 37922327
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. lOMoARcPSD| 37922327
Nhận xét: Độ dài của dữ liệu của cột LAST_NAME và GIOITINH thay ổi lần lượt là
VARCHAR2(25 BYTE) thành VARCHAR2(80 BYTE), VARCHAR2(50 BYTE) thành VARCHAR2(100 BYTE)
2.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 NEWEMPLOYEE ghi nhận lại kết quả: lOMoARcPSD| 37922327 lOMoARcPSD| 37922327 2.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ả: lOMoARcPSD| 37922327 2.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ả: lOMoARcPSD| 37922327 3. Lệnh xóa bảng Cú pháp lệnh: lOMoARcPSD| 37922327
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ả: 4. 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. lOMoARcPSD| 37922327
• 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ả: lOMoARcPSD| 37922327 Tạo bảng ORDERS như sau: CREATE TABLE "ORDERS" lOMoARcPSD| 37922327 ( "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')); lOMoARcPSD| 37922327
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ả: lOMoARcPSD| 37922327
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: lOMoARcPSD| 37922327
Nhận xét: Kết nối 2 bảng với nhau, cho kết quả là một danh sách bao gồm tất cả các cột của
hai bảng, nếu tên cột giống nhau thì tên cột ở bảng 2 tự ộng thay ổi (Ví dụ: SUPPLIER_ID thành SUPPLIER_ID_1) 5. 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;
Ghi nhận lại kết quả thu ược và giải thích: lOMoARcPSD| 37922327
Giải thích: Kết quả trả về bảng dữ liệu với các cột ược chọn ORDERS.ORDER_NO,
SUPPLIERS.SUPPLIER_ID, SUPPLIERS.SUPPLIER_NAME từ bảng SUPPLIERS
với iều kiện SUPPLIER_ID của bảng SUPPLIERS bằng SUPPLIER_ID của bảng ORDERS
Từ ó, giải thích cú pháp INNER JOIN: SELECT columns FROM table1 INNER JOIN table2
ON table1.column = table2.column;
INNER JOIN trả về kết quả là các bản ghi mà trường ược join hai bảng khớp nhau, các bản
ghi chỉ xuất hiện một trong hai bảng sẽ bị loại.
SELECT tên một hoặc nhiều cột FROM bảng 1 INNER JOIN bảng 2
ON bảng1.tên cột = bảng2.tên cột; lOMoARcPSD| 37922327
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;
Câu truy vấn trên tương tự với cú pháp INNER JOIN
Hãy chứng minh iều ó với dữ liệu 2 bảng SUPPLIERS và ORDERS ở trên: 6. Outer Join Gồm có: - Left Outer Join, - Outer Join, - Full Outer Join,
6.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 lOMoARcPSD| 37922327 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:
Nhận xét: Kết quả cho 1 bảng với các cột
ược chọn và trả về tất cả các hàng từ bảng SUPPLIERS, với các hàng tương ứng trong bảng ORDERS theo iều
kiện SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID. Chấp nhận cả dữ liệu NULL ở ORDERS.
Từ ó, giải thích cú pháp LEFT JOIN: SELECT columns FROM table1 LEFT [OUTER] JOIN table2
ON table1.column = table2.column;
- columns: Tên các cột cần hiển thị ở kết quả truy vấn, các column ược ngăn cách với nhau bằng dấu phẩy (,)
- table1, table2 là tên các bảng
ể lấy dữ liệu khi truy vấn. lOMoARcPSD| 37922327
- ON <Điều kiện kết hợp 2 bảng> tất cả các hàng từ bảng bên trái (table1), với các hàng
tương ứng trong bảng bên phải (table2). Chấp nhận cả dữ liệu NULL ở 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: lOMoARcPSD| 37922327
Nhận xét: Kết quả cho 1 bảng với các cột
ược chọn và trả về tất cả các hàng từ bảng ORDERS với các hàng tương ứng
trong bảng SUPPLIERS theo iều
kiện SUPPLIERS.SUPPLIER_ID = ORDERS.SUPPLIER_ID. Chấp nhận cả dữ liệu NULL ở SUPPLIERS.
Từ ó, giải thích cú pháp RIGHT JOIN: SELECT columns FROM table1 RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;
- columns: Tên các cột cần hiển thị ở kết quả truy vấn, các column ược ngăn cách với nhau bằng dấu phẩy (,)
- table1, table2 là tên các bảng
ể lấy dữ liệu khi truy vấn.
- ON <Điều kiện kết hợp 2 bảng> tất cả các hàng từ bảng bên phải (table2), với các hàng
tương ứng trong bảng bên trái (table1). Chấp nhận cả dữ liệu NULL ở bảng 1.
6.2 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. lOMoARcPSD| 37922327
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:
Nhận xét: Kết quả trả về bao gồm các cột ược chọn từ 2 bảng với các bản ghi từ cả hai bảng
ORDERS và SUPPLIERS. Khi không có bản ghi phù hợp tồn tại cho bảng ghi trong bảng
ORDERS các cột ở bảng SUPPLIERS sẽ có giá trị null, tương tự, khi không có bản ghi phù
hợp tồn tại cho bảng ghi trong bảng SUPPLIERS các cột ở bảng ORDERS sẽ có giá trị null
Từ ó, giải thích cú pháp FULL JOIN: SELECT columns FROM table1 lOMoARcPSD| 37922327 FULL [OUTER] JOIN table2
ON table1.column = table2.column;
- columns: Tên các cột cần hiển thị ở kết quả truy vấn, các column ược ngăn cách với nhau bằng dấu phẩy (,)
- FROM table1: chỉ ịnh bảng bên trái trong mệnh ề FROM
- JOIN table2: chỉ ịnh bảng bên phải là table2
- ON <Điều kiện kết hợp 2 bảng> tất cả các hàng từ bảng bên phải (table2), với các hàng
tương ứng trong bảng bên trái (table1). Chấp nhận cả dữ liệu NULL ở bảng 1.